This is an automated email from the ASF dual-hosted git repository. ppa 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 3f2abab425 IGNITE-21504 Sql. Fixed PlanningCacheMetricsTest.plannerCacheStatisticsTest flakiness (#3203) 3f2abab425 is described below commit 3f2abab42558227053763db7bc3bbf4c4fe5e329 Author: Max Zhuravkov <shh...@gmail.com> AuthorDate: Tue Feb 13 13:18:49 2024 +0200 IGNITE-21504 Sql. Fixed PlanningCacheMetricsTest.plannerCacheStatisticsTest flakiness (#3203) --- .../sql/engine/util/cache/CaffeineCacheFactory.java | 20 ++++++++++++++++++++ .../sql/metrics/PlanningCacheMetricsTest.java | 6 ++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/cache/CaffeineCacheFactory.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/cache/CaffeineCacheFactory.java index 8376ff32b5..45c597ce64 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/cache/CaffeineCacheFactory.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/cache/CaffeineCacheFactory.java @@ -20,11 +20,13 @@ package org.apache.ignite.internal.sql.engine.util.cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.RemovalCause; import com.github.benmanes.caffeine.cache.stats.CacheStats; +import java.util.concurrent.Executor; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; import org.checkerframework.checker.index.qual.NonNegative; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; /** * Factory that creates caches backed by {@link Caffeine} cache. @@ -32,7 +34,21 @@ import org.jetbrains.annotations.Nullable; public class CaffeineCacheFactory implements CacheFactory { public static final CacheFactory INSTANCE = new CaffeineCacheFactory(); + @Nullable + private final Executor executor; + private CaffeineCacheFactory() { + this(null); + } + + private CaffeineCacheFactory(@Nullable Executor executor) { + this.executor = executor; + } + + /** Creates a cache factory with the given executor for running auxiliary tasks. */ + @TestOnly + public static CacheFactory create(Executor executor) { + return new CaffeineCacheFactory(executor); } /** {@inheritDoc} */ @@ -41,6 +57,10 @@ public class CaffeineCacheFactory implements CacheFactory { Caffeine<Object, Object> builder = Caffeine.newBuilder() .maximumSize(size); + if (executor != null) { + builder.executor(executor); + } + if (statCounter != null) { builder.recordStats(() -> new CaffeineStatsCounterAdapter(statCounter)); } 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 95f5d0a51f..620a512b41 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 @@ -35,6 +35,7 @@ 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; import org.junit.jupiter.api.Test; @@ -47,8 +48,9 @@ public class PlanningCacheMetricsTest extends AbstractPlannerTest { @Test public void plannerCacheStatisticsTest() throws Exception { MetricManager metricManager = new MetricManager(); - PrepareService prepareService = new PrepareServiceImpl("test", 2, CaffeineCacheFactory.INSTANCE, - null, 15_000L, 2, metricManager); + // Run clean up tasks in the current thread, so no eviction event is delayed. + CacheFactory cacheFactory = CaffeineCacheFactory.create(Runnable::run); + PrepareService prepareService = new PrepareServiceImpl("test", 2, cacheFactory, null, 15_000L, 2, metricManager); prepareService.start();