summaryrefslogtreecommitdiff
path: root/jstests/replsets/initial_sync2.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/initial_sync2.js')
-rw-r--r--jstests/replsets/initial_sync2.js199
1 files changed, 94 insertions, 105 deletions
diff --git a/jstests/replsets/initial_sync2.js b/jstests/replsets/initial_sync2.js
index 9a913aeafc5..afff58d6336 100644
--- a/jstests/replsets/initial_sync2.js
+++ b/jstests/replsets/initial_sync2.js
@@ -20,136 +20,125 @@ var basename = "jstests_initsync2";
var doTest = function() {
-print("1. Bring up set");
-var replTest = new ReplSetTest( {name: basename, nodes: 2} );
-var conns = replTest.startSet();
-replTest.initiate();
+ print("1. Bring up set");
+ var replTest = new ReplSetTest({name: basename, nodes: 2});
+ var conns = replTest.startSet();
+ replTest.initiate();
-var master = replTest.getPrimary();
-var origMaster = master;
-var foo = master.getDB("foo");
-var admin = master.getDB("admin");
+ var master = replTest.getPrimary();
+ var origMaster = master;
+ var foo = master.getDB("foo");
+ var admin = master.getDB("admin");
-var slave1 = replTest.liveNodes.slaves[0];
-var admin_s1 = slave1.getDB("admin");
-var local_s1 = slave1.getDB("local");
+ var slave1 = replTest.liveNodes.slaves[0];
+ var admin_s1 = slave1.getDB("admin");
+ var local_s1 = slave1.getDB("local");
-print("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());
+ print("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());
+ print("4. Make sure synced");
+ replTest.awaitReplication();
-print("4. Make sure synced");
-replTest.awaitReplication();
+ print("5. Freeze #2");
+ admin_s1.runCommand({replSetFreeze: 999999});
+ print("6. Bring up #3");
+ var hostname = getHostName();
-print("5. Freeze #2");
-admin_s1.runCommand({replSetFreeze:999999});
+ var slave2 = MongoRunner.runMongod({replSet: basename, oplogSize: 2});
+ var local_s2 = slave2.getDB("local");
+ var admin_s2 = slave2.getDB("admin");
-print("6. Bring up #3");
-var hostname = getHostName();
+ var config = replTest.getReplSetConfig();
+ config.version = 2;
-var slave2 = MongoRunner.runMongod({replSet: basename, oplogSize: 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;
-var local_s2 = slave2.getDB("local");
-var admin_s2 = slave2.getDB("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");
-var config = replTest.getReplSetConfig();
-config.version = 2;
+ reconnect(slave1);
+ reconnect(slave2);
-// 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;
+ wait(function() {
+ var config2 = local_s1.system.replset.findOne();
+ var config3 = local_s2.system.replset.findOne();
-// 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");
-
-reconnect(slave1);
-reconnect(slave2);
-
-wait(function() {
- var config2 = local_s1.system.replset.findOne();
- var config3 = local_s2.system.replset.findOne();
-
- printjson(config2);
- printjson(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);
- });
+ printjson(config2);
+ printjson(config3);
+ return config2.version == config.version && (config3 && config3.version == config.version);
+ });
+ admin_s2.runCommand({replSetFreeze: 999999});
-print("7. Kill #1 in the middle of syncing");
-replTest.stop(0);
+ wait(function() {
+ var status = admin_s2.runCommand({replSetGetStatus: 1});
+ printjson(status);
+ return status.members && (status.members[2].state == 3 || status.members[2].state == 2);
+ });
+ print("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);
+ 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;
});
+ print("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;
+ });
+
+ 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);
+ }
+
+ for (var i = 0; i < 10000; i++) {
+ foo.bar.insert({date: new Date(), x: i, str: "all the talk on the market"});
+ }
+
+ print("12. Everyone happy eventually");
+ replTest.awaitReplication(2 * 60 * 1000);
-print("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;
- });
-
-
-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);
-}
-
-for (var i=0; i<10000; i++) {
- foo.bar.insert({date : new Date(), x : i, str : "all the talk on the market"});
-}
-
-
-print("12. Everyone happy eventually");
-replTest.awaitReplication(2 * 60 * 1000);
-
-replTest.stopSet();
+ replTest.stopSet();
};
doTest();