summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/sharding_state.cpp
diff options
context:
space:
mode:
authorJoanna Huang <joannahuang@Joannas-MacBook-Pro.local>2017-07-18 13:31:11 -0400
committerJoanna Huang <joannahuang@Joannas-MacBook-Pro.local>2017-07-27 11:00:00 -0400
commit029669a994f92a2f0fe57c5ed06edec871d372ab (patch)
treef769e8cf305faee1175e565f8d71a2706332904c /src/mongo/db/s/sharding_state.cpp
parent74c6b215bc40e1229368cf26434c512ec2e0d433 (diff)
downloadmongo-029669a994f92a2f0fe57c5ed06edec871d372ab.tar.gz
SERVER-30096 Add stepdown/stepup logic to ChunkSplitter
Diffstat (limited to 'src/mongo/db/s/sharding_state.cpp')
-rw-r--r--src/mongo/db/s/sharding_state.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/mongo/db/s/sharding_state.cpp b/src/mongo/db/s/sharding_state.cpp
index 693b9085684..fd868900bdd 100644
--- a/src/mongo/db/s/sharding_state.cpp
+++ b/src/mongo/db/s/sharding_state.cpp
@@ -113,7 +113,8 @@ void updateShardIdentityConfigStringCB(const string& setName, const string& newC
} // namespace
ShardingState::ShardingState()
- : _initializationState(static_cast<uint32_t>(InitializationState::kNew)),
+ : _chunkSplitter(stdx::make_unique<ChunkSplitter>()),
+ _initializationState(static_cast<uint32_t>(InitializationState::kNew)),
_initializationStatus(Status(ErrorCodes::InternalError, "Uninitialized value")),
_globalInit(&initializeGlobalShardingStateForMongod) {}
@@ -204,6 +205,14 @@ CollectionShardingState* ShardingState::getNS(const std::string& ns, OperationCo
return it->second.get();
}
+void ShardingState::initiateChunkSplitter() {
+ _chunkSplitter->initiateChunkSplitter();
+}
+
+void ShardingState::interruptChunkSplitter() {
+ _chunkSplitter->interruptChunkSplitter();
+}
+
void ShardingState::markCollectionsNotShardedAtStepdown() {
stdx::lock_guard<stdx::mutex> lk(_mutex);
for (auto& coll : _collections) {
@@ -324,7 +333,8 @@ Status ShardingState::initializeFromShardIdentity(OperationContext* opCtx,
&ShardRegistry::replicaSetChangeShardRegistryUpdateHook);
ReplicaSetMonitor::setAsynchronousConfigChangeHook(&updateShardIdentityConfigStringCB);
- // Determine primary/secondary/standalone state in order to set it on the CatalogCache.
+ // Determine primary/secondary/standalone state in order to properly initialize sharding
+ // components.
auto replCoord = repl::ReplicationCoordinator::get(opCtx);
bool isReplSet =
replCoord->getReplicationMode() == repl::ReplicationCoordinator::modeReplSet;
@@ -333,6 +343,7 @@ Status ShardingState::initializeFromShardIdentity(OperationContext* opCtx,
repl::MemberState::RS_PRIMARY);
Grid::get(opCtx)->catalogCache()->initializeReplicaSetRole(isStandaloneOrPrimary);
+ _chunkSplitter->setReplicaSetMode(isStandaloneOrPrimary);
log() << "initialized sharding components for "
<< (isStandaloneOrPrimary ? "primary" : "secondary") << " node.";