diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2022-04-22 19:42:03 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-04-22 20:12:32 +0000 |
commit | 90d6271d2f663a4aaf633de5e362972e50e90c21 (patch) | |
tree | d24da0cee090d7d92972fa8f43fa4f0eb41ac915 /src/mongo/db/s | |
parent | 983a7174c6d792049ef0f54e36a55f93801df89c (diff) | |
download | mongo-90d6271d2f663a4aaf633de5e362972e50e90c21.tar.gz |
SERVER-60761 Move the global read-only flag to be an OperationContext function
Diffstat (limited to 'src/mongo/db/s')
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 { |