diff options
Diffstat (limited to 'src/mongo/db/s')
-rw-r--r-- | src/mongo/db/s/collection_sharding_state.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_state_test.cpp | 17 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_state.cpp | 26 |
3 files changed, 16 insertions, 32 deletions
diff --git a/src/mongo/db/s/collection_sharding_state.cpp b/src/mongo/db/s/collection_sharding_state.cpp index 24746d7880e..5b4b39cb33f 100644 --- a/src/mongo/db/s/collection_sharding_state.cpp +++ b/src/mongo/db/s/collection_sharding_state.cpp @@ -296,11 +296,6 @@ bool CollectionShardingState::_checkShardVersionOk(OperationContext* opCtx, ChunkVersion* actualShardVersion) { Client* client = opCtx->getClient(); - // Operations using the DBDirectClient are unversioned. - if (client->isInDirectClient()) { - return true; - } - if (!repl::ReplicationCoordinator::get(opCtx)->canAcceptWritesForDatabase(opCtx, _nss.db())) { // Right now connections to secondaries aren't versioned at all. return true; diff --git a/src/mongo/db/s/collection_sharding_state_test.cpp b/src/mongo/db/s/collection_sharding_state_test.cpp index 51666a7800f..a77937d35f0 100644 --- a/src/mongo/db/s/collection_sharding_state_test.cpp +++ b/src/mongo/db/s/collection_sharding_state_test.cpp @@ -34,6 +34,8 @@ #include "mongo/db/jsobj.h" #include "mongo/db/namespace_string.h" #include "mongo/db/operation_context_noop.h" +#include "mongo/db/repl/replication_coordinator.h" +#include "mongo/db/repl/replication_coordinator_mock.h" #include "mongo/db/s/collection_metadata.h" #include "mongo/db/s/collection_sharding_state.h" #include "mongo/db/s/sharding_state.h" @@ -55,10 +57,18 @@ public: serverGlobalParams.clusterRole = ClusterRole::ShardServer; _client = _service.makeClient("ShardingStateTest"); - // This skips version checking to avoid accessing a null ReplicationCoordinator. - _client->setInDirectClient(true); _opCtx = _client->makeOperationContext(); + // Set a ReplicationCoordinator, since it is accessed as part of shardVersion checks. + // TODO(esha): remove once the Safe Secondary Reads (PM-256) project is complete. + auto svCtx = getServiceContext(); + repl::ReplSettings replSettings; + replSettings.setReplSetString( + ConnectionString::forReplicaSet(_setName, _servers).toString()); + replSettings.setMaster(true); + repl::ReplicationCoordinator::set( + svCtx, stdx::make_unique<repl::ReplicationCoordinatorMock>(svCtx, replSettings)); + // Note: this assumes that globalInit will always be called on the same thread as the main // test thread. ShardingState::get(opCtx())->setGlobalInitMethodForTest( @@ -90,6 +100,9 @@ private: ServiceContext::UniqueOperationContext _opCtx; int _initCallCount = 0; + const HostAndPort _host{"node1:12345"}; + const std::string _setName = "mySet"; + const std::vector<HostAndPort> _servers{_host}; }; TEST_F(CollShardingStateTest, GlobalInitGetsCalledAfterWriteCommits) { diff --git a/src/mongo/db/s/sharding_state.cpp b/src/mongo/db/s/sharding_state.cpp index 2646af582dd..0b3bc8bd9fb 100644 --- a/src/mongo/db/s/sharding_state.cpp +++ b/src/mongo/db/s/sharding_state.cpp @@ -63,7 +63,6 @@ #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" @@ -111,30 +110,6 @@ void updateShardIdentityConfigStringCB(const string& setName, const string& newC } } -bool haveLocalShardingInfo(OperationContext* opCtx, const string& ns) { - if (!ShardingState::get(opCtx)->enabled()) { - return false; - } - - const auto& oss = OperationShardingState::get(opCtx); - if (oss.hasShardVersion()) { - return true; - } - - const auto& sci = ShardedConnectionInfo::get(opCtx->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() @@ -248,6 +223,7 @@ void ShardingState::scheduleCleanup(const NamespaceString& nss) { Status ShardingState::onStaleShardVersion(OperationContext* opCtx, const NamespaceString& nss, const ChunkVersion& expectedVersion) { + invariant(!opCtx->getClient()->isInDirectClient()); invariant(!opCtx->lockState()->isLocked()); invariant(enabled()); |