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
);