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

ibessonov 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 99abf314a22 IGNITE-20068 Print warning if checkpoint read lock took 
substantial time (#5935)
99abf314a22 is described below

commit 99abf314a226b1e84ca4e0c6a7f88e907aa11139
Author: Phillippko <[email protected]>
AuthorDate: Mon Jun 2 14:38:02 2025 +0200

    IGNITE-20068 Print warning if checkpoint read lock took substantial time 
(#5935)
---
 .../persistence/checkpoint/CheckpointManager.java  |  8 +++-
 .../checkpoint/CheckpointReadWriteLock.java        | 43 ++++++++++++++++++----
 .../checkpoint/CheckpointManagerTest.java          | 10 ++++-
 .../checkpoint/CheckpointReadWriteLockTest.java    | 28 ++++++++++----
 .../checkpoint/CheckpointTimeoutLockTest.java      | 10 ++++-
 .../checkpoint/CheckpointWorkflowTest.java         | 29 ++++++++++-----
 .../replacement/AbstractPageReplacementTest.java   |  9 ++++-
 .../throttling/PageMemoryThrottlingTest.java       |  9 ++++-
 .../checkpoint/CheckpointTestUtils.java            |  8 ++--
 .../PersistentPageMemoryDataStorageModule.java     |  2 +
 .../PersistentPageMemoryStorageEngine.java         |  7 ++++
 .../PersistentPageMemoryMvTableStorageTest.java    |  9 ++++-
 .../pagememory/PersistentPageMemoryNoLoadTest.java | 11 +++++-
 .../PersistentPageMemoryStorageEngineTest.java     |  9 ++++-
 .../PersistentPageMemoryHashIndexStorageTest.java  |  9 ++++-
 ...PersistentPageMemorySortedIndexStorageTest.java |  9 ++++-
 ...ageMemoryMvPartitionStorageConcurrencyTest.java |  9 ++++-
 ...rsistentPageMemoryMvPartitionStorageGcTest.java |  9 ++++-
 ...PersistentPageMemoryMvPartitionStorageTest.java |  9 ++++-
 ...entPageMemoryMvTableStorageConcurrencyTest.java |  9 ++++-
 .../PersistentPageMemoryGcUpdateHandlerTest.java   |  9 ++++-
 21 files changed, 211 insertions(+), 44 deletions(-)

diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManager.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManager.java
index 92999b057a2..102cde1dccf 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManager.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManager.java
@@ -24,6 +24,7 @@ import static 
org.apache.ignite.internal.util.IgniteUtils.closeAll;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import org.apache.ignite.internal.components.LongJvmPauseDetector;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -93,6 +94,7 @@ public class CheckpointManager {
      * @param partitionMetaManager Partition meta information manager.
      * @param dataRegions Data regions.
      * @param ioRegistry Page IO registry.
+     * @param commonExecutorService Executor service for unspecified tasks, 
i.e. throttling log.
      * @param pageSize Page size in bytes.
      * @throws IgniteInternalCheckedException If failed.
      */
@@ -106,6 +108,7 @@ public class CheckpointManager {
             Collection<? extends DataRegion<PersistentPageMemory>> dataRegions,
             PageIoRegistry ioRegistry,
             LogSyncer logSyncer,
+            ExecutorService commonExecutorService,
             // TODO: IGNITE-17017 Move to common config
             int pageSize
     ) throws IgniteInternalCheckedException {
@@ -119,7 +122,10 @@ public class CheckpointManager {
                 ? new 
ReentrantReadWriteLockWithTracking(Loggers.forClass(CheckpointReadWriteLock.class),
 logReadLockThresholdTimeout)
                 : new ReentrantReadWriteLockWithTracking();
 
-        CheckpointReadWriteLock checkpointReadWriteLock = new 
CheckpointReadWriteLock(reentrantReadWriteLockWithTracking);
+        CheckpointReadWriteLock checkpointReadWriteLock = new 
CheckpointReadWriteLock(
+                reentrantReadWriteLockWithTracking,
+                commonExecutorService
+        );
 
         checkpointWorkflow = new CheckpointWorkflow(
                 igniteInstanceName,
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLock.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLock.java
index bdb95ea26b8..aec7425315a 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLock.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLock.java
@@ -17,8 +17,13 @@
 
 package org.apache.ignite.internal.pagememory.persistence.checkpoint;
 
+import static 
org.apache.ignite.internal.util.FastTimestamps.coarseCurrentTimeMillis;
+
+import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 import org.apache.ignite.internal.lang.IgniteInternalException;
+import org.apache.ignite.internal.logger.IgniteThrottledLogger;
+import org.apache.ignite.internal.logger.Loggers;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -32,6 +37,12 @@ public class CheckpointReadWriteLock {
      */
     static final String CHECKPOINT_RUNNER_THREAD_PREFIX = "checkpoint-runner";
 
+    private static final long LONG_LOCK_THRESHOLD_MILLIS = 1000;
+
+    private static final String LONG_LOCK_THROTTLE_KEY = "long-lock";
+
+    private final IgniteThrottledLogger log;
+
     private final ThreadLocal<Integer> checkpointReadLockHoldCount = 
ThreadLocal.withInitial(() -> 0);
 
     /** Checkpoint lock. */
@@ -44,9 +55,11 @@ public class CheckpointReadWriteLock {
      * Constructor.
      *
      * @param checkpointLock Checkpoint lock.
+     * @param throttledLogExecutor Executor for the throttled logger.
      */
-    public CheckpointReadWriteLock(ReentrantReadWriteLockWithTracking 
checkpointLock) {
+    public CheckpointReadWriteLock(ReentrantReadWriteLockWithTracking 
checkpointLock, Executor throttledLogExecutor) {
         this.checkpointLock = checkpointLock;
+        this.log = 
Loggers.toThrottledLogger(Loggers.forClass(CheckpointReadWriteLock.class), 
throttledLogExecutor);
     }
 
     /**
@@ -59,9 +72,11 @@ public class CheckpointReadWriteLock {
             return;
         }
 
+        long start = coarseCurrentTimeMillis();
+
         checkpointLock.readLock().lock();
 
-        checkpointReadLockHoldCount.set(checkpointReadLockHoldCount.get() + 1);
+        onReadLock(start, true);
     }
 
     /**
@@ -76,11 +91,11 @@ public class CheckpointReadWriteLock {
             return true;
         }
 
+        long start = coarseCurrentTimeMillis();
+
         boolean res = checkpointLock.readLock().tryLock(timeout, unit);
 
-        if (res) {
-            checkpointReadLockHoldCount.set(checkpointReadLockHoldCount.get() 
+ 1);
-        }
+        onReadLock(start, res);
 
         return res;
     }
@@ -95,11 +110,11 @@ public class CheckpointReadWriteLock {
             return true;
         }
 
+        long start = coarseCurrentTimeMillis();
+
         boolean res = checkpointLock.readLock().tryLock();
 
-        if (res) {
-            checkpointReadLockHoldCount.set(checkpointReadLockHoldCount.get() 
+ 1);
-        }
+        onReadLock(start, res);
 
         return res;
     }
@@ -158,4 +173,16 @@ public class CheckpointReadWriteLock {
     public int getReadHoldCount() {
         return checkpointLock.getReadHoldCount();
     }
+
+    private void onReadLock(long start, boolean taken) {
+        long elapsed = coarseCurrentTimeMillis() - start;
+
+        if (taken) {
+            checkpointReadLockHoldCount.set(checkpointReadLockHoldCount.get() 
+ 1);
+        }
+
+        if (elapsed > LONG_LOCK_THRESHOLD_MILLIS) {
+            log.warn(LONG_LOCK_THROTTLE_KEY, "Checkpoint read lock took {} ms 
to acquire.", elapsed);
+        }
+    }
 }
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManagerTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManagerTest.java
index 0839181911f..9ab3b68ed1f 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManagerTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointManagerTest.java
@@ -41,6 +41,7 @@ import static org.mockito.Mockito.when;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.IntFunction;
 import java.util.function.Supplier;
@@ -61,6 +62,8 @@ import 
org.apache.ignite.internal.pagememory.persistence.store.DeltaFilePageStor
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.invocation.InvocationOnMock;
@@ -68,11 +71,14 @@ import org.mockito.invocation.InvocationOnMock;
 /**
  * For {@link CheckpointManager} testing.
  */
-@ExtendWith(ConfigurationExtension.class)
+@ExtendWith({ConfigurationExtension.class, ExecutorServiceExtension.class})
 public class CheckpointManagerTest extends BaseIgniteAbstractTest {
     @InjectConfiguration
     private PageMemoryCheckpointConfiguration checkpointConfig;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @Test
     void testSimple() throws Exception {
         PersistentPageMemory pageMemory = mock(PersistentPageMemory.class);
@@ -89,6 +95,7 @@ public class CheckpointManagerTest extends 
BaseIgniteAbstractTest {
                 List.of(dataRegion),
                 mock(PageIoRegistry.class),
                 mock(LogSyncer.class),
+                executorService,
                 1024
         );
 
@@ -201,6 +208,7 @@ public class CheckpointManagerTest extends 
BaseIgniteAbstractTest {
                 List.of(),
                 mock(PageIoRegistry.class),
                 mock(LogSyncer.class),
+                executorService,
                 1024
         ));
 
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLockTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLockTest.java
index 33cdb34ebf5..0ab2379e4b0 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLockTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointReadWriteLockTest.java
@@ -23,17 +23,25 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
  * For {@link CheckpointReadWriteLock} testing.
  */
+@ExtendWith(ExecutorServiceExtension.class)
 public class CheckpointReadWriteLockTest {
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @Test
     void testReadLock() throws Exception {
-        CheckpointReadWriteLock lock0 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
-        CheckpointReadWriteLock lock1 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
+        CheckpointReadWriteLock lock0 = newReadWriteLock();
+        CheckpointReadWriteLock lock1 = newReadWriteLock();
 
         lock1.writeLock();
 
@@ -76,9 +84,9 @@ public class CheckpointReadWriteLockTest {
 
     @Test
     void testTryReadLock() throws Exception {
-        CheckpointReadWriteLock lock0 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
-        CheckpointReadWriteLock lock1 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
-        CheckpointReadWriteLock lock2 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
+        CheckpointReadWriteLock lock0 = newReadWriteLock();
+        CheckpointReadWriteLock lock1 = newReadWriteLock();
+        CheckpointReadWriteLock lock2 = newReadWriteLock();
 
         lock2.writeLock();
 
@@ -155,11 +163,15 @@ public class CheckpointReadWriteLockTest {
         assertEquals(0, lock2.getReadHoldCount());
     }
 
+    private CheckpointReadWriteLock newReadWriteLock() {
+        return new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking(), executorService);
+    }
+
     @Test
     void testCheckpointLockIsHeldByThread() throws Exception {
-        CheckpointReadWriteLock lock0 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
-        CheckpointReadWriteLock lock1 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
-        CheckpointReadWriteLock lock2 = new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking());
+        CheckpointReadWriteLock lock0 = newReadWriteLock();
+        CheckpointReadWriteLock lock1 = newReadWriteLock();
+        CheckpointReadWriteLock lock2 = newReadWriteLock();
 
         assertFalse(lock0.checkpointLockIsHeldByThread());
         assertFalse(lock1.checkpointLockIsHeldByThread());
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTimeoutLockTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTimeoutLockTest.java
index 9860fc565c4..7aa7021e44e 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTimeoutLockTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTimeoutLockTest.java
@@ -45,6 +45,7 @@ import java.util.concurrent.CancellationException;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -52,17 +53,24 @@ import 
org.apache.ignite.internal.lang.IgniteInternalException;
 import org.apache.ignite.internal.lang.NodeStoppingException;
 import org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.jetbrains.annotations.Nullable;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
  * For {@link CheckpointTimeoutLock} testing.
  */
+@ExtendWith(ExecutorServiceExtension.class)
 public class CheckpointTimeoutLockTest extends BaseIgniteAbstractTest {
     @Nullable
     private CheckpointTimeoutLock timeoutLock;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @AfterEach
     void tearDown() {
         if (timeoutLock != null) {
@@ -377,7 +385,7 @@ public class CheckpointTimeoutLockTest extends 
BaseIgniteAbstractTest {
     }
 
     private CheckpointReadWriteLock newReadWriteLock() {
-        return new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking(log, 5_000));
+        return new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking(log, 5_000), executorService);
     }
 
     private CheckpointProgress newCheckpointProgress(CompletableFuture<?> 
future) {
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
index 3bd860e9b23..c5125ff3dc9 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
@@ -27,7 +27,6 @@ import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.Check
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.LOCK_TAKEN;
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.PAGES_SNAPSHOT_TAKEN;
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.PAGES_SORTED;
-import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointTestUtils.newReadWriteLock;
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointTestUtils.toListDirtyPageIds;
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointWorkflowTest.TestCheckpointListener.AFTER_CHECKPOINT_END;
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointWorkflowTest.TestCheckpointListener.BEFORE_CHECKPOINT_BEGIN;
@@ -67,6 +66,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.IntStream;
 import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
 import org.apache.ignite.internal.pagememory.DataRegion;
@@ -74,18 +74,25 @@ import org.apache.ignite.internal.pagememory.FullPageId;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointDirtyPages.CheckpointDirtyPagesView;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.jetbrains.annotations.Nullable;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
 
 /**
  * For {@link CheckpointWorkflow} testing.
  */
+@ExtendWith({ExecutorServiceExtension.class, ExecutorServiceExtension.class})
 public class CheckpointWorkflowTest extends BaseIgniteAbstractTest {
     @Nullable
     private CheckpointWorkflow workflow;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @AfterEach
     void tearDown() {
         if (workflow != null) {
@@ -105,7 +112,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(dataRegion0, dataRegion1),
                 1
         );
@@ -176,7 +183,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
     @Test
     void testMarkCheckpointBegin() throws Exception {
-        CheckpointReadWriteLock readWriteLock = newReadWriteLock(log);
+        CheckpointReadWriteLock readWriteLock = newReadWriteLock();
 
         List<FullPageId> dirtyPages = List.of(of(0, 0, 1), of(0, 0, 2), of(0, 
0, 3));
 
@@ -340,7 +347,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
     @Test
     void testMarkCheckpointEnd() throws Exception {
-        CheckpointReadWriteLock readWriteLock = newReadWriteLock(log);
+        CheckpointReadWriteLock readWriteLock = newReadWriteLock();
 
         PersistentPageMemory pageMemory = mock(PersistentPageMemory.class);
 
@@ -433,7 +440,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(),
                 1
         );
@@ -484,7 +491,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(),
                 1
         );
@@ -522,7 +529,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(dataRegion),
                 1
         );
@@ -562,7 +569,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
 
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(dataRegion),
                 1
         );
@@ -598,7 +605,7 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
     void testAwaitPendingTasksOfListenerCallback() {
         workflow = new CheckpointWorkflow(
                 "test",
-                newReadWriteLock(log),
+                newReadWriteLock(),
                 List.of(),
                 2
         );
@@ -733,4 +740,8 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
             events.add(AFTER_CHECKPOINT_END);
         }
     }
+
+    private CheckpointReadWriteLock newReadWriteLock() {
+        return CheckpointTestUtils.newReadWriteLock(log, executorService);
+    }
 }
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/AbstractPageReplacementTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/AbstractPageReplacementTest.java
index 58fd6547ebe..6a4f477d503 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/AbstractPageReplacementTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/AbstractPageReplacementTest.java
@@ -43,6 +43,7 @@ import java.util.ArrayList;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionException;
+import java.util.concurrent.ExecutorService;
 import java.util.function.BooleanSupplier;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
@@ -69,7 +70,9 @@ import 
org.apache.ignite.internal.pagememory.persistence.store.DeltaFilePageStor
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import 
org.apache.ignite.internal.storage.configurations.StorageProfileConfiguration;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
 import org.apache.ignite.internal.testframework.IgniteAbstractTest;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.OffheapReadWriteLock;
 import org.junit.jupiter.api.AfterEach;
@@ -80,7 +83,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 /**
  * Base class for testing various page replacement policies.
  */
-@ExtendWith(ConfigurationExtension.class)
+@ExtendWith({ConfigurationExtension.class, ExecutorServiceExtension.class})
 public abstract class AbstractPageReplacementTest extends IgniteAbstractTest {
     private static final String NODE_NAME = "test";
 
@@ -116,6 +119,9 @@ public abstract class AbstractPageReplacementTest extends 
IgniteAbstractTest {
 
     private PersistentPageMemory pageMemory;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     protected abstract String replacementMode();
 
     @BeforeEach
@@ -148,6 +154,7 @@ public abstract class AbstractPageReplacementTest extends 
IgniteAbstractTest {
                 dataRegionList,
                 ioRegistry,
                 mock(LogSyncer.class),
+                executorService,
                 PAGE_SIZE
         );
 
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
index f7529b86724..51d881f67ff 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
@@ -41,6 +41,7 @@ import java.nio.file.OpenOption;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.IntStream;
@@ -68,7 +69,9 @@ import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointSt
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import 
org.apache.ignite.internal.storage.configurations.StorageProfileConfiguration;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
 import org.apache.ignite.internal.testframework.IgniteAbstractTest;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.util.Constants;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.OffheapReadWriteLock;
@@ -84,7 +87,7 @@ import org.junit.jupiter.params.provider.ValueSource;
 /**
  * Tests {@link PersistentPageMemory} and {@link PagesWriteThrottlePolicy} 
interactions.
  */
-@ExtendWith(ConfigurationExtension.class)
+@ExtendWith({ConfigurationExtension.class, ExecutorServiceExtension.class})
 public class PageMemoryThrottlingTest extends IgniteAbstractTest {
     private static final int PAGE_SIZE = 4096;
 
@@ -115,6 +118,9 @@ public class PageMemoryThrottlingTest extends 
IgniteAbstractTest {
 
     private DataRegion<PersistentPageMemory> dataRegion;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @BeforeAll
     static void beforeAll() {
         ioRegistry = new PageIoRegistry();
@@ -149,6 +155,7 @@ public class PageMemoryThrottlingTest extends 
IgniteAbstractTest {
                 dataRegions,
                 ioRegistry,
                 () -> {},
+                executorService,
                 PAGE_SIZE
         );
 
diff --git 
a/modules/page-memory/src/testFixtures/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTestUtils.java
 
b/modules/page-memory/src/testFixtures/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTestUtils.java
index ed7687fd05a..e3e09ce80ac 100644
--- 
a/modules/page-memory/src/testFixtures/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTestUtils.java
+++ 
b/modules/page-memory/src/testFixtures/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointTestUtils.java
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.when;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -44,10 +45,11 @@ public class CheckpointTestUtils {
     /**
      * Returns new instance of {@link CheckpointReadWriteLock}.
      *
-     * @param log Logger.
+     * @param log             Logger.
+     * @param executorService Executor service.
      */
-    static CheckpointReadWriteLock newReadWriteLock(IgniteLogger log) {
-        return new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking(log, 5_000));
+    static CheckpointReadWriteLock newReadWriteLock(IgniteLogger log, 
ExecutorService executorService) {
+        return new CheckpointReadWriteLock(new 
ReentrantReadWriteLockWithTracking(log, 5_000), executorService);
     }
 
     /**
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataStorageModule.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataStorageModule.java
index bf240511a62..970edc62f55 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataStorageModule.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataStorageModule.java
@@ -78,6 +78,8 @@ public class PersistentPageMemoryDataStorageModule implements 
DataStorageModule
                 longJvmPauseDetector,
                 failureManager,
                 logSyncer,
+                // TODO https://issues.apache.org/jira/browse/IGNITE-25563 
Don't use common scheduler for throttling logs.
+                commonScheduler,
                 clock
         );
     }
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
index d36188f8838..8312b58d5bc 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
@@ -121,6 +121,9 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
 
     private final LogSyncer logSyncer;
 
+    /** For unspecified tasks, i.e. throttling log. */
+    private final ExecutorService commonExecutorService;
+
     /**
      * Constructor.
      *
@@ -132,6 +135,7 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
      * @param longJvmPauseDetector Long JVM pause detector.
      * @param failureManager Failure processor that is used to handle critical 
errors.
      * @param logSyncer Write-ahead log synchronizer.
+     * @param commonExecutorService Executor service.
      * @param clock Hybrid Logical Clock.
      */
     public PersistentPageMemoryStorageEngine(
@@ -144,6 +148,7 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
             @Nullable LongJvmPauseDetector longJvmPauseDetector,
             FailureManager failureManager,
             LogSyncer logSyncer,
+            ExecutorService commonExecutorService,
             HybridClock clock
     ) {
         super(clock);
@@ -158,6 +163,7 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
         this.longJvmPauseDetector = longJvmPauseDetector;
         this.failureManager = failureManager;
         this.logSyncer = logSyncer;
+        this.commonExecutorService = commonExecutorService;
     }
 
     /**
@@ -201,6 +207,7 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
                     regions.values(),
                     ioRegistry,
                     logSyncer,
+                    commonExecutorService,
                     pageSize
             );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
index ec2796ac441..5c4e0fcc922 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
@@ -26,6 +26,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -38,6 +39,8 @@ import org.apache.ignite.internal.storage.RowId;
 import org.apache.ignite.internal.storage.configurations.StorageConfiguration;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -51,10 +54,13 @@ import org.junit.jupiter.params.provider.ValueSource;
 /**
  * Tests for {@link PersistentPageMemoryTableStorage} class.
  */
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 public class PersistentPageMemoryMvTableStorageTest extends 
AbstractMvTableStorageTest {
     private PersistentPageMemoryStorageEngine engine;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
@@ -75,6 +81,7 @@ public class PersistentPageMemoryMvTableStorageTest extends 
AbstractMvTableStora
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
index 48588b6f19a..96779b0a8ca 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
@@ -52,6 +52,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.LongStream;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
@@ -79,6 +80,8 @@ import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointPr
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import 
org.apache.ignite.internal.storage.configurations.StorageProfileConfiguration;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.OffheapReadWriteLock;
@@ -92,7 +95,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 /**
  * Tests {@link PersistentPageMemory}.
  */
-@ExtendWith({WorkDirectoryExtension.class, ConfigurationExtension.class})
+@ExtendWith({WorkDirectoryExtension.class, ConfigurationExtension.class, 
ExecutorServiceExtension.class})
 public class PersistentPageMemoryNoLoadTest extends 
AbstractPageMemoryNoLoadSelfTest {
     private static PageIoRegistry ioRegistry;
 
@@ -102,6 +105,9 @@ public class PersistentPageMemoryNoLoadTest extends 
AbstractPageMemoryNoLoadSelf
     )
     private StorageProfileConfiguration dataRegionCfg;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @BeforeAll
     static void beforeAll() {
         ioRegistry = new PageIoRegistry();
@@ -499,7 +505,7 @@ public class PersistentPageMemoryNoLoadTest extends 
AbstractPageMemoryNoLoadSelf
         return (fullPageId, buf, tag) -> fail("Should not happen");
     }
 
-    private static CheckpointManager createCheckpointManager(
+    private CheckpointManager createCheckpointManager(
             PageMemoryCheckpointConfiguration checkpointConfig,
             FilePageStoreManager filePageStoreManager,
             PartitionMetaManager partitionMetaManager,
@@ -515,6 +521,7 @@ public class PersistentPageMemoryNoLoadTest extends 
AbstractPageMemoryNoLoadSelf
                 dataRegions,
                 ioRegistry,
                 mock(LogSyncer.class),
+                executorService,
                 PAGE_SIZE
         );
     }
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/engine/PersistentPageMemoryStorageEngineTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/engine/PersistentPageMemoryStorageEngineTest.java
index ee4cd65920f..060b117ac65 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/engine/PersistentPageMemoryStorageEngineTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/engine/PersistentPageMemoryStorageEngineTest.java
@@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.is;
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
 import org.apache.ignite.internal.metrics.MetricManager;
@@ -32,6 +33,8 @@ import 
org.apache.ignite.internal.storage.configurations.StorageProfileView;
 import org.apache.ignite.internal.storage.engine.AbstractStorageEngineTest;
 import org.apache.ignite.internal.storage.engine.StorageEngine;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.junit.jupiter.api.Test;
@@ -40,11 +43,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
 /**
  * Implementation of the {@link AbstractStorageEngineTest} for the {@link 
PersistentPageMemoryStorageEngine#ENGINE_NAME} engine.
  */
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 public class PersistentPageMemoryStorageEngineTest extends 
AbstractStorageEngineTest {
     @InjectConfiguration("mock.profiles.default.engine = aipersist")
     private StorageConfiguration storageConfig;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @WorkDirectory
     private Path workDir;
 
@@ -68,6 +74,7 @@ public class PersistentPageMemoryStorageEngineTest extends 
AbstractStorageEngine
                 null,
                 mock(FailureManager.class),
                 logSyncer,
+                executorService,
                 clock
         );
     }
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
index 4d9de55ed8d..c82f3b5800d 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
@@ -23,6 +23,7 @@ import static 
org.apache.ignite.internal.util.IgniteUtils.closeAll;
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -33,6 +34,8 @@ import 
org.apache.ignite.internal.storage.configurations.StorageConfiguration;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.junit.jupiter.api.AfterEach;
@@ -42,10 +45,13 @@ import org.junit.jupiter.api.extension.ExtendWith;
 /**
  * Hash index test implementation for persistent page memory storage.
  */
-@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class})
+@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class, 
ExecutorServiceExtension.class})
 class PersistentPageMemoryHashIndexStorageTest extends 
AbstractPageMemoryHashIndexStorageTest {
     private PersistentPageMemoryStorageEngine engine;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory
@@ -67,6 +73,7 @@ class PersistentPageMemoryHashIndexStorageTest extends 
AbstractPageMemoryHashInd
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
index 96845b1606e..4f3883d19b8 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
@@ -23,6 +23,7 @@ import static 
org.apache.ignite.internal.util.IgniteUtils.closeAll;
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -33,6 +34,8 @@ import 
org.apache.ignite.internal.storage.configurations.StorageConfiguration;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.junit.jupiter.api.AfterEach;
@@ -42,10 +45,13 @@ import org.junit.jupiter.api.extension.ExtendWith;
 /**
  * Sorted index test implementation for persistent page memory storage.
  */
-@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class})
+@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class, 
ExecutorServiceExtension.class})
 class PersistentPageMemorySortedIndexStorageTest extends 
AbstractPageMemorySortedIndexStorageTest {
     private PersistentPageMemoryStorageEngine engine;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
@@ -66,6 +72,7 @@ class PersistentPageMemorySortedIndexStorageTest extends 
AbstractPageMemorySorte
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageConcurrencyTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageConcurrencyTest.java
index f64c3c263c8..e483ead699b 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageConcurrencyTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageConcurrencyTest.java
@@ -22,6 +22,7 @@ import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_P
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -33,6 +34,8 @@ import 
org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -40,12 +43,15 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 class PersistentPageMemoryMvPartitionStorageConcurrencyTest extends 
AbstractMvPartitionStorageConcurrencyTest {
     private PersistentPageMemoryStorageEngine engine;
 
     private MvTableStorage table;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
@@ -66,6 +72,7 @@ class PersistentPageMemoryMvPartitionStorageConcurrencyTest 
extends AbstractMvPa
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageGcTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageGcTest.java
index 1b50124ca63..36ade228aaa 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageGcTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageGcTest.java
@@ -22,6 +22,7 @@ import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_P
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -33,6 +34,8 @@ import 
org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -40,12 +43,15 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 class PersistentPageMemoryMvPartitionStorageGcTest extends 
AbstractMvPartitionStorageGcTest {
     private PersistentPageMemoryStorageEngine engine;
 
     private MvTableStorage table;
 
+    @InjectExecutorService
+    private ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
@@ -66,6 +72,7 @@ class PersistentPageMemoryMvPartitionStorageGcTest extends 
AbstractMvPartitionSt
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
index f4362636c76..5632d90f6c6 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
@@ -29,6 +29,7 @@ import static org.hamcrest.Matchers.is;
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -41,6 +42,8 @@ import 
org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -49,11 +52,14 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPartitionStorageTest {
     @InjectConfiguration("mock.profiles.default = {engine = aipersist}")
     private StorageConfiguration storageConfig;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @WorkDirectory
     private Path workDir;
 
@@ -77,6 +83,7 @@ class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPar
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvTableStorageConcurrencyTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvTableStorageConcurrencyTest.java
index 96b02dae1b1..89313528847 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvTableStorageConcurrencyTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvTableStorageConcurrencyTest.java
@@ -22,6 +22,7 @@ import static 
org.apache.ignite.internal.catalog.commands.CatalogUtils.DEFAULT_P
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.failure.FailureManager;
@@ -32,6 +33,8 @@ import 
org.apache.ignite.internal.storage.configurations.StorageConfiguration;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -39,10 +42,13 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 class PersistentPageMemoryMvTableStorageConcurrencyTest extends 
AbstractMvTableStorageConcurrencyTest {
     private PersistentPageMemoryStorageEngine engine;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
@@ -63,6 +69,7 @@ class PersistentPageMemoryMvTableStorageConcurrencyTest 
extends AbstractMvTableS
                 null,
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 
diff --git 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/PersistentPageMemoryGcUpdateHandlerTest.java
 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/PersistentPageMemoryGcUpdateHandlerTest.java
index 349003016f1..f3771f7f8f6 100644
--- 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/PersistentPageMemoryGcUpdateHandlerTest.java
+++ 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/PersistentPageMemoryGcUpdateHandlerTest.java
@@ -23,6 +23,7 @@ import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.testNodeN
 import static org.mockito.Mockito.mock;
 
 import java.nio.file.Path;
+import java.util.concurrent.ExecutorService;
 import org.apache.ignite.internal.components.LogSyncer;
 import org.apache.ignite.internal.components.LongJvmPauseDetector;
 import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -34,6 +35,8 @@ import 
org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
 import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
+import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
+import org.apache.ignite.internal.testframework.InjectExecutorService;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -42,7 +45,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith({WorkDirectoryExtension.class, ExecutorServiceExtension.class})
 class PersistentPageMemoryGcUpdateHandlerTest extends 
AbstractGcUpdateHandlerTest {
     @WorkDirectory
     private Path workDir;
@@ -51,6 +54,9 @@ class PersistentPageMemoryGcUpdateHandlerTest extends 
AbstractGcUpdateHandlerTes
 
     private MvTableStorage table;
 
+    @InjectExecutorService
+    ExecutorService executorService;
+
     @BeforeEach
     void setUp(
             TestInfo testInfo,
@@ -73,6 +79,7 @@ class PersistentPageMemoryGcUpdateHandlerTest extends 
AbstractGcUpdateHandlerTes
                 new LongJvmPauseDetector(nodeName),
                 mock(FailureManager.class),
                 mock(LogSyncer.class),
+                executorService,
                 clock
         );
 

Reply via email to