mirror of https://github.com/mongodb/mongo
71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
/**
|
|
* Tests that a $lookup and $graphLookup stage within an aggregation pipeline will read only
|
|
* committed data if the pipeline is using a majority readConcern.
|
|
*
|
|
* @tags: [requires_majority_read_concern]
|
|
*/
|
|
|
|
import {testReadCommittedLookup} from "jstests/libs/read_committed_lib.js";
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
|
|
// Manually create a shard.
|
|
const replSetName = "lookup_read_majority";
|
|
let rst = new ReplSetTest({
|
|
nodes: 3,
|
|
name: replSetName,
|
|
nodeOptions: {
|
|
shardsvr: "",
|
|
},
|
|
});
|
|
|
|
rst.startSet();
|
|
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},
|
|
],
|
|
};
|
|
|
|
rst.initiate(config);
|
|
|
|
let shardSecondary = rst.getSecondary();
|
|
|
|
// Confirm read committed works on a cluster with a database that is not sharding enabled.
|
|
let st = new ShardingTest({
|
|
manualAddShard: true,
|
|
});
|
|
if (TestData.configShard) {
|
|
assert.commandWorked(st.s.adminCommand({transitionFromDedicatedConfigServer: 1}));
|
|
}
|
|
// The default WC is majority and this test can't satisfy majority writes.
|
|
assert.commandWorked(
|
|
st.s.adminCommand({setDefaultRWConcern: 1, defaultWriteConcern: {w: 1}, writeConcern: {w: "majority"}}),
|
|
);
|
|
|
|
// Even though implicitDefaultWC is set to w:1, addShard will work as CWWC is set.
|
|
assert.commandWorked(st.s.adminCommand({addShard: rst.getURL()}));
|
|
|
|
testReadCommittedLookup(st.s.getDB("test"), shardSecondary, rst);
|
|
|
|
// Confirm read committed works on a cluster with:
|
|
// - A sharding enabled database
|
|
// - An unsharded local collection
|
|
assert.commandWorked(st.s.adminCommand({enableSharding: "test"}));
|
|
testReadCommittedLookup(st.s.getDB("test"), shardSecondary, rst);
|
|
|
|
// Confirm read committed works on a cluster with:
|
|
// - A sharding enabled database
|
|
// - A sharded local collection.
|
|
assert.commandWorked(
|
|
st.s.getDB("test").runCommand({createIndexes: "local", indexes: [{name: "foreignKey_1", key: {foreignKey: 1}}]}),
|
|
);
|
|
assert.commandWorked(st.s.adminCommand({shardCollection: "test.local", key: {foreignKey: 1}}));
|
|
testReadCommittedLookup(st.s.getDB("test"), shardSecondary, rst);
|
|
|
|
st.stop();
|
|
rst.stopSet();
|