diff options
-rw-r--r-- | src/mongo/db/s/sharded_connection_info.cpp | 22 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h | 3 | ||||
-rw-r--r-- | src/mongo/db/s/sharding_initialization_mongod.cpp | 3 | ||||
-rw-r--r-- | src/mongo/s/query/cluster_cursor_cleanup_job.cpp | 4 | ||||
-rw-r--r-- | src/mongo/s/server.cpp | 9 | ||||
-rw-r--r-- | src/mongo/s/sharding_egress_metadata_hook.cpp | 14 | ||||
-rw-r--r-- | src/mongo/s/sharding_egress_metadata_hook.h | 8 | ||||
-rw-r--r-- | src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp | 2 | ||||
-rw-r--r-- | src/mongo/s/sharding_egress_metadata_hook_for_mongos.h | 3 | ||||
-rw-r--r-- | src/mongo/s/sharding_test_fixture.cpp | 7 |
10 files changed, 48 insertions, 27 deletions
diff --git a/src/mongo/db/s/sharded_connection_info.cpp b/src/mongo/db/s/sharded_connection_info.cpp index 7a09849417f..d9154ac7f42 100644 --- a/src/mongo/db/s/sharded_connection_info.cpp +++ b/src/mongo/db/s/sharded_connection_info.cpp @@ -107,17 +107,23 @@ void ShardedConnectionInfo::addHook(ServiceContext* service) { log() << "first cluster operation detected, adding sharding hook to enable versioning " "and authentication to remote servers"; - auto unshardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); - unshardedHookList->addHook(stdx::make_unique<rpc::LogicalTimeMetadataHook>(service)); - unshardedHookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>()); + { + auto unshardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); + unshardedHookList->addHook(stdx::make_unique<rpc::LogicalTimeMetadataHook>(service)); + unshardedHookList->addHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>(service)); - globalConnPool.addHook(new ShardingConnectionHook(false, std::move(unshardedHookList))); + globalConnPool.addHook(new ShardingConnectionHook(false, std::move(unshardedHookList))); + } - auto shardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); - shardedHookList->addHook(stdx::make_unique<rpc::LogicalTimeMetadataHook>(service)); - shardedHookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>()); + { + auto shardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); + shardedHookList->addHook(stdx::make_unique<rpc::LogicalTimeMetadataHook>(service)); + shardedHookList->addHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>(service)); - shardConnectionPool.addHook(new ShardingConnectionHook(true, std::move(shardedHookList))); + shardConnectionPool.addHook(new ShardingConnectionHook(true, std::move(shardedHookList))); + } alreadyAddedHook.store(1); } diff --git a/src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h b/src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h index f9032ef6945..58633d1dc17 100644 --- a/src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h +++ b/src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h @@ -34,6 +34,9 @@ namespace mongo { namespace rpc { class ShardingEgressMetadataHookForMongod final : public ShardingEgressMetadataHook { +public: + using ShardingEgressMetadataHook::ShardingEgressMetadataHook; + private: void _saveGLEStats(const BSONObj& metadata, StringData hostString) override; diff --git a/src/mongo/db/s/sharding_initialization_mongod.cpp b/src/mongo/db/s/sharding_initialization_mongod.cpp index e00d8cbf5d7..e3995d067af 100644 --- a/src/mongo/db/s/sharding_initialization_mongod.cpp +++ b/src/mongo/db/s/sharding_initialization_mongod.cpp @@ -101,7 +101,8 @@ Status initializeGlobalShardingStateForMongod(OperationContext* opCtx, auto hookList = stdx::make_unique<rpc::EgressMetadataHookList>(); hookList->addHook( stdx::make_unique<rpc::LogicalTimeMetadataHook>(opCtx->getServiceContext())); - hookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>()); + hookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongod>( + opCtx->getServiceContext())); return hookList; }); } diff --git a/src/mongo/s/query/cluster_cursor_cleanup_job.cpp b/src/mongo/s/query/cluster_cursor_cleanup_job.cpp index a8892131cd0..57685653cf2 100644 --- a/src/mongo/s/query/cluster_cursor_cleanup_job.cpp +++ b/src/mongo/s/query/cluster_cursor_cleanup_job.cpp @@ -64,7 +64,9 @@ std::string ClusterCursorCleanupJob::name() const { void ClusterCursorCleanupJob::run() { Client::initThread(name().c_str()); - ClusterCursorManager* manager = grid.getCursorManager(); + + auto* const client = Client::getCurrent(); + auto* const manager = Grid::get(client->getServiceContext())->getCursorManager(); invariant(manager); while (!globalInShutdownDeprecated()) { diff --git a/src/mongo/s/server.cpp b/src/mongo/s/server.cpp index d8d001da6d0..5e9235d8485 100644 --- a/src/mongo/s/server.cpp +++ b/src/mongo/s/server.cpp @@ -219,7 +219,8 @@ static Status initializeSharding(OperationContext* opCtx) { auto hookList = stdx::make_unique<rpc::EgressMetadataHookList>(); hookList->addHook( stdx::make_unique<rpc::LogicalTimeMetadataHook>(opCtx->getServiceContext())); - hookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>()); + hookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>( + opCtx->getServiceContext())); return hookList; }); @@ -265,7 +266,8 @@ static ExitCode runMongosServer() { auto unshardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); unshardedHookList->addHook( stdx::make_unique<rpc::LogicalTimeMetadataHook>(getGlobalServiceContext())); - unshardedHookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>()); + unshardedHookList->addHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>(getGlobalServiceContext())); // Add sharding hooks to both connection pools - ShardingConnectionHook includes auth hooks globalConnPool.addHook(new ShardingConnectionHook(false, std::move(unshardedHookList))); @@ -273,7 +275,8 @@ static ExitCode runMongosServer() { auto shardedHookList = stdx::make_unique<rpc::EgressMetadataHookList>(); shardedHookList->addHook( stdx::make_unique<rpc::LogicalTimeMetadataHook>(getGlobalServiceContext())); - shardedHookList->addHook(stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>()); + shardedHookList->addHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>(getGlobalServiceContext())); shardConnectionPool.addHook(new ShardingConnectionHook(true, std::move(shardedHookList))); diff --git a/src/mongo/s/sharding_egress_metadata_hook.cpp b/src/mongo/s/sharding_egress_metadata_hook.cpp index 618e9ea0154..d0f9a2f39e2 100644 --- a/src/mongo/s/sharding_egress_metadata_hook.cpp +++ b/src/mongo/s/sharding_egress_metadata_hook.cpp @@ -45,10 +45,12 @@ #include "mongo/util/net/hostandport.h" namespace mongo { - namespace rpc { -using std::shared_ptr; +ShardingEgressMetadataHook::ShardingEgressMetadataHook(ServiceContext* serviceContext) + : _serviceContext(serviceContext) { + invariant(_serviceContext); +} Status ShardingEgressMetadataHook::writeRequestMetadata(OperationContext* opCtx, BSONObjBuilder* metadataBob) { @@ -75,8 +77,10 @@ Status ShardingEgressMetadataHook::readReplyMetadata(OperationContext* opCtx, Status ShardingEgressMetadataHook::_advanceConfigOptimeFromShard(ShardId shardId, const BSONObj& metadataObj) { + auto const grid = Grid::get(_serviceContext); + try { - auto shard = grid.shardRegistry()->getShardNoReload(shardId); + auto shard = grid->shardRegistry()->getShardNoReload(shardId); if (!shard) { return Status::OK(); } @@ -98,7 +102,7 @@ Status ShardingEgressMetadataHook::_advanceConfigOptimeFromShard(ShardId shardId // is safe to use. const auto& replMetadata = parseStatus.getValue(); auto opTime = replMetadata.getLastOpCommitted(); - grid.advanceConfigOpTime(opTime); + grid->advanceConfigOpTime(opTime); } } else { // Regular shards return the config opTime as part of ConfigServerMetadata. @@ -110,7 +114,7 @@ Status ShardingEgressMetadataHook::_advanceConfigOptimeFromShard(ShardId shardId const auto& configMetadata = parseStatus.getValue(); auto opTime = configMetadata.getOpTime(); if (opTime.is_initialized()) { - grid.advanceConfigOpTime(opTime.get()); + grid->advanceConfigOpTime(opTime.get()); } } return Status::OK(); diff --git a/src/mongo/s/sharding_egress_metadata_hook.h b/src/mongo/s/sharding_egress_metadata_hook.h index a4d1612bb2d..c235dac0915 100644 --- a/src/mongo/s/sharding_egress_metadata_hook.h +++ b/src/mongo/s/sharding_egress_metadata_hook.h @@ -28,17 +28,12 @@ #pragma once -#include <memory> - #include "mongo/base/string_data.h" #include "mongo/db/repl/optime.h" #include "mongo/rpc/metadata/metadata_hook.h" #include "mongo/s/client/shard.h" namespace mongo { - -class Shard; - namespace rpc { /** @@ -46,6 +41,7 @@ namespace rpc { */ class ShardingEgressMetadataHook : public rpc::EgressMetadataHook { public: + ShardingEgressMetadataHook(ServiceContext* serviceContext); virtual ~ShardingEgressMetadataHook() = default; Status readReplyMetadata(OperationContext* opCtx, @@ -75,6 +71,8 @@ protected: * metadata in the response object from running a command. */ virtual Status _advanceConfigOptimeFromShard(ShardId shardId, const BSONObj& metadataObj); + + ServiceContext* const _serviceContext; }; } // namespace rpc diff --git a/src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp b/src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp index b44e8a212a2..1e01a9a1f7f 100644 --- a/src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp +++ b/src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp @@ -78,7 +78,7 @@ void ShardingEgressMetadataHookForMongos::_saveGLEStats(const BSONObj& metadata, } repl::OpTime ShardingEgressMetadataHookForMongos::_getConfigServerOpTime() { - return grid.configOpTime(); + return Grid::get(_serviceContext)->configOpTime(); } } // namespace rpc diff --git a/src/mongo/s/sharding_egress_metadata_hook_for_mongos.h b/src/mongo/s/sharding_egress_metadata_hook_for_mongos.h index 9cba4226df2..f0bb16b5e4f 100644 --- a/src/mongo/s/sharding_egress_metadata_hook_for_mongos.h +++ b/src/mongo/s/sharding_egress_metadata_hook_for_mongos.h @@ -34,6 +34,9 @@ namespace mongo { namespace rpc { class ShardingEgressMetadataHookForMongos final : public ShardingEgressMetadataHook { +public: + using ShardingEgressMetadataHook::ShardingEgressMetadataHook; + private: void _saveGLEStats(const BSONObj& metadata, StringData hostString) override; diff --git a/src/mongo/s/sharding_test_fixture.cpp b/src/mongo/s/sharding_test_fixture.cpp index 6c681962e61..4db274e0863 100644 --- a/src/mongo/s/sharding_test_fixture.cpp +++ b/src/mongo/s/sharding_test_fixture.cpp @@ -80,7 +80,6 @@ using executor::NetworkTestEnv; using executor::RemoteCommandRequest; using executor::RemoteCommandResponse; using executor::ShardingTaskExecutor; -using rpc::ShardingEgressMetadataHookForMongos; using unittest::assertGet; using std::string; @@ -124,14 +123,16 @@ void ShardingTestFixture::setUp() { // Set up executor pool used for most operations. auto fixedNet = stdx::make_unique<executor::NetworkInterfaceMock>(); - fixedNet->setEgressMetadataHook(stdx::make_unique<ShardingEgressMetadataHookForMongos>()); + fixedNet->setEgressMetadataHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>(serviceContext())); _mockNetwork = fixedNet.get(); auto fixedExec = makeShardingTestExecutor(std::move(fixedNet)); _networkTestEnv = stdx::make_unique<NetworkTestEnv>(fixedExec.get(), _mockNetwork); _executor = fixedExec.get(); auto netForPool = stdx::make_unique<executor::NetworkInterfaceMock>(); - netForPool->setEgressMetadataHook(stdx::make_unique<ShardingEgressMetadataHookForMongos>()); + netForPool->setEgressMetadataHook( + stdx::make_unique<rpc::ShardingEgressMetadataHookForMongos>(serviceContext())); auto _mockNetworkForPool = netForPool.get(); auto execForPool = makeShardingTestExecutor(std::move(netForPool)); _networkTestEnvForPool = |