From e3a5d0f90621f6571892defe4ba6ffafcc68f8ce Mon Sep 17 00:00:00 2001 From: Rui Liu Date: Wed, 16 Mar 2022 18:43:11 +0000 Subject: SERVER-64551 Add feature flag to temporarily disable index join in all feature variants --- buildscripts/resmokeconfig/fully_disabled_feature_flags.yml | 2 ++ jstests/noPassthrough/lookup_pushdown.js | 11 +++++++++-- jstests/noPassthrough/lookup_pushdown_semantics.js | 4 +++- src/mongo/db/query/planner_analysis.cpp | 6 +++++- src/mongo/db/query/query_feature_flags.idl | 5 +++++ 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 -- cgit v1.2.1