summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern_options.cpp
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2014-01-13 18:50:02 -0500
committerGreg Studer <greg@10gen.com>2014-01-14 14:41:04 -0500
commit13226efcd6638b707e0f4a64564d655cea9bc9c7 (patch)
tree8f8a80c77f7048116f6d63b9d8d349de36189c73 /src/mongo/db/write_concern_options.cpp
parent20a414a4809aa5d20f3a09f129f08c918cddf032 (diff)
downloadmongo-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.cpp34
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();
+ }
}