diff options
author | Esha Maharishi <esha.maharishi@mongodb.com> | 2016-04-06 11:36:13 -0400 |
---|---|---|
committer | Esha Maharishi <esha.maharishi@mongodb.com> | 2016-04-06 11:42:02 -0400 |
commit | b9bd0eb46147a7a965f50f076dea57f85fe321e8 (patch) | |
tree | 3e5da0d44a5befe3823528476f6f0bcebdff1aa2 /src/mongo/s/chunk.cpp | |
parent | 202fd419457c47650be27accb038a700134797ed (diff) | |
download | mongo-b9bd0eb46147a7a965f50f076dea57f85fe321e8.tar.gz |
SERVER-23534 move miscellaneous methods off Grid
Diffstat (limited to 'src/mongo/s/chunk.cpp')
-rw-r--r-- | src/mongo/s/chunk.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/mongo/s/chunk.cpp b/src/mongo/s/chunk.cpp index bc5976f3d6b..1edfb6f10ec 100644 --- a/src/mongo/s/chunk.cpp +++ b/src/mongo/s/chunk.cpp @@ -209,6 +209,41 @@ bool ChunkRange::containsKey(const BSONObj& shardKey) const { return getMin().woCompare(shardKey) <= 0 && shardKey.woCompare(getMax()) < 0; } +bool Chunk::shouldBalance(const SettingsType& balancerSettings) { + if (balancerSettings.isBalancerStoppedSet() && balancerSettings.getBalancerStopped()) { + return false; + } + + if (balancerSettings.isBalancerActiveWindowSet()) { + boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); + return balancerSettings.inBalancingWindow(now); + } + + return true; +} + +bool Chunk::getConfigShouldBalance(OperationContext* txn) const { + auto balSettingsResult = + grid.catalogManager(txn)->getGlobalSettings(txn, SettingsType::BalancerDocKey); + if (!balSettingsResult.isOK()) { + if (balSettingsResult == ErrorCodes::NoMatchingDocument) { + // Settings document for balancer does not exist, default to balancing allowed. + return true; + } + + warning() << balSettingsResult.getStatus(); + return false; + } + SettingsType balSettings = balSettingsResult.getValue(); + + if (!balSettings.isKeySet()) { + // Balancer settings doc does not exist. Default to yes. + return true; + } + + return shouldBalance(balSettings); +} + bool Chunk::_minIsInf() const { return 0 == _manager->getShardKeyPattern().getKeyPattern().globalMin().woCompare(getMin()); } @@ -564,7 +599,7 @@ bool Chunk::splitIfShould(OperationContext* txn, long dataWritten) const { _dataWritten = 0; } - bool shouldBalance = grid.getConfigShouldBalance(txn); + bool shouldBalance = getConfigShouldBalance(txn); if (shouldBalance) { auto status = grid.catalogManager(txn)->getCollection(txn, _manager->getns()); if (!status.isOK()) { |