From ee7c632b25d56f2d7c47edeeb3a81ef206f61924 Mon Sep 17 00:00:00 2001 From: Ali Mir Date: Wed, 8 Jul 2020 19:48:17 -0400 Subject: SERVER-48733 Update expectedPrimaryNodeId parameter in awaitNodesAgreeOnPrimary --- jstests/replsets/chaining_removal.js | 2 +- jstests/replsets/reconfig_avoids_diverging_configs.js | 2 +- .../replSetGetStatus_new_term_oplog_entry_fields.js | 2 +- jstests/replsets/replsetprio1.js | 4 ++-- src/mongo/shell/replsettest.js | 19 ++++++++++++------- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/jstests/replsets/chaining_removal.js b/jstests/replsets/chaining_removal.js index 11ab2e9e43d..a3cafe46932 100644 --- a/jstests/replsets/chaining_removal.js +++ b/jstests/replsets/chaining_removal.js @@ -21,7 +21,7 @@ replTest.initiate({ {_id: 4, host: nodes[4].host, priority: 0}, ], }); -replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, 0); +replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, nodes[0]); var primary = replTest.getPrimary(); replTest.awaitReplication(); diff --git a/jstests/replsets/reconfig_avoids_diverging_configs.js b/jstests/replsets/reconfig_avoids_diverging_configs.js index c4cb9aa31a7..34d7d5a2345 100644 --- a/jstests/replsets/reconfig_avoids_diverging_configs.js +++ b/jstests/replsets/reconfig_avoids_diverging_configs.js @@ -58,7 +58,7 @@ const parallelShell = startParallelShell( }, C1), node0.port); assert.commandWorked(node1.adminCommand({replSetStepUp: 1})); -rst.awaitNodesAgreeOnPrimary(rst.kDefaultTimeoutMS, [node1, node2, node3], 1); +rst.awaitNodesAgreeOnPrimary(rst.kDefaultTimeoutMS, [node1, node2, node3], node1); jsTestLog("Current replica set topology: [node0 (Primary)] [node1 (Primary), node2, node3]"); assert.soon(() => node1.getDB('admin').runCommand({ismaster: 1}).ismaster); assert.soon(() => isConfigCommitted(node1)); diff --git a/jstests/replsets/replSetGetStatus_new_term_oplog_entry_fields.js b/jstests/replsets/replSetGetStatus_new_term_oplog_entry_fields.js index ec286d323bb..fbe09eeeec2 100644 --- a/jstests/replsets/replSetGetStatus_new_term_oplog_entry_fields.js +++ b/jstests/replsets/replSetGetStatus_new_term_oplog_entry_fields.js @@ -21,7 +21,7 @@ stopServerReplication(rst.nodes); const newPrimary = rst.getSecondary(); assert.soonNoExcept(function() { assert.commandWorked(newPrimary.adminCommand({replSetStepUp: 1})); - rst.awaitNodesAgreeOnPrimary(rst.kDefaultTimeoutMS, rst.nodes, rst.getNodeId(newPrimary)); + rst.awaitNodesAgreeOnPrimary(rst.kDefaultTimeoutMS, rst.nodes, newPrimary); return newPrimary.adminCommand('replSetGetStatus').myState === ReplSetTest.State.PRIMARY; }, 'failed to step up node ' + newPrimary.host, rst.kDefaultTimeoutMS); diff --git a/jstests/replsets/replsetprio1.js b/jstests/replsets/replsetprio1.js index 9851e501f69..0113b47b7a3 100644 --- a/jstests/replsets/replsetprio1.js +++ b/jstests/replsets/replsetprio1.js @@ -16,7 +16,7 @@ replTest.initiateWithAnyNodeAsPrimary({ }); // 2 should be master (give this a while to happen, as other nodes might first be elected) -replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, 2); +replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, nodes[2]); // wait for 1 to not appear to be master (we are about to make it master and need a clean slate // here) @@ -43,7 +43,7 @@ for (i = 0; i < 1000; i++) { // bring 2 back up, 2 should wait until caught up and then become master replTest.restart(2); -replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, 2); +replTest.awaitNodesAgreeOnPrimary(replTest.kDefaultTimeoutMS, nodes, nodes[2]); // make sure nothing was rolled back master = replTest.getPrimary(); diff --git a/src/mongo/shell/replsettest.js b/src/mongo/shell/replsettest.js index d9f2aa0b650..8dc2b86abb2 100644 --- a/src/mongo/shell/replsettest.js +++ b/src/mongo/shell/replsettest.js @@ -931,23 +931,25 @@ var ReplSetTest = function(opts) { /** * Blocks until all nodes agree on who the primary is. - * If 'expectedPrimaryNodeId' is provided, ensure that every node is seeing this node as the + * If 'expectedPrimaryNode' is provided, ensure that every node is seeing this node as the * primary. Otherwise, ensure that all the nodes in the set agree with the first node on the * identity of the primary. */ - this.awaitNodesAgreeOnPrimary = function(timeout, nodes, expectedPrimaryNodeId) { + this.awaitNodesAgreeOnPrimary = function(timeout, nodes, expectedPrimaryNode) { timeout = timeout || self.kDefaultTimeoutMS; nodes = nodes || self.nodes; - expectedPrimaryNodeId = expectedPrimaryNodeId || -1; - if (expectedPrimaryNodeId === -1) { + // indexOf will return the index of the expected node. If expectedPrimaryNode is undefined, + // indexOf will return -1. + const expectedPrimaryNodeIdx = self.nodes.indexOf(expectedPrimaryNode); + if (expectedPrimaryNodeIdx === -1) { print("AwaitNodesAgreeOnPrimary: Waiting for nodes to agree on any primary."); } else { print("AwaitNodesAgreeOnPrimary: Waiting for nodes to agree on " + - nodes[expectedPrimaryNodeId].name + " as primary."); + expectedPrimaryNode.name + " as primary."); } assert.soonNoExcept(function() { - var primary = expectedPrimaryNodeId; + var primary = expectedPrimaryNodeIdx; for (var i = 0; i < nodes.length; i++) { var replSetGetStatus = @@ -974,7 +976,10 @@ var ReplSetTest = function(opts) { } if (primary < 0) { - // If we haven't seen a primary yet, set it to this. + print("AwaitNodesAgreeOnPrimary: " + nodes[i].name + " thinks the " + + " primary is " + self.nodes[nodesPrimary].name + + ". Other nodes are expected to agree on the same primary."); + // If the nodes haven't seen a primary yet, set primary to nodes[i]'s primary. primary = nodesPrimary; } else if (primary !== nodesPrimary) { print("AwaitNodesAgreeOnPrimary: Retrying because " + nodes[i].name + -- cgit v1.2.1