You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ib...@apache.org on 2025/06/26 11:18:21 UTC
(ignite-3) branch main updated: IGNITE-25770 Remove checkpoint configuration schema from page-memory (#6127)
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 5db6ae384a2 IGNITE-25770 Remove checkpoint configuration schema from page-memory (#6127)
5db6ae384a2 is described below
commit 5db6ae384a20539f13cc7627078a7e169e9841e1
Author: Ivan Bessonov <be...@gmail.com>
AuthorDate: Thu Jun 26 14:18:11 2025 +0300
IGNITE-25770 Remove checkpoint configuration schema from page-memory (#6127)
---
.../configuration/CheckpointConfiguration.java | 162 +++++++++++++++++++++
.../persistence/checkpoint/CheckpointManager.java | 13 +-
.../persistence/checkpoint/Checkpointer.java | 15 +-
.../persistence/compaction/Compactor.java | 11 +-
.../checkpoint/CheckpointManagerTest.java | 9 +-
.../persistence/checkpoint/CheckpointerTest.java | 37 +++--
.../persistence/compaction/CompactorTest.java | 21 +--
.../replacement/AbstractPageReplacementTest.java | 7 +-
.../throttling/PageMemoryThrottlingTest.java | 8 +-
.../PersistentPageMemoryStorageEngine.java | 15 +-
.../PageMemoryCheckpointConfigurationSchema.java | 15 +-
...PageMemoryStorageEngineConfigurationSchema.java | 1 -
.../pagememory/PersistentPageMemoryNoLoadTest.java | 32 ++--
13 files changed, 247 insertions(+), 99 deletions(-)
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/CheckpointConfiguration.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/CheckpointConfiguration.java
new file mode 100644
index 00000000000..a6c64281a61
--- /dev/null
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/CheckpointConfiguration.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.pagememory.configuration;
+
+import java.util.function.IntSupplier;
+import java.util.function.LongSupplier;
+
+/** Checkpoint configuration. */
+public class CheckpointConfiguration {
+ /** Default value for {@link #checkpointThreads()}. */
+ public static final int DEFAULT_CHECKPOINT_THREADS = 4;
+
+ /** Default value for {@link #compactionThreads()}. */
+ public static final int DEFAULT_COMPACTION_THREADS = 4;
+
+ /** Default value for {@link #intervalMillis()}. */
+ public static final long DEFAULT_CHECKPOINT_INTERVAL = 180_000L;
+
+ /** Default value for {@link #intervalDeviationPercent()}. */
+ public static final int DEFAULT_CHECKPOINT_INTERVAL_DEVIATION = 40;
+
+ /** Default value for {@link #readLockTimeoutMillis()}. */
+ public static final int DEFAULT_CHECKPOINT_READ_LOCK_TIMEOUT = 10_000;
+
+ /** Default value for {@link #logReadLockThresholdTimeoutMillis()}. */
+ public static final int DEFAULT_CHECKPOINT_LOG_READ_LOCK_THRESHOLD_TIMEOUT = 0;
+
+ private final int checkpointThreads;
+ private final int compactionThreads;
+
+ private final LongSupplier intervalMillis;
+ private final IntSupplier intervalDeviationPercent;
+
+ private final LongSupplier readLockTimeoutMillis;
+ private final LongSupplier logReadLockThresholdTimeoutMillis;
+
+ private CheckpointConfiguration(
+ int checkpointThreads,
+ int compactionThreads,
+ LongSupplier intervalMillis,
+ IntSupplier intervalDeviationPercent,
+ LongSupplier readLockTimeoutMillis,
+ LongSupplier logReadLockThresholdTimeoutMillis
+ ) {
+ this.checkpointThreads = checkpointThreads;
+ this.compactionThreads = compactionThreads;
+ this.intervalMillis = intervalMillis;
+ this.intervalDeviationPercent = intervalDeviationPercent;
+ this.readLockTimeoutMillis = readLockTimeoutMillis;
+ this.logReadLockThresholdTimeoutMillis = logReadLockThresholdTimeoutMillis;
+ }
+
+ /** Number of checkpoint threads. */
+ public int checkpointThreads() {
+ return checkpointThreads;
+ }
+
+ /** Number of threads to compact delta files. */
+ public int compactionThreads() {
+ return compactionThreads;
+ }
+
+ /** Interval between checkpoints in milliseconds. */
+ public long intervalMillis() {
+ return intervalMillis.getAsLong();
+ }
+
+ /**
+ * Max deviation (in percent) of intervals between checkpoints. If this is 20 and {@link #intervalMillis()} is 1000, then the effective
+ * checkpoint interval values will be between 900 and 1100.
+ */
+ public int intervalDeviationPercent() {
+ return intervalDeviationPercent.getAsInt();
+ }
+
+ /** Timeout for checkpoint read lock acquisition in milliseconds. */
+ public long readLockTimeoutMillis() {
+ return readLockTimeoutMillis.getAsLong();
+ }
+
+ /** Threshold for logging (if greater than zero) read lock holders in milliseconds. */
+ public long logReadLockThresholdTimeoutMillis() {
+ return logReadLockThresholdTimeoutMillis.getAsLong();
+ }
+
+ /** Creates a builder for {@link CheckpointConfiguration} instance. */
+ public static CheckpointConfigurationBuilder builder() {
+ return new CheckpointConfigurationBuilder();
+ }
+
+ /** Builder for {@link CheckpointConfiguration}. */
+ public static final class CheckpointConfigurationBuilder {
+ private int checkpointThreads = DEFAULT_CHECKPOINT_THREADS;
+ private int compactionThreads = DEFAULT_COMPACTION_THREADS;
+
+ private LongSupplier intervalMillis = () -> DEFAULT_CHECKPOINT_INTERVAL;
+ private IntSupplier intervalDeviationPercent = () -> DEFAULT_CHECKPOINT_INTERVAL_DEVIATION;
+
+ private LongSupplier readLockTimeoutMillis = () -> DEFAULT_CHECKPOINT_READ_LOCK_TIMEOUT;
+ private LongSupplier logReadLockThresholdTimeoutMillis = () -> DEFAULT_CHECKPOINT_LOG_READ_LOCK_THRESHOLD_TIMEOUT;
+
+ CheckpointConfigurationBuilder() {
+ }
+
+ public CheckpointConfigurationBuilder checkpointThreads(int checkpointThreads) {
+ this.checkpointThreads = checkpointThreads;
+ return this;
+ }
+
+ public CheckpointConfigurationBuilder compactionThreads(int compactionThreads) {
+ this.compactionThreads = compactionThreads;
+ return this;
+ }
+
+ public CheckpointConfigurationBuilder intervalMillis(LongSupplier intervalMillis) {
+ this.intervalMillis = intervalMillis;
+ return this;
+ }
+
+ public CheckpointConfigurationBuilder intervalDeviationPercent(IntSupplier intervalDeviationPercent) {
+ this.intervalDeviationPercent = intervalDeviationPercent;
+ return this;
+ }
+
+ public CheckpointConfigurationBuilder readLockTimeoutMillis(LongSupplier readLockTimeoutMillis) {
+ this.readLockTimeoutMillis = readLockTimeoutMillis;
+ return this;
+ }
+
+ public CheckpointConfigurationBuilder logReadLockThresholdTimeoutMillis(LongSupplier logReadLockThresholdTimeoutMillis) {
+ this.logReadLockThresholdTimeoutMillis = logReadLockThresholdTimeoutMillis;
+ return this;
+ }
+
+ /** Builds a {@link CheckpointConfiguration} instance. */
+ public CheckpointConfiguration build() {
+ return new CheckpointConfiguration(
+ checkpointThreads,
+ compactionThreads,
+ intervalMillis,
+ intervalDeviationPercent,
+ readLockTimeoutMillis,
+ logReadLockThresholdTimeoutMillis
+ );
+ }
+ }
+}
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 824f6fc303c..06b1bbea067 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
@@ -33,8 +33,7 @@ import org.apache.ignite.internal.logger.Loggers;
import org.apache.ignite.internal.pagememory.DataRegion;
import org.apache.ignite.internal.pagememory.FullPageId;
import org.apache.ignite.internal.pagememory.PageMemory;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointView;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
import org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency;
import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
@@ -102,7 +101,7 @@ public class CheckpointManager {
String igniteInstanceName,
@Nullable LongJvmPauseDetector longJvmPauseDetector,
FailureManager failureManager,
- PageMemoryCheckpointConfiguration checkpointConfig,
+ CheckpointConfiguration checkpointConfig,
FilePageStoreManager filePageStoreManager,
PartitionMetaManager partitionMetaManager,
Collection<? extends DataRegion<PersistentPageMemory>> dataRegions,
@@ -114,9 +113,7 @@ public class CheckpointManager {
) throws IgniteInternalCheckedException {
this.filePageStoreManager = filePageStoreManager;
- PageMemoryCheckpointView checkpointConfigView = checkpointConfig.value();
-
- long logReadLockThresholdTimeout = checkpointConfigView.logReadLockThresholdTimeoutMillis();
+ long logReadLockThresholdTimeout = checkpointConfig.logReadLockThresholdTimeoutMillis();
ReentrantReadWriteLockWithTracking reentrantReadWriteLockWithTracking = logReadLockThresholdTimeout > 0
? new ReentrantReadWriteLockWithTracking(Loggers.forClass(CheckpointReadWriteLock.class), logReadLockThresholdTimeout)
@@ -131,7 +128,7 @@ public class CheckpointManager {
igniteInstanceName,
checkpointReadWriteLock,
dataRegions,
- checkpointConfigView.checkpointThreads()
+ checkpointConfig.checkpointThreads()
);
checkpointPagesWriterFactory = new CheckpointPagesWriterFactory(
@@ -165,7 +162,7 @@ public class CheckpointManager {
checkpointTimeoutLock = new CheckpointTimeoutLock(
checkpointReadWriteLock,
- checkpointConfigView.readLockTimeoutMillis(),
+ checkpointConfig.readLockTimeoutMillis(),
() -> checkpointUrgency(dataRegions),
checkpointer,
failureManager
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
index e4097c84fa1..063f8f3f33c 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Checkpointer.java
@@ -57,8 +57,7 @@ import org.apache.ignite.internal.lang.NodeStoppingException;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
import org.apache.ignite.internal.pagememory.DataRegion;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointView;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
import org.apache.ignite.internal.pagememory.persistence.WriteSpeedFormatter;
@@ -135,7 +134,7 @@ public class Checkpointer extends IgniteWorker {
private final int pageSize;
/** Checkpoint config. */
- private final PageMemoryCheckpointConfiguration checkpointConfig;
+ private final CheckpointConfiguration checkpointConfig;
/** Strategy of where and how to get the pages. */
private final CheckpointWorkflow checkpointWorkflow;
@@ -202,7 +201,7 @@ public class Checkpointer extends IgniteWorker {
FilePageStoreManager filePageStoreManager,
Compactor compactor,
int pageSize,
- PageMemoryCheckpointConfiguration checkpointConfig,
+ CheckpointConfiguration checkpointConfig,
LogSyncer logSyncer
) {
super(LOG, igniteInstanceName, "checkpoint-thread");
@@ -219,7 +218,7 @@ public class Checkpointer extends IgniteWorker {
scheduledCheckpointProgress = new CheckpointProgressImpl(MILLISECONDS.toNanos(nextCheckpointInterval()));
- int checkpointWritePageThreads = checkpointConfig.checkpointThreads().value();
+ int checkpointWritePageThreads = checkpointConfig.checkpointThreads();
if (checkpointWritePageThreads > 1) {
checkpointWritePagesPool = new ThreadPoolExecutor(
@@ -820,10 +819,8 @@ public class Checkpointer extends IgniteWorker {
* <p>It helps when the cluster makes a checkpoint in the same time in every node.
*/
long nextCheckpointInterval() {
- PageMemoryCheckpointView checkpointConfigView = checkpointConfig.value();
-
- long interval = checkpointConfigView.intervalMillis();
- int deviation = checkpointConfigView.intervalDeviationPercent();
+ long interval = checkpointConfig.intervalMillis();
+ int deviation = checkpointConfig.intervalDeviationPercent();
if (deviation == 0) {
return interval;
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/compaction/Compactor.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/compaction/Compactor.java
index 33cf21e92ae..0e19bbf556a 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/compaction/Compactor.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/compaction/Compactor.java
@@ -32,7 +32,6 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import org.apache.ignite.configuration.ConfigurationValue;
import org.apache.ignite.internal.failure.FailureContext;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.lang.IgniteInternalException;
@@ -100,7 +99,7 @@ public class Compactor extends IgniteWorker {
public Compactor(
IgniteLogger log,
String igniteInstanceName,
- ConfigurationValue<Integer> threads,
+ int threads,
FilePageStoreManager filePageStoreManager,
int pageSize,
FailureManager failureManager
@@ -110,12 +109,10 @@ public class Compactor extends IgniteWorker {
this.filePageStoreManager = filePageStoreManager;
this.failureManager = failureManager;
- int threadCount = threads.value();
-
- if (threadCount > 1) {
+ if (threads > 1) {
threadPoolExecutor = new ThreadPoolExecutor(
- threadCount,
- threadCount,
+ threads,
+ threads,
30,
SECONDS,
new LinkedBlockingQueue<>(),
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 9ab3b68ed1f..12b7f7a3840 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
@@ -48,11 +48,10 @@ import java.util.function.Supplier;
import java.util.stream.IntStream;
import org.apache.ignite.internal.components.LogSyncer;
import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
-import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.pagememory.DataRegion;
import org.apache.ignite.internal.pagememory.FullPageId;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
import org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency;
import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
@@ -73,8 +72,6 @@ import org.mockito.invocation.InvocationOnMock;
*/
@ExtendWith({ConfigurationExtension.class, ExecutorServiceExtension.class})
public class CheckpointManagerTest extends BaseIgniteAbstractTest {
- @InjectConfiguration
- private PageMemoryCheckpointConfiguration checkpointConfig;
@InjectExecutorService
private ExecutorService executorService;
@@ -89,7 +86,7 @@ public class CheckpointManagerTest extends BaseIgniteAbstractTest {
"test",
null,
mock(FailureManager.class),
- checkpointConfig,
+ CheckpointConfiguration.builder().build(),
mock(FilePageStoreManager.class),
mock(PartitionMetaManager.class),
List.of(dataRegion),
@@ -202,7 +199,7 @@ public class CheckpointManagerTest extends BaseIgniteAbstractTest {
"test",
null,
mock(FailureManager.class),
- checkpointConfig,
+ CheckpointConfiguration.builder().build(),
filePageStoreManager,
mock(PartitionMetaManager.class),
List.of(),
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
index 010b43b6ac4..84102e790fb 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointerTest.java
@@ -59,13 +59,14 @@ import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.ignite.internal.components.LogSyncer;
import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
-import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.lang.NodeStoppingException;
import org.apache.ignite.internal.pagememory.FullPageId;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
import org.apache.ignite.internal.pagememory.persistence.FakePartitionMeta;
import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
@@ -91,8 +92,15 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
private static PageIoRegistry ioRegistry;
- @InjectConfiguration("mock : {checkpointThreads=1, intervalMillis=1000, intervalDeviationPercent=0}")
- private PageMemoryCheckpointConfiguration checkpointConfig;
+ private final AtomicLong intervalMillis = new AtomicLong(1_000L);
+
+ private final AtomicInteger intervalDeviationPercent = new AtomicInteger(0);
+
+ private final CheckpointConfiguration checkpointConfig = CheckpointConfiguration.builder()
+ .checkpointThreads(1)
+ .intervalMillis(intervalMillis::get)
+ .intervalDeviationPercent(intervalDeviationPercent::get)
+ .build();
@BeforeAll
static void beforeAll() {
@@ -245,7 +253,7 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
@Test
void testWaitCheckpointEvent() throws Exception {
- checkpointConfig.intervalMillis().update(200L).get(100, MILLISECONDS);
+ intervalMillis.set(200L);
Checkpointer checkpointer = new Checkpointer(
"test",
@@ -275,7 +283,7 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
@Test
void testCheckpointBody() throws Exception {
- checkpointConfig.intervalMillis().update(100L).get(100, MILLISECONDS);
+ intervalMillis.set(100L);
Checkpointer checkpointer = spy(new Checkpointer(
"test",
@@ -290,11 +298,11 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
mock(LogSyncer.class)
));
- ((CheckpointProgressImpl) checkpointer.scheduledProgress())
+ checkpointer.scheduledProgress()
.futureFor(FINISHED)
.whenComplete((unused, throwable) -> {
try {
- checkpointConfig.intervalMillis().update(10_000L).get(100, MILLISECONDS);
+ intervalMillis.set(10_000L);
verify(checkpointer, times(1)).doCheckpoint();
@@ -439,25 +447,24 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
);
// Checks case 0 deviation.
+ intervalDeviationPercent.set(0);
- checkpointConfig.intervalDeviationPercent().update(0).get(100, MILLISECONDS);
-
- checkpointConfig.intervalMillis().update(1_000L).get(100, MILLISECONDS);
+ intervalMillis.set(1_000L);
assertEquals(1_000, checkpointer.nextCheckpointInterval());
- checkpointConfig.intervalMillis().update(2_000L).get(100, MILLISECONDS);
+ intervalMillis.set(2_000L);
assertEquals(2_000, checkpointer.nextCheckpointInterval());
// Checks for non-zero deviation.
- checkpointConfig.intervalDeviationPercent().update(10).get(100, MILLISECONDS);
+ intervalDeviationPercent.set(10);
assertThat(
checkpointer.nextCheckpointInterval(),
allOf(greaterThanOrEqualTo(1_900L), lessThanOrEqualTo(2_100L))
);
- checkpointConfig.intervalDeviationPercent().update(20).get(100, MILLISECONDS);
+ intervalDeviationPercent.set(20);
assertThat(
checkpointer.nextCheckpointInterval(),
@@ -469,7 +476,7 @@ public class CheckpointerTest extends BaseIgniteAbstractTest {
return new CheckpointDirtyPages(List.of(createDirtyPagesAndPartitions(pageMemory, pageIds)));
}
- private CheckpointWorkflow createCheckpointWorkflow(CheckpointDirtyPages dirtyPages) throws Exception {
+ private static CheckpointWorkflow createCheckpointWorkflow(CheckpointDirtyPages dirtyPages) throws Exception {
CheckpointWorkflow mock = mock(CheckpointWorkflow.class);
when(mock.markCheckpointBegin(
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/compaction/CompactorTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/compaction/CompactorTest.java
index f96bcb91f66..fd2917c41bf 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/compaction/CompactorTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/compaction/CompactorTest.java
@@ -42,7 +42,6 @@ import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicReference;
-import org.apache.ignite.configuration.ConfigurationValue;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.pagememory.io.PageIo;
import org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
@@ -65,7 +64,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
var compactor = new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
mock(FilePageStoreManager.class),
PAGE_SIZE,
mock(FailureManager.class)
@@ -99,7 +98,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
Compactor compactor = new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
mock(FilePageStoreManager.class),
PAGE_SIZE,
mock(FailureManager.class));
@@ -151,7 +150,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
Compactor compactor = spy(new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
filePageStoreManager,
PAGE_SIZE,
mock(FailureManager.class)));
@@ -183,7 +182,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
Compactor compactor = spy(new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
mock(FilePageStoreManager.class),
PAGE_SIZE,
mock(FailureManager.class)));
@@ -208,7 +207,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
Compactor compactor = spy(new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
mock(FilePageStoreManager.class),
PAGE_SIZE,
mock(FailureManager.class)));
@@ -227,7 +226,7 @@ public class CompactorTest extends BaseIgniteAbstractTest {
Compactor compactor = spy(new Compactor(
log,
"test",
- threadsConfig(1),
+ 1,
mock(FilePageStoreManager.class),
PAGE_SIZE,
mock(FailureManager.class)));
@@ -245,12 +244,4 @@ public class CompactorTest extends BaseIgniteAbstractTest {
waitDeltaFilesFuture.get(100, MILLISECONDS);
}
-
- private static ConfigurationValue<Integer> threadsConfig(int threads) {
- ConfigurationValue<Integer> configValue = mock(ConfigurationValue.class);
-
- when(configValue.value()).thenReturn(threads);
-
- return configValue;
- }
}
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 6a4f477d503..8d699e4ea47 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
@@ -54,7 +54,7 @@ import org.apache.ignite.internal.lang.RunnableX;
import org.apache.ignite.internal.pagememory.DataRegion;
import org.apache.ignite.internal.pagememory.TestPageIoModule.TestSimpleValuePageIo;
import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileChange;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfigurationSchema;
@@ -99,9 +99,6 @@ public abstract class AbstractPageReplacementTest extends IgniteAbstractTest {
private static final int MAX_MEMORY_SIZE = PAGE_COUNT * PAGE_SIZE;
- @InjectConfiguration("mock.checkpointThreads = 1")
- private PageMemoryCheckpointConfiguration checkpointConfig;
-
@InjectConfiguration(
polymorphicExtensions = PersistentPageMemoryProfileConfigurationSchema.class,
value = "mock = {"
@@ -148,7 +145,7 @@ public abstract class AbstractPageReplacementTest extends IgniteAbstractTest {
NODE_NAME,
null,
failureManager,
- checkpointConfig,
+ CheckpointConfiguration.builder().checkpointThreads(1).build(),
filePageStoreManager,
partitionMetaManager,
dataRegionList,
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 51d881f67ff..0d77d385e90 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
@@ -54,7 +54,7 @@ import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
import org.apache.ignite.internal.lang.RunnableX;
import org.apache.ignite.internal.pagememory.DataRegion;
import org.apache.ignite.internal.pagememory.PageIdAllocator;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfiguration;
import org.apache.ignite.internal.pagememory.freelist.io.PagesListNodeIo;
import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
@@ -102,8 +102,10 @@ public class PageMemoryThrottlingTest extends IgniteAbstractTest {
private static PageIoRegistry ioRegistry;
// We use very small readLock timeout here on purpose.
- @InjectConfiguration("mock {checkpointThreads = 1, readLockTimeoutMillis = 50}")
- private PageMemoryCheckpointConfiguration checkpointConfig;
+ private CheckpointConfiguration checkpointConfig = CheckpointConfiguration.builder()
+ .checkpointThreads(1)
+ .readLockTimeoutMillis(() -> 50)
+ .build();
@InjectConfiguration("mock.engine = aipersist")
private StorageProfileConfiguration profileConfig;
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 e297713a0c4..fd1d26cb170 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
@@ -45,6 +45,7 @@ import org.apache.ignite.internal.lang.IgniteInternalCheckedException;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
import org.apache.ignite.internal.metrics.MetricManager;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileView;
import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
@@ -60,6 +61,7 @@ import org.apache.ignite.internal.storage.engine.MvTableStorage;
import org.apache.ignite.internal.storage.engine.StorageEngine;
import org.apache.ignite.internal.storage.engine.StorageTableDescriptor;
import org.apache.ignite.internal.storage.index.StorageIndexDescriptorSupplier;
+import org.apache.ignite.internal.storage.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineExtensionConfiguration;
import org.apache.ignite.internal.thread.NamedThreadFactory;
@@ -201,7 +203,7 @@ public class PersistentPageMemoryStorageEngine extends AbstractPageMemoryStorage
igniteInstanceName,
longJvmPauseDetector,
failureManager,
- engineConfig.checkpoint(),
+ checkpointConfiguration(engineConfig.checkpoint()),
filePageStoreManager,
partitionMetaManager,
regions.values(),
@@ -243,6 +245,17 @@ public class PersistentPageMemoryStorageEngine extends AbstractPageMemoryStorage
destructionExecutor = executor;
}
+ private static CheckpointConfiguration checkpointConfiguration(PageMemoryCheckpointConfiguration checkpointCfg) {
+ return CheckpointConfiguration.builder()
+ .checkpointThreads(checkpointCfg.value().checkpointThreads())
+ .compactionThreads(checkpointCfg.value().compactionThreads())
+ .intervalMillis(checkpointCfg.intervalMillis()::value)
+ .intervalDeviationPercent(checkpointCfg.intervalDeviationPercent()::value)
+ .readLockTimeoutMillis(checkpointCfg.readLockTimeoutMillis()::value)
+ .logReadLockThresholdTimeoutMillis(checkpointCfg.logReadLockThresholdTimeoutMillis()::value)
+ .build();
+ }
+
@Override
public void stop() throws StorageException {
try {
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java
similarity index 77%
rename from modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java
rename to modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java
index 31c93db7c6e..31b8c3f0ea1 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PageMemoryCheckpointConfigurationSchema.java
@@ -15,12 +15,13 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.pagememory.configuration.schema;
+package org.apache.ignite.internal.storage.pagememory.configuration.schema;
import org.apache.ignite.configuration.annotation.Config;
import org.apache.ignite.configuration.annotation.PublicName;
import org.apache.ignite.configuration.annotation.Value;
import org.apache.ignite.configuration.validation.Range;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
/**
* Checkpoint configuration schema for persistent page memory.
@@ -31,7 +32,7 @@ public class PageMemoryCheckpointConfigurationSchema {
@Range(min = 0)
@Value(hasDefault = true)
@PublicName(legacyNames = "interval")
- public long intervalMillis = 180_000;
+ public long intervalMillis = CheckpointConfiguration.DEFAULT_CHECKPOINT_INTERVAL;
/**
* Max deviation (in percent) of intervals between checkpoints. If this is 20 and {@link #intervalMillis} is 1000, then the effective
@@ -40,7 +41,7 @@ public class PageMemoryCheckpointConfigurationSchema {
@Range(min = 0, max = 100)
@Value(hasDefault = true)
@PublicName(legacyNames = "intervalDeviation")
- public int intervalDeviationPercent = 40;
+ public int intervalDeviationPercent = CheckpointConfiguration.DEFAULT_CHECKPOINT_INTERVAL_DEVIATION;
/** Delay before executing a checkpoint triggered by RAFT. */
@Range(min = 0)
@@ -50,24 +51,24 @@ public class PageMemoryCheckpointConfigurationSchema {
/** Number of checkpoint threads. */
@Range(min = 1)
@Value(hasDefault = true)
- public int checkpointThreads = 4;
+ public int checkpointThreads = CheckpointConfiguration.DEFAULT_CHECKPOINT_THREADS;
/** Number of threads to compact delta files. */
@Range(min = 1)
@Value(hasDefault = true)
- public int compactionThreads = 4;
+ public int compactionThreads = CheckpointConfiguration.DEFAULT_COMPACTION_THREADS;
/** Timeout for checkpoint read lock acquisition in milliseconds. */
@Range(min = 0)
@Value(hasDefault = true)
@PublicName(legacyNames = "readLockTimeout")
- public long readLockTimeoutMillis = 10_000;
+ public long readLockTimeoutMillis = CheckpointConfiguration.DEFAULT_CHECKPOINT_READ_LOCK_TIMEOUT;
/** Threshold for logging (if greater than zero) read lock holders in milliseconds. */
@Range(min = 0)
@Value(hasDefault = true)
@PublicName(legacyNames = "logReadLockThresholdTimeout")
- public long logReadLockThresholdTimeoutMillis = 0;
+ public long logReadLockThresholdTimeoutMillis = CheckpointConfiguration.DEFAULT_CHECKPOINT_LOG_READ_LOCK_THRESHOLD_TIMEOUT;
/** Use an asynchronous file I/O operations provider. */
@Value(hasDefault = true)
diff --git a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PersistentPageMemoryStorageEngineConfigurationSchema.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PersistentPageMemoryStorageEngineConfigurationSchema.java
index d8e82188edd..6d1ac110398 100644
--- a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PersistentPageMemoryStorageEngineConfigurationSchema.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/schema/PersistentPageMemoryStorageEngineConfigurationSchema.java
@@ -24,7 +24,6 @@ import org.apache.ignite.configuration.annotation.Value;
import org.apache.ignite.configuration.validation.Immutable;
import org.apache.ignite.configuration.validation.PowerOfTwo;
import org.apache.ignite.configuration.validation.Range;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfigurationSchema;
import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
/**
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 96779b0a8ca..d955eddf775 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
@@ -63,7 +63,7 @@ import org.apache.ignite.internal.pagememory.AbstractPageMemoryNoLoadSelfTest;
import org.apache.ignite.internal.pagememory.DataRegion;
import org.apache.ignite.internal.pagememory.FullPageId;
import org.apache.ignite.internal.pagememory.PageMemory;
-import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
+import org.apache.ignite.internal.pagememory.configuration.CheckpointConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileChange;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfiguration;
import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryProfileConfigurationSchema;
@@ -145,10 +145,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
}
@Test
- void testDirtyPages(
- @InjectConfiguration PageMemoryCheckpointConfiguration checkpointConfig,
- @WorkDirectory Path workDir
- ) throws Exception {
+ void testDirtyPages(@WorkDirectory Path workDir) throws Exception {
FilePageStoreManager filePageStoreManager = createFilePageStoreManager(workDir);
PartitionMetaManager partitionMetaManager = new PartitionMetaManager(ioRegistry, PAGE_SIZE, StoragePartitionMeta.FACTORY);
@@ -156,7 +153,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
Collection<DataRegion<PersistentPageMemory>> dataRegions = new ArrayList<>();
CheckpointManager checkpointManager = createCheckpointManager(
- checkpointConfig,
+ CheckpointConfiguration.builder().build(),
filePageStoreManager,
partitionMetaManager,
dataRegions
@@ -207,10 +204,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
}
@Test
- void testCheckpointUrgency(
- @InjectConfiguration PageMemoryCheckpointConfiguration checkpointConfig,
- @WorkDirectory Path workDir
- ) throws Exception {
+ void testCheckpointUrgency(@WorkDirectory Path workDir) throws Exception {
FilePageStoreManager filePageStoreManager = createFilePageStoreManager(workDir);
PartitionMetaManager partitionMetaManager = new PartitionMetaManager(ioRegistry, PAGE_SIZE, StoragePartitionMeta.FACTORY);
@@ -218,7 +212,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
Collection<DataRegion<PersistentPageMemory>> dataRegions = new ArrayList<>();
CheckpointManager checkpointManager = createCheckpointManager(
- checkpointConfig,
+ CheckpointConfiguration.builder().build(),
filePageStoreManager,
partitionMetaManager,
dataRegions
@@ -297,10 +291,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
}
@Test
- void testDeltaFilePageStore(
- @InjectConfiguration PageMemoryCheckpointConfiguration checkpointConfig,
- @WorkDirectory Path workDir
- ) throws Exception {
+ void testDeltaFilePageStore(@WorkDirectory Path workDir) throws Exception {
FilePageStoreManager filePageStoreManager = spy(createFilePageStoreManager(workDir));
PartitionMetaManager partitionMetaManager = new PartitionMetaManager(ioRegistry, PAGE_SIZE, StoragePartitionMeta.FACTORY);
@@ -308,7 +299,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
Collection<DataRegion<PersistentPageMemory>> dataRegions = new ArrayList<>();
CheckpointManager checkpointManager = createCheckpointManager(
- checkpointConfig,
+ CheckpointConfiguration.builder().build(),
filePageStoreManager,
partitionMetaManager,
dataRegions
@@ -361,10 +352,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
}
@Test
- void testPageReplacement(
- @InjectConfiguration("mock.checkpointThreads=1") PageMemoryCheckpointConfiguration checkpointConfig,
- @WorkDirectory Path workDir
- ) throws Exception {
+ void testPageReplacement(@WorkDirectory Path workDir) throws Exception {
FilePageStoreManager filePageStoreManager = createFilePageStoreManager(workDir);
PartitionMetaManager partitionMetaManager = new PartitionMetaManager(ioRegistry, PAGE_SIZE, StoragePartitionMeta.FACTORY);
@@ -373,7 +361,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
Collection<DataRegion<PersistentPageMemory>> dataRegions = new ArrayList<>();
CheckpointManager checkpointManager = createCheckpointManager(
- checkpointConfig,
+ CheckpointConfiguration.builder().checkpointThreads(1).build(),
filePageStoreManager,
partitionMetaManager,
dataRegions
@@ -506,7 +494,7 @@ public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelf
}
private CheckpointManager createCheckpointManager(
- PageMemoryCheckpointConfiguration checkpointConfig,
+ CheckpointConfiguration checkpointConfig,
FilePageStoreManager filePageStoreManager,
PartitionMetaManager partitionMetaManager,
Collection<DataRegion<PersistentPageMemory>> dataRegions