diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2016-07-25 10:35:01 -0400 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2016-07-25 15:16:17 -0400 |
commit | 8855c03bdf307ef74825e0274344b1ce8df0852b (patch) | |
tree | 7267e9725bff6495956229c5b661bfb297ef0406 /src/mongo/db/write_concern.cpp | |
parent | 72728d0429e74e1bec1715b4339f60159b0d6b4e (diff) | |
download | mongo-8855c03bdf307ef74825e0274344b1ce8df0852b.tar.gz |
SERVER-25204 Allow writeConcern w:1 for 'local' on CSRS config servers
Diffstat (limited to 'src/mongo/db/write_concern.cpp')
-rw-r--r-- | src/mongo/db/write_concern.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/mongo/db/write_concern.cpp b/src/mongo/db/write_concern.cpp index a9c9adf1b99..6e986d87b19 100644 --- a/src/mongo/db/write_concern.cpp +++ b/src/mongo/db/write_concern.cpp @@ -83,7 +83,7 @@ StatusWith<WriteConcernOptions> extractWriteConcern(OperationContext* txn, } } else if (supportsWriteConcern) { // If it supports writeConcern and does not use the default, validate the writeConcern. - Status wcStatus = validateWriteConcern(txn, writeConcern); + Status wcStatus = validateWriteConcern(txn, writeConcern, dbName); if (!wcStatus.isOK()) { return wcStatus; } @@ -96,7 +96,9 @@ StatusWith<WriteConcernOptions> extractWriteConcern(OperationContext* txn, return writeConcern; } -Status validateWriteConcern(OperationContext* txn, const WriteConcernOptions& writeConcern) { +Status validateWriteConcern(OperationContext* txn, + const WriteConcernOptions& writeConcern, + StringData dbName) { if (writeConcern.syncMode == WriteConcernOptions::SyncMode::JOURNAL && !txn->getServiceContext()->getGlobalStorageEngine()->isDurable()) { return Status(ErrorCodes::BadValue, @@ -107,7 +109,7 @@ Status validateWriteConcern(OperationContext* txn, const WriteConcernOptions& wr // logic) should never be making non-majority writes against the config server, because sharding // is not resilient against rollbacks of metadata writes. if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer && - !writeConcern.validForConfigServers()) { + dbName != NamespaceString::kLocalDb && !writeConcern.validForConfigServers()) { // The only cases where we allow non-majority writes are from within the config servers // themselves, because these wait for write concern explicitly. if (!txn->getClient()->isInDirectClient()) { @@ -176,9 +178,6 @@ Status waitForWriteConcern(OperationContext* txn, const OpTime& replOpTime, const WriteConcernOptions& writeConcern, WriteConcernResult* result) { - // We assume all options have been validated earlier, if not, programming error - dassertOK(validateWriteConcern(txn, writeConcern)); - auto replCoord = repl::ReplicationCoordinator::get(txn); // Next handle blocking on disk |