summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r--src/mongo/db/repl/read_concern_args.cpp4
-rw-r--r--src/mongo/db/repl/read_concern_args.h5
-rw-r--r--src/mongo/db/repl/repl_server_parameters.idl8
-rw-r--r--src/mongo/db/repl/replication_info.cpp15
4 files changed, 32 insertions, 0 deletions
diff --git a/src/mongo/db/repl/read_concern_args.cpp b/src/mongo/db/repl/read_concern_args.cpp
index a95cf27880f..a02b5e9b67b 100644
--- a/src/mongo/db/repl/read_concern_args.cpp
+++ b/src/mongo/db/repl/read_concern_args.cpp
@@ -101,6 +101,10 @@ bool ReadConcernArgs::isSpecified() const {
return _specified;
}
+bool ReadConcernArgs::isImplicitDefault() const {
+ return getProvenance().isImplicitDefault();
+}
+
ReadConcernLevel ReadConcernArgs::getLevel() const {
return _level.value_or(ReadConcernLevel::kLocalReadConcern);
}
diff --git a/src/mongo/db/repl/read_concern_args.h b/src/mongo/db/repl/read_concern_args.h
index 2bc1b5bdee4..15b1489aedd 100644
--- a/src/mongo/db/repl/read_concern_args.h
+++ b/src/mongo/db/repl/read_concern_args.h
@@ -153,6 +153,11 @@ public:
bool isSpecified() const;
/**
+ * Returns true if this ReadConcernArgs represents an implicit default read concern.
+ */
+ bool isImplicitDefault() const;
+
+ /**
* Returns default kLocalReadConcern if _level is not set.
*/
ReadConcernLevel getLevel() const;
diff --git a/src/mongo/db/repl/repl_server_parameters.idl b/src/mongo/db/repl/repl_server_parameters.idl
index 33b01923304..40be075770f 100644
--- a/src/mongo/db/repl/repl_server_parameters.idl
+++ b/src/mongo/db/repl/repl_server_parameters.idl
@@ -551,3 +551,11 @@ feature_flags:
document images for retryable find and modifies.
cpp_varname: feature_flags::gFeatureFlagRetryableFindAndModify
default: false
+
+ featureFlagDefaultReadConcernLocal:
+ description: >-
+ When enabled, default read concern will be set to local if there is no cluster wide
+ read concern (CWRC).
+ cpp_varname: feature_flags::gDefaultRCLocal
+ default: true
+ version: 5.0 \ No newline at end of file
diff --git a/src/mongo/db/repl/replication_info.cpp b/src/mongo/db/repl/replication_info.cpp
index 77ebda6ca44..48f2682d505 100644
--- a/src/mongo/db/repl/replication_info.cpp
+++ b/src/mongo/db/repl/replication_info.cpp
@@ -268,6 +268,21 @@ public:
return false;
}
+ ReadConcernSupportResult supportsReadConcern(const BSONObj& cmdObj,
+ repl::ReadConcernLevel level,
+ bool isImplicitDefault) const final {
+ static const Status kReadConcernNotSupported{ErrorCodes::InvalidOptions,
+ "read concern not supported"};
+ static const Status kDefaultReadConcernNotPermitted{
+ ErrorCodes::InvalidOptions, "cluster wide default read concern not permitted"};
+
+ static const Status kImplicitDefaultReadConcernNotPermitted{
+ ErrorCodes::InvalidOptions, "implicit default read concern not permitted"};
+ return {{level != repl::ReadConcernLevel::kLocalReadConcern, kReadConcernNotSupported},
+ {kDefaultReadConcernNotPermitted},
+ {kImplicitDefaultReadConcernNotPermitted}};
+ }
+
void addRequiredPrivileges(const std::string& dbname,
const BSONObj& cmdObj,
std::vector<Privilege>* out) const final {} // No auth required