diff options
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r-- | src/mongo/db/repl/read_concern_args.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/repl/read_concern_args.h | 5 | ||||
-rw-r--r-- | src/mongo/db/repl/repl_server_parameters.idl | 8 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_info.cpp | 15 |
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 |