Check arrayness assumptions in sampling ce restore

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Fixed
    • Priority: Major - P3
    • 9.0.0-rc0
    • Affects Version/s: None
    • Component/s: None
    • None
    • Query Execution
    • Fully Compatible
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      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);
       

            Assignee:
            Evan Bergeron
            Reporter:
            Evan Bergeron
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: