summaryrefslogtreecommitdiff
path: root/jstests/replsets/maxSyncSourceLagSecs.js
diff options
context:
space:
mode:
authorDan Pasette <dan@10gen.com>2014-02-26 17:22:07 -0800
committerDan Pasette <dan@mongodb.com>2014-03-05 08:42:18 -0500
commita2ebcca174d9df0c1454119057911ef7eddfd0ec (patch)
tree61cd0ff138a80fb70e02cfb4e3a8384a13a074f6 /jstests/replsets/maxSyncSourceLagSecs.js
parent52fbcfdd6d40b5d53210a11fa3e2596a34c84fe7 (diff)
downloadmongo-a2ebcca174d9df0c1454119057911ef7eddfd0ec.tar.gz
SERVER-12901 make maxSyncSourceLagSecs configurable
Diffstat (limited to 'jstests/replsets/maxSyncSourceLagSecs.js')
-rw-r--r--jstests/replsets/maxSyncSourceLagSecs.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/jstests/replsets/maxSyncSourceLagSecs.js b/jstests/replsets/maxSyncSourceLagSecs.js
new file mode 100644
index 00000000000..748e1e281f3
--- /dev/null
+++ b/jstests/replsets/maxSyncSourceLagSecs.js
@@ -0,0 +1,39 @@
+// Test that setting maxSyncSourceLagSecs causes the set to change sync target
+var replTest = new ReplSetTest({ nodes: 3, oplogSize: 5,
+ nodeOptions: {setParameter: "maxSyncSourceLagSecs=1"}});
+replTest.startSet();
+replTest.initiate();
+
+var master = replTest.getMaster();
+var docNum = 100;
+for (i=0; i<docNum; i++) {
+ master.getDB("foo").bar.save({a: i});
+}
+replTest.awaitReplication();
+var slaves = replTest.liveNodes.slaves;
+
+jsTestLog("Setting sync target of slave 2 to slave 1");
+assert.commandWorked(slaves[1].getDB("admin").runCommand({replSetSyncFrom: slaves[0].name}));
+assert.soon(function() {
+ return (replTest.status().members[2].syncingTo == slaves[0].name);
+ }, "sync target not changed to other slave");
+printjson(replTest.status);
+
+jsTestLog("Lock slave 1 and add some docs. Should force sync target for slave 2 to change to primary");
+assert.commandWorked(slaves[0].getDB("admin").runCommand({fsync:1, lock: 1}));
+var docNum = 100;
+for (var i=0; i<docNum; i++) {
+ master.getDB("foo").bar.save({a: i});
+}
+
+assert.soon(function() {
+ return (replTest.status().members[2].syncingTo == master.name);
+ }, "sync target not changed back to primary");
+printjson(replTest.status);
+
+assert.soon(function() {
+ return (slaves[1].getDB("foo").bar.count() == 200);
+ }, "slave should have caught up after syncing to primary.");
+
+assert.commandWorked(slaves[0].getDB("admin").$cmd.sys.unlock.findOne());
+replTest.stopSet();