diff options
Diffstat (limited to 'src/mongo/s/catalog/type_actionlog.h')
-rw-r--r-- | src/mongo/s/catalog/type_actionlog.h | 335 |
1 files changed, 175 insertions, 160 deletions
diff --git a/src/mongo/s/catalog/type_actionlog.h b/src/mongo/s/catalog/type_actionlog.h index bba7703371c..b7ff387a823 100644 --- a/src/mongo/s/catalog/type_actionlog.h +++ b/src/mongo/s/catalog/type_actionlog.h @@ -36,169 +36,184 @@ namespace mongo { +/** + * This class represents the layout and contents of documents contained in the + * config.actionlog 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(ActionLogType::exampleField("exampleFieldName")); + * exampleDoc = conn->findOne(ActionLogType::ConfigNS, query); + * + * // Process the response. + * ActionLogType exampleType; + * std::string errMsg; + * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) { + * // Can't use 'exampleType'. Take action. + * } + * // use 'exampleType' + * + */ +class ActionLogType { + MONGO_DISALLOW_COPYING(ActionLogType); + +public: + // + // schema declarations + // + + // Name of the actionlog collection in the config server. + static const std::string ConfigNS; + + // Field names and types in the actionlog collection type. + static const BSONField<std::string> server; + static const BSONField<std::string> what; + static const BSONField<Date_t> time; + static const BSONField<BSONObj> details; + + // Common field names included under details + static const BSONField<int> candidateChunks; + static const BSONField<int> chunksMoved; + static const BSONField<bool> didError; + static const BSONField<long long> executionTimeMicros; + static const BSONField<std::string> errmsg; + + + // + // actionlog type methods + // + + ActionLogType(); + ~ActionLogType(); + /** - * This class represents the layout and contents of documents contained in the - * config.actionlog 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(ActionLogType::exampleField("exampleFieldName")); - * exampleDoc = conn->findOne(ActionLogType::ConfigNS, query); - * - * // Process the response. - * ActionLogType exampleType; - * std::string errMsg; - * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) { - * // Can't use 'exampleType'. Take action. - * } - * // use 'exampleType' - * + * Returns true if all the mandatory fields are present and have valid + * representations. Otherwise returns false and fills in the optional 'errMsg' string. */ - class ActionLogType { - MONGO_DISALLOW_COPYING(ActionLogType); - public: - - // - // schema declarations - // - - // Name of the actionlog collection in the config server. - static const std::string ConfigNS; + bool isValid(std::string* errMsg) const; - // Field names and types in the actionlog collection type. - static const BSONField<std::string> server; - static const BSONField<std::string> what; - static const BSONField<Date_t> time; - static const BSONField<BSONObj> details; - - // Common field names included under details - static const BSONField<int> candidateChunks; - static const BSONField<int> chunksMoved; - static const BSONField<bool> didError; - static const BSONField<long long> executionTimeMicros; - static const BSONField<std::string> errmsg; + /** + * Returns the BSON representation of the entry. + */ + BSONObj toBSON() const; + void buildDetails(); - // - // actionlog type methods - // - - ActionLogType(); - ~ActionLogType(); - - /** - * 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; - - void buildDetails(); - - /** - * 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(ActionLogType* other) const; - - /** - * Returns a std::string representation of the current internal state. - */ - std::string toString() const; - - // - // individual field accessors - // - - void setServer(StringData server) { - _server = server.toString(); - _isServerSet = true; - } - - void unsetServer() { _isServerSet = false; } - - bool isServerSet() const { return _isServerSet; } - - // Calling get*() methods when the member is not set results in undefined behavior - const std::string& getServer() const { - dassert(_isServerSet); - return _what; - } - - void setWhat(StringData what) { - _what = what.toString(); - _isWhatSet = true; - } - - void unsetWhat() { _isWhatSet = false; } - - bool isWhatSet() const { return _isWhatSet; } - - // Calling get*() methods when the member is not set results in undefined behavior - const std::string& getWhat() const { - dassert(_isWhatSet); - return _what; - } - - void setTime(const Date_t time) { - _time = time; - _isTimeSet = true; - } - - void unsetTime() { _isTimeSet = false; } - - bool isTimeSet() const { return _isTimeSet; } - - // Calling get*() methods when the member is not set results in undefined behavior - const Date_t getTime() const { - dassert(_isTimeSet); - return _time; - } - - void setDetails(const BSONObj& details) { - _details = details.getOwned(); - _isDetailsSet = true; - } - - void unsetDetails() { _isDetailsSet = false; } - - bool isDetailsSet() const { return _isDetailsSet; } + /** + * 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); - // Calling get*() methods when the member is not set results in undefined behavior - const BSONObj getDetails() const { - dassert(_isDetailsSet); - return _details; - } - - private: - // Convention: (M)andatory, (O)ptional, (S)pecial rule. - std::string _server; // (M) hostname of server that we are making the change on. - // Does not include port. - bool _isServerSet; - std::string _what; // (M) what the action being performed was. - bool _isWhatSet; - Date_t _time; // (M) time this change was made - bool _isTimeSet; - BSONObj _details; // (M) A BSONObj containing extra information about some operations - bool _isDetailsSet; - - }; - -} // namespace mongo + /** + * Clears the internal state. + */ + void clear(); + + /** + * Copies all the fields present in 'this' to 'other'. + */ + void cloneTo(ActionLogType* other) const; + + /** + * Returns a std::string representation of the current internal state. + */ + std::string toString() const; + + // + // individual field accessors + // + + void setServer(StringData server) { + _server = server.toString(); + _isServerSet = true; + } + + void unsetServer() { + _isServerSet = false; + } + + bool isServerSet() const { + return _isServerSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + const std::string& getServer() const { + dassert(_isServerSet); + return _what; + } + + void setWhat(StringData what) { + _what = what.toString(); + _isWhatSet = true; + } + + void unsetWhat() { + _isWhatSet = false; + } + + bool isWhatSet() const { + return _isWhatSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + const std::string& getWhat() const { + dassert(_isWhatSet); + return _what; + } + + void setTime(const Date_t time) { + _time = time; + _isTimeSet = true; + } + + void unsetTime() { + _isTimeSet = false; + } + + bool isTimeSet() const { + return _isTimeSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + const Date_t getTime() const { + dassert(_isTimeSet); + return _time; + } + + void setDetails(const BSONObj& details) { + _details = details.getOwned(); + _isDetailsSet = true; + } + + void unsetDetails() { + _isDetailsSet = false; + } + + bool isDetailsSet() const { + return _isDetailsSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + const BSONObj getDetails() const { + dassert(_isDetailsSet); + return _details; + } + +private: + // Convention: (M)andatory, (O)ptional, (S)pecial rule. + std::string _server; // (M) hostname of server that we are making the change on. + // Does not include port. + bool _isServerSet; + std::string _what; // (M) what the action being performed was. + bool _isWhatSet; + Date_t _time; // (M) time this change was made + bool _isTimeSet; + BSONObj _details; // (M) A BSONObj containing extra information about some operations + bool _isDetailsSet; +}; + +} // namespace mongo |