// test initial sync failing // try running as : // // mongo --nodb two_initsync.js | tee out | grep -v ^m31 // var debugging = 0; function pause(s) { print(s); while (debugging) { sleep(3000); print(s); } } function deb(obj) { if( debugging ) { print("\n\n\n" + obj + "\n\n"); } } w = 0; function wait(f) { w++; var n = 0; while (!f()) { if( n % 4 == 0 ) print("twoinitsync waiting " + w); if (++n == 4) { print("" + f); } assert(n < 200, 'tried 200 times, giving up'); sleep(1000); } } doTest = function (signal) { var replTest = new ReplSetTest({ name: 'testSet', nodes: 0 }); var first = replTest.add(); // Initiate replica set assert.soon(function () { var res = first.getDB("admin").runCommand({ replSetInitiate: null }); return res['ok'] == 1; }); // Get status assert.soon(function () { var result = first.getDB("admin").runCommand({ replSetGetStatus: true }); return result['ok'] == 1; }); var a = replTest.getMaster().getDB("two"); for (var i = 0; i < 20000; i++) a.coll.insert({ i: i, s: "a b" }); // Start a second node var second = replTest.add(); // Add the second node. // This runs the equivalent of rs.add(newNode); replTest.reInitiate(60000); var b = second.getDB("admin"); // attempt to interfere with the initial sync b._adminCommand({ replSetTest: 1, forceInitialSyncFailure: 1 }); // wait(function () { return a._adminCommand("replSetGetStatus").members.length == 2; }); wait(function () { return b.isMaster().secondary || b.isMaster().ismaster; }); print("b.isMaster:"); printjson(b.isMaster()); second.setSlaveOk(); print("b.isMaster:"); printjson(b.isMaster()); wait(function () { var c = b.getSisterDB("two").coll.count(); print(c); return c == 20000; }); print("two_initsync.js SUCCESS"); replTest.stopSet(signal); } print("two_initsync.js"); doTest( 15 );