summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
Diffstat (limited to 'jstests')
-rw-r--r--jstests/noPassthrough/restart_node_with_bridge.js57
-rw-r--r--jstests/replsets/libs/rollback_test.js2
-rw-r--r--jstests/replsets/libs/rollback_test_deluxe.js2
3 files changed, 51 insertions, 10 deletions
diff --git a/jstests/noPassthrough/restart_node_with_bridge.js b/jstests/noPassthrough/restart_node_with_bridge.js
index 1774ce50167..004b595a208 100644
--- a/jstests/noPassthrough/restart_node_with_bridge.js
+++ b/jstests/noPassthrough/restart_node_with_bridge.js
@@ -1,23 +1,64 @@
/**
- * Tests that a node can be successfully restarted when the bridge is enabled.
+ * Tests that a node can be successfully restarted when the bridge is enabled. Also verifies the
+ * bridge configuration is left intact even after the node is restarted.
+ *
* @tags: [requires_persistence, requires_replication]
*/
(function() {
"use strict";
- const name = "restart_node_with_bridge";
- const rst = new ReplSetTest({name: name, nodes: 1, useBridge: true});
+ load("jstests/replsets/rslib.js"); // for reconnect
+
+ const rst = new ReplSetTest({
+ nodes: [{}, {rsConfig: {priority: 0, votes: 0}}],
+ useBridge: true,
+ });
+
rst.startSet();
rst.initiate();
rst.awaitNodesAgreeOnPrimary();
- let primary = rst.getPrimary();
- assert.commandWorked(primary.getDB("test").getCollection(name).insert({_id: 1}));
+ const primary = rst.getPrimary();
+ const secondary = rst.getSecondary();
+
+ const primaryDB = primary.getDB("test");
+ const primaryColl = primaryDB.getCollection("restart_node_with_bridge");
+
+ function assertWriteReplicates() {
+ assert.commandWorked(primaryColl.update(
+ {_id: 0}, {$inc: {counter: 1}}, {upsert: true, writeConcern: {w: 2}}));
+ }
+
+ function assertWriteFailsToReplicate() {
+ assert.commandFailedWithCode(
+ primaryColl.update(
+ {_id: 0}, {$inc: {counter: 1}}, {writeConcern: {w: 2, wtimeout: 1000}}),
+ ErrorCodes.WriteConcernFailed);
+ }
+ // By default, the primary should be connected to the secondary. Replicating a write should
+ // therefore succeed.
+ assertWriteReplicates();
+
+ // We disconnect the primary from the secondary and verify that replicating a write fails.
+ primary.disconnect(secondary);
+ assertWriteFailsToReplicate();
+
+ // We restart the secondary and verify that replicating a write still fails.
+ rst.restart(secondary);
+ assertWriteFailsToReplicate();
+
+ // We restart the primary and verify that replicating a write still fails.
rst.restart(primary);
- rst.awaitNodesAgreeOnPrimary();
- primary = rst.getPrimary();
- assert.eq(primary.getDB("test").getCollection(name).count({_id: 1}), 1);
+ rst.getPrimary();
+ // Note that we specify 'primaryDB' to avoid having reconnect() send a message directly to the
+ // mongod process rather than going through the mongobridge process as well.
+ reconnect(primaryDB);
+ assertWriteFailsToReplicate();
+
+ // We reconnect the primary to the secondary and verify that replicating a write succeeds.
+ primary.reconnect(secondary);
+ assertWriteReplicates();
rst.stopSet();
}());
diff --git a/jstests/replsets/libs/rollback_test.js b/jstests/replsets/libs/rollback_test.js
index 41717a664cd..a7db988e0e7 100644
--- a/jstests/replsets/libs/rollback_test.js
+++ b/jstests/replsets/libs/rollback_test.js
@@ -396,7 +396,7 @@ function RollbackTest(name = "RollbackTest", replSet) {
}
log(`Stopping node ${hostName} with signal ${signal}`);
- rst.stop(nodeId, signal, opts);
+ rst.stop(nodeId, signal, opts, {forRestart: true});
log(`Restarting node ${hostName}`);
rst.start(nodeId, {}, true /* restart */);
diff --git a/jstests/replsets/libs/rollback_test_deluxe.js b/jstests/replsets/libs/rollback_test_deluxe.js
index 0c4cb988dfc..b3b85de152d 100644
--- a/jstests/replsets/libs/rollback_test_deluxe.js
+++ b/jstests/replsets/libs/rollback_test_deluxe.js
@@ -572,7 +572,7 @@ function RollbackTestDeluxe(name = "FiveNodeDoubleRollbackTest", replSet) {
}
log(`Stopping node ${hostName} with signal ${signal}`);
- rst.stop(nodeId, signal, opts);
+ rst.stop(nodeId, signal, opts, {forRestart: true});
log(`Restarting node ${hostName}`);
const restart = true;