import {configureFailPoint} from "jstests/libs/fail_point_util.js";
import {funWithArgs} from "jstests/libs/parallel_shell_helpers.js";const conn = MongoRunner.runMongod({
setParameter: {
featureFlagPathArrayness: true,
internalEnablePathArrayness: true,
internalQueryExecYieldIterations: 1,
internalQueryExecYieldPeriodMS: 0,
internalQueryCBRCEMode: "samplingCE",
internalQuerySamplingBySequentialScan: true,
},
});
assert.neq(null, conn, "mongod was unable to start up");const testDb = conn.getDB(jsTestName());
const coll = testDb[jsTestName()];coll.drop();
assert.commandWorked(coll.createIndex({"a.b": 1}));
assert.commandWorked(coll.createIndex({"a.c": 1}));
const docs = [];
for (let i = 0; i < 100; i++) {
docs.push({a: {b: i, c: i}});
}
assert.commandWorked(coll.insertMany(docs));const fpBeforeSampling = configureFailPoint(testDb, "hangBeforeCBRSamplingGenerateSample");const awaitShell = startParallelShell(
funWithArgs(
function(dbName, collName) {
const testColl = db.getSiblingDB(dbName)[collName];
assert.throwsWithCode(
() => testColl.find({"a.b": {$gte: 50}, "a.c": {$gte: 50}}).toArray(),
ErrorCodes.QueryPlanKilled,
);
},
testDb.getName(),
coll.getName(),
),
conn.port,
);fpBeforeSampling.wait();const fpYield = configureFailPoint(
testDb, "setYieldAllLocksHang", {namespace: coll.getFullName()});
fpBeforeSampling.off();fpYield.wait();assert.commandWorked(coll.insert({a: [{b: 1, c: 1}, {b: 2, c: 1}]}));fpYield.off();
awaitShell();MongoRunner.stopMongod(conn);