summaryrefslogtreecommitdiff
path: root/jstests/replsets/single_node_set_new_hostname.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/single_node_set_new_hostname.js')
-rw-r--r--jstests/replsets/single_node_set_new_hostname.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/jstests/replsets/single_node_set_new_hostname.js b/jstests/replsets/single_node_set_new_hostname.js
new file mode 100644
index 00000000000..43b21a18998
--- /dev/null
+++ b/jstests/replsets/single_node_set_new_hostname.js
@@ -0,0 +1,50 @@
+/*
+ * When a one-node set is restarted on a different port and reconfigured with the new port, it
+ * should re-elect itself.
+ *
+ * @tags: [
+ * requires_persistence,
+ * ]
+ */
+(function() {
+ "use strict";
+
+ load("jstests/replsets/rslib.js");
+
+ const replTest = new ReplSetTest({nodes: 1});
+ replTest.startSet();
+ replTest.initiate();
+ replTest.getPrimary();
+
+ /*
+ * Prepare to restart the sole node on a new port, it no longer finds itself in the old config.
+ */
+ const config = replTest.getReplSetConfigFromNode(0);
+ const newPort = replTest.getPort(0) + 1;
+ const hostname = config.members[0].host.split(":")[0];
+ const newHostAndPort = `${hostname}:${newPort}`;
+
+ jsTestLog("Restarting the sole node on a new port: " + newPort);
+ replTest.restart(0, {port: newPort});
+ let restartedNode;
+ assert.soonNoExcept(() => {
+ restartedNode = new Mongo(newHostAndPort);
+ return true;
+ }, `Couldn't connect to restarted node "${newHostAndPort}`);
+ waitForState(restartedNode, ReplSetTest.State.REMOVED);
+
+ /*
+ * Update the config to match the node's new port.
+ */
+ jsTestLog("Reconfiguring the set to change the sole node's port.");
+ jsTestLog(`Original config: ${tojson(config)}`);
+ config.version++;
+ config.members[0].host = newHostAndPort;
+ jsTestLog(`New config: ${tojson(config)}`);
+ // Force reconfig since the restarted node is in REMOVED state, not PRIMARY.
+ assert.commandWorked(
+ restartedNode.getDB("admin").runCommand({replSetReconfig: config, force: true}));
+ waitForState(restartedNode, ReplSetTest.State.PRIMARY);
+
+ replTest.stopSet();
+}());