diff options
author | Ali Mir <ali.mir@mongodb.com> | 2021-06-15 21:02:54 +0000 |
---|---|---|
committer | Ali Mir <ali.mir@mongodb.com> | 2021-06-23 21:04:17 +0000 |
commit | 71864eaf8acab7b95d53d18578c2a38ab8ff83f0 (patch) | |
tree | e94533050521e5394ac699f18f87d077ab62c6d1 | |
parent | e0a85e5f9942962e67633170fe64d985c6a2b5b9 (diff) | |
download | mongo-71864eaf8acab7b95d53d18578c2a38ab8ff83f0.tar.gz |
SERVER-56605 Add testing for setting implicit default after a heartbeat reconfig
(cherry picked from commit 686dad084a738a44c2a298a98a21bdb81f0fe683)
-rw-r--r-- | jstests/replsets/heartbeat_reconfig_propagates_default_write_concern.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/jstests/replsets/heartbeat_reconfig_propagates_default_write_concern.js b/jstests/replsets/heartbeat_reconfig_propagates_default_write_concern.js new file mode 100644 index 00000000000..4f713c100ca --- /dev/null +++ b/jstests/replsets/heartbeat_reconfig_propagates_default_write_concern.js @@ -0,0 +1,58 @@ +/* + * Test that a heartbeat reconfig propagated from the primary to a new secondary + * successfully sets the default write concern on the secondary. To do this, we start either a PSS + * or PSA replica set. We then add a fourth secondary to the replica set, and verify that it sets + * its implicit default write concern correctly. We don't test cases with cluster-wide write concern + * set, because then the secondary won't set its implicit default write concern from a heartbeat + * reconfig. + * @tags: [requires_fcv_50] + */ + +(function() { +'use strict'; + +load("jstests/replsets/rslib.js"); + +function runTest(hasArbiter) { + jsTestLog("Running test with hasArbiter: " + tojson(hasArbiter)); + + let replSetNodes = 3; + if (hasArbiter) { + replSetNodes = [{}, {}, {arbiter: true}]; + } + const rst = new ReplSetTest({ + nodes: replSetNodes, + }); + + rst.startSet(); + rst.initiate(); + const primary = rst.getPrimary(); + + const newSecondary = rst.add(); + assert.soon(() => isConfigCommitted(primary)); + const config = rst.getReplSetConfigFromNode(); + + config.members.push({_id: 3, host: newSecondary.host}); + config.version++; + + assert.commandWorked(primary.adminCommand({replSetReconfig: config})); + assert.soon(() => isConfigCommitted(primary)); + + rst.waitForConfigReplication(primary); + rst.awaitReplication(); + + let res = assert.commandWorked(newSecondary.adminCommand({getDefaultRWConcern: 1})); + // A PSS set will have a default write concern of {w: "majority"}. A PSA set will have a default + // write concern of {w: 1}. + if (hasArbiter) { + assert(!res.defaultWriteConcern, tojson(res)); + } else { + assert.eq(res.defaultWriteConcern, {w: "majority", wtimeout: 0}, tojson(res)); + } + assert.eq(res.defaultWriteConcernSource, "implicit", tojson(res)); + rst.stopSet(); +} + +runTest(false /* hasArbiter */); +runTest(true /* hasArbiter */); +})();
\ No newline at end of file |