From ecd6aea3c080ff64408ef6d5df65f6a61716d7ea Mon Sep 17 00:00:00 2001 From: zstan Date: Wed, 20 May 2026 17:51:38 +0300 Subject: [PATCH 1/3] IGNITE-28707 Fix flaky IndexScanlIntegrationTest.testForcedIndexHint and near --- .../AbstractBasicIntegrationTest.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java index 6134fa1ee53fd..f836712396f8e 100644 --- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java +++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.processors.query.calcite.integration; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import org.apache.calcite.plan.RelOptCluster; @@ -36,7 +38,9 @@ import org.apache.ignite.internal.processors.query.QueryContext; import org.apache.ignite.internal.processors.query.QueryEngine; import org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor; +import org.apache.ignite.internal.processors.query.calcite.Query; import org.apache.ignite.internal.processors.query.calcite.QueryChecker; +import org.apache.ignite.internal.processors.query.calcite.RootQuery; import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext; import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionServiceImpl; import org.apache.ignite.internal.processors.query.calcite.exec.exp.RangeIterable; @@ -93,8 +97,30 @@ protected boolean destroyCachesAfterTest() { // Wait for pending queries before destroying caches. If some error occurs during query execution, client code // can get control earlier than query leave the running queries registry (need some time for async message // exchange), but eventually, all queries should be closed. - assertTrue("Not finished queries found on client", waitForCondition( - () -> queryProcessor(client).queryRegistry().runningQueries().isEmpty(), 1_000L)); + List> runningSnap = new ArrayList<>(); + + boolean res = waitForCondition( + () -> { + Collection> activeQueries = queryProcessor(client).queryRegistry().runningQueries(); + + if (!activeQueries.isEmpty()) + runningSnap.addAll(activeQueries); + + return activeQueries.isEmpty(); + }, 1_000L); + + if (!res) { + log.error("Not finished queries found on client:"); + + for (Query qry : runningSnap) { + if (qry instanceof RootQuery) { + RootQuery root = (RootQuery)qry; + log.error("Not finished: query=[" + root.planningContext().query() + ']'); + } + } + } + + assertTrue(res); for (Ignite ign : G.allGrids()) { if (destroyCachesAfterTest()) { From d76a45bfe4e6f6c33a6cc5ed7987845d96d01638 Mon Sep 17 00:00:00 2001 From: zstan Date: Thu, 21 May 2026 13:09:27 +0300 Subject: [PATCH 2/3] fix --- .../calcite/integration/AbstractBasicIntegrationTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java index f836712396f8e..a8d5507dfa81b 100644 --- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java +++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java @@ -103,6 +103,8 @@ protected boolean destroyCachesAfterTest() { () -> { Collection> activeQueries = queryProcessor(client).queryRegistry().runningQueries(); + runningSnap.clear(); + if (!activeQueries.isEmpty()) runningSnap.addAll(activeQueries); @@ -110,13 +112,15 @@ protected boolean destroyCachesAfterTest() { }, 1_000L); if (!res) { - log.error("Not finished queries found on client:"); + log.error("Not finished queries found on client: " + runningSnap.size()); for (Query qry : runningSnap) { if (qry instanceof RootQuery) { RootQuery root = (RootQuery)qry; log.error("Not finished: query=[" + root.planningContext().query() + ']'); } + else + log.error("Not finished: query=[" + qry + ']'); } } From a880ae34cd9705ffbd8568035b325cd4beaa2ea6 Mon Sep 17 00:00:00 2001 From: zstan Date: Thu, 21 May 2026 13:17:05 +0300 Subject: [PATCH 3/3] fix --- .../calcite/integration/AbstractBasicIntegrationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java index a8d5507dfa81b..d9cb8105dcae8 100644 --- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java +++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/AbstractBasicIntegrationTest.java @@ -45,6 +45,7 @@ import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionServiceImpl; import org.apache.ignite.internal.processors.query.calcite.exec.exp.RangeIterable; import org.apache.ignite.internal.processors.query.calcite.metadata.ColocationGroup; +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext; import org.apache.ignite.internal.processors.query.calcite.prepare.bounds.SearchBounds; import org.apache.ignite.internal.processors.query.calcite.schema.IgniteIndex; import org.apache.ignite.internal.processors.query.calcite.schema.IgniteTable; @@ -117,10 +118,9 @@ protected boolean destroyCachesAfterTest() { for (Query qry : runningSnap) { if (qry instanceof RootQuery) { RootQuery root = (RootQuery)qry; - log.error("Not finished: query=[" + root.planningContext().query() + ']'); + String active = GridTestUtils.getFieldValue(root.planningContext(), PlanningContext.class, "qry"); + log.error("Not finished: query=[" + active + ']'); } - else - log.error("Not finished: query=[" + qry + ']'); } }