summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern_options.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/write_concern_options.h')
-rw-r--r--src/mongo/db/write_concern_options.h47
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;
};