diff options
Diffstat (limited to 'src/mongo/db/s/sharding_state.cpp')
-rw-r--r-- | src/mongo/db/s/sharding_state.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/mongo/db/s/sharding_state.cpp b/src/mongo/db/s/sharding_state.cpp index bc9932a387c..57fda772fb4 100644 --- a/src/mongo/db/s/sharding_state.cpp +++ b/src/mongo/db/s/sharding_state.cpp @@ -32,6 +32,7 @@ #include "mongo/db/s/sharding_state.h" +#include "mongo/base/init.h" #include "mongo/bson/util/bson_extract.h" #include "mongo/client/connection_string.h" #include "mongo/client/replica_set_monitor.h" @@ -62,6 +63,7 @@ #include "mongo/s/client/shard_registry.h" #include "mongo/s/client/sharding_network_connection_hook.h" #include "mongo/s/grid.h" +#include "mongo/s/local_sharding_info.h" #include "mongo/s/sharding_initialization.h" #include "mongo/util/log.h" #include "mongo/util/mongoutils/str.h" @@ -117,6 +119,30 @@ void updateShardIdentityConfigStringCB(const string& setName, const string& newC } } +bool haveLocalShardingInfo(OperationContext* txn, const string& ns) { + if (!ShardingState::get(txn)->enabled()) { + return false; + } + + const auto& oss = OperationShardingState::get(txn); + if (oss.hasShardVersion()) { + return true; + } + + const auto& sci = ShardedConnectionInfo::get(txn->getClient(), false); + if (sci && !sci->getVersion(ns).isStrictlyEqualTo(ChunkVersion::UNSHARDED())) { + return true; + } + + return false; +} + +MONGO_INITIALIZER_WITH_PREREQUISITES(MongoDLocalShardingInfo, ("SetGlobalEnvironment")) +(InitializerContext* context) { + enableLocalShardingInfo(getGlobalServiceContext(), &haveLocalShardingInfo); + return Status::OK(); +} + } // namespace ShardingState::ShardingState() |