summaryrefslogtreecommitdiff
path: root/src/mongo/s/chunk.cpp
diff options
context:
space:
mode:
authorEsha Maharishi <esha.maharishi@mongodb.com>2016-04-06 11:36:13 -0400
committerEsha Maharishi <esha.maharishi@mongodb.com>2016-04-06 11:42:02 -0400
commitb9bd0eb46147a7a965f50f076dea57f85fe321e8 (patch)
tree3e5da0d44a5befe3823528476f6f0bcebdff1aa2 /src/mongo/s/chunk.cpp
parent202fd419457c47650be27accb038a700134797ed (diff)
downloadmongo-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.cpp37
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()) {