summaryrefslogtreecommitdiff
path: root/src/mongo/embedded
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/embedded
parent983a7174c6d792049ef0f54e36a55f93801df89c (diff)
downloadmongo-90d6271d2f663a4aaf633de5e362972e50e90c21.tar.gz
SERVER-60761 Move the global read-only flag to be an OperationContext function
Diffstat (limited to 'src/mongo/embedded')
-rw-r--r--src/mongo/embedded/embedded.cpp15
-rw-r--r--src/mongo/embedded/embedded_ismaster.cpp2
2 files changed, 10 insertions, 7 deletions
diff --git a/src/mongo/embedded/embedded.cpp b/src/mongo/embedded/embedded.cpp
index 20395926254..eb2549573b5 100644
--- a/src/mongo/embedded/embedded.cpp
+++ b/src/mongo/embedded/embedded.cpp
@@ -234,6 +234,13 @@ ServiceContext* initialize(const char* yaml_config) {
serviceContext, serviceContext->getPreciseClockSource());
serviceContext->setPeriodicRunner(std::move(periodicRunner));
+ // When starting the server with --queryableBackupMode or --recoverFromOplogAsStandalone, we are
+ // in read-only mode and don't allow user-originating operations to perform writes
+ if (storageGlobalParams.queryableBackupMode ||
+ repl::ReplSettings::shouldRecoverFromOplogAsStandalone()) {
+ serviceContext->disallowUserWrites();
+ }
+
setUpCatalog(serviceContext);
// Creating the operation context before initializing the storage engine allows the storage
@@ -278,15 +285,11 @@ ServiceContext* initialize(const char* yaml_config) {
uassert(50677, ss.str().c_str(), boost::filesystem::exists(storageGlobalParams.dbpath));
}
- if (!storageGlobalParams.readOnly) {
- boost::filesystem::remove_all(storageGlobalParams.dbpath + "/_tmp/");
- }
+ boost::filesystem::remove_all(storageGlobalParams.dbpath + "/_tmp/");
ReadWriteConcernDefaults::create(serviceContext, readWriteConcernDefaultsCacheLookupEmbedded);
- bool canCallFCVSetIfCleanStartup =
- !storageGlobalParams.readOnly && !(storageGlobalParams.engine == "devnull");
- if (canCallFCVSetIfCleanStartup) {
+ if (storageGlobalParams.engine != "devnull") {
Lock::GlobalWrite lk(startupOpCtx.get());
FeatureCompatibilityVersion::setIfCleanStartup(startupOpCtx.get(),
repl::StorageInterface::get(serviceContext));
diff --git a/src/mongo/embedded/embedded_ismaster.cpp b/src/mongo/embedded/embedded_ismaster.cpp
index 6b9903f35ca..a9f6763952e 100644
--- a/src/mongo/embedded/embedded_ismaster.cpp
+++ b/src/mongo/embedded/embedded_ismaster.cpp
@@ -87,7 +87,7 @@ public:
result.append("minWireVersion", wireSpec->incomingExternalClient.minWireVersion);
result.append("maxWireVersion", wireSpec->incomingExternalClient.maxWireVersion);
- result.append("readOnly", storageGlobalParams.readOnly);
+ result.append("readOnly", opCtx->readOnly());
return true;
}