diff options
Diffstat (limited to 'jstests/noPassthrough/index_shutdown_cmd_secondary.js')
-rw-r--r-- | jstests/noPassthrough/index_shutdown_cmd_secondary.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/jstests/noPassthrough/index_shutdown_cmd_secondary.js b/jstests/noPassthrough/index_shutdown_cmd_secondary.js new file mode 100644 index 00000000000..9928179e5c3 --- /dev/null +++ b/jstests/noPassthrough/index_shutdown_cmd_secondary.js @@ -0,0 +1,59 @@ +/** + * 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})); + +const secondary = rst.getSecondary(); +IndexBuildTest.pauseIndexBuilds(secondary); + +const createIdx = IndexBuildTest.startIndexBuild(primary, coll.getFullName(), {a: 1}); + +const secondaryDB = secondary.getDB(testDB.getName()); +const secondaryColl = secondaryDB.getCollection(coll.getName()); +IndexBuildTest.waitForIndexBuildToStart(secondaryDB, secondaryColl.getName(), 'a_1'); + +// Stop the secondary using the shutdown command without {force: true}. +try { + // assert.commandWorked(secondary.adminCommand({shutdown: 1, force: false})); +} finally { + IndexBuildTest.resumeIndexBuilds(secondary); +} + +IndexBuildTest.waitForIndexBuildToStop(secondaryDB); + +createIdx(); + +IndexBuildTest.assertIndexes(secondaryColl, 2, ['_id_', 'a_1']); + +// This runs the shutdown command without {force: true} with additional handling for expected +// network errors when the command succeeds. +secondaryDB.shutdownServer(); + +rst.stopSet(); +})(); |