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 b2b7cf3f10c IGNITE-24548 Enable speed-based throttling (#5474)
b2b7cf3f10c is described below
commit b2b7cf3f10c0860d77c25ac12b2dd804bba248ae
Author: Ivan Bessonov <[email protected]>
AuthorDate: Mon Mar 31 16:43:18 2025 +0300
IGNITE-24548 Enable speed-based throttling (#5474)
---
.../persistence/PersistentPageMemory.java | 3 +-
.../persistence/checkpoint/CheckpointManager.java | 4 +
.../persistence/checkpoint/Checkpointer.java | 17 ++++
.../throttling/PagesWriteSpeedBasedThrottle.java | 7 +-
.../throttling/PagesWriteThrottlePolicy.java | 3 +-
...edBasedMemoryConsumptionThrottlingStrategy.java | 30 +++++-
.../throttling/TargetRatioPagesWriteThrottle.java | 9 +-
.../persistence/throttling/ThrottlingType.java | 32 ++++++
.../throttling/PageMemoryThrottlingTest.java | 3 +
.../persistence/throttling/ThrottlingTest.java | 31 +++---
.../partition/replicator/fixtures/Node.java | 2 +
.../testframework/TestIgnitionManager.java | 3 +-
.../pagememory/PersistentPageMemoryDataRegion.java | 109 ++++++++++++++++++++-
.../PersistentPageMemoryDataStorageModule.java | 5 +
.../PersistentPageMemoryStorageEngine.java | 11 +++
.../PersistentPageMemoryMvTableStorageTest.java | 1 +
.../PersistentPageMemoryStorageEngineTest.java | 1 +
.../PersistentPageMemoryHashIndexStorageTest.java | 1 +
...PersistentPageMemorySortedIndexStorageTest.java | 1 +
...ageMemoryMvPartitionStorageConcurrencyTest.java | 1 +
...rsistentPageMemoryMvPartitionStorageGcTest.java | 1 +
...PersistentPageMemoryMvPartitionStorageTest.java | 1 +
...entPageMemoryMvTableStorageConcurrencyTest.java | 1 +
.../distributed/TableManagerRecoveryTest.java | 11 +--
.../table/distributed/TableManagerTest.java | 13 +--
.../PersistentPageMemoryGcUpdateHandlerTest.java | 1 +
26 files changed, 258 insertions(+), 44 deletions(-)
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
index 49d02e88101..d7d6889fbc7 100644
---
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
@@ -297,8 +297,7 @@ public class PersistentPageMemory implements PageMemory {
*
* @param writeThrottle Page write throttling instance.
*/
- // TODO IGNITE-24548 Make a proper implementation.
- @TestOnly
+ // TODO IGNITE-24933 Remove this method.
public void initThrottling(PagesWriteThrottlePolicy writeThrottle) {
this.writeThrottle = writeThrottle;
}
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 28fa84435e8..06a6d5bc912 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
@@ -242,6 +242,10 @@ public class CheckpointManager {
return checkpointer.currentCheckpointProgress();
}
+ public @Nullable CheckpointProgress
currentCheckpointProgressForThrottling() {
+ return checkpointer.currentCheckpointProgressForThrottling();
+ }
+
/**
* Returns the progress of the last checkpoint, or the current checkpoint
if in progress, {@code null} if no checkpoint has occurred.
*/
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 15b4305fbc5..0d7933b9a10 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
@@ -152,6 +152,13 @@ public class Checkpointer extends IgniteWorker {
/** Current checkpoint progress. This field is updated only by checkpoint
thread. */
private volatile @Nullable CheckpointProgressImpl
currentCheckpointProgress;
+ /**
+ * Checkpoint progress instance with a more limited range of visibility.
It is initialized when checkpoint write lick is acquired, and
+ * nullified when checkpoint finishes (unlike {@link
#currentCheckpointProgress} that is updated before we started notifying
checkpoint
+ * listeners and is never nullified).
+ */
+ private volatile @Nullable CheckpointProgressImpl
currentCheckpointProgressForThrottling;
+
/** Checkpoint progress after releasing write lock. */
private volatile @Nullable CheckpointProgressImpl
afterReleaseWriteLockCheckpointProgress;
@@ -418,6 +425,8 @@ public class Checkpointer extends IgniteWorker {
failureManager.process(new FailureContext(CRITICAL_ERROR, e));
throw e;
+ } finally {
+ currentCheckpointProgressForThrottling = null;
}
}
@@ -684,6 +693,10 @@ public class Checkpointer extends IgniteWorker {
scheduledCheckpointProgress = new
CheckpointProgressImpl(MILLISECONDS.toNanos(nextCheckpointInterval()));
currentCheckpointProgress = curr;
+
+ curr.futureFor(LOCK_TAKEN).thenRun(() -> {
+ currentCheckpointProgressForThrottling = curr;
+ });
}
}
@@ -779,6 +792,10 @@ public class Checkpointer extends IgniteWorker {
return currentCheckpointProgress;
}
+ public @Nullable CheckpointProgress
currentCheckpointProgressForThrottling() {
+ return currentCheckpointProgressForThrottling;
+ }
+
/**
* Returns the progress of the last checkpoint, or the current checkpoint
if in progress, {@code null} if no checkpoint has occurred.
*/
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteSpeedBasedThrottle.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteSpeedBasedThrottle.java
index 847c5e796cd..60e99c2f27a 100644
---
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteSpeedBasedThrottle.java
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteSpeedBasedThrottle.java
@@ -53,6 +53,8 @@ public class PagesWriteSpeedBasedThrottle implements
PagesWriteThrottlePolicy {
*/
static final long NO_THROTTLING_MARKER = Long.MIN_VALUE;
+ private final long logThresholdNanos;
+
private final PersistentPageMemory pageMemory;
private final Supplier<CheckpointProgress> cpProgress;
@@ -95,17 +97,20 @@ public class PagesWriteSpeedBasedThrottle implements
PagesWriteThrottlePolicy {
/**
* Constructor.
*
+ * @param logThresholdNanos Minimal throttling duration required for
printing a warning message to the log.
* @param pageMemory Page memory.
* @param cpProgress Database manager.
* @param stateChecker Checkpoint lock state provider.
* @param metricSource Metric source.
*/
public PagesWriteSpeedBasedThrottle(
+ long logThresholdNanos,
PersistentPageMemory pageMemory,
Supplier<CheckpointProgress> cpProgress,
CheckpointLockStateChecker stateChecker,
PersistentPageMemoryMetricSource metricSource
) {
+ this.logThresholdNanos = logThresholdNanos;
this.pageMemory = pageMemory;
this.cpProgress = cpProgress;
cpLockStateChecker = stateChecker;
@@ -187,7 +192,7 @@ public class PagesWriteSpeedBasedThrottle implements
PagesWriteThrottlePolicy {
return;
}
- if (throttleParkTimeNs > LOGGING_THRESHOLD) {
+ if (throttleParkTimeNs > logThresholdNanos) {
LOG.warn("Parking thread={} for timeout(ms)={}",
Thread.currentThread().getName(), throttleParkTimeNs / 1_000_000);
}
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteThrottlePolicy.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteThrottlePolicy.java
index 85cbfb888fb..7cafa5e65f1 100644
---
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteThrottlePolicy.java
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/PagesWriteThrottlePolicy.java
@@ -60,9 +60,8 @@ import java.util.concurrent.TimeUnit;
* </ul>
*/
public interface PagesWriteThrottlePolicy {
- // TODO Maybe make it configurable in IGNITE-24548
/** Min park time which triggers logging. */
- long LOGGING_THRESHOLD = TimeUnit.SECONDS.toNanos(1);
+ long DEFAULT_LOGGING_THRESHOLD = TimeUnit.SECONDS.toNanos(1);
/** Checkpoint buffer fullfill upper bound. */
float CP_BUF_FILL_THRESHOLD = 2f / 3;
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/SpeedBasedMemoryConsumptionThrottlingStrategy.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/SpeedBasedMemoryConsumptionThrottlingStrategy.java
index 8f74b2071f4..8904b92bcef 100644
---
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/SpeedBasedMemoryConsumptionThrottlingStrategy.java
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/SpeedBasedMemoryConsumptionThrottlingStrategy.java
@@ -187,17 +187,19 @@ class SpeedBasedMemoryConsumptionThrottlingStrategy {
detectCpPagesWriteStart(cpWrittenPages, dirtyPagesRatio);
if (dirtyPagesRatio >= MAX_DIRTY_PAGES) {
- return 0; // too late to throttle, will wait on safe to update
instead.
+ return 0; // Too late to throttle, will wait on safe to update
instead.
} else {
return getParkTime(dirtyPagesRatio,
donePages,
- notEvictedPagesTotal(cpTotalPages),
+ // TODO IGNITE-24937 Should be a
"notEvictedPagesTotal(cpTotalPages)" call.
+ cpTotalPages,
threadIds.size(),
instantaneousMarkDirtySpeed,
avgCpWriteSpeed);
}
}
+ // TODO IGNITE-24937 Leads to negative estimations in some cases. Should
be fixed.
private int notEvictedPagesTotal(int cpTotalPages) {
return Math.max(cpTotalPages - cpEvictedPages(), 0);
}
@@ -375,7 +377,13 @@ class SpeedBasedMemoryConsumptionThrottlingStrategy {
* Returns counter for fsynced checkpoint pages.
*/
int cpSyncedPages() {
- AtomicInteger syncedPagesCounter =
cpProgress.get().syncedPagesCounter();
+ CheckpointProgress progress = cpProgress.get();
+
+ if (progress == null) {
+ return 0;
+ }
+
+ AtomicInteger syncedPagesCounter = progress.syncedPagesCounter();
// Null-check simplifies testing, we don't have to mock this counter.
return syncedPagesCounter == null ? 0 : syncedPagesCounter.get();
@@ -385,14 +393,26 @@ class SpeedBasedMemoryConsumptionThrottlingStrategy {
* Return a number of pages in current checkpoint.
*/
int cpTotalPages() {
- return cpProgress.get().currentCheckpointPagesCount();
+ CheckpointProgress progress = cpProgress.get();
+
+ if (progress == null) {
+ return 0;
+ }
+
+ return progress.currentCheckpointPagesCount();
}
/**
* Returns a number of evicted pages.
*/
int cpEvictedPages() {
- AtomicInteger evictedPagesCounter =
cpProgress.get().evictedPagesCounter();
+ CheckpointProgress progress = cpProgress.get();
+
+ if (progress == null) {
+ return 0;
+ }
+
+ AtomicInteger evictedPagesCounter = progress.evictedPagesCounter();
// Null-check simplifies testing, we don't have to mock this counter.
return evictedPagesCounter == null ? 0 : evictedPagesCounter.get();
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/TargetRatioPagesWriteThrottle.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/TargetRatioPagesWriteThrottle.java
index 7bb0afe9e59..6405115e4eb 100644
---
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/TargetRatioPagesWriteThrottle.java
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/TargetRatioPagesWriteThrottle.java
@@ -36,6 +36,8 @@ public class TargetRatioPagesWriteThrottle implements
PagesWriteThrottlePolicy {
/** Logger. */
private static final IgniteLogger LOG =
Loggers.forClass(TargetRatioPagesWriteThrottle.class);
+ private final long logThresholdNanos;
+
/** Page memory. */
private final PersistentPageMemory pageMemory;
@@ -68,17 +70,20 @@ public class TargetRatioPagesWriteThrottle implements
PagesWriteThrottlePolicy {
/**
* Constructor.
*
+ * @param logThresholdNanos Minimal throttling duration required for
printing a warning message to the log.
* @param pageMemory Page memory.
* @param cpProgress Database manager.
* @param stateChecker checkpoint lock state checker.
* @param metricSource Metric source.
*/
public TargetRatioPagesWriteThrottle(
+ long logThresholdNanos,
PersistentPageMemory pageMemory,
Supplier<CheckpointProgress> cpProgress,
CheckpointLockStateChecker stateChecker,
PersistentPageMemoryMetricSource metricSource
) {
+ this.logThresholdNanos = logThresholdNanos;
this.pageMemory = pageMemory;
this.cpProgress = cpProgress;
this.stateChecker = stateChecker;
@@ -132,7 +137,7 @@ public class TargetRatioPagesWriteThrottle implements
PagesWriteThrottlePolicy {
Thread curThread = Thread.currentThread();
- if (throttleParkTimeNs > LOGGING_THRESHOLD) {
+ if (throttleParkTimeNs > logThresholdNanos) {
LOG.warn("Parking thread=" + curThread.getName()
+ " for timeout(ms)=" +
TimeUnit.NANOSECONDS.toMillis(throttleParkTimeNs));
}
@@ -147,7 +152,7 @@ public class TargetRatioPagesWriteThrottle implements
PagesWriteThrottlePolicy {
} finally {
cpBufThrottledThreads.remove(curThread.getId());
- if (throttleParkTimeNs > LOGGING_THRESHOLD) {
+ if (throttleParkTimeNs > logThresholdNanos) {
LOG.warn("Unparking thread=" + curThread.getName()
+ " with park timeout(ms)=" +
TimeUnit.NANOSECONDS.toMillis(throttleParkTimeNs));
}
diff --git
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingType.java
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingType.java
new file mode 100644
index 00000000000..87cc6c7ef1a
--- /dev/null
+++
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingType.java
@@ -0,0 +1,32 @@
+/*
+ * 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.persistence.throttling;
+
+/**
+ * Available throttling types.
+ */
+public enum ThrottlingType {
+ /** Corresponds to no throttling. */
+ DISABLED,
+
+ /** Corresponds to {@link TargetRatioPagesWriteThrottle}. */
+ TARGET_RATIO,
+
+ /** Corresponds to {@link PagesWriteSpeedBasedThrottle}. */
+ SPEED_BASED
+}
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 31a56eccd33..de02151335e 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
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.pagememory.persistence.throttling;
import static
org.apache.ignite.internal.configuration.ConfigurationTestUtils.fixConfiguration;
+import static
org.apache.ignite.internal.pagememory.persistence.throttling.PagesWriteThrottlePolicy.DEFAULT_LOGGING_THRESHOLD;
import static
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -372,6 +373,7 @@ public class PageMemoryThrottlingTest extends
IgniteAbstractTest {
PagesWriteThrottlePolicy writeThrottle;
if (speedBasedThrottling) {
writeThrottle = new PagesWriteSpeedBasedThrottle(
+ DEFAULT_LOGGING_THRESHOLD,
pageMemory,
checkpointManager::currentCheckpointProgress,
checkpointManager.checkpointTimeoutLock()::checkpointLockIsHeldByThread,
@@ -379,6 +381,7 @@ public class PageMemoryThrottlingTest extends
IgniteAbstractTest {
);
} else {
writeThrottle = new TargetRatioPagesWriteThrottle(
+ DEFAULT_LOGGING_THRESHOLD,
pageMemory,
checkpointManager::currentCheckpointProgress,
checkpointManager.checkpointTimeoutLock()::checkpointLockIsHeldByThread,
diff --git
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingTest.java
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingTest.java
index 6662fc08dd2..a61cab029ac 100644
---
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingTest.java
+++
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/ThrottlingTest.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.pagememory.persistence.throttling;
import static java.lang.Thread.State.TIMED_WAITING;
+import static
org.apache.ignite.internal.pagememory.persistence.throttling.PagesWriteThrottlePolicy.DEFAULT_LOGGING_THRESHOLD;
import static
org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.greaterThan;
@@ -71,7 +72,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
*/
@Test
public void shouldThrottleWhenWritingTooFast() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
long parkTime = throttle.getCleanPagesProtectionParkTime(0.67, (362584
+ 67064) / 2, 328787, 1, 60184, 23103);
@@ -80,7 +81,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void shouldNotThrottleWhenWritingSlowly() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
long parkTime = throttle.getCleanPagesProtectionParkTime(0.47,
((362584 + 67064) / 2), 328787, 1, 20103, 23103);
@@ -93,7 +94,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
*/
@Test
public void shouldNotThrottleWhenThereArePlentyCleanPages() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
long parkTime = throttle.getCleanPagesProtectionParkTime(0.0, (362584
+ 67064) / 2, 328787, 1, 60184, 23103);
@@ -105,7 +106,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
*/
@Test
public void testCorrectTimeToPark() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
int markDirtySpeed = 34422;
int cpWriteSpeed = 19416;
@@ -174,7 +175,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void beginOfCp() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
assertEquals(0, throttle.getCleanPagesProtectionParkTime(0.01, 100,
400000, 1, 20103, 23103));
@@ -187,7 +188,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void enforceThrottleAtTheEndOfCp() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
long time1 = throttle.getCleanPagesProtectionParkTime(0.70, 300000,
400000, 1, 20200, 23000);
long time2 = throttle.getCleanPagesProtectionParkTime(0.71, 300000,
400000, 1, 20200, 23000);
@@ -203,7 +204,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void doNotThrottleWhenDirtyPagesRatioIsTooHigh() {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g, null,
stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g, null,
stateChecker, metricSource);
// 363308 350004 348976 10604
long time = throttle.getCleanPagesProtectionParkTime(0.75, ((350004 +
348976) / 2), 350004 - 10604, 4, 279, 23933);
@@ -220,7 +221,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
Supplier<CheckpointProgress> cpProgress = mock(Supplier.class);
when(cpProgress.get()).thenReturn(cl0);
- PagesWriteThrottlePolicy plc = new
PagesWriteSpeedBasedThrottle(pageMemory2g, cpProgress, stateChecker,
metricSource) {
+ var plc = new PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD,
pageMemory2g, cpProgress, stateChecker, metricSource) {
@Override protected void doPark(long throttleParkTimeNs) {
// Force parking to long time.
super.doPark(TimeUnit.SECONDS.toNanos(1));
@@ -280,7 +281,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
simulateCheckpointProgressIsStarted();
simulateCheckpointBufferInDangerZoneSituation();
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource);
throttle.onMarkDirty(true);
@@ -301,7 +302,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
simulateCheckpointProgressNotYetStarted();
simulateCheckpointBufferInDangerZoneSituation();
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource);
throttle.onMarkDirty(true);
@@ -317,7 +318,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
simulateCheckpointProgressNotYetStarted();
simulateCheckpointBufferInSafeZoneSituation();
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource);
throttle.onMarkDirty(true);
@@ -334,7 +335,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
// Preparations.
simulateCheckpointProgressIsStarted();
AtomicLong parkTimeNanos = new AtomicLong();
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource) {
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource) {
@Override protected void doPark(long throttleParkTimeNs) {
super.doPark(1);
parkTimeNanos.set(throttleParkTimeNs);
@@ -368,7 +369,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
// Preparations.
simulateCheckpointProgressIsStarted();
AtomicLong parkTimeNanos = new AtomicLong();
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource) {
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource) {
@Override protected void doPark(long throttleParkTimeNs) {
super.doPark(1);
parkTimeNanos.set(throttleParkTimeNs);
@@ -395,7 +396,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void
speedBasedThrottleShouldReportCpWriteSpeedWhenThePageIsNotInCheckpointAndProgressIsReported()
throws InterruptedException {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource);
simulateCheckpointProgressIsStarted();
allowSomeTimeToPass();
@@ -410,7 +411,7 @@ public class ThrottlingTest extends IgniteAbstractTest {
@Test
public void
speedBasedThrottleShouldResetCpProgressToZeroOnCheckpointStart() throws
InterruptedException {
- var throttle = new PagesWriteSpeedBasedThrottle(pageMemory2g,
cpProvider, stateChecker, metricSource);
+ var throttle = new
PagesWriteSpeedBasedThrottle(DEFAULT_LOGGING_THRESHOLD, pageMemory2g,
cpProvider, stateChecker, metricSource);
simulateCheckpointProgressIsStarted();
allowSomeTimeToPass();
diff --git
a/modules/partition-replicator/src/integrationTest/java/org/apache/ignite/internal/partition/replicator/fixtures/Node.java
b/modules/partition-replicator/src/integrationTest/java/org/apache/ignite/internal/partition/replicator/fixtures/Node.java
index 86d0a323847..57a98c5dd1e 100644
---
a/modules/partition-replicator/src/integrationTest/java/org/apache/ignite/internal/partition/replicator/fixtures/Node.java
+++
b/modules/partition-replicator/src/integrationTest/java/org/apache/ignite/internal/partition/replicator/fixtures/Node.java
@@ -78,6 +78,7 @@ import
org.apache.ignite.internal.configuration.SystemDistributedConfiguration;
import
org.apache.ignite.internal.configuration.SystemDistributedExtensionConfiguration;
import
org.apache.ignite.internal.configuration.SystemDistributedExtensionConfigurationSchema;
import org.apache.ignite.internal.configuration.SystemLocalConfiguration;
+import
org.apache.ignite.internal.configuration.SystemLocalExtensionConfigurationSchema;
import
org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage;
import
org.apache.ignite.internal.configuration.storage.LocalFileConfigurationStorage;
import
org.apache.ignite.internal.configuration.validation.TestConfigurationValidator;
@@ -341,6 +342,7 @@ public class Node {
List.of(
NetworkExtensionConfigurationSchema.class,
StorageExtensionConfigurationSchema.class,
+ SystemLocalExtensionConfigurationSchema.class,
PersistentPageMemoryStorageEngineExtensionConfigurationSchema.class,
VolatilePageMemoryStorageEngineExtensionConfigurationSchema.class
),
diff --git
a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/testframework/TestIgnitionManager.java
b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/testframework/TestIgnitionManager.java
index eee0c74ff73..5a5bda06e2b 100644
---
a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/testframework/TestIgnitionManager.java
+++
b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/testframework/TestIgnitionManager.java
@@ -66,7 +66,8 @@ public class TestIgnitionManager {
"ignite.storage.profiles.default_aimem.initSize",
Integer.toString(256 * MiB),
"ignite.storage.profiles.default_aimem.maxSize",
Integer.toString(256 * MiB),
"ignite.storage.profiles.default.engine", "aipersist",
- "ignite.storage.profiles.default.size", Integer.toString(256 * MiB)
+ "ignite.storage.profiles.default.size", Integer.toString(256 *
MiB),
+ "ignite.system.properties.aipersistThrottling", "disabled"
);
/** Map with default cluster configuration values. */
diff --git
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegion.java
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegion.java
index 3dd5e942512..9d0bf90128a 100644
---
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegion.java
+++
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegion.java
@@ -18,13 +18,20 @@
package org.apache.ignite.internal.storage.pagememory;
import static
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine.ENGINE_NAME;
+import static
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine.THROTTLING_LOG_THRESHOLD_SYSTEM_PROPERTY;
+import static
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine.THROTTLING_TYPE_SYSTEM_PROPERTY;
import static org.apache.ignite.internal.util.Constants.GiB;
import static org.apache.ignite.internal.util.Constants.MiB;
import java.nio.ByteBuffer;
import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.ignite.internal.configuration.SystemLocalConfiguration;
+import org.apache.ignite.internal.configuration.SystemPropertyView;
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.DataRegion;
import org.apache.ignite.internal.pagememory.FullPageId;
@@ -37,13 +44,21 @@ import
org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMet
import
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
import
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
import
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
+import
org.apache.ignite.internal.pagememory.persistence.throttling.PagesWriteSpeedBasedThrottle;
+import
org.apache.ignite.internal.pagememory.persistence.throttling.PagesWriteThrottlePolicy;
+import
org.apache.ignite.internal.pagememory.persistence.throttling.TargetRatioPagesWriteThrottle;
+import
org.apache.ignite.internal.pagememory.persistence.throttling.ThrottlingType;
import org.apache.ignite.internal.storage.StorageException;
import org.apache.ignite.internal.util.OffheapReadWriteLock;
+import org.jetbrains.annotations.Nullable;
/**
* Implementation of {@link DataRegion} for persistent case.
*/
class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory> {
+ /** Logger. */
+ private static final IgniteLogger LOG =
Loggers.forClass(PersistentPageMemoryDataRegion.class);
+
/**
* Threshold to calculate limit for pages list on-heap caches.
*
@@ -63,6 +78,9 @@ class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory>
private final PersistentPageMemoryProfileConfiguration cfg;
+ /** Can only be null in tests. Saves us from a bunch of mocking. */
+ private final @Nullable SystemLocalConfiguration systemLocalConfig;
+
private final PageIoRegistry ioRegistry;
private final int pageSize;
@@ -84,15 +102,17 @@ class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory>
*
* @param metricManager Metric manager.
* @param cfg Data region configuration.
+ * @param systemLocalConfig Local system configuration.
* @param ioRegistry IO registry.
* @param filePageStoreManager File page store manager.
* @param partitionMetaManager Partition meta information manager.
* @param checkpointManager Checkpoint manager.
* @param pageSize Page size in bytes.
*/
- public PersistentPageMemoryDataRegion(
+ PersistentPageMemoryDataRegion(
MetricManager metricManager,
PersistentPageMemoryProfileConfiguration cfg,
+ @Nullable SystemLocalConfiguration systemLocalConfig,
PageIoRegistry ioRegistry,
FilePageStoreManager filePageStoreManager,
PartitionMetaManager partitionMetaManager,
@@ -101,6 +121,7 @@ class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory>
) {
this.metricManager = metricManager;
this.cfg = cfg;
+ this.systemLocalConfig = systemLocalConfig;
this.ioRegistry = ioRegistry;
this.pageSize = pageSize;
@@ -130,6 +151,8 @@ class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory>
new
OffheapReadWriteLock(OffheapReadWriteLock.DEFAULT_CONCURRENCY_LEVEL)
);
+ initThrottling(pageMemory);
+
pageMemory.start();
metricManager.registerSource(metricSource);
@@ -140,6 +163,90 @@ class PersistentPageMemoryDataRegion implements
DataRegion<PersistentPageMemory>
this.pageMemory = pageMemory;
}
+ // TODO IGNITE-24933 refactor.
+ private void initThrottling(PersistentPageMemory pageMemory) {
+ ThrottlingType throttlingType = getThrottlingType();
+
+ long logThresholdNanos = getLoggingThreshold();
+
+ switch (throttlingType) {
+ case DISABLED:
+ break;
+
+ case TARGET_RATIO:
+ pageMemory.initThrottling(new TargetRatioPagesWriteThrottle(
+ logThresholdNanos,
+ pageMemory,
+
checkpointManager::currentCheckpointProgressForThrottling,
+
checkpointManager.checkpointTimeoutLock()::checkpointLockIsHeldByThread,
+ metricSource
+ ));
+ break;
+
+ case SPEED_BASED:
+ pageMemory.initThrottling(new PagesWriteSpeedBasedThrottle(
+ logThresholdNanos,
+ pageMemory,
+
checkpointManager::currentCheckpointProgressForThrottling,
+
checkpointManager.checkpointTimeoutLock()::checkpointLockIsHeldByThread,
+ metricSource
+ ));
+ break;
+
+ default:
+ assert false : "Impossible throttling type: " + throttlingType;
+ }
+ }
+
+ private ThrottlingType getThrottlingType() {
+ SystemPropertyView throttlingTypeCfg = systemLocalConfig == null
+ ? null
+ :
systemLocalConfig.value().properties().get(THROTTLING_TYPE_SYSTEM_PROPERTY);
+
+ ThrottlingType throttlingType = ThrottlingType.SPEED_BASED;
+
+ if (throttlingTypeCfg != null) {
+ try {
+ throttlingType =
ThrottlingType.valueOf(throttlingTypeCfg.name().toUpperCase());
+ } catch (IllegalArgumentException e) {
+ LOG.warn(
+ "Invalid throttling configuration {}={}, using default
value {}",
+ THROTTLING_LOG_THRESHOLD_SYSTEM_PROPERTY,
+ throttlingTypeCfg.propertyValue(),
+ throttlingType
+ );
+ }
+ }
+ return throttlingType;
+ }
+
+ private long getLoggingThreshold() {
+ SystemPropertyView logThresholdCfg = systemLocalConfig == null
+ ? null
+ :
systemLocalConfig.value().properties().get(THROTTLING_LOG_THRESHOLD_SYSTEM_PROPERTY);
+
+ long logThresholdNanos =
PagesWriteThrottlePolicy.DEFAULT_LOGGING_THRESHOLD;
+ try {
+ if (logThresholdCfg != null) {
+ long logThresholdMillis =
Long.parseLong(logThresholdCfg.name());
+
+ if (logThresholdMillis <= 0) {
+ throw new IllegalArgumentException();
+ }
+
+ logThresholdNanos =
TimeUnit.MILLISECONDS.toNanos(logThresholdMillis);
+ }
+ } catch (Exception e) {
+ LOG.warn(
+ "Invalid throttling configuration {}={}, using default
value {}",
+ THROTTLING_LOG_THRESHOLD_SYSTEM_PROPERTY,
+ logThresholdCfg.propertyValue(),
+ TimeUnit.NANOSECONDS.toMillis(logThresholdNanos)
+ );
+ }
+ return logThresholdNanos;
+ }
+
/**
* Stops a persistent data region.
*/
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 bba04e7329a..bf240511a62 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
@@ -25,6 +25,8 @@ import java.util.concurrent.ScheduledExecutorService;
import org.apache.ignite.internal.components.LogSyncer;
import org.apache.ignite.internal.components.LongJvmPauseDetector;
import org.apache.ignite.internal.configuration.ConfigurationRegistry;
+import org.apache.ignite.internal.configuration.SystemLocalConfiguration;
+import
org.apache.ignite.internal.configuration.SystemLocalExtensionConfiguration;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.hlc.HybridClock;
import org.apache.ignite.internal.metrics.MetricManager;
@@ -60,6 +62,8 @@ public class PersistentPageMemoryDataStorageModule implements
DataStorageModule
) throws StorageException {
StorageConfiguration storageConfig =
configRegistry.getConfiguration(StorageExtensionConfiguration.KEY).storage();
+ SystemLocalConfiguration systemLocalConfig =
configRegistry.getConfiguration(SystemLocalExtensionConfiguration.KEY).system();
+
PageIoRegistry ioRegistry = new PageIoRegistry();
ioRegistry.loadFromServiceLoader();
@@ -68,6 +72,7 @@ public class PersistentPageMemoryDataStorageModule implements
DataStorageModule
igniteInstanceName,
metricManager,
storageConfig,
+ systemLocalConfig,
ioRegistry,
storagePath,
longJvmPauseDetector,
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 e908f60adab..3f7eba7dfb3 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
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import org.apache.ignite.internal.components.LogSyncer;
import org.apache.ignite.internal.components.LongJvmPauseDetector;
+import org.apache.ignite.internal.configuration.SystemLocalConfiguration;
import org.apache.ignite.internal.failure.FailureManager;
import org.apache.ignite.internal.fileio.AsyncFileIoFactory;
import org.apache.ignite.internal.fileio.FileIoFactory;
@@ -70,6 +71,10 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
*/
public static final int MAX_DESTRUCTION_WORK_UNITS = 1_000;
+ public static final String THROTTLING_TYPE_SYSTEM_PROPERTY =
"aipersistThrottling";
+
+ public static final String THROTTLING_LOG_THRESHOLD_SYSTEM_PROPERTY =
"aipersistThrottlingLogThresholdMillis";
+
private static final IgniteLogger LOG =
Loggers.forClass(PersistentPageMemoryStorageEngine.class);
private final String igniteInstanceName;
@@ -80,6 +85,8 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
private final StorageConfiguration storageConfig;
+ private final @Nullable SystemLocalConfiguration systemLocalConfig;
+
private final PageIoRegistry ioRegistry;
private final Path storagePath;
@@ -109,6 +116,7 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
*
* @param igniteInstanceName Ignite instance name.
* @param storageConfig Storage engine and storage profiles configurations.
+ * @param systemLocalConfig Local system configuration.
* @param ioRegistry IO registry.
* @param storagePath Storage path.
* @param longJvmPauseDetector Long JVM pause detector.
@@ -120,6 +128,7 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
String igniteInstanceName,
MetricManager metricManager,
StorageConfiguration storageConfig,
+ @Nullable SystemLocalConfiguration systemLocalConfig,
PageIoRegistry ioRegistry,
Path storagePath,
@Nullable LongJvmPauseDetector longJvmPauseDetector,
@@ -133,6 +142,7 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
this.metricManager = metricManager;
this.storageConfig = storageConfig;
this.engineConfig =
((PersistentPageMemoryStorageEngineExtensionConfiguration)
storageConfig.engines()).aipersist();
+ this.systemLocalConfig = systemLocalConfig;
this.ioRegistry = ioRegistry;
this.storagePath = storagePath;
this.longJvmPauseDetector = longJvmPauseDetector;
@@ -305,6 +315,7 @@ public class PersistentPageMemoryStorageEngine extends
AbstractPageMemoryStorage
PersistentPageMemoryDataRegion dataRegion = new
PersistentPageMemoryDataRegion(
metricManager,
storageProfileConfiguration,
+ systemLocalConfig,
ioRegistry,
filePageStoreManager,
partitionMetaManager,
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 2ec430baf6f..ec2796ac441 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
@@ -69,6 +69,7 @@ public class PersistentPageMemoryMvTableStorageTest extends
AbstractMvTableStora
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 e5b52f27808..33e0509d1d4 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
@@ -53,6 +53,7 @@ public class PersistentPageMemoryStorageEngineTest extends
AbstractStorageEngine
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 21a8fc7fcc3..5f49f8e7fb1 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
@@ -61,6 +61,7 @@ class PersistentPageMemoryHashIndexStorageTest extends
AbstractPageMemoryHashInd
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 fd604a06ee7..d680fd97365 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
@@ -60,6 +60,7 @@ class PersistentPageMemorySortedIndexStorageTest extends
AbstractPageMemorySorte
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 db0f9bad631..f64c3c263c8 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
@@ -60,6 +60,7 @@ class PersistentPageMemoryMvPartitionStorageConcurrencyTest
extends AbstractMvPa
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 127bc5c0d1f..1b50124ca63 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
@@ -60,6 +60,7 @@ class PersistentPageMemoryMvPartitionStorageGcTest extends
AbstractMvPartitionSt
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 feda3c9ee70..28e325b928a 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
@@ -71,6 +71,7 @@ class PersistentPageMemoryMvPartitionStorageTest extends
AbstractPageMemoryMvPar
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
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 66ff8fa6c29..96b02dae1b1 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
@@ -57,6 +57,7 @@ class PersistentPageMemoryMvTableStorageConcurrencyTest
extends AbstractMvTableS
"test",
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
null,
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
index 713d4b4aa52..fc80606ee9d 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
@@ -122,7 +122,6 @@ import
org.apache.ignite.internal.storage.DataStorageManager;
import org.apache.ignite.internal.storage.DataStorageModule;
import org.apache.ignite.internal.storage.DataStorageModules;
import org.apache.ignite.internal.storage.StorageException;
-import org.apache.ignite.internal.storage.configurations.StorageConfiguration;
import
org.apache.ignite.internal.storage.configurations.StorageExtensionConfiguration;
import org.apache.ignite.internal.storage.engine.MvTableStorage;
import org.apache.ignite.internal.storage.engine.StorageEngine;
@@ -169,8 +168,8 @@ public class TableManagerRecoveryTest extends
IgniteAbstractTest {
private static final long WAIT_TIMEOUT = SECONDS.toMillis(10);
// Configuration
- @InjectConfiguration("mock.profiles.default = {engine = aipersist}")
- private StorageConfiguration storageConfiguration;
+ @InjectConfiguration("mock.storage = {profiles.default = {engine =
\"aipersist\"}}")
+ private NodeConfiguration nodeConfiguration;
@InjectConfiguration
private GcConfiguration gcConfig;
@InjectConfiguration
@@ -497,9 +496,7 @@ public class TableManagerRecoveryTest extends
IgniteAbstractTest {
private DataStorageManager createDataStorageManager() {
ConfigurationRegistry mockedRegistry =
mock(ConfigurationRegistry.class);
- StorageExtensionConfiguration mock =
mock(StorageExtensionConfiguration.class);
-
when(mockedRegistry.getConfiguration(NodeConfiguration.KEY)).thenReturn(mock);
- when(mock.storage()).thenReturn(storageConfiguration);
+
when(mockedRegistry.getConfiguration(NodeConfiguration.KEY)).thenReturn(nodeConfiguration);
DataStorageModules dataStorageModules = new
DataStorageModules(List.of(dataStorageModule));
@@ -515,7 +512,7 @@ public class TableManagerRecoveryTest extends
IgniteAbstractTest {
clock,
scheduledExecutor
),
- storageConfiguration
+ ((StorageExtensionConfiguration) nodeConfiguration).storage()
);
assertThat(manager.startAsync(new ComponentContext()),
willCompleteSuccessfully());
diff --git
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
index 05258392587..aa3be3db92c 100644
---
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
+++
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
@@ -127,7 +127,6 @@ import
org.apache.ignite.internal.storage.DataStorageManager;
import org.apache.ignite.internal.storage.DataStorageModules;
import org.apache.ignite.internal.storage.MvPartitionStorage;
import org.apache.ignite.internal.storage.PartitionTimestampCursor;
-import org.apache.ignite.internal.storage.configurations.StorageConfiguration;
import
org.apache.ignite.internal.storage.configurations.StorageExtensionConfiguration;
import org.apache.ignite.internal.storage.engine.MvTableStorage;
import
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryDataStorageModule;
@@ -237,12 +236,12 @@ public class TableManagerTest extends IgniteAbstractTest {
@InjectConfiguration
private ReplicationConfiguration replicationConfiguration;
- @InjectConfiguration("mock = {profiles.default = {engine =
\"aipersist\"}}")
- private StorageConfiguration storageConfiguration;
-
@InjectConfiguration
private SystemDistributedConfiguration systemDistributedConfiguration;
+ @InjectConfiguration("mock.storage = {profiles.default = {engine =
\"aipersist\"}}")
+ private NodeConfiguration nodeConfiguration;
+
@Mock
private ConfigurationRegistry configRegistry;
@@ -934,9 +933,7 @@ public class TableManagerTest extends IgniteAbstractTest {
ConfigurationRegistry mockedRegistry,
Path storagePath
) {
- StorageExtensionConfiguration mock =
mock(StorageExtensionConfiguration.class);
-
when(mockedRegistry.getConfiguration(NodeConfiguration.KEY)).thenReturn(mock);
- when(mock.storage()).thenReturn(storageConfiguration);
+
when(mockedRegistry.getConfiguration(NodeConfiguration.KEY)).thenReturn(nodeConfiguration);
DataStorageModules dataStorageModules = new DataStorageModules(
List.of(new PersistentPageMemoryDataStorageModule())
@@ -954,7 +951,7 @@ public class TableManagerTest extends IgniteAbstractTest {
clock,
scheduledExecutor
),
- storageConfiguration
+ ((StorageExtensionConfiguration) nodeConfiguration).storage()
);
assertThat(manager.startAsync(new ComponentContext()),
willCompleteSuccessfully());
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 8e0f16ac6f3..349003016f1 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
@@ -67,6 +67,7 @@ class PersistentPageMemoryGcUpdateHandlerTest extends
AbstractGcUpdateHandlerTes
nodeName,
mock(MetricManager.class),
storageConfig,
+ null,
ioRegistry,
workDir,
new LongJvmPauseDetector(nodeName),