diff options
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/noPassthrough/restart_node_with_bridge.js | 57 | ||||
-rw-r--r-- | jstests/replsets/libs/rollback_test.js | 2 | ||||
-rw-r--r-- | jstests/replsets/libs/rollback_test_deluxe.js | 2 |
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; |