2010-08-29 16:03:17 -04:00
|
|
|
// test initial sync failing
|
|
|
|
|
|
|
|
|
|
// try running as :
|
|
|
|
|
//
|
|
|
|
|
// mongo --nodb two_initsync.js | tee out | grep -v ^m31
|
|
|
|
|
//
|
|
|
|
|
|
2010-08-29 23:54:48 -04:00
|
|
|
var debugging = 0;
|
2010-08-29 16:03:17 -04:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
2010-10-07 09:39:03 -04:00
|
|
|
assert(n < 200, 'tried 200 times, giving up');
|
2010-08-29 16:03:17 -04:00
|
|
|
sleep(1000);
|
|
|
|
|
}
|
2010-08-29 21:27:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
});
|
|
|
|
|
|
2015-11-25 11:20:43 -05:00
|
|
|
var a = replTest.getPrimary().getDB("two");
|
2010-08-29 21:27:59 -04:00
|
|
|
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);
|
2014-03-17 16:40:26 -04:00
|
|
|
replTest.reInitiate(60000);
|
2010-08-29 21:27:59 -04:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
2010-08-29 16:03:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
print("two_initsync.js");
|
|
|
|
|
doTest( 15 );
|