summaryrefslogtreecommitdiff
path: root/jstests/replsets/drain.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/drain.js')
-rw-r--r--jstests/replsets/drain.js170
1 files changed, 85 insertions, 85 deletions
diff --git a/jstests/replsets/drain.js b/jstests/replsets/drain.js
index 41e8d475f83..e1d008aebc0 100644
--- a/jstests/replsets/drain.js
+++ b/jstests/replsets/drain.js
@@ -10,101 +10,101 @@
// 8. Ensure the ops in queue are applied and that the PRIMARY begins to accept writes as usual.
(function() {
- "use strict";
- var replSet = new ReplSetTest({name: 'testSet', nodes: 3});
- var nodes = replSet.nodeList();
- replSet.startSet();
- replSet.initiate({
- "_id": "testSet",
- "members": [
- {"_id": 0, "host": nodes[0]},
- {"_id": 1, "host": nodes[1]},
- {"_id": 2, "host": nodes[2], "arbiterOnly": true}
- ],
- // No primary catch-up so we focus on the drain mode.
- "settings": {"catchUpTimeoutMillis": 0},
- });
+"use strict";
+var replSet = new ReplSetTest({name: 'testSet', nodes: 3});
+var nodes = replSet.nodeList();
+replSet.startSet();
+replSet.initiate({
+ "_id": "testSet",
+ "members": [
+ {"_id": 0, "host": nodes[0]},
+ {"_id": 1, "host": nodes[1]},
+ {"_id": 2, "host": nodes[2], "arbiterOnly": true}
+ ],
+ // No primary catch-up so we focus on the drain mode.
+ "settings": {"catchUpTimeoutMillis": 0},
+});
- var primary = replSet.getPrimary();
- var secondary = replSet.getSecondary();
+var primary = replSet.getPrimary();
+var secondary = replSet.getSecondary();
- // Do an initial insert to prevent the secondary from going into recovery
- var numDocuments = 20;
- var bulk = primary.getDB("foo").foo.initializeUnorderedBulkOp();
- var bigString = Array(1024 * 1024).toString();
- assert.writeOK(primary.getDB("foo").foo.insert({big: bigString}));
- replSet.awaitReplication();
- assert.commandWorked(secondary.getDB("admin").runCommand(
- {configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}),
- 'failed to enable fail point on secondary');
+// Do an initial insert to prevent the secondary from going into recovery
+var numDocuments = 20;
+var bulk = primary.getDB("foo").foo.initializeUnorderedBulkOp();
+var bigString = Array(1024 * 1024).toString();
+assert.writeOK(primary.getDB("foo").foo.insert({big: bigString}));
+replSet.awaitReplication();
+assert.commandWorked(
+ secondary.getDB("admin").runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'alwaysOn'}),
+ 'failed to enable fail point on secondary');
- var bufferCountBefore = secondary.getDB('foo').serverStatus().metrics.repl.buffer.count;
- for (var i = 1; i < numDocuments; ++i) {
- bulk.insert({big: bigString});
- }
- assert.writeOK(bulk.execute());
- jsTestLog('Number of documents inserted into collection on primary: ' + numDocuments);
- assert.eq(numDocuments, primary.getDB("foo").foo.find().itcount());
+var bufferCountBefore = secondary.getDB('foo').serverStatus().metrics.repl.buffer.count;
+for (var i = 1; i < numDocuments; ++i) {
+ bulk.insert({big: bigString});
+}
+assert.writeOK(bulk.execute());
+jsTestLog('Number of documents inserted into collection on primary: ' + numDocuments);
+assert.eq(numDocuments, primary.getDB("foo").foo.find().itcount());
- assert.soon(function() {
- var serverStatus = secondary.getDB('foo').serverStatus();
- var bufferCount = serverStatus.metrics.repl.buffer.count;
- var bufferCountChange = bufferCount - bufferCountBefore;
- jsTestLog('Number of operations buffered on secondary since stopping applier: ' +
- bufferCountChange);
- return bufferCountChange >= numDocuments - 1;
- }, 'secondary did not buffer operations for new inserts on primary', 300000, 1000);
+assert.soon(function() {
+ var serverStatus = secondary.getDB('foo').serverStatus();
+ var bufferCount = serverStatus.metrics.repl.buffer.count;
+ var bufferCountChange = bufferCount - bufferCountBefore;
+ jsTestLog('Number of operations buffered on secondary since stopping applier: ' +
+ bufferCountChange);
+ return bufferCountChange >= numDocuments - 1;
+}, 'secondary did not buffer operations for new inserts on primary', 300000, 1000);
- // Kill primary; secondary will enter drain mode to catch up
- primary.getDB("admin").shutdownServer({force: true});
+// Kill primary; secondary will enter drain mode to catch up
+primary.getDB("admin").shutdownServer({force: true});
- replSet.waitForState(secondary, ReplSetTest.State.PRIMARY);
+replSet.waitForState(secondary, ReplSetTest.State.PRIMARY);
- // Ensure new primary is not yet writable
- jsTestLog('New primary should not be writable yet');
- assert.writeError(secondary.getDB("foo").flag.insert({sentinel: 2}));
- assert(!secondary.getDB("admin").runCommand({"isMaster": 1}).ismaster);
+// Ensure new primary is not yet writable
+jsTestLog('New primary should not be writable yet');
+assert.writeError(secondary.getDB("foo").flag.insert({sentinel: 2}));
+assert(!secondary.getDB("admin").runCommand({"isMaster": 1}).ismaster);
- // Ensure new primary is not yet readable without slaveOk bit.
- secondary.slaveOk = false;
- jsTestLog('New primary should not be readable yet, without slaveOk bit');
- var res = secondary.getDB("foo").runCommand({find: "foo"});
- assert.commandFailed(res);
- assert.eq(ErrorCodes.NotMasterNoSlaveOk,
- res.code,
- "find failed with unexpected error code: " + tojson(res));
- // Nor should it be readable with the slaveOk bit.
- secondary.slaveOk = true;
- assert.commandWorked(secondary.getDB("foo").runCommand({find: "foo"}));
+// Ensure new primary is not yet readable without slaveOk bit.
+secondary.slaveOk = false;
+jsTestLog('New primary should not be readable yet, without slaveOk bit');
+var res = secondary.getDB("foo").runCommand({find: "foo"});
+assert.commandFailed(res);
+assert.eq(ErrorCodes.NotMasterNoSlaveOk,
+ res.code,
+ "find failed with unexpected error code: " + tojson(res));
+// Nor should it be readable with the slaveOk bit.
+secondary.slaveOk = true;
+assert.commandWorked(secondary.getDB("foo").runCommand({find: "foo"}));
- assert.commandFailedWithCode(
- secondary.adminCommand({
- replSetTest: 1,
- waitForDrainFinish: 5000,
- }),
- ErrorCodes.ExceededTimeLimit,
- 'replSetTest waitForDrainFinish should time out when draining is not allowed to complete');
+assert.commandFailedWithCode(
+ secondary.adminCommand({
+ replSetTest: 1,
+ waitForDrainFinish: 5000,
+ }),
+ ErrorCodes.ExceededTimeLimit,
+ 'replSetTest waitForDrainFinish should time out when draining is not allowed to complete');
- // Allow draining to complete
- jsTestLog('Disabling fail point on new primary to allow draining to complete');
- assert.commandWorked(
- secondary.getDB("admin").runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}),
- 'failed to disable fail point on new primary');
- primary = replSet.getPrimary();
+// Allow draining to complete
+jsTestLog('Disabling fail point on new primary to allow draining to complete');
+assert.commandWorked(
+ secondary.getDB("admin").runCommand({configureFailPoint: 'rsSyncApplyStop', mode: 'off'}),
+ 'failed to disable fail point on new primary');
+primary = replSet.getPrimary();
- assert.commandWorked(
- secondary.adminCommand({
- replSetTest: 1,
- waitForDrainFinish: 30000,
- }),
- 'replSetTest waitForDrainFinish should work when draining is allowed to complete');
+assert.commandWorked(
+ secondary.adminCommand({
+ replSetTest: 1,
+ waitForDrainFinish: 30000,
+ }),
+ 'replSetTest waitForDrainFinish should work when draining is allowed to complete');
- // Ensure new primary is writable
- jsTestLog('New primary should be writable after draining is complete');
- assert.writeOK(primary.getDB("foo").flag.insert({sentinel: 1}));
- // Check for at least two entries. There was one prior to freezing op application on the
- // secondary and we cannot guarantee all writes reached the secondary's op queue prior to
- // shutting down the original primary.
- assert.gte(primary.getDB("foo").foo.find().itcount(), 2);
- replSet.stopSet();
+// Ensure new primary is writable
+jsTestLog('New primary should be writable after draining is complete');
+assert.writeOK(primary.getDB("foo").flag.insert({sentinel: 1}));
+// Check for at least two entries. There was one prior to freezing op application on the
+// secondary and we cannot guarantee all writes reached the secondary's op queue prior to
+// shutting down the original primary.
+assert.gte(primary.getDB("foo").foo.find().itcount(), 2);
+replSet.stopSet();
})();