From 7855a42f393a48c3db51a4afb7a91407d52a2f85 Mon Sep 17 00:00:00 2001 From: Mryange Date: Wed, 9 Sep 2026 16:40:23 +0800 Subject: [PATCH] [fix](fe) Deduplicate recursive CTE fragment reset requests --- .../doris/qe/runtime/ThriftPlansBuilder.java | 6 ++ .../recursive_cte/shared_cte_reset_test.out | 8 +++ .../shared_cte_reset_test.groovy | 67 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 regression-test/data/recursive_cte/shared_cte_reset_test.out create mode 100644 regression-test/suites/recursive_cte/shared_cte_reset_test.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/runtime/ThriftPlansBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/qe/runtime/ThriftPlansBuilder.java index 1a239e3122a365..64813f1b7b58e9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/runtime/ThriftPlansBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/runtime/ThriftPlansBuilder.java @@ -822,6 +822,7 @@ private static Set setParamsForRecursiveCteNode(List targets = new ArrayList<>(); // reset infos for all instances of child fragments (used to reset state) List fragmentsToReset = new ArrayList<>(); + Set resetFragmentKeys = new HashSet<>(); // The recursive side is under the right child; collect all fragments List childFragments = new ArrayList<>(); recursiveCteNode.getChild(1).getChild(0).getFragment().collectAll(PlanFragment.class::isInstance, @@ -845,6 +846,11 @@ private static Set setParamsForRecursiveCteNode(List