summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern.cpp
diff options
context:
space:
mode:
authorJames Wahlin <james.wahlin@10gen.com>2016-12-02 11:15:23 -0500
committerJames Wahlin <james.wahlin@10gen.com>2016-12-06 08:42:52 -0500
commit62245660d4567096c184befc08267b77c9e3a3bb (patch)
tree01b10d2585286ff93267fd8d49e6c0cfdbd51e46 /src/mongo/db/write_concern.cpp
parent8624eb6c5234abfba31dcf4f8cff4f89c9bcfee6 (diff)
downloadmongo-62245660d4567096c184befc08267b77c9e3a3bb.tar.gz
SERVER-27176 Improve performance of command writeConcern parsing
Diffstat (limited to 'src/mongo/db/write_concern.cpp')
-rw-r--r--src/mongo/db/write_concern.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/mongo/db/write_concern.cpp b/src/mongo/db/write_concern.cpp
index f4a30f917f5..6886bed64ca 100644
--- a/src/mongo/db/write_concern.cpp
+++ b/src/mongo/db/write_concern.cpp
@@ -62,10 +62,13 @@ static ServerStatusMetricField<Counter64> gleWtimeoutsDisplay("getLastError.wtim
MONGO_FP_DECLARE(hangBeforeWaitingForWriteConcern);
+bool commandSpecifiesWriteConcern(const BSONObj& cmdObj) {
+ return cmdObj.hasField(WriteConcernOptions::kWriteConcernField);
+}
+
StatusWith<WriteConcernOptions> extractWriteConcern(OperationContext* txn,
const BSONObj& cmdObj,
- const std::string& dbName,
- const bool supportsWriteConcern) {
+ const std::string& dbName) {
// The default write concern if empty is {w:1}. Specifying {w:0} is/was allowed, but is
// interpreted identically to {w:1}.
auto wcResult = WriteConcernOptions::extractWCFromCommand(
@@ -84,16 +87,11 @@ StatusWith<WriteConcernOptions> extractWriteConcern(OperationContext* txn,
writeConcern = {
WriteConcernOptions::kMajority, WriteConcernOptions::SyncMode::UNSET, Seconds(30)};
}
- } else if (supportsWriteConcern) {
- // If it supports writeConcern and does not use the default, validate the writeConcern.
+ } else {
Status wcStatus = validateWriteConcern(txn, writeConcern, dbName);
if (!wcStatus.isOK()) {
return wcStatus;
}
- } else {
- // This command doesn't do writes so it should not be passed a writeConcern. If we did not
- // use the default writeConcern, one was provided when it shouldn't have been by the user.
- return {ErrorCodes::InvalidOptions, "Command does not support writeConcern"};
}
return writeConcern;