diff options
author | Greg Studer <greg@10gen.com> | 2014-01-13 18:50:02 -0500 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2014-01-14 14:41:04 -0500 |
commit | 13226efcd6638b707e0f4a64564d655cea9bc9c7 (patch) | |
tree | 8f8a80c77f7048116f6d63b9d8d349de36189c73 /src/mongo/db/write_concern_options.cpp | |
parent | 20a414a4809aa5d20f3a09f129f08c918cddf032 (diff) | |
download | mongo-13226efcd6638b707e0f4a64564d655cea9bc9c7.tar.gz |
SERVER-12274 refactor validation out of waiting for write concern
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 8597e55d28f..2658797e5e3 100644 --- a/src/mongo/db/write_concern_options.cpp +++ b/src/mongo/db/write_concern_options.cpp @@ -36,4 +36,38 @@ namespace mongo { const BSONObj WriteConcernOptions::AllConfigs = BSONObj(); const BSONObj WriteConcernOptions::Unacknowledged(BSON("w" << W_NONE)); + Status WriteConcernOptions::parse( const BSONObj& obj ) { + + bool j = obj["j"].trueValue(); + bool fsync = obj["fsync"].trueValue(); + + if ( j & fsync ) + return Status( ErrorCodes::BadValue, "fsync and j options cannot be used together" ); + + if ( j ) { + syncMode = JOURNAL; + } + if ( fsync ) { + syncMode = FSYNC; + } + + BSONElement e = obj["w"]; + if ( e.isNumber() ) { + wNumNodes = e.numberInt(); + } + else if ( e.type() == String ) { + wMode = e.valuestrsafe(); + } + else if ( e.eoo() || + e.type() == jstNULL || + e.type() == Undefined ) { + } + else { + return Status( ErrorCodes::BadValue, "w has to be a number or a string" ); + } + + wTimeout = obj["wtimeout"].numberInt(); + + return Status::OK(); + } } |