diff options
author | James Wahlin <james.wahlin@10gen.com> | 2016-12-02 11:15:23 -0500 |
---|---|---|
committer | James Wahlin <james.wahlin@10gen.com> | 2016-12-06 08:42:52 -0500 |
commit | 62245660d4567096c184befc08267b77c9e3a3bb (patch) | |
tree | 01b10d2585286ff93267fd8d49e6c0cfdbd51e46 /src/mongo/db/write_concern.cpp | |
parent | 8624eb6c5234abfba31dcf4f8cff4f89c9bcfee6 (diff) | |
download | mongo-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.cpp | 14 |
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; |