diff options
Diffstat (limited to 'src/mongo/s/type_mongos.h')
-rw-r--r-- | src/mongo/s/type_mongos.h | 404 |
1 files changed, 212 insertions, 192 deletions
diff --git a/src/mongo/s/type_mongos.h b/src/mongo/s/type_mongos.h index 9969fca4815..2bf0a372359 100644 --- a/src/mongo/s/type_mongos.h +++ b/src/mongo/s/type_mongos.h @@ -36,208 +36,228 @@ namespace mongo { - /** - * This class represents the layout and contents of documents contained in the - * config.mongos 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(MongosType::exampleField("exampleFieldName")); - * exampleDoc = conn->findOne(MongosType::ConfigNS, query); - * - * // Process the response. - * MongosType exampleType; - * std::string errMsg; - * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) { - * // Can't use 'exampleType'. Take action. - * } - * // use 'exampleType' - * - */ - class MongosType { - MONGO_DISALLOW_COPYING(MongosType); - public: - - // - // schema declarations - // - - // Name of the mongos collection in the config server. - static const std::string ConfigNS; - - // Field names and types in the mongos collection type. - static const BSONField<std::string> name; - static const BSONField<Date_t> ping; - static const BSONField<int> up; - static const BSONField<bool> waiting; - static const BSONField<std::string> mongoVersion; - static const BSONField<int> configVersion; - - // - // mongos type methods - // - - MongosType(); - ~MongosType(); - - /** - * 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(MongosType* 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 setPing(const Date_t ping) { - _ping = ping; - _isPingSet = true; - } - - void unsetPing() { _isPingSet = false; } - - bool isPingSet() const { return _isPingSet; } - - // Calling get*() methods when the member is not set results in undefined behavior - const Date_t getPing() const { - dassert(_isPingSet); - return _ping; - } - - void setUp(const int up) { - _up = up; - _isUpSet = true; - } - - void unsetUp() { _isUpSet = false; } - - bool isUpSet() const { return _isUpSet; } +/** + * This class represents the layout and contents of documents contained in the + * config.mongos 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(MongosType::exampleField("exampleFieldName")); + * exampleDoc = conn->findOne(MongosType::ConfigNS, query); + * + * // Process the response. + * MongosType exampleType; + * std::string errMsg; + * if (!exampleType.parseBSON(exampleDoc, &errMsg) || !exampleType.isValid(&errMsg)) { + * // Can't use 'exampleType'. Take action. + * } + * // use 'exampleType' + * + */ +class MongosType { + MONGO_DISALLOW_COPYING(MongosType); - // Calling get*() methods when the member is not set results in undefined behavior - int getUp() const { - dassert(_isUpSet); - return _up; - } +public: + // + // schema declarations + // - void setWaiting(const bool waiting) { - _waiting = waiting; - _isWaitingSet = true; - } + // Name of the mongos collection in the config server. + static const std::string ConfigNS; - void unsetWaiting() { _isWaitingSet = false; } + // Field names and types in the mongos collection type. + static const BSONField<std::string> name; + static const BSONField<Date_t> ping; + static const BSONField<int> up; + static const BSONField<bool> waiting; + static const BSONField<std::string> mongoVersion; + static const BSONField<int> configVersion; - bool isWaitingSet() const { return _isWaitingSet; } + // + // mongos type methods + // - // Calling get*() methods when the member is not set results in undefined behavior - bool getWaiting() const { - dassert(_isWaitingSet); - return _waiting; - } + MongosType(); + ~MongosType(); - // Optional Fields - void setMongoVersion(StringData mongoVersion) { - _mongoVersion = mongoVersion.toString(); - _isMongoVersionSet = true; - } + /** + * 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; - void unsetMongoVersion() { _isMongoVersionSet = false; } + /** + * Returns the BSON representation of the entry. + */ + BSONObj toBSON() const; - bool isMongoVersionSet() const { - return _isMongoVersionSet || mongoVersion.hasDefault(); - } + /** + * 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 and has no default results in undefined - // behavior - std::string getMongoVersion() const { - if (_isMongoVersionSet) { - return _mongoVersion; - } else { - dassert(mongoVersion.hasDefault()); - return mongoVersion.getDefault(); - } - } - void setConfigVersion(const int configVersion) { - _configVersion = configVersion; - _isConfigVersionSet = true; - } + /** + * Clears the internal state. + */ + void clear(); - void unsetConfigVersion() { _isConfigVersionSet = false; } + /** + * Copies all the fields present in 'this' to 'other'. + */ + void cloneTo(MongosType* other) const; - bool isConfigVersionSet() const { - return _isConfigVersionSet || configVersion.hasDefault(); + /** + * 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 setPing(const Date_t ping) { + _ping = ping; + _isPingSet = true; + } + + void unsetPing() { + _isPingSet = false; + } + + bool isPingSet() const { + return _isPingSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + const Date_t getPing() const { + dassert(_isPingSet); + return _ping; + } + + void setUp(const int up) { + _up = up; + _isUpSet = true; + } + + void unsetUp() { + _isUpSet = false; + } + + bool isUpSet() const { + return _isUpSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + int getUp() const { + dassert(_isUpSet); + return _up; + } + + void setWaiting(const bool waiting) { + _waiting = waiting; + _isWaitingSet = true; + } + + void unsetWaiting() { + _isWaitingSet = false; + } + + bool isWaitingSet() const { + return _isWaitingSet; + } + + // Calling get*() methods when the member is not set results in undefined behavior + bool getWaiting() const { + dassert(_isWaitingSet); + return _waiting; + } + + // Optional Fields + void setMongoVersion(StringData mongoVersion) { + _mongoVersion = mongoVersion.toString(); + _isMongoVersionSet = true; + } + + void unsetMongoVersion() { + _isMongoVersionSet = false; + } + + bool isMongoVersionSet() const { + return _isMongoVersionSet || mongoVersion.hasDefault(); + } + + // Calling get*() methods when the member is not set and has no default results in undefined + // behavior + std::string getMongoVersion() const { + if (_isMongoVersionSet) { + return _mongoVersion; + } else { + dassert(mongoVersion.hasDefault()); + return mongoVersion.getDefault(); } - - // Calling get*() methods when the member is not set and has no default results in undefined - // behavior - int getConfigVersion() const { - if (_isConfigVersionSet) { - return _configVersion; - } else { - dassert(configVersion.hasDefault()); - return configVersion.getDefault(); - } + } + void setConfigVersion(const int configVersion) { + _configVersion = configVersion; + _isConfigVersionSet = true; + } + + void unsetConfigVersion() { + _isConfigVersionSet = false; + } + + bool isConfigVersionSet() const { + return _isConfigVersionSet || configVersion.hasDefault(); + } + + // Calling get*() methods when the member is not set and has no default results in undefined + // behavior + int getConfigVersion() const { + if (_isConfigVersionSet) { + return _configVersion; + } else { + dassert(configVersion.hasDefault()); + return configVersion.getDefault(); } - - private: - // Convention: (M)andatory, (O)ptional, (S)pecial rule. - std::string _name; // (M) "host:port" for this mongos - bool _isNameSet; - Date_t _ping; // (M) last time it was seen alive - bool _isPingSet; - int _up; // (M) uptime at the last ping - bool _isUpSet; - bool _waiting; // (M) for testing purposes - bool _isWaitingSet; - std::string _mongoVersion; // (O) the mongodb version of the pinging mongos - bool _isMongoVersionSet; - int _configVersion; // (O) the config version of the pinging mongos - bool _isConfigVersionSet; - }; - -} // namespace mongo + } + +private: + // Convention: (M)andatory, (O)ptional, (S)pecial rule. + std::string _name; // (M) "host:port" for this mongos + bool _isNameSet; + Date_t _ping; // (M) last time it was seen alive + bool _isPingSet; + int _up; // (M) uptime at the last ping + bool _isUpSet; + bool _waiting; // (M) for testing purposes + bool _isWaitingSet; + std::string _mongoVersion; // (O) the mongodb version of the pinging mongos + bool _isMongoVersionSet; + int _configVersion; // (O) the config version of the pinging mongos + bool _isConfigVersionSet; +}; + +} // namespace mongo |