diff options
author | Esha Maharishi <esha.maharishi@mongodb.com> | 2016-08-12 10:02:38 -0400 |
---|---|---|
committer | Esha Maharishi <esha.maharishi@mongodb.com> | 2016-08-12 15:24:05 -0400 |
commit | 5b6ca35994ae865db7ea3a036cd53aa43a62d2c5 (patch) | |
tree | 3f7eb3e9cc28e27c09931c5825f9b9dfc73e27d8 /src/mongo/db/s | |
parent | 5788d423ae4362200df5887486c8db213d799993 (diff) | |
download | mongo-5b6ca35994ae865db7ea3a036cd53aa43a62d2c5.tar.gz |
SERVER-22663 Make --shardsvr required for a mongod to be used as a shard
Diffstat (limited to 'src/mongo/db/s')
-rw-r--r-- | src/mongo/db/s/operation_sharding_state.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_state.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_state.h | 14 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/mongo/db/s/operation_sharding_state.cpp b/src/mongo/db/s/operation_sharding_state.cpp index 97991dc27f8..5d0cad65b52 100644 --- a/src/mongo/db/s/operation_sharding_state.cpp +++ b/src/mongo/db/s/operation_sharding_state.cpp @@ -54,11 +54,6 @@ void OperationShardingState::initializeShardVersion(NamespaceString nss, const BSONElement& shardVersionElt) { invariant(!hasShardVersion()); - if (nss.isSystemDotIndexes()) { - setShardVersion(std::move(nss), ChunkVersion::IGNORED()); - return; - } - if (shardVersionElt.eoo() || shardVersionElt.type() != BSONType::Array) { return; } @@ -89,7 +84,6 @@ ChunkVersion OperationShardingState::getShardVersion(const NamespaceString& nss) void OperationShardingState::setShardVersion(NamespaceString nss, ChunkVersion newVersion) { // This currently supports only setting the shard version for one namespace. invariant(!_hasVersion || _ns == nss); - invariant(!nss.isSystemDotIndexes() || ChunkVersion::isIgnoredVersion(newVersion)); _ns = std::move(nss); _shardVersion = std::move(newVersion); diff --git a/src/mongo/db/s/sharding_state.cpp b/src/mongo/db/s/sharding_state.cpp index a68a2d1231b..d5e57b8357d 100644 --- a/src/mongo/db/s/sharding_state.cpp +++ b/src/mongo/db/s/sharding_state.cpp @@ -118,6 +118,9 @@ void updateShardIdentityConfigStringCB(const string& setName, const string& newC } // namespace +const std::set<std::string> ShardingState::_commandsThatInitializeShardingAwareness{ + "_recvChunkStart", "mergeChunks", "moveChunk", "setShardVersion", "splitChunk"}; + ShardingState::ShardingState() : _initializationState(static_cast<uint32_t>(InitializationState::kNew)), _initializationStatus(Status(ErrorCodes::InternalError, "Uninitialized value")), diff --git a/src/mongo/db/s/sharding_state.h b/src/mongo/db/s/sharding_state.h index c959592c866..28eb837c215 100644 --- a/src/mongo/db/s/sharding_state.h +++ b/src/mongo/db/s/sharding_state.h @@ -259,6 +259,16 @@ public: */ Status initializeShardingAwarenessIfNeeded(OperationContext* txn); + /** + * Check if a command is one of the whitelisted commands that can be accepted with shardVersion + * information before this node is sharding aware, because the command initializes sharding + * awareness. + */ + static bool commandInitializesShardingAwareness(const std::string& commandName) { + return _commandsThatInitializeShardingAwareness.find(commandName) != + _commandsThatInitializeShardingAwareness.end(); + } + private: friend class ScopedRegisterMigration; @@ -372,6 +382,10 @@ private: // The id for the cluster this shard belongs to. OID _clusterId; + // A whitelist of sharding commands that are allowed when running with --shardsvr but not yet + // shard aware, because they initialize sharding awareness. + static const std::set<std::string> _commandsThatInitializeShardingAwareness; + // Function for initializing the external sharding state components not owned here. GlobalInitFunc _globalInit; |