From 9e27006ec7bb48ac70c33811bbd91cbf71a32e48 Mon Sep 17 00:00:00 2001 From: Matthew Russotto Date: Fri, 27 Mar 2020 10:50:55 -0400 Subject: SERVER-46085 Fail initial sync attempt if sync source is in initial sync (cherry picked from commit b70908c4898c4b02d8c70df3f796fa3e8cfe5bdd) --- .../upgrade_replset_creates_initialsyncid.js | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 jstests/multiVersion/upgrade_replset_creates_initialsyncid.js (limited to 'jstests/multiVersion') diff --git a/jstests/multiVersion/upgrade_replset_creates_initialsyncid.js b/jstests/multiVersion/upgrade_replset_creates_initialsyncid.js new file mode 100644 index 00000000000..b34e4ab4c13 --- /dev/null +++ b/jstests/multiVersion/upgrade_replset_creates_initialsyncid.js @@ -0,0 +1,52 @@ +/** + * Tests that upgrading a replset adds the 'local.replset.initialSyncId' document. + */ + +(function() { +"use strict"; + +load('jstests/multiVersion/libs/multi_rs.js'); + +const oldVersion = "last-stable"; + +const nodes = { + n1: {binVersion: oldVersion}, + n2: {binVersion: oldVersion}, + n3: {binVersion: oldVersion, rsConfig: {priority: 0}}, +}; + +const rst = new ReplSetTest({nodes: nodes}); + +rst.startSet(); +rst.initiateWithHighElectionTimeout(); + +const primary = rst.getPrimary(); +const secondary = rst.getSecondary(); +const localprimary = primary.getDB("local"); +const localsecondary = secondary.getDB("local"); +const collName = "replset.initialSyncId"; + +assert.eq(0, localprimary[collName].find().itcount()); +assert.eq(0, localsecondary[collName].find().itcount()); + +jsTest.log("Upgrading replica set..."); + +rst.upgradeSet({binVersion: "latest"}); + +jsTest.log("Replica set upgraded."); + +reconnect(primary); +reconnect(secondary); + +const primarySyncIdData = localprimary[collName].find().toArray(); +assert.eq(1, primarySyncIdData.length); +const primarySyncId = primarySyncIdData[0]; +const secondarySyncIdData = localsecondary[collName].find().toArray(); +assert.eq(1, secondarySyncIdData.length); +const secondarySyncId = secondarySyncIdData[0]; + +// We expect each node to pick a unique "_id". +assert.neq(0, bsonWoCompare(primarySyncId["_id"], secondarySyncId["_id"])); + +rst.stopSet(); +})(); -- cgit v1.2.1