diff options
Diffstat (limited to 'jstests/replsets/slavedelay1.js')
-rw-r--r-- | jstests/replsets/slavedelay1.js | 177 |
1 files changed, 89 insertions, 88 deletions
diff --git a/jstests/replsets/slavedelay1.js b/jstests/replsets/slavedelay1.js index ae97d3373bc..040c47d3e78 100644 --- a/jstests/replsets/slavedelay1.js +++ b/jstests/replsets/slavedelay1.js @@ -1,120 +1,121 @@ load("jstests/replsets/rslib.js"); -doTest = function( signal ) { +doTest = function(signal) { - var name = "slaveDelay"; - var host = getHostName(); + var name = "slaveDelay"; + var host = getHostName(); - var replTest = new ReplSetTest( {name: name, nodes: 3} ); + var replTest = new ReplSetTest({name: name, nodes: 3}); - var nodes = replTest.startSet(); + var nodes = replTest.startSet(); - /* set slaveDelay to 30 seconds */ - var config = replTest.getReplSetConfig(); - config.members[2].priority = 0; - config.members[2].slaveDelay = 30; + /* set slaveDelay to 30 seconds */ + var config = replTest.getReplSetConfig(); + config.members[2].priority = 0; + config.members[2].slaveDelay = 30; - replTest.initiate(config); + replTest.initiate(config); - var master = replTest.getPrimary().getDB(name); - var slaveConns = replTest.liveNodes.slaves; - var slaves = []; - for (var i in slaveConns) { - var d = slaveConns[i].getDB(name); - slaves.push(d); - } + var master = replTest.getPrimary().getDB(name); + var slaveConns = replTest.liveNodes.slaves; + var slaves = []; + for (var i in slaveConns) { + var d = slaveConns[i].getDB(name); + slaves.push(d); + } - waitForAllMembers(master); + waitForAllMembers(master); - // insert a record - assert.writeOK(master.foo.insert({ x: 1 }, { writeConcern: { w: 2 }})); + // insert a record + assert.writeOK(master.foo.insert({x: 1}, {writeConcern: {w: 2}})); - var doc = master.foo.findOne(); - assert.eq(doc.x, 1); + var doc = master.foo.findOne(); + assert.eq(doc.x, 1); - // make sure slave has it - var doc = slaves[0].foo.findOne(); - assert.eq(doc.x, 1); + // make sure slave has it + var doc = slaves[0].foo.findOne(); + assert.eq(doc.x, 1); - // make sure delayed slave doesn't have it - for (var i=0; i<8; i++) { - assert.eq(slaves[1].foo.findOne(), null); - sleep(1000); - } + // make sure delayed slave doesn't have it + for (var i = 0; i < 8; i++) { + assert.eq(slaves[1].foo.findOne(), null); + sleep(1000); + } - // within 30 seconds delayed slave should have it - assert.soon(function() { - var z = slaves[1].foo.findOne(); - return z && z.x == 1; - }); + // within 30 seconds delayed slave should have it + assert.soon(function() { + var z = slaves[1].foo.findOne(); + return z && z.x == 1; + }); + /************* Part 2 *******************/ - /************* Part 2 *******************/ + // how about if we add a new server? will it sync correctly? + conn = replTest.add(); - // how about if we add a new server? will it sync correctly? - conn = replTest.add(); + config = master.getSisterDB("local").system.replset.findOne(); + printjson(config); + config.version++; + config.members.push({ + _id: 3, + host: host + ":" + replTest.ports[replTest.ports.length - 1], + priority: 0, + slaveDelay: 30 + }); - config = master.getSisterDB("local").system.replset.findOne(); - printjson(config); - config.version++; - config.members.push({_id: 3, - host: host+":"+replTest.ports[replTest.ports.length-1], - priority:0, - slaveDelay:30}); + master = reconfig(replTest, config); + master = master.getSisterDB(name); - master = reconfig(replTest, config); - master = master.getSisterDB(name); + // wait for the node to catch up + replTest.awaitReplication(90 * 1000); - // wait for the node to catch up - replTest.awaitReplication(90*1000); + assert.writeOK(master.foo.insert({_id: 123, x: 'foo'}, {writeConcern: {w: 2}})); - assert.writeOK(master.foo.insert({ _id: 123, x: 'foo' }, { writeConcern: { w: 2 }})); + for (var i = 0; i < 8; i++) { + assert.eq(conn.getDB(name).foo.findOne({_id: 123}), null); + sleep(1000); + } - for (var i=0; i<8; i++) { - assert.eq(conn.getDB(name).foo.findOne({_id:123}), null); - sleep(1000); - } + assert.soon(function() { + var z = conn.getDB(name).foo.findOne({_id: 123}); + return z != null && z.x == "foo"; + }); - assert.soon(function() { - var z = conn.getDB(name).foo.findOne({_id:123}); - return z != null && z.x == "foo"; - }); + /************* Part 3 ******************/ - /************* Part 3 ******************/ + print("reconfigure slavedelay"); - print("reconfigure slavedelay"); + config.version++; + config.members[3].slaveDelay = 15; - config.version++; - config.members[3].slaveDelay = 15; + reconfig(replTest, config); + master = replTest.getPrimary().getDB(name); + assert.soon(function() { + return conn.getDB("local").system.replset.findOne().version == config.version; + }); - reconfig(replTest, config); - master = replTest.getPrimary().getDB(name); - assert.soon(function() { - return conn.getDB("local").system.replset.findOne().version == config.version; - }); + // wait for node to become secondary + assert.soon(function() { + var result = conn.getDB("admin").isMaster(); + printjson(result); + return result.secondary; + }); - // wait for node to become secondary - assert.soon(function() { - var result = conn.getDB("admin").isMaster(); - printjson(result); - return result.secondary; - }); + print("testing insert"); + master.foo.insert({_id: 124, "x": "foo"}); + assert(master.foo.findOne({_id: 124}) != null); - print("testing insert"); - master.foo.insert({_id : 124, "x" : "foo"}); - assert(master.foo.findOne({_id:124}) != null); - - for (var i=0; i<10; i++) { - assert.eq(conn.getDB(name).foo.findOne({_id:124}), null); - sleep(1000); - } - - // the node should have the document in 15 seconds (20 for some safety against races) - assert.soon(function() { - return conn.getDB(name).foo.findOne({_id:124}) != null; - }, 10*1000); - - replTest.stopSet(); + for (var i = 0; i < 10; i++) { + assert.eq(conn.getDB(name).foo.findOne({_id: 124}), null); + sleep(1000); + } + + // the node should have the document in 15 seconds (20 for some safety against races) + assert.soon(function() { + return conn.getDB(name).foo.findOne({_id: 124}) != null; + }, 10 * 1000); + + replTest.stopSet(); }; doTest(15); |