diff options
author | Benety Goh <benety@mongodb.com> | 2020-01-17 16:17:39 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-01-17 23:20:37 +0000 |
commit | cf458ca506bebc420abc1a5ce8a763a61d8f17dc (patch) | |
tree | 8beeabe656a2e65366d5b5acb1f4c60115444a91 /jstests/noPassthrough/index_shutdown_cmd_primary.js | |
parent | c552ac4dbdee6add00194effcfc450ce25d70c6a (diff) | |
download | mongo-cf458ca506bebc420abc1a5ce8a763a61d8f17dc.tar.gz |
SERVER-43988 add js tests for running the shutdown command while index builds are in progress
create mode 100644 jstests/noPassthrough/index_shutdown_cmd_primary.js
create mode 100644 jstests/noPassthrough/index_shutdown_cmd_secondary.js
Diffstat (limited to 'jstests/noPassthrough/index_shutdown_cmd_primary.js')
-rw-r--r-- | jstests/noPassthrough/index_shutdown_cmd_primary.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/jstests/noPassthrough/index_shutdown_cmd_primary.js b/jstests/noPassthrough/index_shutdown_cmd_primary.js new file mode 100644 index 00000000000..aff009756bb --- /dev/null +++ b/jstests/noPassthrough/index_shutdown_cmd_primary.js @@ -0,0 +1,63 @@ +/** + * If a user attempts to shut down the server using the shutdown command without the force: true + * option while there is an index build in progress, we should reject the shutdown request. + * @tags: [requires_replication] + */ +(function() { +"use strict"; + +load('jstests/noPassthrough/libs/index_build.js'); + +const rst = new ReplSetTest({ + nodes: [ + {}, + { + // Disallow elections on secondary. + rsConfig: { + priority: 0, + votes: 0, + }, + }, + ] +}); +const nodes = rst.startSet(); +rst.initiate(); + +const primary = rst.getPrimary(); +const testDB = primary.getDB('test'); +const coll = testDB.getCollection('test'); + +assert.commandWorked(coll.insert({a: 1})); + +IndexBuildTest.pauseIndexBuilds(primary); + +const createIdx = IndexBuildTest.startIndexBuild(primary, coll.getFullName(), {a: 1}); +IndexBuildTest.waitForIndexBuildToStart(testDB, coll.getName(), 'a_1'); + +// Stop the primary using the shutdown command without {force: true}. +try { + assert.commandFailedWithCode(primary.adminCommand({shutdown: 1, force: false}), + ErrorCodes.ExceededTimeLimit); +} finally { + IndexBuildTest.resumeIndexBuilds(primary); +} + +IndexBuildTest.waitForIndexBuildToStop(testDB); + +const exitCode = createIdx({checkExitSuccess: false}); +assert.neq(0, exitCode, 'expected shell to exit abnormally due to index build being terminated'); + +if (IndexBuildTest.supportsTwoPhaseIndexBuild(primary)) { + // Two phased index build would resume after stepped down primary node is re-elected. + IndexBuildTest.assertIndexes(coll, 2, ['_id_', 'a_1']); +} else { + // Single-phased ndex build would be aborted by step down triggered by the shutdown command. + IndexBuildTest.assertIndexes(coll, 1, ['_id_']); +} + +// This runs the shutdown command without {force: true} with additional handling for expected +// network errors when the command succeeds. +testDB.shutdownServer(); + +rst.stopSet(); +})(); |