summaryrefslogtreecommitdiff
path: root/jstests/replsets
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2016-05-24 10:20:44 -0400
committerJudah Schvimer <judah@mongodb.com>2016-05-24 10:21:25 -0400
commit60f64e0b438d268a07a517203990cb65a7ca5f60 (patch)
treeb48b21513a907424e4692b3e4fcdb67e35f03735 /jstests/replsets
parentdbbb77673cc252517aa1222fed1981c5a12e89cd (diff)
downloadmongo-60f64e0b438d268a07a517203990cb65a7ca5f60.tar.gz
SERVER-24254 Wait for nodes to agree on primary in maxSyncSourceLagSecs.js and chaining_removal.js
Diffstat (limited to 'jstests/replsets')
-rw-r--r--jstests/replsets/chaining_removal.js1
-rw-r--r--jstests/replsets/maxSyncSourceLagSecs.js32
2 files changed, 25 insertions, 8 deletions
diff --git a/jstests/replsets/chaining_removal.js b/jstests/replsets/chaining_removal.js
index a84d65235c5..dbc80148745 100644
--- a/jstests/replsets/chaining_removal.js
+++ b/jstests/replsets/chaining_removal.js
@@ -20,6 +20,7 @@
],
});
replTest.waitForState(nodes[0], ReplSetTest.State.PRIMARY, 60 * 1000);
+ replTest.awaitNodesAgreeOnPrimary();
var primary = replTest.getPrimary();
replTest.awaitReplication();
diff --git a/jstests/replsets/maxSyncSourceLagSecs.js b/jstests/replsets/maxSyncSourceLagSecs.js
index 0e7fe04355b..6bcec4a3f71 100644
--- a/jstests/replsets/maxSyncSourceLagSecs.js
+++ b/jstests/replsets/maxSyncSourceLagSecs.js
@@ -21,36 +21,52 @@
{"_id": 2, "host": nodes[2], priority: 0}
],
});
+ replTest.awaitNodesAgreeOnPrimary();
var master = replTest.getPrimary();
+ var slaves = replTest.liveNodes.slaves;
+ assert.commandWorked(slaves[0].getDB("admin").runCommand({replSetSyncFrom: master.name}));
+ assert.commandWorked(slaves[1].getDB("admin").runCommand({replSetSyncFrom: master.name}));
master.getDB("foo").bar.save({a: 1});
replTest.awaitReplication();
- var slaves = replTest.liveNodes.slaves;
// need to put at least maxSyncSourceLagSecs b/w first op and subsequent ops
// so that the shouldChangeSyncSource logic goes into effect
sleep(4000);
jsTestLog("Setting sync target of slave 2 to slave 1");
- assert.commandWorked(slaves[1].getDB("admin").runCommand({replSetSyncFrom: slaves[0].name}));
assert.soon(function() {
- var res = slaves[1].getDB("admin").runCommand({"replSetGetStatus": 1});
- return res.syncingTo === slaves[0].name;
- }, "sync target not changed to other slave");
+ // We do a write each time and have this in a try...catch block due to the fallout of
+ // SERVER-24114. If that timeout occurs, then we search for another sync source, however we
+ // will not find one unless more writes have come in. Additionally, it is possible that
+ // slaves[1] will switch to sync from slaves[0] after slaves[1] replicates a write from
+ // the primary but before slaves[0] replicates it. slaves[1] will then have to roll back
+ // which would cause a network error.
+ try {
+ slaves[1].getDB("admin").runCommand({replSetSyncFrom: slaves[0].name});
+ var res = slaves[1].getDB("admin").runCommand({"replSetGetStatus": 1});
+ master.getDB("foo").bar.insert({a: 1});
+ return res.syncingTo === slaves[0].name;
+ } catch (e) {
+ print("Exception in assert.soon, retrying: " + e);
+ return false;
+ }
+ }, "sync target not changed to other slave", 100 * 1000, 2 * 1000);
printjson(replTest.status());
jsTestLog("Lock slave 1 and add some docs. Force sync target for slave 2 to change to primary");
assert.commandWorked(slaves[0].getDB("admin").runCommand({fsync: 1, lock: 1}));
- master.getDB("foo").bar.save({a: 2});
assert.soon(function() {
+ master.getDB("foo").bar.insert({a: 2});
var res = slaves[1].getDB("admin").runCommand({"replSetGetStatus": 1});
return res.syncingTo === master.name;
- }, "sync target not changed back to primary");
+ }, "sync target not changed back to primary", 100 * 1000, 2 * 1000);
printjson(replTest.status());
assert.soon(function() {
- return (slaves[1].getDB("foo").bar.count() === 2);
+ return (slaves[1].getDB("foo").bar.count({a: 1}) > 0 &&
+ slaves[1].getDB("foo").bar.count({a: 2}) > 0);
}, "slave should have caught up after syncing to primary.");
assert.commandWorked(slaves[0].getDB("admin").fsyncUnlock());