summaryrefslogtreecommitdiff
path: root/jstests/replsets/read_committed_lookup.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/read_committed_lookup.js')
-rw-r--r--jstests/replsets/read_committed_lookup.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/jstests/replsets/read_committed_lookup.js b/jstests/replsets/read_committed_lookup.js
new file mode 100644
index 00000000000..d827e9580f3
--- /dev/null
+++ b/jstests/replsets/read_committed_lookup.js
@@ -0,0 +1,44 @@
+/**
+ * Tests that a $lookup and $graphLookup stage within an aggregation pipeline will read only
+ * committed data if the pipeline is using a majority readConcern.
+ */
+
+load("jstests/replsets/rslib.js"); // For startSetIfSupportsReadMajority.
+load("jstests/libs/read_committed_lib.js"); // For testReadCommittedLookup
+
+(function() {
+ "use strict";
+
+ // Confirm majority readConcern works on a replica set.
+ const replSetName = "lookup_read_majority";
+ let rst = new ReplSetTest({
+ nodes: 3,
+ name: replSetName,
+ nodeOptions: {
+ enableMajorityReadConcern: "",
+ shardsvr: "",
+ }
+ });
+
+ if (!startSetIfSupportsReadMajority(rst)) {
+ jsTest.log("skipping test since storage engine doesn't support committed reads");
+ return;
+ }
+
+ const nodes = rst.nodeList();
+ const config = {
+ _id: replSetName,
+ members: [
+ {_id: 0, host: nodes[0]},
+ {_id: 1, host: nodes[1], priority: 0},
+ {_id: 2, host: nodes[2], arbiterOnly: true},
+ ]
+ };
+ updateConfigIfNotDurable(config);
+ rst.initiate(config);
+
+ let shardSecondary = rst.liveNodes.slaves[0];
+
+ testReadCommittedLookup(rst.getPrimary().getDB("test"), shardSecondary, rst);
+
+})();