summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern_options.cpp
diff options
context:
space:
mode:
authorKevin Pulo <kevin.pulo@mongodb.com>2019-09-26 19:53:04 +0000
committerevergreen <evergreen@mongodb.com>2019-09-26 19:53:04 +0000
commitae006f4586f21e294bdb14709d2610af681c592a (patch)
treebdeb6a9f7991cf9f779a9c4e7580a11ef98e4793 /src/mongo/db/write_concern_options.cpp
parent68d5310c76cb589ad4ab1ea1775fa861277b0615 (diff)
downloadmongo-ae006f4586f21e294bdb14709d2610af681c592a.tar.gz
SERVER-43120 SERVER-43121 SERVER-43122 ReadWriteConcernDefaults component, setDefaultRWConcern and getDefaultRWConcern commands, check RWC default suitability
Diffstat (limited to 'src/mongo/db/write_concern_options.cpp')
-rw-r--r--src/mongo/db/write_concern_options.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/mongo/db/write_concern_options.cpp b/src/mongo/db/write_concern_options.cpp
index 055fa23a5ee..d92dbfed25c 100644
--- a/src/mongo/db/write_concern_options.cpp
+++ b/src/mongo/db/write_concern_options.cpp
@@ -159,20 +159,37 @@ Status WriteConcernOptions::parse(const BSONObj& obj) {
return Status::OK();
}
-WriteConcernOptions WriteConcernOptions::deserializerForIDL(const BSONObj& obj) {
- WriteConcernOptions writeConcernOptions;
- uassertStatusOK(writeConcernOptions.parse(obj));
- return writeConcernOptions;
-}
+namespace {
-StatusWith<WriteConcernOptions> WriteConcernOptions::extractWCFromCommand(
- const BSONObj& cmdObj, const WriteConcernOptions& defaultWC) {
+/**
+ * Construct a WriteConcernOptions based on an optional default WC object, in preparation for
+ * parsing out of a command object or IDL.
+ */
+WriteConcernOptions constructWCFromDefault(
+ const WriteConcernOptions& defaultWC = WriteConcernOptions()) {
WriteConcernOptions writeConcern = defaultWC;
writeConcern.usedDefault = true;
writeConcern.usedDefaultW = true;
if (writeConcern.wNumNodes == 0 && writeConcern.wMode.empty()) {
writeConcern.wNumNodes = 1;
}
+ return writeConcern;
+}
+
+} // namespace
+
+
+WriteConcernOptions WriteConcernOptions::deserializerForIDL(const BSONObj& obj) {
+ WriteConcernOptions writeConcern = constructWCFromDefault();
+ if (!obj.isEmpty()) {
+ uassertStatusOK(writeConcern.parse(obj));
+ }
+ return writeConcern;
+}
+
+StatusWith<WriteConcernOptions> WriteConcernOptions::extractWCFromCommand(
+ const BSONObj& cmdObj, const WriteConcernOptions& defaultWC) {
+ WriteConcernOptions writeConcern = constructWCFromDefault(defaultWC);
// Return the default write concern if no write concern is provided. We check for the existence
// of the write concern field up front in order to avoid the expense of constructing an error