summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/index_shutdown_cmd_secondary.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/noPassthrough/index_shutdown_cmd_secondary.js')
-rw-r--r--jstests/noPassthrough/index_shutdown_cmd_secondary.js59
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();
+})();