diff options
Diffstat (limited to 'src/mongo/db/write_concern_options.h')
-rw-r--r-- | src/mongo/db/write_concern_options.h | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/mongo/db/write_concern_options.h b/src/mongo/db/write_concern_options.h index 44c67b2938b..31b0f556c30 100644 --- a/src/mongo/db/write_concern_options.h +++ b/src/mongo/db/write_concern_options.h @@ -37,8 +37,11 @@ namespace mongo { struct WriteConcernOptions { public: + enum SyncMode { NONE, FSYNC, JOURNAL }; + static const int kNoTimeout = 0; static const int kNoWaiting = -1; + static const BSONObj Default; static const BSONObj Acknowledged; static const BSONObj AllConfigs; @@ -46,8 +49,43 @@ namespace mongo { WriteConcernOptions() { reset(); } + WriteConcernOptions(int numNodes, + SyncMode sync, + int timeout); + + WriteConcernOptions(const std::string& mode, + SyncMode sync, + int timeout); + Status parse( const BSONObj& obj ); + /** + * Extracts the write concern settings from the BSONObj. The BSON object should have + * the format: + * + * { + * ... + * secondaryThrottle: <bool>, // optional + * _secondaryThrottle: <bool>, // optional + * writeConcern: <BSONObj> // optional + * } + * + * Note: secondaryThrottle takes precedence over _secondaryThrottle. + * + * Also sets output parameter rawWriteConcernObj if the writeCocnern field exists. + * + * Returns OK if the parse was successful. Also returns ErrorCodes::WriteConcernNotDefined + * when secondary throttle is true but write concern was not specified. + */ + Status parseSecondaryThrottle(const BSONObj& doc, + BSONObj* rawWriteConcernObj); + + /** + * Return true if the server needs to wait for other secondary nodes to satisfy this + * write concern setting. Errs on the false positive for non-empty wMode. + */ + bool shouldWaitForOtherNodes() const; + void reset() { syncMode = NONE; wNumNodes = 0; @@ -55,11 +93,18 @@ namespace mongo { wTimeout = 0; } - enum SyncMode { NONE, FSYNC, JOURNAL } syncMode; + // Returns the BSON representation of this object. + // Warning: does not return the same object passed on the last parse() call. + BSONObj toBSON() const; + + SyncMode syncMode; + // The w parameter for this write concern. The wMode represents the string format and + // takes precedence over the numeric format wNumNodes. int wNumNodes; std::string wMode; + // Timeout in milliseconds. int wTimeout; }; |