summaryrefslogtreecommitdiff
path: root/jstests/replsets/maintenance.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/maintenance.js')
-rw-r--r--jstests/replsets/maintenance.js65
1 files changed, 57 insertions, 8 deletions
diff --git a/jstests/replsets/maintenance.js b/jstests/replsets/maintenance.js
index 5b068cd3d8e..65b1ccfd851 100644
--- a/jstests/replsets/maintenance.js
+++ b/jstests/replsets/maintenance.js
@@ -1,6 +1,6 @@
-var replTest = new ReplSetTest( {name: 'unicomplex', nodes: 3} );
+var replTest = new ReplSetTest( {name: 'unicomplex', nodes: 2} );
var conns = replTest.startSet();
replTest.initiate();
@@ -12,21 +12,70 @@ for (i=0;i<1000; i++) { master.getDB("bar").foo.update({y:i},{$push :{foo : "bar
replTest.awaitReplication();
-assert.soon(function() { return conns[2].getDB("admin").isMaster().secondary; });
+assert.soon(function() { return conns[1].getDB("admin").isMaster().secondary; });
-join = startParallelShell( "db.getSisterDB('bar').runCommand({compact : 'foo'});", replTest.ports[2] );
-
-print("check secondary goes to recovering");
-assert.soon(function() { return !conns[2].getDB("admin").isMaster().secondary; });
+join = startParallelShell( "db.getSisterDB('bar').runCommand({compact : 'foo'});", replTest.ports[1] );
print("joining");
join();
print("check secondary becomes a secondary again");
+var secondarySoon = function() {
+ var x = 0;
+ assert.soon(function() {
+ var im = conns[1].getDB("admin").isMaster();
+ if (x++ % 5 == 0) printjson(im);
+ return im.secondary;
+ });
+};
+
+secondarySoon();
+
+print("make sure compact works on a secondary (SERVER-3923)");
+master.getDB("foo").bar.drop();
+replTest.awaitReplication();
+var result = conns[1].getDB("foo").runCommand({compact : "bar"});
+assert.eq(result.ok, 0, tojson(result));
+
+secondarySoon();
+
+print("use replSetMaintenance command to go in/out of maintence mode");
+
+print("primary cannot go into maintence mode");
+result = master.getDB("admin").runCommand({replSetMaintenance : 1});
+assert.eq(result.ok, 0, tojson(result));
+
+print("check getMore works on a secondary, not on a recovering node");
+var cursor = conns[1].getDB("bar").foo.find();
+for (var i=0; i<50; i++) {
+ cursor.next();
+}
+
+print("secondary can");
+result = conns[1].getDB("admin").runCommand({replSetMaintenance : 1});
+assert.eq(result.ok, 1, tojson(result));
+
+print("make sure secondary goes into recovering");
var x = 0;
assert.soon(function() {
- var im = conns[2].getDB("admin").isMaster();
+ var im = conns[1].getDB("admin").isMaster();
if (x++ % 5 == 0) printjson(im);
- return im.secondary;
+ return !im.secondary && !im.ismaster;
});
+print("now getmore shouldn't work");
+lastDoc = null;
+while (cursor.hasNext()) {
+ lastDoc = cursor.next();
+}
+
+print("the shell is currently stupid and won't throw once it's returned any query results");
+printjson(lastDoc);
+assert("$err" in lastDoc);
+assert.eq(lastDoc.code, 13436);
+
+result = conns[1].getDB("admin").runCommand({replSetMaintenance : 0});
+assert.eq(result.ok, 1, tojson(result));
+
+secondarySoon();
+