mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
51 lines
2.2 KiB
JavaScript
51 lines
2.2 KiB
JavaScript
/**
|
|
* Verify that a force replica set reconfig skips the config replication check.
|
|
* The force reconfig should succeed even though the previous config has not
|
|
* committed across a majority of nodes.
|
|
*/
|
|
|
|
(function() {
|
|
"use strict";
|
|
load("jstests/replsets/rslib.js");
|
|
|
|
const replTest = new ReplSetTest({nodes: 2, useBridge: true});
|
|
const nodes = replTest.startSet();
|
|
// Initiating with a high election timeout prevents unnecessary elections and also prevents
|
|
// the primary from stepping down if it cannot communicate with the secondary.
|
|
replTest.initiateWithHighElectionTimeout();
|
|
const primary = replTest.getPrimary();
|
|
const secondary = replTest.getSecondary();
|
|
|
|
jsTestLog("Test force reconfig skips config replication against primary");
|
|
// Disconnect the secondary from the primary.
|
|
secondary.disconnect(primary);
|
|
|
|
const C1 = primary.getDB("local").system.replset.findOne();
|
|
assert.commandWorked(primary.getDB("admin").runCommand({replSetReconfig: C1, force: true}));
|
|
const C2 = primary.getDB("local").system.replset.findOne();
|
|
// As this force reconfig will skip the config replication safety check,
|
|
// it should succeed even though C1 has not been replicated to a majority.
|
|
assert.commandWorked(primary.getDB("admin").runCommand({replSetReconfig: C2, force: true}));
|
|
secondary.reconnect(primary);
|
|
|
|
// Wait until the config has propagated to the secondary.
|
|
assert.soon(function() {
|
|
const res = primary.adminCommand({replSetGetStatus: 1});
|
|
return res.members[1].configVersion === replTest.getReplSetConfigFromNode().version;
|
|
});
|
|
|
|
jsTestLog("Test force reconfig skips config replication against secondary");
|
|
// Disconnect the secondary from the primary.
|
|
secondary.disconnect(primary);
|
|
|
|
const C3 = secondary.getDB("local").system.replset.findOne();
|
|
assert.commandWorked(secondary.getDB("admin").runCommand({replSetReconfig: C3, force: true}));
|
|
// As this force reconfig will skip the config replication safety check,
|
|
// it should succeed even though C1 has not been replicated to a majority.
|
|
const C4 = secondary.getDB("local").system.replset.findOne();
|
|
assert.commandWorked(secondary.getDB("admin").runCommand({replSetReconfig: C4, force: true}));
|
|
secondary.reconnect(primary);
|
|
|
|
replTest.awaitNodesAgreeOnConfigVersion();
|
|
replTest.stopSet();
|
|
}()); |