diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2020-04-09 10:51:20 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-10 20:44:39 +0000 |
commit | ab61e34c1ad83290e7bbf5a902f09042d80ec493 (patch) | |
tree | 31fa312b95314adc9bc388e464d66b3dabadcfcc /jstests | |
parent | c4bca20e65afbb77834559247bdda8f541cda16b (diff) | |
download | mongo-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.js | 48 |
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(); })(); |