summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Mir <ali.mir@mongodb.com>2021-06-15 21:02:54 +0000
committerAli Mir <ali.mir@mongodb.com>2021-06-23 21:04:17 +0000
commit71864eaf8acab7b95d53d18578c2a38ab8ff83f0 (patch)
treee94533050521e5394ac699f18f87d077ab62c6d1
parente0a85e5f9942962e67633170fe64d985c6a2b5b9 (diff)
downloadmongo-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.js58
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