summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Liu <rui.liu@mongodb.com>2022-03-16 18:43:11 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-03-16 19:34:28 +0000
commite3a5d0f90621f6571892defe4ba6ffafcc68f8ce (patch)
treef89a285ca1a00bcc116a895cb8d792c0708c1a33
parent8ac94fc68d134eaef7fb3815d25e98ef99f034a3 (diff)
downloadmongo-e3a5d0f90621f6571892defe4ba6ffafcc68f8ce.tar.gz
SERVER-64551 Add feature flag to temporarily disable index join in all feature variants
-rw-r--r--buildscripts/resmokeconfig/fully_disabled_feature_flags.yml2
-rw-r--r--jstests/noPassthrough/lookup_pushdown.js11
-rw-r--r--jstests/noPassthrough/lookup_pushdown_semantics.js4
-rw-r--r--src/mongo/db/query/planner_analysis.cpp6
-rw-r--r--src/mongo/db/query/query_feature_flags.idl5
5 files changed, 24 insertions, 4 deletions
diff --git a/buildscripts/resmokeconfig/fully_disabled_feature_flags.yml b/buildscripts/resmokeconfig/fully_disabled_feature_flags.yml
index 036bf0029fd..f0a8a0b180c 100644
--- a/buildscripts/resmokeconfig/fully_disabled_feature_flags.yml
+++ b/buildscripts/resmokeconfig/fully_disabled_feature_flags.yml
@@ -11,4 +11,6 @@
# Disable featureFlagSBELookupPushdown until integration tests can pass with basic SBE
# lookup translation.
- featureFlagSBELookupPushdown
+# TODO(SERVER-63574): Remove this feature flag and enable index join in all feature flag variant once all types of local fields are supported.
+- featureFlagSBELookupPushdownIndexJoin
- featureFlagAutoParameterization
diff --git a/jstests/noPassthrough/lookup_pushdown.js b/jstests/noPassthrough/lookup_pushdown.js
index 6b7a6d64198..fee90c772fc 100644
--- a/jstests/noPassthrough/lookup_pushdown.js
+++ b/jstests/noPassthrough/lookup_pushdown.js
@@ -19,7 +19,9 @@ const JoinAlgorithm = {
};
// Standalone cases.
-const conn = MongoRunner.runMongod({setParameter: "featureFlagSBELookupPushdown=true"});
+const conn = MongoRunner.runMongod({
+ setParameter: {featureFlagSBELookupPushdown: true, featureFlagSBELookupPushdownIndexJoin: true}
+});
assert.neq(null, conn, "mongod was unable to start up");
const name = "lookup_pushdown";
const foreignCollName = "foreign_lookup_pushdown";
@@ -636,7 +638,12 @@ MongoRunner.stopMongod(conn);
const st = new ShardingTest({
shards: 2,
mongos: 1,
- other: {shardOptions: {setParameter: "featureFlagSBELookupPushdown=true"}}
+ other: {
+ shardOptions: {
+ setParameter:
+ {featureFlagSBELookupPushdown: true, featureFlagSBELookupPushdownIndexJoin: true}
+ }
+ }
});
db = st.s.getDB(name);
diff --git a/jstests/noPassthrough/lookup_pushdown_semantics.js b/jstests/noPassthrough/lookup_pushdown_semantics.js
index f03da9f76c0..ba6d4204a8b 100644
--- a/jstests/noPassthrough/lookup_pushdown_semantics.js
+++ b/jstests/noPassthrough/lookup_pushdown_semantics.js
@@ -8,7 +8,9 @@ load("jstests/libs/sbe_util.js"); // For 'checkSBEEnabled()'.
load("jstests/aggregation/extras/utils.js");
// Standalone cases.
-const conn = MongoRunner.runMongod({setParameter: "featureFlagSBELookupPushdown=true"});
+const conn = MongoRunner.runMongod({
+ setParameter: {featureFlagSBELookupPushdown: true, featureFlagSBELookupPushdownIndexJoin: true}
+});
assert.neq(null, conn, "mongod was unable to start up");
const db = conn.getDB("lookup_pushdown");
if (!checkSBEEnabled(db, ["featureFlagSBELookupPushdown"])) {
diff --git a/src/mongo/db/query/planner_analysis.cpp b/src/mongo/db/query/planner_analysis.cpp
index eacb67b69c3..cc570708a09 100644
--- a/src/mongo/db/query/planner_analysis.cpp
+++ b/src/mongo/db/query/planner_analysis.cpp
@@ -625,6 +625,10 @@ bool isEligibleForHashJoin(const SecondaryCollectionInfo& foreignCollInfo) {
internalQueryCollectionMaxStorageSizeBytesToChooseHashJoin.load();
}
+bool isEligibleForIndexedLoopJoin() {
+ return feature_flags::gFeatureFlagSBELookupPushdownIndexJoin.isEnabledAndIgnoreFCV();
+}
+
// static
void QueryPlannerAnalysis::determineLookupStrategy(
EqLookupNode* eqLookupNode,
@@ -667,7 +671,7 @@ void QueryPlannerAnalysis::determineLookupStrategy(
return boost::none;
}();
- if (foreignIndex) {
+ if (foreignIndex && isEligibleForIndexedLoopJoin()) {
eqLookupNode->lookupStrategy = EqLookupNode::LookupStrategy::kIndexedLoopJoin;
eqLookupNode->idxEntry = foreignIndex;
} else if (allowDiskUse && isEligibleForHashJoin(foreignCollItr->second)) {
diff --git a/src/mongo/db/query/query_feature_flags.idl b/src/mongo/db/query/query_feature_flags.idl
index b60ea4d04cc..b213db5c907 100644
--- a/src/mongo/db/query/query_feature_flags.idl
+++ b/src/mongo/db/query/query_feature_flags.idl
@@ -137,6 +137,11 @@ feature_flags:
cpp_varname: gFeatureFlagSBELookupPushdown
default: false
+ featureFlagSBELookupPushdownIndexJoin:
+ description: "Feature flag for allowing SBE $lookup pushdown to execute query using index join strategy"
+ cpp_varname: gFeatureFlagSBELookupPushdownIndexJoin
+ default: false
+
featureFlagSearchShardedFacets:
description: "Enable use of $$SEARCH_META on sharded collections"
cpp_varname: gFeatureFlagSearchShardedFacets