diff options
author | Judah Schvimer <judah@mongodb.com> | 2016-04-12 19:11:23 -0400 |
---|---|---|
committer | Judah Schvimer <judah@mongodb.com> | 2016-04-12 19:11:23 -0400 |
commit | 7ed530a55304bd9cc2b80c054f379b10d9cea8e2 (patch) | |
tree | ff1dac44961da031f3369f0288fb38a347d0d690 /src/mongo/db/write_concern_options.cpp | |
parent | b0c0acc6767a74ed2e5aa50361ad4474291951f9 (diff) | |
download | mongo-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.cpp | 34 |
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; |