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-15 20:15:21 +0000 |
commit | f1daa511e366f79cf95e301e03441b931299c2f1 (patch) | |
tree | 2c2fb3e1f5d31f7947fefb5575131f0ef066f19f /jstests | |
parent | 25e77386e7252a3c60c02954bb97a6b1b21247f5 (diff) | |
download | mongo-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.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 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(); })(); |