summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorTess Avitabile <tess.avitabile@mongodb.com>2020-04-09 10:51:20 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-15 20:15:21 +0000
commitf1daa511e366f79cf95e301e03441b931299c2f1 (patch)
tree2c2fb3e1f5d31f7947fefb5575131f0ef066f19f /jstests
parent25e77386e7252a3c60c02954bb97a6b1b21247f5 (diff)
downloadmongo-f1daa511e366f79cf95e301e03441b931299c2f1.tar.gz
SERVER-47435 Incrementing topologyVersion for FCV change must update awaitingTopologyChanges
(cherry picked from commit ab61e34c1ad83290e7bbf5a902f09042d80ec493)
Diffstat (limited to 'jstests')
-rw-r--r--jstests/replsets/awaitable_ismaster_fcv_change.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/jstests/replsets/awaitable_ismaster_fcv_change.js b/jstests/replsets/awaitable_ismaster_fcv_change.js
index b89c7300b59..96897fee307 100644
--- a/jstests/replsets/awaitable_ismaster_fcv_change.js
+++ b/jstests/replsets/awaitable_ismaster_fcv_change.js
@@ -113,12 +113,28 @@ let awaitIsMasterBeforeDowngradeFCVOnSecondary =
primaryFailPoint.wait();
secondaryFailPoint.wait();
+// Each node has one isMaster request waiting on a topology change.
+let numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+let numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(1, numAwaitingTopologyChangeOnPrimary);
+assert.eq(1, numAwaitingTopologyChangeOnSecondary);
+
// Setting the FCV to the same version will not trigger an isMaster response.
assert.commandWorked(
primaryAdminDB.runCommand({setFeatureCompatibilityVersion: latestFCV, writeConcern: {w: 1}}));
checkFCV(primaryAdminDB, latestFCV);
checkFCV(secondaryAdminDB, latestFCV);
+// Each node still has one isMaster request waiting on a topology change.
+numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(1, numAwaitingTopologyChangeOnPrimary);
+assert.eq(1, numAwaitingTopologyChangeOnSecondary);
+
jsTestLog("Downgrade the featureCompatibilityVersion.");
// Downgrading the FCV will cause the isMaster requests to respond on both primary and secondary.
assert.commandWorked(primaryAdminDB.runCommand(
@@ -130,6 +146,14 @@ rst.awaitReplication();
checkFCV(primaryAdminDB, lastStableFCV);
checkFCV(secondaryAdminDB, lastStableFCV);
+// All isMaster requests should have been responded to after the FCV change.
+numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(0, numAwaitingTopologyChangeOnPrimary);
+assert.eq(0, numAwaitingTopologyChangeOnSecondary);
+
// Get the new topologyVersion.
const primaryResponseAfterDowngrade = assert.commandWorked(primaryAdminDB.runCommand({
isMaster: 1,
@@ -168,12 +192,28 @@ let awaitIsMasterBeforeUpgradeFCVOnSecondary =
primaryFailPoint.wait();
secondaryFailPoint.wait();
+// Each node has one isMaster request waiting on a topology change.
+numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(1, numAwaitingTopologyChangeOnPrimary);
+assert.eq(1, numAwaitingTopologyChangeOnSecondary);
+
// Setting the FCV to the same version will not trigger an isMaster response.
assert.commandWorked(primaryAdminDB.runCommand(
{setFeatureCompatibilityVersion: lastStableFCV, writeConcern: {w: 1}}));
checkFCV(primaryAdminDB, lastStableFCV);
checkFCV(secondaryAdminDB, lastStableFCV);
+// Each node still has one isMaster request waiting on a topology change.
+numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(1, numAwaitingTopologyChangeOnPrimary);
+assert.eq(1, numAwaitingTopologyChangeOnSecondary);
+
jsTestLog("Upgrade the featureCompatibilityVersion.");
// Upgrading the FCV will cause the isMaster requests to respond on both primary and secondary.
assert.commandWorked(
@@ -185,5 +225,13 @@ rst.awaitReplication();
checkFCV(primaryAdminDB, latestFCV);
checkFCV(secondaryAdminDB, latestFCV);
+// All isMaster requests should have been responded to after the FCV change.
+numAwaitingTopologyChangeOnPrimary =
+ primaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+numAwaitingTopologyChangeOnSecondary =
+ secondaryAdminDB.serverStatus().connections.awaitingTopologyChanges;
+assert.eq(0, numAwaitingTopologyChangeOnPrimary);
+assert.eq(0, numAwaitingTopologyChangeOnSecondary);
+
rst.stopSet();
})();