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.
74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
|
|
|
|
var rt = new ReplSetTest( { name : "replset9tests" , nodes: 1, oplogSize: 300 } );
|
|
|
|
var nodes = rt.startSet();
|
|
rt.initiate();
|
|
var master = rt.getPrimary();
|
|
var bigstring = Array(5000).toString();
|
|
var md = master.getDB( 'd' );
|
|
var mdc = md[ 'c' ];
|
|
|
|
// idea: while cloner is running, update some docs and then immediately remove them.
|
|
// oplog will have ops referencing docs that no longer exist.
|
|
|
|
var doccount = 20000;
|
|
// Avoid empty extent issues
|
|
mdc.insert( { _id:-1, x:"dummy" } );
|
|
|
|
// Make this db big so that cloner takes a while.
|
|
print ("inserting bigstrings");
|
|
var bulk = mdc.initializeUnorderedBulkOp();
|
|
for( i = 0; i < doccount; ++i ) {
|
|
mdc.insert({ _id: i, x: bigstring });
|
|
}
|
|
assert.writeOK(bulk.execute());
|
|
|
|
// Insert some docs to update and remove
|
|
print ("inserting x");
|
|
bulk = mdc.initializeUnorderedBulkOp();
|
|
for( i = doccount; i < doccount*2; ++i ) {
|
|
bulk.insert({ _id: i, bs: bigstring, x: i });
|
|
}
|
|
assert.writeOK(bulk.execute());
|
|
|
|
// add a secondary; start cloning
|
|
var slave = rt.add();
|
|
(function reinitiate() {
|
|
var master = rt.nodes[0];
|
|
var c = master.getDB("local")['system.replset'].findOne();
|
|
var config = rt.getReplSetConfig();
|
|
config.version = c.version + 1;
|
|
var admin = master.getDB("admin");
|
|
var cmd = {};
|
|
var cmdKey = 'replSetReconfig';
|
|
var timeout = timeout || 30000;
|
|
cmd[cmdKey] = config;
|
|
printjson(cmd);
|
|
|
|
assert.soon(function() {
|
|
var result = admin.runCommand(cmd);
|
|
printjson(result);
|
|
return result['ok'] == 1;
|
|
}, "reinitiate replica set", timeout);
|
|
})();
|
|
|
|
|
|
print ("initiation complete!");
|
|
var sc = slave.getDB( 'd' )[ 'c' ];
|
|
slave.setSlaveOk();
|
|
master = rt.getPrimary();
|
|
|
|
print ("updating and deleting documents");
|
|
bulk = master.getDB('d')['c'].initializeUnorderedBulkOp();
|
|
for (i = doccount*4; i > doccount; --i) {
|
|
bulk.find({ _id: i }).update({ $inc: { x: 1 }});
|
|
bulk.find({ _id: i }).remove();
|
|
bulk.insert({ bs: bigstring });
|
|
}
|
|
assert.writeOK(bulk.execute());
|
|
|
|
print ("finished");
|
|
// Wait for replication to catch up.
|
|
rt.awaitReplication(640000);
|