summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/is_master_response.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/is_master_response.cpp')
-rw-r--r--src/mongo/db/repl/is_master_response.cpp30
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();
}