mirror of https://github.com/mongodb/mongo
57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
/**
|
|
* Tests that the freezeTimeout election reason counter in serverStatus is incremented in a single
|
|
* node replica set both after a freeze timeout and after a stepdown timeout expires.
|
|
*/
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
import {verifyServerStatusElectionReasonCounterChange} from "jstests/replsets/libs/election_metrics.js";
|
|
|
|
jsTestLog("1: initialize single node replica set");
|
|
const replSet = new ReplSetTest({name: "freeze_timeout", nodes: 1});
|
|
replSet.startSet();
|
|
|
|
// Increase the election timeout to 24 hours so that elections are not called due to election
|
|
// timeouts, since we need them to be called for the kSingleNodePromptElection election reason.
|
|
replSet.initiate();
|
|
|
|
let primary = replSet.getPrimary();
|
|
const initialPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
|
|
|
|
jsTestLog("2: step down primary");
|
|
assert.commandWorked(primary.getDB("admin").runCommand({replSetStepDown: 30, force: 1}));
|
|
|
|
jsTestLog("3: wait for stepped down node to become primary again");
|
|
primary = replSet.getPrimary();
|
|
|
|
// Check that both the 'called' and 'successful' fields of the 'freezeTimeout' election reason
|
|
// counter have been incremented in serverStatus. When a stepdown timeout expires in a single
|
|
// node replica set, an election is called for the same reason as is used when a freeze timeout
|
|
// expires.
|
|
let newPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
|
|
verifyServerStatusElectionReasonCounterChange(
|
|
initialPrimaryStatus.electionMetrics,
|
|
newPrimaryStatus.electionMetrics,
|
|
"freezeTimeout",
|
|
1,
|
|
);
|
|
|
|
jsTestLog("4: step down primary again");
|
|
assert.commandWorked(primary.getDB("admin").runCommand({replSetStepDown: 30, force: 1}));
|
|
|
|
jsTestLog("5: unfreeze stepped down primary");
|
|
primary.getDB("admin").runCommand({replSetFreeze: 0});
|
|
|
|
jsTestLog("6: wait for unfrozen node to become primary again");
|
|
primary = replSet.getPrimary();
|
|
|
|
// Check that both the 'called' and 'successful' fields of the 'freezeTimeout' election reason
|
|
// counter have been incremented again in serverStatus.
|
|
newPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
|
|
verifyServerStatusElectionReasonCounterChange(
|
|
initialPrimaryStatus.electionMetrics,
|
|
newPrimaryStatus.electionMetrics,
|
|
"freezeTimeout",
|
|
2,
|
|
);
|
|
|
|
replSet.stopSet();
|