This is just a cleanup work to hide some of the private state of ReplSetTest so it is easier to encapsulate and add new logic. Also enables strict mode.
81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
/**
|
|
* This test is only for the WiredTiger storageEngine
|
|
* Test nojournal option with wiredTiger replset. This test will fail with mmap because
|
|
* unclean shutdowns are not safe. If running without a journal, WT starts up from last
|
|
* valid checkpoint, so should recover.
|
|
*
|
|
* Start a set.
|
|
* Insert data into collection foo
|
|
* fsync secondary member 1
|
|
* Kill -9 secondary member 1
|
|
* Add some more data in a new collection.
|
|
* Restart member 1.
|
|
* Check that it syncs from the last checkpoint and data is there.
|
|
*/
|
|
|
|
// used to parse RAM log file
|
|
var contains = function(logLines, func) {
|
|
var i = logLines.length;
|
|
while (i--) {
|
|
printjson(logLines[i]);
|
|
if (func(logLines[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// This test can only be run if the storageEngine is wiredTiger
|
|
if (jsTest.options().storageEngine && jsTest.options().storageEngine !== "wiredTiger") {
|
|
jsTestLog("Skipping test because storageEngine is not wiredTiger");
|
|
}
|
|
else {
|
|
var name = "wt_nojournal_repl";
|
|
var replTest = new ReplSetTest( {name: name, nodes: 3, oplogSize: 2,
|
|
nodeOptions: {nojournal: "", storageEngine: "wiredTiger",} } );
|
|
var nodes = replTest.startSet();
|
|
|
|
// make sure node 0 becomes primary initially
|
|
var config = replTest.getReplSetConfig();
|
|
config.members[0].priority = 1;
|
|
replTest.initiate(config);
|
|
|
|
var masterDB = replTest.getPrimary().getDB("test");
|
|
var secondary1 = replTest.liveNodes.slaves[0];
|
|
|
|
jsTestLog("add some data to collection foo");
|
|
for (var i=0; i<100; i++) {
|
|
masterDB.foo.insert({x:i});
|
|
}
|
|
replTest.awaitReplication();
|
|
assert.eq(secondary1.getDB("test").foo.count(), 100);
|
|
|
|
jsTestLog("run fsync on the secondary to ensure it remains after restart")
|
|
assert.commandWorked(secondary1.getDB("admin").runCommand({fsync : 1}));
|
|
|
|
jsTestLog("kill -9 secondary 1");
|
|
MongoRunner.stopMongod(secondary1.port, /*signal*/ 9);
|
|
|
|
jsTestLog("add some data to a new collection bar");
|
|
for (var i=0; i<100; i++) {
|
|
masterDB.bar.insert({x:i});
|
|
}
|
|
|
|
jsTestLog("restart secondary 1 and let it catch up");
|
|
secondary1 = replTest.restart(1);
|
|
replTest.awaitReplication();
|
|
|
|
// Test that the restarted secondary did NOT do an initial sync by checking the log
|
|
var res = secondary1.adminCommand({getLog:"global"});
|
|
assert(!contains(res.log, function(v) {
|
|
return v.indexOf("initial sync") != -1;
|
|
}));
|
|
|
|
jsTestLog("check data is in both collections");
|
|
assert.eq(secondary1.getDB("test").foo.count(), 100);
|
|
assert.eq(secondary1.getDB("test").bar.count(), 100);
|
|
|
|
jsTestLog("Success!");
|
|
replTest.stopSet();
|
|
}
|