summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/s/sharded_connection_info.cpp22
-rw-r--r--src/mongo/db/s/sharding_egress_metadata_hook_for_mongod.h3
-rw-r--r--src/mongo/db/s/sharding_initialization_mongod.cpp3
-rw-r--r--src/mongo/s/query/cluster_cursor_cleanup_job.cpp4
-rw-r--r--src/mongo/s/server.cpp9
-rw-r--r--src/mongo/s/sharding_egress_metadata_hook.cpp14
-rw-r--r--src/mongo/s/sharding_egress_metadata_hook.h8
-rw-r--r--src/mongo/s/sharding_egress_metadata_hook_for_mongos.cpp2
-rw-r--r--src/mongo/s/sharding_egress_metadata_hook_for_mongos.h3
-rw-r--r--src/mongo/s/sharding_test_fixture.cpp7
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 =