diff options
author | Benety Goh <benety@mongodb.com> | 2016-06-06 16:31:36 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-06-07 11:16:44 -0400 |
commit | 0b75900079164edfd72ae3c145065adaf4267086 (patch) | |
tree | d107a2eec4070c2accca24a8a01683ddd3ef1ec9 /jstests/replsets/initial_sync2.js | |
parent | f2f012ccc781b1d3978cb5e425d6747a0b204b04 (diff) | |
download | mongo-0b75900079164edfd72ae3c145065adaf4267086.tar.gz |
SERVER-24424 use ReplSetTest.add and reInitiate (instead of rs.add) to manage third replica set node in initial_sync2.js
Diffstat (limited to 'jstests/replsets/initial_sync2.js')
-rw-r--r-- | jstests/replsets/initial_sync2.js | 104 |
1 files changed, 32 insertions, 72 deletions
diff --git a/jstests/replsets/initial_sync2.js b/jstests/replsets/initial_sync2.js index afff58d6336..ec6ef445954 100644 --- a/jstests/replsets/initial_sync2.js +++ b/jstests/replsets/initial_sync2.js @@ -11,7 +11,7 @@ * 8. Check that #3 makes it into secondary state * 9. Bring #1 back up * 10. Initial sync should succeed - * 11. Insert some stuff + * 11. Ensure #1 becomes primary * 12. Everyone happy eventually */ @@ -20,13 +20,14 @@ var basename = "jstests_initsync2"; var doTest = function() { - print("1. Bring up set"); - var replTest = new ReplSetTest({name: basename, nodes: 2}); + jsTest.log("1. Bring up set"); + var replTest = new ReplSetTest({name: basename, nodes: [{rsConfig: {priority: 2}}, {}]}); var conns = replTest.startSet(); replTest.initiate(); + replTest.waitForState(replTest.nodes[0], ReplSetTest.State.PRIMARY, 5 * 60 * 1000); + var master = replTest.getPrimary(); - var origMaster = master; var foo = master.getDB("foo"); var admin = master.getDB("admin"); @@ -34,108 +35,67 @@ var doTest = function() { var admin_s1 = slave1.getDB("admin"); var local_s1 = slave1.getDB("local"); - print("2. Insert some data"); + jsTest.log("2. Insert some data"); for (var i = 0; i < 10000; i++) { foo.bar.insert({date: new Date(), x: i, str: "all the talk on the market"}); } - print("total in foo: " + foo.bar.count()); + jsTest.log("total in foo: " + foo.bar.count()); - print("4. Make sure synced"); + jsTest.log("4. Make sure synced"); replTest.awaitReplication(); - print("5. Freeze #2"); + jsTest.log("5. Freeze #2"); admin_s1.runCommand({replSetFreeze: 999999}); - print("6. Bring up #3"); - var hostname = getHostName(); + jsTest.log("6. Bring up #3"); - var slave2 = MongoRunner.runMongod({replSet: basename, oplogSize: 2}); + var slave2 = replTest.add(); + slave2.setSlaveOk(); var local_s2 = slave2.getDB("local"); var admin_s2 = slave2.getDB("admin"); - var config = replTest.getReplSetConfig(); - config.version = 2; - - // Add #3 using rs.add() configuration document. - // Since 'db' currently points to slave2, reset 'db' to admin db on master before running - // rs.add(). - db = admin; - - // If _id is not provided, rs.add() will generate _id for #3 based on existing members' _ids. - assert.commandWorked(rs.add({host: hostname + ":" + slave2.port}), - "failed to add #3 to replica set"); + replTest.reInitiate(); reconnect(slave1); reconnect(slave2); + var config = replTest.getReplSetConfigFromNode(); + jsTest.log('#1 config = ' + tojson(config)); wait(function() { var config2 = local_s1.system.replset.findOne(); var config3 = local_s2.system.replset.findOne(); - printjson(config2); - printjson(config3); + jsTest.log('#2 config = ' + tojson(config2)); + jsTest.log('#3 config = ' + tojson(config3)); return config2.version == config.version && (config3 && config3.version == config.version); }); admin_s2.runCommand({replSetFreeze: 999999}); - wait(function() { - var status = admin_s2.runCommand({replSetGetStatus: 1}); - printjson(status); - return status.members && (status.members[2].state == 3 || status.members[2].state == 2); - }); + replTest.waitForState( + replTest.nodes[2], [ReplSetTest.State.SECONDARY, ReplSetTest.State.RECOVERING], 60 * 1000); - print("7. Kill #1 in the middle of syncing"); + jsTest.log("7. Kill #1 in the middle of syncing"); replTest.stop(0); - print("8. Check that #3 makes it into secondary state"); - wait(function() { - var status = admin_s2.runCommand({replSetGetStatus: 1}); - occasionally(function() { - printjson(status); - }, 10); - if (status.members[2].state == 2 || status.members[2].state == 1) { - return true; - } - return false; - }); + jsTest.log("8. Check that #3 makes it into secondary state"); + replTest.waitForState( + replTest.nodes[2], [ReplSetTest.State.PRIMARY, ReplSetTest.State.SECONDARY], 60 * 1000); - print("9. Bring #1 back up"); + jsTest.log("9. Bring #1 back up"); replTest.start(0, {}, true); - reconnect(master); - wait(function() { - var status = admin.runCommand({replSetGetStatus: 1}); - printjson(status); - return status.members && (status.members[0].state == 1 || status.members[0].state == 2); - }); - - print("10. Initial sync should succeed"); - wait(function() { - var status = admin_s2.runCommand({replSetGetStatus: 1}); - printjson(status); - return status.members && status.members[2].state == 2 || status.members[2].state == 1; - }); + replTest.waitForState( + replTest.nodes[0], [ReplSetTest.State.PRIMARY, ReplSetTest.State.SECONDARY], 60 * 1000); - print("11. Insert some stuff"); - // ReplSetTest doesn't find master correctly unless all nodes are defined by - // ReplSetTest - for (var i = 0; i < 30; i++) { - var result = admin.runCommand({isMaster: 1}); - if (result.ismaster) { - break; - } else if (result.primary) { - master = connect(result.primary + "/admin").getMongo(); - break; - } - sleep(1000); - } + jsTest.log("10. Initial sync should succeed"); + replTest.waitForState( + replTest.nodes[2], [ReplSetTest.State.PRIMARY, ReplSetTest.State.SECONDARY], 60 * 1000); - for (var i = 0; i < 10000; i++) { - foo.bar.insert({date: new Date(), x: i, str: "all the talk on the market"}); - } + jsTest.log("11. Ensure #1 becomes primary"); + replTest.waitForState(replTest.nodes[0], ReplSetTest.State.PRIMARY, 60 * 1000); - print("12. Everyone happy eventually"); + jsTest.log("12. Everyone happy eventually"); replTest.awaitReplication(2 * 60 * 1000); replTest.stopSet(); |