summaryrefslogtreecommitdiff
path: root/src/mongo/db/s
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2022-04-22 19:42:03 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-04-22 20:12:32 +0000
commit90d6271d2f663a4aaf633de5e362972e50e90c21 (patch)
treed24da0cee090d7d92972fa8f43fa4f0eb41ac915 /src/mongo/db/s
parent983a7174c6d792049ef0f54e36a55f93801df89c (diff)
downloadmongo-90d6271d2f663a4aaf633de5e362972e50e90c21.tar.gz
SERVER-60761 Move the global read-only flag to be an OperationContext function
Diffstat (limited to 'src/mongo/db/s')
-rw-r--r--src/mongo/db/s/cluster_pipeline_cmd_d.cpp4
-rw-r--r--src/mongo/db/s/flush_database_cache_updates_command.cpp2
-rw-r--r--src/mongo/db/s/flush_resharding_state_change_command.cpp2
-rw-r--r--src/mongo/db/s/flush_routing_table_cache_updates_command.cpp2
-rw-r--r--src/mongo/db/s/periodic_sharded_index_consistency_checker.cpp2
-rw-r--r--src/mongo/db/s/sharding_initialization_mongod.cpp8
-rw-r--r--src/mongo/db/s/sharding_initialization_mongod_test.cpp84
-rw-r--r--src/mongo/db/s/shardsvr_collmod_command.cpp3
8 files changed, 60 insertions, 47 deletions
diff --git a/src/mongo/db/s/cluster_pipeline_cmd_d.cpp b/src/mongo/db/s/cluster_pipeline_cmd_d.cpp
index cd78fa52e18..8526a411f67 100644
--- a/src/mongo/db/s/cluster_pipeline_cmd_d.cpp
+++ b/src/mongo/db/s/cluster_pipeline_cmd_d.cpp
@@ -62,13 +62,15 @@ struct ClusterPipelineCommandD {
}
static AggregateCommandRequest parseAggregationRequest(
+ OperationContext* opCtx,
const OpMsgRequest& opMsgRequest,
boost::optional<ExplainOptions::Verbosity> explainVerbosity,
bool apiStrict) {
// Replace clusterAggregate in the request body because the parser doesn't recognize it.
auto modifiedRequestBody =
opMsgRequest.body.replaceFieldNames(BSON(AggregateCommandRequest::kCommandName << 1));
- return aggregation_request_helper::parseFromBSON(opMsgRequest.getDatabase().toString(),
+ return aggregation_request_helper::parseFromBSON(opCtx,
+ opMsgRequest.getDatabase().toString(),
modifiedRequestBody,
explainVerbosity,
apiStrict);
diff --git a/src/mongo/db/s/flush_database_cache_updates_command.cpp b/src/mongo/db/s/flush_database_cache_updates_command.cpp
index de95a293333..e56515581f7 100644
--- a/src/mongo/db/s/flush_database_cache_updates_command.cpp
+++ b/src/mongo/db/s/flush_database_cache_updates_command.cpp
@@ -115,7 +115,7 @@ public:
uassert(ErrorCodes::IllegalOperation,
"Can't call _flushDatabaseCacheUpdates if in read-only mode",
- !storageGlobalParams.readOnly);
+ !opCtx->readOnly());
boost::optional<SharedSemiFuture<void>> criticalSectionSignal;
diff --git a/src/mongo/db/s/flush_resharding_state_change_command.cpp b/src/mongo/db/s/flush_resharding_state_change_command.cpp
index c1049660307..9fb897dc90b 100644
--- a/src/mongo/db/s/flush_resharding_state_change_command.cpp
+++ b/src/mongo/db/s/flush_resharding_state_change_command.cpp
@@ -108,7 +108,7 @@ public:
uassert(ErrorCodes::IllegalOperation,
"Can't call _flushReshardingStateChange if in read-only mode",
- !storageGlobalParams.readOnly);
+ !opCtx->readOnly());
ExecutorFuture<void>(Grid::get(opCtx)->getExecutorPool()->getArbitraryExecutor())
.then([svcCtx = opCtx->getServiceContext(), nss = ns()] {
diff --git a/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp b/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
index 943b78ece6d..901a8834517 100644
--- a/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
+++ b/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
@@ -110,7 +110,7 @@ public:
uassert(ErrorCodes::IllegalOperation,
str::stream() << "Can't call " << Derived::Request::kCommandName
<< " if in read-only mode",
- !storageGlobalParams.readOnly);
+ !opCtx->readOnly());
boost::optional<SharedSemiFuture<void>> criticalSectionSignal;
diff --git a/src/mongo/db/s/periodic_sharded_index_consistency_checker.cpp b/src/mongo/db/s/periodic_sharded_index_consistency_checker.cpp
index 16df6e4e20c..6145ddc0079 100644
--- a/src/mongo/db/s/periodic_sharded_index_consistency_checker.cpp
+++ b/src/mongo/db/s/periodic_sharded_index_consistency_checker.cpp
@@ -138,7 +138,7 @@ void PeriodicShardedIndexConsistencyChecker::_launchShardedIndexConsistencyCheck
}
auto request = aggregation_request_helper::parseFromBSON(
- nss, aggRequestBSON, boost::none, false);
+ opCtx, nss, aggRequestBSON, boost::none, false);
auto catalogCache = Grid::get(opCtx)->catalogCache();
shardVersionRetry(
diff --git a/src/mongo/db/s/sharding_initialization_mongod.cpp b/src/mongo/db/s/sharding_initialization_mongod.cpp
index 9d57fd74933..6b0cba8ed9b 100644
--- a/src/mongo/db/s/sharding_initialization_mongod.cpp
+++ b/src/mongo/db/s/sharding_initialization_mongod.cpp
@@ -289,9 +289,9 @@ void ShardingInitializationMongoD::shutDown(OperationContext* opCtx) {
bool ShardingInitializationMongoD::initializeShardingAwarenessIfNeeded(OperationContext* opCtx) {
invariant(!opCtx->lockState()->isLocked());
- // In sharded readOnly mode, we ignore the shardIdentity document on disk and instead *require*
- // a shardIdentity document to be passed through --overrideShardIdentity
- if (storageGlobalParams.readOnly) {
+ // In sharded queryableBackupMode mode, we ignore the shardIdentity document on disk and instead
+ // *require* a shardIdentity document to be passed through --overrideShardIdentity
+ if (storageGlobalParams.queryableBackupMode) {
if (serverGlobalParams.clusterRole == ClusterRole::ShardServer) {
uassert(ErrorCodes::InvalidOptions,
"If started with --shardsvr in queryableBackupMode, a shardIdentity document "
@@ -516,7 +516,7 @@ void initializeGlobalShardingStateForMongoD(OperationContext* opCtx,
auto const service = opCtx->getServiceContext();
if (serverGlobalParams.clusterRole == ClusterRole::ShardServer) {
- if (storageGlobalParams.readOnly) {
+ if (storageGlobalParams.queryableBackupMode) {
CatalogCacheLoader::set(service, std::make_unique<ReadOnlyCatalogCacheLoader>());
} else {
CatalogCacheLoader::set(service,
diff --git a/src/mongo/db/s/sharding_initialization_mongod_test.cpp b/src/mongo/db/s/sharding_initialization_mongod_test.cpp
index ab2bffb2ff7..da9d238f92a 100644
--- a/src/mongo/db/s/sharding_initialization_mongod_test.cpp
+++ b/src/mongo/db/s/sharding_initialization_mongod_test.cpp
@@ -94,7 +94,7 @@ protected:
_dbDirectClient.reset();
// Restore the defaults before calling tearDown
- storageGlobalParams.readOnly = false;
+ storageGlobalParams.queryableBackupMode = false;
serverGlobalParams.overrideShardIdentity = BSONObj();
CatalogCacheLoader::clearForTests(getServiceContext());
@@ -271,14 +271,15 @@ TEST_F(ShardingInitializationMongoDTest, InitializeAgainWithMatchingReplSetNameS
}
// The tests below check for different combinations of the compatible startup parameters for
-// --shardsvr, --overrideShardIdentity, and queryableBackup (readOnly) mode
+// --shardsvr, --overrideShardIdentity, and queryableBackup mode
/**
- * readOnly and --shardsvr
+ * queryableBackupMode and --shardsvr
*/
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndShardServerAndNoOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndShardServerAndNoOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
ASSERT_THROWS_CODE(
shardingInitialization()->initializeShardingAwarenessIfNeeded(operationContext()),
@@ -286,9 +287,10 @@ TEST_F(ShardingInitializationMongoDTest,
ErrorCodes::InvalidOptions);
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndShardServerAndInvalidOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndShardServerAndInvalidOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
serverGlobalParams.overrideShardIdentity =
BSON("_id"
<< "shardIdentity" << ShardIdentity::kShardNameFieldName << kShardName
@@ -301,9 +303,10 @@ TEST_F(ShardingInitializationMongoDTest,
ErrorCodes::UnsupportedFormat);
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndShardServerAndValidOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndShardServerAndValidOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
serverGlobalParams.clusterRole = ClusterRole::ShardServer;
serverGlobalParams.overrideShardIdentity = [] {
ShardIdentityType shardIdentity;
@@ -319,11 +322,12 @@ TEST_F(ShardingInitializationMongoDTest,
}
/**
- * readOnly and not --shardsvr
+ * queryableBackupMode and not --shardsvr
*/
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndNotShardServerAndNoOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndNotShardServerAndNoOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
serverGlobalParams.clusterRole = ClusterRole::None;
ASSERT(!shardingInitialization()->initializeShardingAwarenessIfNeeded(operationContext()));
@@ -331,8 +335,8 @@ TEST_F(ShardingInitializationMongoDTest,
TEST_F(
ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndNotShardServerAndInvalidOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndNotShardServerAndInvalidOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
serverGlobalParams.clusterRole = ClusterRole::None;
serverGlobalParams.overrideShardIdentity = BSON("_id"
<< "shardIdentity"
@@ -345,9 +349,10 @@ TEST_F(
ErrorCodes::InvalidOptions);
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededReadOnlyAndNotShardServerAndValidOverrideShardIdentity) {
- storageGlobalParams.readOnly = true;
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededQueryableBackupModeAndNotShardServerAndValidOverrideShardIdentity) {
+ storageGlobalParams.queryableBackupMode = true;
serverGlobalParams.clusterRole = ClusterRole::None;
serverGlobalParams.overrideShardIdentity = [] {
ShardIdentityType shardIdentity;
@@ -366,10 +371,10 @@ TEST_F(ShardingInitializationMongoDTest,
}
/**
- * not readOnly and --overrideShardIdentity
+ * not queryableBackupMode and --overrideShardIdentity
*/
TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndInvalidOverrideShardIdentity) {
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndInvalidOverrideShardIdentity) {
serverGlobalParams.clusterRole = ClusterRole::ShardServer;
serverGlobalParams.overrideShardIdentity = BSON("_id"
<< "shardIdentity"
@@ -390,7 +395,7 @@ TEST_F(ShardingInitializationMongoDTest,
}
TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndValidOverrideShardIdentity) {
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndValidOverrideShardIdentity) {
serverGlobalParams.clusterRole = ClusterRole::ShardServer;
serverGlobalParams.overrideShardIdentity = [] {
ShardIdentityType shardIdentity;
@@ -416,15 +421,16 @@ TEST_F(ShardingInitializationMongoDTest,
}
/**
- * not readOnly and --shardsvr
+ * not queryableBackupMode and --shardsvr
*/
TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndShardServerAndNoShardIdentity) {
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndShardServerAndNoShardIdentity) {
ASSERT(!shardingInitialization()->initializeShardingAwarenessIfNeeded(operationContext()));
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndShardServerAndInvalidShardIdentity) {
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndShardServerAndInvalidShardIdentity) {
// Insert the shardIdentity doc to disk while pretending that we are in "standalone" mode,
// otherwise OpObserver for inserts will prevent the insert from occurring because the
// shardIdentity doc is invalid
@@ -448,8 +454,9 @@ TEST_F(ShardingInitializationMongoDTest,
ErrorCodes::UnsupportedFormat);
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndShardServerAndValidShardIdentity) {
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndShardServerAndValidShardIdentity) {
// Insert the shardIdentity doc to disk while pretending that we are in "standalone" mode,
// otherwise OpObserver for inserts will prevent the insert from occurring because the
// shardIdentity doc is invalid
@@ -474,17 +481,19 @@ TEST_F(ShardingInitializationMongoDTest,
}
/**
- * not readOnly and not --shardsvr
+ * not queryableBackupMode and not --shardsvr
*/
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndNotShardServerAndNoShardIdentity) {
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndNotShardServerAndNoShardIdentity) {
ScopedSetStandaloneMode standalone(getServiceContext());
ASSERT(!shardingInitialization()->initializeShardingAwarenessIfNeeded(operationContext()));
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndNotShardServerAndInvalidShardIdentity) {
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndNotShardServerAndInvalidShardIdentity) {
ScopedSetStandaloneMode standalone(getServiceContext());
_dbDirectClient->insert(NamespaceString::kServerConfigurationNamespace.toString(),
@@ -498,8 +507,9 @@ TEST_F(ShardingInitializationMongoDTest,
ASSERT(!shardingInitialization()->initializeShardingAwarenessIfNeeded(operationContext()));
}
-TEST_F(ShardingInitializationMongoDTest,
- InitializeShardingAwarenessIfNeededNotReadOnlyAndNotShardServerAndValidShardIdentity) {
+TEST_F(
+ ShardingInitializationMongoDTest,
+ InitializeShardingAwarenessIfNeededNotQueryableBackupModeAndNotShardServerAndValidShardIdentity) {
ScopedSetStandaloneMode standalone(getServiceContext());
BSONObj validShardIdentity = [&] {
diff --git a/src/mongo/db/s/shardsvr_collmod_command.cpp b/src/mongo/db/s/shardsvr_collmod_command.cpp
index 97f47538531..f1736ec156c 100644
--- a/src/mongo/db/s/shardsvr_collmod_command.cpp
+++ b/src/mongo/db/s/shardsvr_collmod_command.cpp
@@ -82,7 +82,8 @@ public:
const std::string& dbname,
const BSONObj& cmdObj) const override {
const NamespaceString nss(parseNs(dbname, cmdObj));
- return auth::checkAuthForCollMod(AuthorizationSession::get(client), nss, cmdObj, false);
+ return auth::checkAuthForCollMod(
+ client->getOperationContext(), AuthorizationSession::get(client), nss, cmdObj, false);
}
bool skipApiVersionCheck() const override {