summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2020-01-09 14:16:36 +0000
committerevergreen <evergreen@mongodb.com>2020-01-09 14:16:36 +0000
commitb94da86ea3f85d4ba97ed14b0cef97d3df241902 (patch)
tree6de6f072ab3f33e781e54213e9a04001752f0867
parent3bf7c49d0450c012e8de4a321d7934a57692dd17 (diff)
downloadmongo-b94da86ea3f85d4ba97ed14b0cef97d3df241902.tar.gz
SERVER-45396 Fix the 'me' field in isMaster responses when using splithorizon
(cherry picked from commit a1a1e4f0c14ab71a5fc8bc7913af25571089b65f)
-rw-r--r--jstests/ssl/repl_ssl_split_horizon.js24
-rw-r--r--src/mongo/db/repl/topology_coordinator.cpp2
2 files changed, 23 insertions, 3 deletions
diff --git a/jstests/ssl/repl_ssl_split_horizon.js b/jstests/ssl/repl_ssl_split_horizon.js
index ecd90383685..11bbf64f8dd 100644
--- a/jstests/ssl/repl_ssl_split_horizon.js
+++ b/jstests/ssl/repl_ssl_split_horizon.js
@@ -107,6 +107,11 @@
var checkExpectedHorizon = function(url, memberIndex, expectedHostname) {
// Run isMaster in the shell and check that we get the expected hostname back
+ const assertion = (memberIndex === "me")
+ ? ("assert(db.runCommand({isMaster: 1})['me'] == '" + expectedHostname + "')")
+ : ("assert(db.runCommand({isMaster: 1})['hosts'][" + memberIndex + "] == '" +
+ expectedHostname + "')");
+
var argv = [
'env',
"HOSTALIASES=" + hostsFile,
@@ -114,8 +119,7 @@
'./mongo',
url,
'--eval',
- ("assert(db.runCommand({isMaster: 1})['hosts'][" + memberIndex + "] == '" +
- expectedHostname + "')")
+ assertion
];
return runMongoProgram(...argv);
};
@@ -126,6 +130,9 @@
assert.eq(checkExpectedHorizon(defaultURL, 0, node0localHostname),
0,
"localhost does not return horizon");
+ assert.eq(checkExpectedHorizon(defaultURL, "me", node0localHostname),
+ 0,
+ "localhost does not return horizon");
assert.eq(checkExpectedHorizon(defaultURL, 1, node1localHostname),
0,
"localhost does not return horizon");
@@ -136,6 +143,9 @@
assert.eq(checkExpectedHorizon(horizonURL, 0, node0horizonHostname),
0,
"does not return horizon as expected");
+ assert.eq(checkExpectedHorizon(horizonURL, "me", node0horizonHostname),
+ 0,
+ "does not return horizon as expected");
assert.eq(checkExpectedHorizon(horizonURL, 1, node1horizonHostname),
0,
"does not return horizon as expected");
@@ -147,6 +157,9 @@
assert.eq(checkExpectedHorizon(horizonMissingURL, 0, node0localHostname),
0,
"does not return localhost as expected");
+ assert.eq(checkExpectedHorizon(horizonMissingURL, "me", node0localHostname),
+ 0,
+ "does not return localhost as expected");
assert.eq(checkExpectedHorizon(horizonMissingURL, 1, node1localHostname),
0,
"does not return localhost as expected");
@@ -165,6 +178,9 @@
assert.eq(checkExpectedHorizon(horizonMissingURL, 0, node0horizonMissingHostname),
0,
"does not return horizon as expected");
+ assert.eq(checkExpectedHorizon(horizonMissingURL, "me", node0horizonMissingHostname),
+ 0,
+ "does not return horizon as expected");
assert.eq(checkExpectedHorizon(horizonMissingURL, 1, node1horizonMissingHostname),
0,
"does not return horizon as expected");
@@ -186,6 +202,10 @@
assert.eq(checkExpectedHorizon(horizonDifferentPortURL, 0, node0horizonHostnameDifferentPort),
0,
"does not return horizon as expected");
+ assert.eq(
+ checkExpectedHorizon(horizonDifferentPortURL, "me", node0horizonHostnameDifferentPort),
+ 0,
+ "does not return horizon as expected");
assert.eq(checkExpectedHorizon(horizonDifferentPortURL, 1, node1horizonHostnameDifferentPort),
0,
"does not return horizon as expected");
diff --git a/src/mongo/db/repl/topology_coordinator.cpp b/src/mongo/db/repl/topology_coordinator.cpp
index 1247710891e..0cd9ff8fa7a 100644
--- a/src/mongo/db/repl/topology_coordinator.cpp
+++ b/src/mongo/db/repl/topology_coordinator.cpp
@@ -2272,7 +2272,7 @@ void TopologyCoordinator::fillIsMasterForReplSet(IsMasterResponse* const respons
response->addTag(tagKey, tagConfig.getTagValue(*tag));
}
}
- response->setMe(selfConfig.getHostAndPort());
+ response->setMe(selfConfig.getHostAndPort(horizon));
if (_iAmPrimary()) {
response->setElectionId(_electionId);
}