summaryrefslogtreecommitdiff
path: root/src/mongo/db/s
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s')
-rw-r--r--src/mongo/db/s/collection_sharding_state.cpp5
-rw-r--r--src/mongo/db/s/collection_sharding_state_test.cpp17
-rw-r--r--src/mongo/db/s/sharding_state.cpp26
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());