summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2016-06-06 16:31:36 -0400
committerEric Milkie <milkie@10gen.com>2016-06-21 15:10:13 -0400
commit1daac14a2bc1cd67edf509075ca2b503bdeebb38 (patch)
tree4481a2fdfb4e5908d34f8319e4e7f63345fa1541
parent56bbe6c5ef73b626b0bf3ed85dd128f03702a62c (diff)
downloadmongo-1daac14a2bc1cd67edf509075ca2b503bdeebb38.tar.gz
SERVER-24424 use ReplSetTest.add and reInitiate (instead of rs.add) to manage third replica set node in initial_sync2.js
-rw-r--r--jstests/replsets/initial_sync2.js104
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();