forked from mongodb/mongo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BF-311 rework slaveDelay2.js to be more stable and straight forward
- Loading branch information
matt dannenberg
committed
May 7, 2014
1 parent
e5657a8
commit 167d8d0
Showing
1 changed file
with
49 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,87 +1,77 @@ | ||
/** | ||
* start a slave with a long delay (1 hour) and do some writes while it is initializing. Make sure it | ||
* syncs all of these writes before going into syncDelay. | ||
*/ | ||
load("jstests/replsets/rslib.js"); | ||
|
||
var name = "slaveDelay2"; | ||
var host = getHostName(); | ||
|
||
|
||
var initialize = function() { | ||
var replTest = new ReplSetTest( {name: name, nodes: 1} ); | ||
var replTest = new ReplSetTest( {name: name, nodes: 1} ); | ||
|
||
var nodes = replTest.startSet(); | ||
|
||
replTest.initiate(); | ||
var nodes = replTest.startSet(); | ||
|
||
var master = replTest.getMaster().getDB(name); | ||
replTest.initiate(); | ||
|
||
waitForAllMembers(master); | ||
|
||
return replTest; | ||
var master = replTest.getMaster().getDB(name); | ||
|
||
waitForAllMembers(master); | ||
|
||
return replTest; | ||
}; | ||
|
||
var populate = function(master) { | ||
// insert records | ||
var bulk = master.foo.initializeUnorderedBulkOp(); | ||
for (var i =0; i<1000; i++) { | ||
bulk.insert({ _id: i }); | ||
} | ||
// insert records | ||
var bulk = master.foo.initializeUnorderedBulkOp(); | ||
for (var i =0; i<1000; i++) { | ||
bulk.insert({ _id: i }); | ||
} | ||
|
||
assert.writeOK(bulk.execute()); | ||
assert.writeOK(bulk.execute()); | ||
} | ||
|
||
doTest = function( signal ) { | ||
var replTest = initialize(); | ||
var master = replTest.getMaster().getDB(name); | ||
populate(master); | ||
var admin = master.getSisterDB("admin"); | ||
|
||
/** | ||
* start a slave with a long delay (1 hour) and do some writes while it is | ||
* initializing. Make sure it syncs all of these writes before going into | ||
* syncDelay. | ||
*/ | ||
var conn = MongoRunner.runMongod({port : 31008, dbpath : name + "-sd", useHostname: true, | ||
replSet: name, oplogSize : 128}); | ||
conn.setSlaveOk(); | ||
|
||
config = master.getSisterDB("local").system.replset.findOne(); | ||
config.version++; | ||
config.members.push({_id : 1, host : host+":31008",priority:0, slaveDelay:3600}); | ||
var ok = admin.runCommand({replSetReconfig : config}); | ||
assert.eq(ok.ok,1); | ||
|
||
// do inserts during initial sync | ||
var count = 0; | ||
while (count < 10) { | ||
for (var i = 100*count; i<100*(count+1); i++) { | ||
master.foo.insert({x:i}); | ||
var replTest = initialize(); | ||
var master = replTest.getMaster().getDB(name); | ||
populate(master); | ||
var admin = master.getSisterDB("admin"); | ||
|
||
var conn = MongoRunner.runMongod({port : 31008, dbpath : name + "-sd", useHostname: true, | ||
replSet: name, oplogSize : 128}); | ||
conn.setSlaveOk(); | ||
|
||
config = master.getSisterDB("local").system.replset.findOne(); | ||
config.version++; | ||
config.members.push({_id : 1, host : host+":31008",priority:0, slaveDelay:3600}); | ||
var ok = admin.runCommand({replSetReconfig : config}); | ||
assert.eq(ok.ok,1); | ||
|
||
// do inserts during initial sync | ||
for (var i = 0; i<100; i++) { | ||
master.foo.insert({x:i}); | ||
} | ||
|
||
//check if initial sync is done | ||
var state = master.getSisterDB("admin").runCommand({replSetGetStatus:1}); | ||
printjson(state); | ||
if (state.members[1].state == 2) { | ||
break; | ||
print("NOTHING TO CHECK"); | ||
replTest.stopSet(); | ||
return; | ||
} | ||
|
||
count++; | ||
} | ||
|
||
// throw out last 100 inserts, but make sure the others were applied | ||
if (count == 0) { | ||
print("NOTHING TO CHECK"); | ||
|
||
// if we're here, then 100 docs were inserted before initial sync completed | ||
waitForAllMembers(master, 3 * 60 * 1000); | ||
|
||
// initial sync has completed. ensure slaveDelay did not delay the existence of the docs | ||
for (var i=0; i<100; i++) { | ||
var obj = conn.getDB(name).foo.findOne({x : i}); | ||
assert(obj); | ||
} | ||
|
||
replTest.stopSet(); | ||
return; | ||
} | ||
|
||
// wait a bit for the syncs to be applied | ||
waitForAllMembers(master); | ||
|
||
for (var i=0; i<(100*count); i++) { | ||
var obj = conn.getDB(name).foo.findOne({x : i}); | ||
assert(obj); | ||
} | ||
|
||
replTest.stopSet(); | ||
} | ||
|
||
doTest(15); |