diff options
Diffstat (limited to 'src/mongo/db/repl/is_master_response.cpp')
-rw-r--r-- | src/mongo/db/repl/is_master_response.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/mongo/db/repl/is_master_response.cpp b/src/mongo/db/repl/is_master_response.cpp index 5d377768cc6..96f7f465d9a 100644 --- a/src/mongo/db/repl/is_master_response.cpp +++ b/src/mongo/db/repl/is_master_response.cpp @@ -65,6 +65,8 @@ const std::string kLastWriteDateFieldName = "lastWriteDate"; const std::string kLastMajorityWriteOpTimeFieldName = "majorityOpTime"; const std::string kLastMajorityWriteDateFieldName = "majorityWriteDate"; const std::string kLastWriteFieldName = "lastWrite"; +const std::string kIsWritablePrimaryFieldName = "isWritablePrimary"; +const std::string kSecondaryDelaySecsFieldName = "secondaryDelaySecs"; // field name constants that don't directly correspond to member variables const std::string kInfoFieldName = "info"; @@ -102,7 +104,7 @@ IsMasterResponse::IsMasterResponse() _configSet(true), _shutdownInProgress(false) {} -void IsMasterResponse::addToBSON(BSONObjBuilder* builder) const { +void IsMasterResponse::addToBSON(BSONObjBuilder* builder, bool useLegacyResponseFields) const { if (_topologyVersion) { BSONObjBuilder topologyVersionBuilder(builder->subobjStart(kTopologyVersionFieldName)); _topologyVersion->serialize(&topologyVersionBuilder); @@ -141,7 +143,11 @@ void IsMasterResponse::addToBSON(BSONObjBuilder* builder) const { } if (!_configSet) { - builder->append(kIsMasterFieldName, false); + if (useLegacyResponseFields) { + builder->append(kIsMasterFieldName, false); + } else { + builder->append(kIsWritablePrimaryFieldName, false); + } builder->append(kSecondaryFieldName, false); builder->append(kInfoFieldName, "Does not have a valid replica set config"); builder->append(kIsReplicaSetFieldName, true); @@ -151,7 +157,11 @@ void IsMasterResponse::addToBSON(BSONObjBuilder* builder) const { invariant(_setVersionSet); builder->append(kSetVersionFieldName, static_cast<int>(_setVersion)); invariant(_isMasterSet); - builder->append(kIsMasterFieldName, _isMaster); + if (useLegacyResponseFields) { + builder->append(kIsMasterFieldName, _isMaster); + } else { + builder->append(kIsWritablePrimaryFieldName, _isMaster); + } invariant(_isSecondarySet); builder->append(kSecondaryFieldName, _secondary); @@ -165,8 +175,14 @@ void IsMasterResponse::addToBSON(BSONObjBuilder* builder) const { builder->append(kHiddenFieldName, _hidden); if (_buildIndexesSet) builder->append(kBuildIndexesFieldName, _buildIndexes); - if (_slaveDelaySet) - builder->appendIntOrLL(kSlaveDelayFieldName, durationCount<Seconds>(_slaveDelay)); + if (_slaveDelaySet) { + if (useLegacyResponseFields) { + builder->appendIntOrLL(kSlaveDelayFieldName, durationCount<Seconds>(_slaveDelay)); + } else { + builder->appendIntOrLL(kSecondaryDelaySecsFieldName, + durationCount<Seconds>(_slaveDelay)); + } + } if (_tagsSet) { BSONObjBuilder tags(builder->subobjStart(kTagsFieldName)); for (stdx::unordered_map<std::string, std::string>::const_iterator it = _tags.begin(); @@ -193,9 +209,9 @@ void IsMasterResponse::addToBSON(BSONObjBuilder* builder) const { } } -BSONObj IsMasterResponse::toBSON() const { +BSONObj IsMasterResponse::toBSON(bool useLegacyResponseFields) const { BSONObjBuilder builder; - addToBSON(&builder); + addToBSON(&builder, useLegacyResponseFields); return builder.obj(); } |