diff options
Diffstat (limited to 'src/mongo/s/catalog/type_changelog.cpp')
-rw-r--r-- | src/mongo/s/catalog/type_changelog.cpp | 271 |
1 files changed, 141 insertions, 130 deletions
diff --git a/src/mongo/s/catalog/type_changelog.cpp b/src/mongo/s/catalog/type_changelog.cpp index 40db60dbf94..d31b5a83806 100644 --- a/src/mongo/s/catalog/type_changelog.cpp +++ b/src/mongo/s/catalog/type_changelog.cpp @@ -35,171 +35,182 @@ namespace mongo { - using std::string; +using std::string; - using mongoutils::str::stream; +using mongoutils::str::stream; - const std::string ChangelogType::ConfigNS = "config.changelog"; +const std::string ChangelogType::ConfigNS = "config.changelog"; - const BSONField<std::string> ChangelogType::changeID("_id"); - const BSONField<std::string> ChangelogType::server("server"); - const BSONField<std::string> ChangelogType::clientAddr("clientAddr"); - const BSONField<Date_t> ChangelogType::time("time"); - const BSONField<std::string> ChangelogType::what("what"); - const BSONField<std::string> ChangelogType::ns("ns"); - const BSONField<BSONObj> ChangelogType::details("details"); +const BSONField<std::string> ChangelogType::changeID("_id"); +const BSONField<std::string> ChangelogType::server("server"); +const BSONField<std::string> ChangelogType::clientAddr("clientAddr"); +const BSONField<Date_t> ChangelogType::time("time"); +const BSONField<std::string> ChangelogType::what("what"); +const BSONField<std::string> ChangelogType::ns("ns"); +const BSONField<BSONObj> ChangelogType::details("details"); - ChangelogType::ChangelogType() { - clear(); - } +ChangelogType::ChangelogType() { + clear(); +} - ChangelogType::~ChangelogType() { - } +ChangelogType::~ChangelogType() {} - bool ChangelogType::isValid(std::string* errMsg) const { - std::string dummy; - if (errMsg == NULL) { - errMsg = &dummy; - } - - // All the mandatory fields must be present. - if (!_isChangeIDSet) { - *errMsg = stream() << "missing " << changeID.name() << " field"; - return false; - } - if (!_isServerSet) { - *errMsg = stream() << "missing " << server.name() << " field"; - return false; - } - if (!_isClientAddrSet) { - *errMsg = stream() << "missing " << clientAddr.name() << " field"; - return false; - } - if (!_isTimeSet) { - *errMsg = stream() << "missing " << time.name() << " field"; - return false; - } - if (!_isWhatSet) { - *errMsg = stream() << "missing " << what.name() << " field"; - return false; - } - if (!_isNsSet) { - *errMsg = stream() << "missing " << ns.name() << " field"; - return false; - } - if (!_isDetailsSet) { - *errMsg = stream() << "missing " << details.name() << " field"; - return false; - } - - return true; +bool ChangelogType::isValid(std::string* errMsg) const { + std::string dummy; + if (errMsg == NULL) { + errMsg = &dummy; } - BSONObj ChangelogType::toBSON() const { - BSONObjBuilder builder; - - if (_isChangeIDSet) builder.append(changeID(), _changeID); - if (_isServerSet) builder.append(server(), _server); - if (_isClientAddrSet) builder.append(clientAddr(), _clientAddr); - if (_isTimeSet) builder.append(time(), _time); - if (_isWhatSet) builder.append(what(), _what); - if (_isNsSet) builder.append(ns(), _ns); - if (_isDetailsSet) builder.append(details(), _details); - - return builder.obj(); + // All the mandatory fields must be present. + if (!_isChangeIDSet) { + *errMsg = stream() << "missing " << changeID.name() << " field"; + return false; + } + if (!_isServerSet) { + *errMsg = stream() << "missing " << server.name() << " field"; + return false; + } + if (!_isClientAddrSet) { + *errMsg = stream() << "missing " << clientAddr.name() << " field"; + return false; + } + if (!_isTimeSet) { + *errMsg = stream() << "missing " << time.name() << " field"; + return false; + } + if (!_isWhatSet) { + *errMsg = stream() << "missing " << what.name() << " field"; + return false; + } + if (!_isNsSet) { + *errMsg = stream() << "missing " << ns.name() << " field"; + return false; + } + if (!_isDetailsSet) { + *errMsg = stream() << "missing " << details.name() << " field"; + return false; } - bool ChangelogType::parseBSON(const BSONObj& source, string* errMsg) { - clear(); - - std::string dummy; - if (!errMsg) errMsg = &dummy; + return true; +} + +BSONObj ChangelogType::toBSON() const { + BSONObjBuilder builder; - FieldParser::FieldState fieldState; - fieldState = FieldParser::extract(source, changeID, &_changeID, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isChangeIDSet = fieldState == FieldParser::FIELD_SET; + if (_isChangeIDSet) + builder.append(changeID(), _changeID); + if (_isServerSet) + builder.append(server(), _server); + if (_isClientAddrSet) + builder.append(clientAddr(), _clientAddr); + if (_isTimeSet) + builder.append(time(), _time); + if (_isWhatSet) + builder.append(what(), _what); + if (_isNsSet) + builder.append(ns(), _ns); + if (_isDetailsSet) + builder.append(details(), _details); - fieldState = FieldParser::extract(source, server, &_server, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isServerSet = fieldState == FieldParser::FIELD_SET; + return builder.obj(); +} - fieldState = FieldParser::extract(source, clientAddr, &_clientAddr, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isClientAddrSet = fieldState == FieldParser::FIELD_SET; +bool ChangelogType::parseBSON(const BSONObj& source, string* errMsg) { + clear(); - fieldState = FieldParser::extract(source, time, &_time, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isTimeSet = fieldState == FieldParser::FIELD_SET; + std::string dummy; + if (!errMsg) + errMsg = &dummy; - fieldState = FieldParser::extract(source, what, &_what, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isWhatSet = fieldState == FieldParser::FIELD_SET; + FieldParser::FieldState fieldState; + fieldState = FieldParser::extract(source, changeID, &_changeID, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isChangeIDSet = fieldState == FieldParser::FIELD_SET; - fieldState = FieldParser::extract(source, ns, &_ns, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isNsSet = fieldState == FieldParser::FIELD_SET; + fieldState = FieldParser::extract(source, server, &_server, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isServerSet = fieldState == FieldParser::FIELD_SET; - fieldState = FieldParser::extract(source, details, &_details, errMsg); - if (fieldState == FieldParser::FIELD_INVALID) return false; - _isDetailsSet = fieldState == FieldParser::FIELD_SET; + fieldState = FieldParser::extract(source, clientAddr, &_clientAddr, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isClientAddrSet = fieldState == FieldParser::FIELD_SET; - return true; - } + fieldState = FieldParser::extract(source, time, &_time, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isTimeSet = fieldState == FieldParser::FIELD_SET; - void ChangelogType::clear() { + fieldState = FieldParser::extract(source, what, &_what, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isWhatSet = fieldState == FieldParser::FIELD_SET; - _changeID.clear(); - _isChangeIDSet = false; + fieldState = FieldParser::extract(source, ns, &_ns, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isNsSet = fieldState == FieldParser::FIELD_SET; - _server.clear(); - _isServerSet = false; + fieldState = FieldParser::extract(source, details, &_details, errMsg); + if (fieldState == FieldParser::FIELD_INVALID) + return false; + _isDetailsSet = fieldState == FieldParser::FIELD_SET; - _clientAddr.clear(); - _isClientAddrSet = false; + return true; +} - _time = Date_t(); - _isTimeSet = false; +void ChangelogType::clear() { + _changeID.clear(); + _isChangeIDSet = false; - _what.clear(); - _isWhatSet = false; + _server.clear(); + _isServerSet = false; - _ns.clear(); - _isNsSet = false; + _clientAddr.clear(); + _isClientAddrSet = false; - _details = BSONObj(); - _isDetailsSet = false; + _time = Date_t(); + _isTimeSet = false; - } + _what.clear(); + _isWhatSet = false; - void ChangelogType::cloneTo(ChangelogType* other) const { - other->clear(); + _ns.clear(); + _isNsSet = false; - other->_changeID = _changeID; - other->_isChangeIDSet = _isChangeIDSet; + _details = BSONObj(); + _isDetailsSet = false; +} - other->_server = _server; - other->_isServerSet = _isServerSet; +void ChangelogType::cloneTo(ChangelogType* other) const { + other->clear(); - other->_clientAddr = _clientAddr; - other->_isClientAddrSet = _isClientAddrSet; + other->_changeID = _changeID; + other->_isChangeIDSet = _isChangeIDSet; - other->_time = _time; - other->_isTimeSet = _isTimeSet; + other->_server = _server; + other->_isServerSet = _isServerSet; - other->_what = _what; - other->_isWhatSet = _isWhatSet; + other->_clientAddr = _clientAddr; + other->_isClientAddrSet = _isClientAddrSet; - other->_ns = _ns; - other->_isNsSet = _isNsSet; + other->_time = _time; + other->_isTimeSet = _isTimeSet; + + other->_what = _what; + other->_isWhatSet = _isWhatSet; - other->_details = _details; - other->_isDetailsSet = _isDetailsSet; + other->_ns = _ns; + other->_isNsSet = _isNsSet; - } + other->_details = _details; + other->_isDetailsSet = _isDetailsSet; +} - std::string ChangelogType::toString() const { - return toBSON().toString(); - } +std::string ChangelogType::toString() const { + return toBSON().toString(); +} -} // namespace mongo +} // namespace mongo |