diff options
author | Eric Milkie <milkie@10gen.com> | 2015-03-26 15:03:28 -0400 |
---|---|---|
committer | Eric Milkie <milkie@10gen.com> | 2015-03-27 11:44:53 -0400 |
commit | 0fb262fb082e1a8b64bb1f5c0099ed2ee4c432d9 (patch) | |
tree | d730c103703f28eba6f5ce56043b763fe9d4dd6b /src/mongo/db/repl/replica_set_config.cpp | |
parent | 67cf6c0d51bf59a1933325c793b02c220283f331 (diff) | |
download | mongo-0fb262fb082e1a8b64bb1f5c0099ed2ee4c432d9.tar.gz |
SERVER-17602 add protocolVersion replica set config field
Diffstat (limited to 'src/mongo/db/repl/replica_set_config.cpp')
-rw-r--r-- | src/mongo/db/repl/replica_set_config.cpp | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/src/mongo/db/repl/replica_set_config.cpp b/src/mongo/db/repl/replica_set_config.cpp index 9f6100783f3..236b64b4c47 100644 --- a/src/mongo/db/repl/replica_set_config.cpp +++ b/src/mongo/db/repl/replica_set_config.cpp @@ -45,21 +45,24 @@ namespace repl { const size_t ReplicaSetConfig::kMaxVotingMembers; #endif - const Seconds ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod(10); - const std::string ReplicaSetConfig::kIdFieldName = "_id"; const std::string ReplicaSetConfig::kVersionFieldName = "version"; - const std::string ReplicaSetConfig::kMembersFieldName = "members"; - const std::string ReplicaSetConfig::kSettingsFieldName = "settings"; - const std::string ReplicaSetConfig::kMajorityWriteConcernModeName = "$majority"; - const std::string ReplicaSetConfig::kStepDownCheckWriteConcernModeName = "$stepDownCheck"; + const Seconds ReplicaSetConfig::kDefaultHeartbeatTimeoutPeriod(10); namespace { + const std::string kIdFieldName = "_id"; + const std::string kMembersFieldName = "members"; + const std::string kSettingsFieldName = "settings"; + const std::string kMajorityWriteConcernModeName = "$majority"; + const std::string kStepDownCheckWriteConcernModeName = "$stepDownCheck"; + const std::string kProtocolVersionFieldName = "protocolVersion"; + const std::string kLegalConfigTopFieldNames[] = { - ReplicaSetConfig::kIdFieldName, + kIdFieldName, ReplicaSetConfig::kVersionFieldName, - ReplicaSetConfig::kMembersFieldName, - ReplicaSetConfig::kSettingsFieldName + kMembersFieldName, + kSettingsFieldName, + kProtocolVersionFieldName }; const std::string kHeartbeatTimeoutFieldName = "heartbeatTimeoutSecs"; @@ -69,7 +72,9 @@ namespace { } // namespace - ReplicaSetConfig::ReplicaSetConfig() : _isInitialized(false), _heartbeatTimeoutPeriod(0) {} + ReplicaSetConfig::ReplicaSetConfig() : _isInitialized(false), + _heartbeatTimeoutPeriod(0), + _protocolVersion(0) {} Status ReplicaSetConfig::initialize(const BSONObj& cfg) { _isInitialized = false; @@ -131,6 +136,15 @@ namespace { if (!status.isOK()) return status; + // + // Parse protocol version + // + BSONElement protocolVersionElement; + status = bsonExtractIntegerField(cfg, kProtocolVersionFieldName, &_protocolVersion); + if (!status.isOK() && status != ErrorCodes::NoSuchKey) { + return status; + } + _calculateMajorities(); _addInternalWriteConcernModes(); _isInitialized = true; @@ -353,6 +367,11 @@ namespace { } } + if (_protocolVersion < 0 || _protocolVersion > std::numeric_limits<int>::max()) { + return Status(ErrorCodes::BadValue, str::stream() << kProtocolVersionFieldName << + " field value of " << _protocolVersion << " is out of range"); + } + return Status::OK(); } @@ -497,20 +516,20 @@ namespace { BSONObj ReplicaSetConfig::toBSON() const { BSONObjBuilder configBuilder; - configBuilder.append("_id", _replSetName); - configBuilder.appendIntOrLL("version", _version); + configBuilder.append(kIdFieldName, _replSetName); + configBuilder.appendIntOrLL(kVersionFieldName, _version); - BSONArrayBuilder members(configBuilder.subarrayStart("members")); + BSONArrayBuilder members(configBuilder.subarrayStart(kMembersFieldName)); for (MemberIterator mem = membersBegin(); mem != membersEnd(); mem++) { members.append(mem->toBSON(getTagConfig())); } members.done(); - BSONObjBuilder settingsBuilder(configBuilder.subobjStart("settings")); - settingsBuilder.append("chainingAllowed", _chainingAllowed); - settingsBuilder.append("heartbeatTimeoutSecs", _heartbeatTimeoutPeriod.total_seconds()); + BSONObjBuilder settingsBuilder(configBuilder.subobjStart(kSettingsFieldName)); + settingsBuilder.append(kChainingAllowedFieldName, _chainingAllowed); + settingsBuilder.append(kHeartbeatTimeoutFieldName, _heartbeatTimeoutPeriod.total_seconds()); - BSONObjBuilder gleModes(settingsBuilder.subobjStart("getLastErrorModes")); + BSONObjBuilder gleModes(settingsBuilder.subobjStart(kGetLastErrorModesFieldName)); for (StringMap<ReplicaSetTagPattern>::const_iterator mode = _customWriteConcernModes.begin(); mode != _customWriteConcernModes.end(); @@ -530,7 +549,8 @@ namespace { } gleModes.done(); - settingsBuilder.append("getLastErrorDefaults", _defaultWriteConcern.toBSON()); + settingsBuilder.append(kGetLastErrorDefaultsFieldName, _defaultWriteConcern.toBSON()); + settingsBuilder.append(kProtocolVersionFieldName, _protocolVersion); settingsBuilder.done(); return configBuilder.obj(); } |