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-10 20:44:39 +0000
commitab61e34c1ad83290e7bbf5a902f09042d80ec493 (patch)
tree31fa312b95314adc9bc388e464d66b3dabadcfcc /jstests
parentc4bca20e65afbb77834559247bdda8f541cda16b (diff)
downloadmongo-ab61e34c1ad83290e7bbf5a902f09042d80ec493.tar.gz
SERVER-47435 Incrementing topologyVersion for FCV change must update awaitingTopologyChanges
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 2c8e10be5cd..535306964a2 100644
--- a/jstests/replsets/awaitable_ismaster_fcv_change.js
+++ b/jstests/replsets/awaitable_ismaster_fcv_change.js
@@ -101,12 +101,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(
@@ -118,6 +134,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,
@@ -156,12 +180,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(
@@ -173,5 +213,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();
})();