summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern_options.cpp
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2016-04-12 19:11:23 -0400
committerJudah Schvimer <judah@mongodb.com>2016-04-12 19:11:23 -0400
commit7ed530a55304bd9cc2b80c054f379b10d9cea8e2 (patch)
treeff1dac44961da031f3369f0288fb38a347d0d690 /src/mongo/db/write_concern_options.cpp
parentb0c0acc6767a74ed2e5aa50361ad4474291951f9 (diff)
downloadmongo-7ed530a55304bd9cc2b80c054f379b10d9cea8e2.tar.gz
SERVER-20224 commands that write support writeConcern
Diffstat (limited to 'src/mongo/db/write_concern_options.cpp')
-rw-r--r--src/mongo/db/write_concern_options.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mongo/db/write_concern_options.cpp b/src/mongo/db/write_concern_options.cpp
index d0f003fb383..2b0c9abef23 100644
--- a/src/mongo/db/write_concern_options.cpp
+++ b/src/mongo/db/write_concern_options.cpp
@@ -30,6 +30,7 @@
#include "mongo/db/write_concern_options.h"
#include "mongo/base/status.h"
+#include "mongo/bson/util/bson_extract.h"
#include "mongo/db/field_parser.h"
namespace mongo {
@@ -119,6 +120,39 @@ Status WriteConcernOptions::parse(const BSONObj& obj) {
return Status::OK();
}
+StatusWith<WriteConcernOptions> WriteConcernOptions::extractWCFromCommand(
+ const BSONObj& cmdObj, const std::string& dbName, const WriteConcernOptions& defaultWC) {
+ WriteConcernOptions writeConcern = defaultWC;
+ writeConcern.usedDefault = true;
+ if (writeConcern.wNumNodes == 0 && writeConcern.wMode.empty()) {
+ writeConcern.wNumNodes = 1;
+ }
+
+ BSONElement writeConcernElement;
+ Status wcStatus = bsonExtractTypedField(cmdObj, "writeConcern", Object, &writeConcernElement);
+ if (!wcStatus.isOK()) {
+ if (wcStatus == ErrorCodes::NoSuchKey) {
+ // Return default write concern if no write concern is given.
+ return writeConcern;
+ }
+ return wcStatus;
+ }
+
+ BSONObj writeConcernObj = writeConcernElement.Obj();
+ // Empty write concern is interpreted to default.
+ if (writeConcernObj.isEmpty()) {
+ return writeConcern;
+ }
+
+ wcStatus = writeConcern.parse(writeConcernObj);
+ writeConcern.usedDefault = false;
+ if (!wcStatus.isOK()) {
+ return wcStatus;
+ }
+
+ return writeConcern;
+}
+
BSONObj WriteConcernOptions::toBSON() const {
BSONObjBuilder builder;