This is an automated email from the ASF dual-hosted git repository.

korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 10d97f81d1 IGNITE-21887 Sql. Reuse caller thread if query already 
prepared (#3525)
10d97f81d1 is described below

commit 10d97f81d157cd41d366750bce0c5e8246a26614
Author: korlov42 <[email protected]>
AuthorDate: Wed Apr 3 14:54:41 2024 +0300

    IGNITE-21887 Sql. Reuse caller thread if query already prepared (#3525)
---
 .../ignite/internal/benchmark/InsertBenchmark.java |   2 +-
 .../internal/sql/engine/SqlQueryProcessor.java     |  59 ++++-----
 .../internal/sql/engine/sql/ParserServiceImpl.java |  27 ----
 .../engine/benchmarks/TpchPrepareBenchmark.java    |   3 +-
 .../sql/engine/exec/ExecutionServiceImplTest.java  |   2 +-
 .../sql/engine/framework/TestBuilders.java         |   2 +-
 .../sql/engine/planner/PlannerTimeoutTest.java     |   3 +-
 .../sql/engine/prepare/PrepareServiceImplTest.java |   3 +-
 .../sql/engine/sql/ParserServiceImplTest.java      | 141 ++-------------------
 .../sql/metrics/PlanningCacheMetricsTest.java      |   3 +-
 .../ignite/internal/worker/ThreadAssertions.java   |  14 +-
 11 files changed, 48 insertions(+), 211 deletions(-)

diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/InsertBenchmark.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/InsertBenchmark.java
index b711c95aa3..5787c87c56 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/InsertBenchmark.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/InsertBenchmark.java
@@ -55,7 +55,7 @@ import org.openjdk.jmh.runner.options.OptionsBuilder;
  * Benchmark for insertion operation, comparing KV, JDBC and SQL APIs.
  */
 @State(Scope.Benchmark)
-@Fork(3)
+@Fork(1)
 @Threads(1)
 @Warmup(iterations = 10, time = 2)
 @Measurement(iterations = 20, time = 2)
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
index 6ba2c4f055..686c892bab 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/SqlQueryProcessor.java
@@ -45,7 +45,6 @@ import java.util.Queue;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.CancellationException;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -116,6 +115,7 @@ import 
org.apache.ignite.internal.sql.engine.tx.QueryTransactionWrapper;
 import org.apache.ignite.internal.sql.engine.tx.ScriptTransactionContext;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
 import org.apache.ignite.internal.sql.engine.util.TypeUtils;
+import org.apache.ignite.internal.sql.engine.util.cache.Cache;
 import org.apache.ignite.internal.sql.engine.util.cache.CacheFactory;
 import org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory;
 import org.apache.ignite.internal.sql.metrics.SqlClientMetricSource;
@@ -170,9 +170,8 @@ public class SqlQueryProcessor implements QueryProcessor {
 
     private static final long EXECUTION_SERVICE_SHUTDOWN_TIMEOUT = 60_000;
 
-    private final ParserService parserService = new ParserServiceImpl(
-            PARSED_RESULT_CACHE_SIZE, CACHE_FACTORY
-    );
+    private final ParserService parserService = new ParserServiceImpl();
+    private final Cache<String, ParsedResult> queryToParsedResultCache = 
CACHE_FACTORY.create(PARSED_RESULT_CACHE_SIZE);
 
     private static final ResultSetMetadata EMPTY_RESULT_SET_METADATA =
             new ResultSetMetadataImpl(Collections.emptyList());
@@ -536,11 +535,13 @@ public class SqlQueryProcessor implements QueryProcessor {
 
         QueryCancel queryCancel = new QueryCancel();
 
-        CompletableFuture<Void> start = new CompletableFuture<>();
+        ParsedResult parsedResult = queryToParsedResultCache.get(sql);
 
-        CompletableFuture<QueryMetadata> stage = start.thenCompose(ignored -> {
-            ParsedResult result = parserService.parse(sql);
+        CompletableFuture<ParsedResult> start = parsedResult != null
+                ? completedFuture(parsedResult)
+                : CompletableFuture.supplyAsync(() -> parseAndCache(sql), 
taskExecutor);
 
+        return start.thenCompose(result -> {
             validateParsedStatement(properties0, result);
             validateDynamicParameters(result.dynamicParamsCount(), params, 
false);
 
@@ -549,17 +550,6 @@ public class SqlQueryProcessor implements QueryProcessor {
             return prepareParsedStatement(schemaName, result, timestamp, 
queryCancel, params)
                     .thenApply(plan -> new QueryMetadata(plan.metadata(), 
plan.parameterMetadata()));
         });
-
-        // TODO IGNITE-20078 Improve (or remove) CancellationException 
handling.
-        stage.whenComplete((cur, ex) -> {
-            if (ex instanceof CancellationException) {
-                queryCancel.cancel();
-            }
-        });
-
-        start.completeAsync(() -> null, taskExecutor);
-
-        return stage;
     }
 
     private CompletableFuture<AsyncSqlCursor<InternalSqlRow>> querySingle0(
@@ -574,11 +564,13 @@ public class SqlQueryProcessor implements QueryProcessor {
 
         QueryCancel queryCancel = new QueryCancel();
 
-        CompletableFuture<Void> start = new CompletableFuture<>();
+        ParsedResult parsedResult = queryToParsedResultCache.get(sql);
 
-        CompletableFuture<AsyncSqlCursor<InternalSqlRow>> stage = 
start.thenCompose(ignored -> {
-            ParsedResult result = parserService.parse(sql);
+        CompletableFuture<ParsedResult> start = parsedResult != null
+                ? completedFuture(parsedResult)
+                : CompletableFuture.supplyAsync(() -> parseAndCache(sql), 
taskExecutor);
 
+        return start.thenCompose(result -> {
             validateParsedStatement(properties0, result);
             validateDynamicParameters(result.dynamicParamsCount(), params, 
true);
 
@@ -606,17 +598,6 @@ public class SqlQueryProcessor implements QueryProcessor {
                         return executionResult;
                     });
         });
-
-        // TODO IGNITE-20078 Improve (or remove) CancellationException 
handling.
-        stage.whenComplete((cur, ex) -> {
-            if (ex instanceof CancellationException) {
-                queryCancel.cancel();
-            }
-        });
-
-        start.completeAsync(() -> null, taskExecutor);
-
-        return stage;
     }
 
     private CompletableFuture<AsyncSqlCursor<InternalSqlRow>> queryScript0(
@@ -812,6 +793,20 @@ public class SqlQueryProcessor implements QueryProcessor {
         }
     }
 
+    private static boolean shouldBeCached(SqlQueryType queryType) {
+        return queryType == SqlQueryType.QUERY || queryType == 
SqlQueryType.DML;
+    }
+
+    private ParsedResult parseAndCache(String sql) {
+        ParsedResult result = parserService.parse(sql);
+
+        if (shouldBeCached(result.queryType())) {
+            queryToParsedResultCache.put(sql, result);
+        }
+
+        return result;
+    }
+
     /** Returns count of opened cursors. */
     @TestOnly
     public int openedCursors() {
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImpl.java
index dffc207e03..98ed99c9cb 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImpl.java
@@ -26,8 +26,6 @@ import org.apache.calcite.sql.dialect.AnsiSqlDialect;
 import org.apache.calcite.sql.pretty.SqlPrettyWriter;
 import org.apache.ignite.internal.sql.engine.SqlQueryType;
 import org.apache.ignite.internal.sql.engine.util.Commons;
-import org.apache.ignite.internal.sql.engine.util.cache.Cache;
-import org.apache.ignite.internal.sql.engine.util.cache.CacheFactory;
 
 /**
  * An implementation of {@link ParserService} that, apart of parsing, 
introduces cache of parsed results.
@@ -42,26 +40,9 @@ public class ParserServiceImpl implements ParserService {
             .withUpdateSetListNewline(false)
             .withIndentation(0);
 
-    private final Cache<String, ParsedResult> queryToParsedResultCache;
-
-    /**
-     * Constructs the object.
-     *
-     * @param cacheFactory A factory to create cache for parsed results.
-     */
-    public ParserServiceImpl(int cacheSize, CacheFactory cacheFactory) {
-        this.queryToParsedResultCache = cacheFactory.create(cacheSize);
-    }
-
     /** {@inheritDoc} */
     @Override
     public ParsedResult parse(String query) {
-        ParsedResult cachedResult = queryToParsedResultCache.get(query);
-
-        if (cachedResult != null) {
-            return cachedResult;
-        }
-
         StatementParseResult parsedStatement = IgniteSqlParser.parse(query, 
StatementParseResult.MODE);
 
         SqlNode parsedTree = parsedStatement.statement();
@@ -82,10 +63,6 @@ public class ParserServiceImpl implements ParserService {
                 () -> IgniteSqlParser.parse(query, 
StatementParseResult.MODE).statement()
         );
 
-        if (shouldBeCached(queryType)) {
-            queryToParsedResultCache.put(query, result);
-        }
-
         return result;
     }
 
@@ -165,8 +142,4 @@ public class ParserServiceImpl implements ParserService {
             return parsedTreeSupplier.get();
         }
     }
-
-    private static boolean shouldBeCached(SqlQueryType queryType) {
-        return queryType == SqlQueryType.QUERY || queryType == 
SqlQueryType.DML;
-    }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/benchmarks/TpchPrepareBenchmark.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/benchmarks/TpchPrepareBenchmark.java
index 756adcc9ca..9826800850 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/benchmarks/TpchPrepareBenchmark.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/benchmarks/TpchPrepareBenchmark.java
@@ -23,7 +23,6 @@ import 
org.apache.ignite.internal.sql.engine.framework.TestCluster;
 import org.apache.ignite.internal.sql.engine.framework.TestNode;
 import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
 import org.apache.ignite.internal.sql.engine.sql.ParserServiceImpl;
-import org.apache.ignite.internal.sql.engine.util.EmptyCacheFactory;
 import org.apache.ignite.internal.sql.engine.util.tpch.TpchHelper;
 import org.apache.ignite.internal.sql.engine.util.tpch.TpchTables;
 import org.openjdk.jmh.annotations.Benchmark;
@@ -83,7 +82,7 @@ public class TpchPrepareBenchmark {
         }
 
         String query = TpchHelper.getQuery(queryId);
-        parsedResult = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE).parse(query);
+        parsedResult = new ParserServiceImpl().parse(query);
     }
 
     /** Stops the cluster. */
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
index 80c96a9992..de88550306 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/ExecutionServiceImplTest.java
@@ -193,7 +193,7 @@ public class ExecutionServiceImplTest extends 
BaseIgniteAbstractTest {
         executionServices = 
nodeNames.stream().map(this::create).collect(Collectors.toList());
         prepareService = new PrepareServiceImpl("test", 0, 
CaffeineCacheFactory.INSTANCE, null, PLANNING_TIMEOUT, PLANNING_THREAD_COUNT,
                 new MetricManager());
-        parserService = new ParserServiceImpl(0, EmptyCacheFactory.INSTANCE);
+        parserService = new ParserServiceImpl();
 
         prepareService.start();
     }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java
index 984c1b4ee9..6c224e33f2 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/framework/TestBuilders.java
@@ -619,7 +619,7 @@ public class TestBuilders {
             HybridClock clock = new HybridClockImpl();
             CatalogManager catalogManager = 
CatalogTestUtils.createCatalogManagerWithTestUpdateLog(clusterName, clock);
 
-            var parserService = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+            var parserService = new ParserServiceImpl();
             var prepareService = new PrepareServiceImpl(clusterName, 0, 
CaffeineCacheFactory.INSTANCE,
                     new DdlSqlToCommandConverter(Map.of(), () -> "aipersist"), 
PLANNING_TIMEOUT, PLANNING_THREAD_COUNT,
                     mock(MetricManager.class));
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTimeoutTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTimeoutTest.java
index 294b8bb671..035fdb0a83 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTimeoutTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/planner/PlannerTimeoutTest.java
@@ -47,7 +47,6 @@ import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
 import org.apache.ignite.internal.sql.engine.sql.ParserService;
 import org.apache.ignite.internal.sql.engine.sql.ParserServiceImpl;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
-import org.apache.ignite.internal.sql.engine.util.EmptyCacheFactory;
 import org.apache.ignite.internal.sql.engine.util.SqlTestUtils;
 import org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory;
 import org.apache.ignite.internal.type.NativeTypes;
@@ -69,7 +68,7 @@ public class PlannerTimeoutTest extends AbstractPlannerTest {
                 CaffeineCacheFactory.INSTANCE, null, plannerTimeout, 1, new 
MetricManager());
         prepareService.start();
         try {
-            ParserService parserService = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+            ParserService parserService = new ParserServiceImpl();
 
             ParsedResult parsedResult = parserService.parse("SELECT * FROM T1 
t, T1 t1, T1 t2, T1 t3");
 
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImplTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImplTest.java
index bd1760cdfc..0546995ff2 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImplTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/prepare/PrepareServiceImplTest.java
@@ -45,7 +45,6 @@ import org.apache.ignite.internal.sql.engine.sql.ParsedResult;
 import org.apache.ignite.internal.sql.engine.sql.ParserServiceImpl;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
-import org.apache.ignite.internal.sql.engine.util.EmptyCacheFactory;
 import org.apache.ignite.internal.sql.engine.util.SqlTestUtils;
 import org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
@@ -246,7 +245,7 @@ public class PrepareServiceImplTest extends 
BaseIgniteAbstractTest {
     }
 
     private static ParsedResult parse(String query) {
-        return new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE).parse(query);
+        return new ParserServiceImpl().parse(query);
     }
 
     private static BaseQueryContext createContext(Object... params) {
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImplTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImplTest.java
index 44f207b1c7..38f9e0bb4c 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImplTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/ParserServiceImplTest.java
@@ -24,22 +24,12 @@ import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.junit.jupiter.api.Assertions.assertNotSame;
-import static org.junit.jupiter.api.Assertions.assertSame;
 
 import java.util.List;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.function.Predicate;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.ignite.internal.lang.IgniteStringBuilder;
 import org.apache.ignite.internal.sql.engine.SqlQueryType;
-import org.apache.ignite.internal.sql.engine.util.EmptyCacheFactory;
-import org.apache.ignite.internal.sql.engine.util.cache.Cache;
-import org.apache.ignite.internal.sql.engine.util.cache.CacheFactory;
-import org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory;
-import org.apache.ignite.internal.sql.engine.util.cache.StatsCounter;
 import org.apache.ignite.lang.ErrorGroups.Sql;
-import org.jetbrains.annotations.Nullable;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
@@ -49,54 +39,25 @@ import org.junit.jupiter.params.provider.EnumSource;
  */
 public class ParserServiceImplTest {
     enum Statement {
-        QUERY("SELECT * FROM my_table", SqlQueryType.QUERY, true),
-        DML("INSERT INTO my_table VALUES (1, 1)", SqlQueryType.DML, true),
-        DDL("CREATE TABLE my_table (id INT PRIMARY KEY, avl INT)", 
SqlQueryType.DDL, false),
-        EXPLAIN_QUERY("EXPLAIN PLAN FOR SELECT * FROM my_table", 
SqlQueryType.EXPLAIN, false),
-        EXPLAIN_DML("EXPLAIN PLAN FOR INSERT INTO my_table VALUES (1, 1)", 
SqlQueryType.EXPLAIN, false);
+        QUERY("SELECT * FROM my_table", SqlQueryType.QUERY),
+        DML("INSERT INTO my_table VALUES (1, 1)", SqlQueryType.DML),
+        DDL("CREATE TABLE my_table (id INT PRIMARY KEY, avl INT)", 
SqlQueryType.DDL),
+        EXPLAIN_QUERY("EXPLAIN PLAN FOR SELECT * FROM my_table", 
SqlQueryType.EXPLAIN),
+        EXPLAIN_DML("EXPLAIN PLAN FOR INSERT INTO my_table VALUES (1, 1)", 
SqlQueryType.EXPLAIN);
 
         private final String text;
         private final SqlQueryType type;
-        private final boolean cacheable;
 
-        Statement(String text, SqlQueryType type, boolean cacheable) {
+        Statement(String text, SqlQueryType type) {
             this.text = text;
             this.type = type;
-            this.cacheable = cacheable;
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(Statement.class)
-    void serviceAlwaysReturnsResultFromCacheIfPresent(Statement statement) {
-        ParsedResult expected = new DummyParsedResults();
-
-        ParsedResult actual = new ParserServiceImpl(0, new 
SameObjectCacheFactory(expected)).parse(statement.text);
-
-        assertSame(actual, expected);
-    }
-
-    @ParameterizedTest
-    @EnumSource(Statement.class)
-    void serviceCachesOnlyCertainStatements(Statement statement) {
-        ParserServiceImpl service = new ParserServiceImpl(
-                Statement.values().length, CaffeineCacheFactory.INSTANCE
-        );
-
-        ParsedResult firstResult = service.parse(statement.text);
-        ParsedResult secondResult = service.parse(statement.text);
-
-        if (statement.cacheable) {
-            assertSame(firstResult, secondResult);
-        } else {
-            assertNotSame(firstResult, secondResult);
         }
     }
 
     @ParameterizedTest
     @EnumSource(Statement.class)
     void serviceReturnsResultOfExpectedType(Statement statement) {
-        ParserServiceImpl service = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+        ParserServiceImpl service = new ParserServiceImpl();
 
         ParsedResult result = service.parse(statement.text);
 
@@ -106,7 +67,7 @@ public class ParserServiceImplTest {
     @ParameterizedTest
     @EnumSource(Statement.class)
     void resultReturnedByServiceCreateNewInstanceOfTree(Statement statement) {
-        ParserServiceImpl service = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+        ParserServiceImpl service = new ParserServiceImpl();
 
         ParsedResult result = service.parse(statement.text);
 
@@ -128,7 +89,7 @@ public class ParserServiceImplTest {
      */
     @Test
     void parseMultiStatementQuery() {
-        ParserService service = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+        ParserService service = new ParserServiceImpl();
 
         List<Statement> statements = List.of(Statement.values());
         IgniteStringBuilder buf = new IgniteStringBuilder();
@@ -160,88 +121,4 @@ public class ParserServiceImplTest {
             assertThat(result.originalQuery(), 
equalTo(singleStatementResult.normalizedQuery()));
         }
     }
-
-    /**
-     * Parsed result that throws {@link AssertionError} on every method call.
-     *
-     * <p>Used in cases where you need to verify referential equality.
-     */
-    private static class DummyParsedResults implements ParsedResult {
-
-        @Override
-        public SqlQueryType queryType() {
-            throw new AssertionError();
-        }
-
-        @Override
-        public String originalQuery() {
-            throw new AssertionError();
-        }
-
-        @Override
-        public String normalizedQuery() {
-            throw new AssertionError();
-        }
-
-        @Override
-        public int dynamicParamsCount() {
-            throw new AssertionError();
-        }
-
-        @Override
-        public SqlNode parsedTree() {
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * A factory that creates a cache that always return value passed to the 
constructor of factory.
-     */
-    private static class SameObjectCacheFactory implements CacheFactory {
-        private final Object object;
-
-        private SameObjectCacheFactory(Object object) {
-            this.object = object;
-        }
-
-        @Override
-        public <K, V> Cache<K, V> create(int size) {
-            return new Cache<>() {
-                @Override
-                public @Nullable V get(K key) {
-                    return (V) object;
-                }
-
-                @Override
-                public V get(K key, Function<? super K, ? extends V> 
mappingFunction) {
-                    return (V) object;
-                }
-
-                @Override
-                public void put(K key, V value) {
-                    // NO-OP
-                }
-
-                @Override
-                public void clear() {
-                    // NO-OP
-                }
-
-                @Override
-                public V compute(K key, BiFunction<? super K, ? super V, ? 
extends V> remappingFunction) {
-                    return (V) object;
-                }
-
-                @Override
-                public void removeIfValue(Predicate<? super V> valueFilter) {
-                    // NO-OP.
-                }
-            };
-        }
-
-        @Override
-        public <K, V> Cache<K, V> create(int size, StatsCounter statCounter) {
-            return create(size);
-        }
-    }
 }
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/metrics/PlanningCacheMetricsTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/metrics/PlanningCacheMetricsTest.java
index c9f6ffd4c1..b57a2f9f20 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/metrics/PlanningCacheMetricsTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/metrics/PlanningCacheMetricsTest.java
@@ -34,7 +34,6 @@ import 
org.apache.ignite.internal.sql.engine.sql.ParserService;
 import org.apache.ignite.internal.sql.engine.sql.ParserServiceImpl;
 import org.apache.ignite.internal.sql.engine.trait.IgniteDistributions;
 import org.apache.ignite.internal.sql.engine.util.BaseQueryContext;
-import org.apache.ignite.internal.sql.engine.util.EmptyCacheFactory;
 import org.apache.ignite.internal.sql.engine.util.cache.CacheFactory;
 import org.apache.ignite.internal.sql.engine.util.cache.CaffeineCacheFactory;
 import org.apache.ignite.internal.type.NativeTypes;
@@ -87,7 +86,7 @@ public class PlanningCacheMetricsTest extends 
AbstractPlannerTest {
         IgniteSchema schema = createSchema(table);
         BaseQueryContext ctx = 
baseQueryContext(Collections.singletonList(schema), null);
 
-        ParserService parserService = new ParserServiceImpl(0, 
EmptyCacheFactory.INSTANCE);
+        ParserService parserService = new ParserServiceImpl();
         ParsedResult parsedResult = parserService.parse(qry);
 
         await(prepareService.prepareAsync(parsedResult, ctx));
diff --git 
a/modules/workers/src/main/java/org/apache/ignite/internal/worker/ThreadAssertions.java
 
b/modules/workers/src/main/java/org/apache/ignite/internal/worker/ThreadAssertions.java
index 0fda9ac55c..928d3445d3 100644
--- 
a/modules/workers/src/main/java/org/apache/ignite/internal/worker/ThreadAssertions.java
+++ 
b/modules/workers/src/main/java/org/apache/ignite/internal/worker/ThreadAssertions.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.worker;
 
 import static 
org.apache.ignite.internal.lang.IgniteSystemProperties.THREAD_ASSERTIONS_ENABLED;
 
-import java.util.Set;
+import java.util.regex.Pattern;
 import org.apache.ignite.internal.lang.IgniteSystemProperties;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
@@ -32,13 +32,9 @@ import org.apache.ignite.internal.thread.ThreadOperation;
 public class ThreadAssertions {
     private static final IgniteLogger LOG = 
Loggers.forClass(ThreadAssertions.class);
 
-    /** Names of theads on which the assertions are skipped. */
-    private static final Set<String> BLACKLISTED_THREAD_NAMES = Set.of(
-            "main",
-            // JUnit worker thread name
-            "Test worker",
-            // Awaitility
-            "awaitility-thread"
+    /** Names of threads on which the assertions are skipped. */
+    private static final Pattern BLACKLISTED_THREAD_NAMES = Pattern.compile(
+            "(^main$|^Test 
worker$|^junit-timeout-thread.*|^awaitility-thread$)"
     );
 
     /**
@@ -68,7 +64,7 @@ public class ThreadAssertions {
     public static void assertThreadAllowsTo(ThreadOperation 
requestedOperation) {
         Thread currentThread = Thread.currentThread();
 
-        if (BLACKLISTED_THREAD_NAMES.contains(currentThread.getName())) {
+        if 
(BLACKLISTED_THREAD_NAMES.matcher(currentThread.getName()).matches()) {
             return;
         }
 

Reply via email to