summaryrefslogtreecommitdiff
path: root/src/mongo/s/type_locks.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/type_locks.h')
-rw-r--r--src/mongo/s/type_locks.h431
1 files changed, 223 insertions, 208 deletions
diff --git a/src/mongo/s/type_locks.h b/src/mongo/s/type_locks.h
index 3eb6c3f86dd..e77da7c188c 100644
--- a/src/mongo/s/type_locks.h
+++ b/src/mongo/s/type_locks.h
@@ -35,226 +35,241 @@
namespace mongo {
- /**
- * This class represents the layout and contents of documents contained in the
- * config.locks collection. All manipulation of documents coming from that
- * collection should be done with this class.
- *
- * Usage Example:
- *
- * // Contact the config. 'conn' has been obtained before.
- * DBClientBase* conn;
- * BSONObj query = QUERY(LocksType::exampleField("exampleFieldName"));
- * exampleDoc = conn->findOne(LocksType::ConfigNS, query);
- *
- * // Process the response.
- * LocksType exampleType;
- * std::string errMsg;
- * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) {
- * // Can't use 'exampleType'. Take action.
- * }
- * // use 'exampleType'
- *
- */
- class LocksType {
- public:
-
- enum State {
- UNLOCKED = 0,
- LOCK_PREP, // Only for legacy 3 config servers.
- LOCKED,
- };
-
- //
- // schema declarations
- //
-
- // Name of the locks collection in the config server.
- static const std::string ConfigNS;
-
- // Field names and types in the locks collection type.
- static const BSONField<std::string> name;
- static const BSONField<int> state;
- static const BSONField<std::string> process;
- static const BSONField<OID> lockID;
- static const BSONField<std::string> who;
- static const BSONField<std::string> why;
- static const BSONField<Date_t> when;
-
- //
- // locks type methods
- //
-
- LocksType();
- ~LocksType();
-
- /**
- * Returns true if all the mandatory fields are present and have valid
- * representations. Otherwise returns false and fills in the optional 'errMsg' string.
- */
- bool isValid(std::string* errMsg) const;
-
- /**
- * Returns the BSON representation of the entry.
- */
- BSONObj toBSON() const;
-
- /**
- * Clears and populates the internal state using the 'source' BSON object if the
- * latter contains valid values. Otherwise sets errMsg and returns false.
- */
- bool parseBSON(const BSONObj& source, std::string* errMsg);
-
- /**
- * Clears the internal state.
- */
- void clear();
-
- /**
- * Copies all the fields present in 'this' to 'other'.
- */
- void cloneTo(LocksType* other) const;
-
- /**
- * Returns a std::string representation of the current internal state.
- */
- std::string toString() const;
-
- //
- // individual field accessors
- //
-
- // Mandatory Fields
- void setName(StringData name) {
- _name = name.toString();
- _isNameSet = true;
- }
-
- void unsetName() { _isNameSet = false; }
-
- bool isNameSet() const { return _isNameSet; }
-
- // Calling get*() methods when the member is not set results in undefined behavior
- const std::string getName() const {
- dassert(_isNameSet);
- return _name;
- }
-
- void setState(const int state) {
- _state = state;
- _isStateSet = true;
- }
-
- void unsetState() { _isStateSet = false; }
-
- bool isStateSet() const { return _isStateSet; }
+/**
+ * This class represents the layout and contents of documents contained in the
+ * config.locks collection. All manipulation of documents coming from that
+ * collection should be done with this class.
+ *
+ * Usage Example:
+ *
+ * // Contact the config. 'conn' has been obtained before.
+ * DBClientBase* conn;
+ * BSONObj query = QUERY(LocksType::exampleField("exampleFieldName"));
+ * exampleDoc = conn->findOne(LocksType::ConfigNS, query);
+ *
+ * // Process the response.
+ * LocksType exampleType;
+ * std::string errMsg;
+ * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) {
+ * // Can't use 'exampleType'. Take action.
+ * }
+ * // use 'exampleType'
+ *
+ */
+class LocksType {
+public:
+ enum State {
+ UNLOCKED = 0,
+ LOCK_PREP, // Only for legacy 3 config servers.
+ LOCKED,
+ };
- // Calling get*() methods when the member is not set results in undefined behavior
- int getState() const {
- dassert(_isStateSet);
- return _state;
- }
+ //
+ // schema declarations
+ //
- // Optional Fields
- void setProcess(StringData process) {
- _process = process.toString();
- _isProcessSet = true;
- }
+ // Name of the locks collection in the config server.
+ static const std::string ConfigNS;
- void unsetProcess() { _isProcessSet = false; }
+ // Field names and types in the locks collection type.
+ static const BSONField<std::string> name;
+ static const BSONField<int> state;
+ static const BSONField<std::string> process;
+ static const BSONField<OID> lockID;
+ static const BSONField<std::string> who;
+ static const BSONField<std::string> why;
+ static const BSONField<Date_t> when;
- bool isProcessSet() const {
- return _isProcessSet || process.hasDefault();
- }
+ //
+ // locks type methods
+ //
- // Calling get*() methods when the member is not set and has no default results in undefined
- // behavior
- std::string getProcess() const {
- if (_isProcessSet) {
- return _process;
- } else {
- dassert(process.hasDefault());
- return process.getDefault();
- }
- }
- void setLockID(OID lockID) {
- _lockID = lockID;
- _isLockIDSet = true;
- }
+ LocksType();
+ ~LocksType();
- void unsetLockID() { _isLockIDSet = false; }
+ /**
+ * Returns true if all the mandatory fields are present and have valid
+ * representations. Otherwise returns false and fills in the optional 'errMsg' string.
+ */
+ bool isValid(std::string* errMsg) const;
- bool isLockIDSet() const {
- return _isLockIDSet || lockID.hasDefault();
- }
+ /**
+ * Returns the BSON representation of the entry.
+ */
+ BSONObj toBSON() const;
- // Calling get*() methods when the member is not set and has no default results in undefined
- // behavior
- OID getLockID() const {
- if (_isLockIDSet) {
- return _lockID;
- } else {
- dassert(lockID.hasDefault());
- return lockID.getDefault();
- }
- }
- void setWho(StringData who) {
- _who = who.toString();
- _isWhoSet = true;
- }
+ /**
+ * Clears and populates the internal state using the 'source' BSON object if the
+ * latter contains valid values. Otherwise sets errMsg and returns false.
+ */
+ bool parseBSON(const BSONObj& source, std::string* errMsg);
- void unsetWho() { _isWhoSet = false; }
+ /**
+ * Clears the internal state.
+ */
+ void clear();
- bool isWhoSet() const {
- return _isWhoSet || who.hasDefault();
- }
+ /**
+ * Copies all the fields present in 'this' to 'other'.
+ */
+ void cloneTo(LocksType* other) const;
- // Calling get*() methods when the member is not set and has no default results in undefined
- // behavior
- std::string getWho() const {
- if (_isWhoSet) {
- return _who;
- } else {
- dassert(who.hasDefault());
- return who.getDefault();
- }
+ /**
+ * Returns a std::string representation of the current internal state.
+ */
+ std::string toString() const;
+
+ //
+ // individual field accessors
+ //
+
+ // Mandatory Fields
+ void setName(StringData name) {
+ _name = name.toString();
+ _isNameSet = true;
+ }
+
+ void unsetName() {
+ _isNameSet = false;
+ }
+
+ bool isNameSet() const {
+ return _isNameSet;
+ }
+
+ // Calling get*() methods when the member is not set results in undefined behavior
+ const std::string getName() const {
+ dassert(_isNameSet);
+ return _name;
+ }
+
+ void setState(const int state) {
+ _state = state;
+ _isStateSet = true;
+ }
+
+ void unsetState() {
+ _isStateSet = false;
+ }
+
+ bool isStateSet() const {
+ return _isStateSet;
+ }
+
+ // Calling get*() methods when the member is not set results in undefined behavior
+ int getState() const {
+ dassert(_isStateSet);
+ return _state;
+ }
+
+ // Optional Fields
+ void setProcess(StringData process) {
+ _process = process.toString();
+ _isProcessSet = true;
+ }
+
+ void unsetProcess() {
+ _isProcessSet = false;
+ }
+
+ bool isProcessSet() const {
+ return _isProcessSet || process.hasDefault();
+ }
+
+ // Calling get*() methods when the member is not set and has no default results in undefined
+ // behavior
+ std::string getProcess() const {
+ if (_isProcessSet) {
+ return _process;
+ } else {
+ dassert(process.hasDefault());
+ return process.getDefault();
}
- void setWhy(StringData why) {
- _why = why.toString();
- _isWhySet = true;
+ }
+ void setLockID(OID lockID) {
+ _lockID = lockID;
+ _isLockIDSet = true;
+ }
+
+ void unsetLockID() {
+ _isLockIDSet = false;
+ }
+
+ bool isLockIDSet() const {
+ return _isLockIDSet || lockID.hasDefault();
+ }
+
+ // Calling get*() methods when the member is not set and has no default results in undefined
+ // behavior
+ OID getLockID() const {
+ if (_isLockIDSet) {
+ return _lockID;
+ } else {
+ dassert(lockID.hasDefault());
+ return lockID.getDefault();
}
-
- void unsetWhy() { _isWhySet = false; }
-
- bool isWhySet() const {
- return _isWhySet || why.hasDefault();
+ }
+ void setWho(StringData who) {
+ _who = who.toString();
+ _isWhoSet = true;
+ }
+
+ void unsetWho() {
+ _isWhoSet = false;
+ }
+
+ bool isWhoSet() const {
+ return _isWhoSet || who.hasDefault();
+ }
+
+ // Calling get*() methods when the member is not set and has no default results in undefined
+ // behavior
+ std::string getWho() const {
+ if (_isWhoSet) {
+ return _who;
+ } else {
+ dassert(who.hasDefault());
+ return who.getDefault();
}
-
- // Calling get*() methods when the member is not set and has no default results in undefined
- // behavior
- std::string getWhy() const {
- if (_isWhySet) {
- return _why;
- } else {
- dassert(why.hasDefault());
- return why.getDefault();
- }
+ }
+ void setWhy(StringData why) {
+ _why = why.toString();
+ _isWhySet = true;
+ }
+
+ void unsetWhy() {
+ _isWhySet = false;
+ }
+
+ bool isWhySet() const {
+ return _isWhySet || why.hasDefault();
+ }
+
+ // Calling get*() methods when the member is not set and has no default results in undefined
+ // behavior
+ std::string getWhy() const {
+ if (_isWhySet) {
+ return _why;
+ } else {
+ dassert(why.hasDefault());
+ return why.getDefault();
}
-
- private:
- // Convention: (M)andatory, (O)ptional, (S)pecial rule.
- std::string _name; // (M) name of the lock
- bool _isNameSet;
- int _state; // (M) 0: Unlocked | 1: Locks in contention | 2: Lock held
- bool _isStateSet;
- std::string _process; // (O) optional if unlocked. contains the (unique) identifier
- bool _isProcessSet;
- OID _lockID; // (O) optional if unlocked. a unique identifier for the instance
- bool _isLockIDSet;
- std::string _who; // (O) optional if unlocked. a note about why the lock is held,
- bool _isWhoSet;
- std::string _why; // (O) optional if unlocked. a human readable description of the
- bool _isWhySet;
- };
-
-} // namespace mongo
+ }
+
+private:
+ // Convention: (M)andatory, (O)ptional, (S)pecial rule.
+ std::string _name; // (M) name of the lock
+ bool _isNameSet;
+ int _state; // (M) 0: Unlocked | 1: Locks in contention | 2: Lock held
+ bool _isStateSet;
+ std::string _process; // (O) optional if unlocked. contains the (unique) identifier
+ bool _isProcessSet;
+ OID _lockID; // (O) optional if unlocked. a unique identifier for the instance
+ bool _isLockIDSet;
+ std::string _who; // (O) optional if unlocked. a note about why the lock is held,
+ bool _isWhoSet;
+ std::string _why; // (O) optional if unlocked. a human readable description of the
+ bool _isWhySet;
+};
+
+} // namespace mongo