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

tkalkirill pushed a commit to branch ignite-26574
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit c6cbcc884b89f76a7183ed9b7b7a6469175c6c20
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Fri Oct 3 11:06:20 2025 +0300

    IGNITE-26574 wip
---
 modules/page-memory/build.gradle                   |   1 +
 .../persistence/checkpoint/CheckpointManager.java  |   4 +-
 .../checkpoint/CheckpointMetricSource.java         |  85 +++++++++++++++
 .../persistence/checkpoint/CheckpointMetrics.java  | 116 +++++++++++++++++++++
 .../persistence/checkpoint/Checkpointer.java       |  10 +-
 .../checkpoint/CheckpointManagerTest.java          |   2 +
 .../checkpoint/CheckpointMetricsTest.java          |  98 +++++++++++++++++
 .../persistence/checkpoint/CheckpointerTest.java   |  21 ++--
 .../replacement/AbstractPageReplacementTest.java   |   2 +
 .../throttling/PageMemoryThrottlingTest.java       |   2 +
 .../PersistentPageMemoryStorageEngine.java         |   7 ++
 .../pagememory/PersistentPageMemoryNoLoadTest.java |   2 +
 .../pagememory/mv/FailedCheckpointTest.java        |   2 +
 13 files changed, 343 insertions(+), 9 deletions(-)

diff --git a/modules/page-memory/build.gradle b/modules/page-memory/build.gradle
index a20830959e7..7189f055c56 100644
--- a/modules/page-memory/build.gradle
+++ b/modules/page-memory/build.gradle
@@ -41,6 +41,7 @@ dependencies {
     testImplementation project(':ignite-failure-handler')
     testImplementation testFixtures(project(':ignite-core'))
     testImplementation testFixtures(project(':ignite-configuration'))
+    testImplementation testFixtures(project(':ignite-metrics'))
     testImplementation libs.auto.service.annotations
 
     testFixturesAnnotationProcessor libs.auto.service
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 acbe84a2f13..187d14d1252 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
@@ -113,6 +113,7 @@ public class CheckpointManager {
             PageIoRegistry ioRegistry,
             LogSyncer logSyncer,
             ExecutorService commonExecutorService,
+            CheckpointMetricSource checkpointMetricSource,
             // TODO: IGNITE-17017 Move to common config
             int pageSize
     ) throws IgniteInternalCheckedException {
@@ -168,7 +169,8 @@ public class CheckpointManager {
                 pageSize,
                 checkpointConfig,
                 logSyncer,
-                partitionDestructionLockManager
+                partitionDestructionLockManager,
+                checkpointMetricSource
         );
 
         checkpointTimeoutLock = new CheckpointTimeoutLock(
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricSource.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricSource.java
new file mode 100644
index 00000000000..85a296afeea
--- /dev/null
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricSource.java
@@ -0,0 +1,85 @@
+/*
+ * 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.checkpoint;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.MetricSource;
+import org.jetbrains.annotations.Nullable;
+
+/** Metric source for checkpoint of persistent page memory. */
+public class CheckpointMetricSource implements MetricSource {
+    private final String name;
+
+    /** Metrics map. Only modified in {@code synchronized} context. */
+    private final Map<String, Metric> metrics = new HashMap<>();
+
+    /** Enabled flag. Only modified in {@code synchronized} context. */
+    private boolean enabled;
+
+    /**
+     * Constructor.
+     *
+     * @param name Metric set name.
+     */
+    public CheckpointMetricSource(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String name() {
+        return name;
+    }
+
+    @Override
+    public @Nullable String group() {
+        return "storage";
+    }
+
+    /** Adds metric to the source. */
+    synchronized <T extends Metric> T addMetric(T metric) {
+        assert !enabled : "Cannot add metrics when source is enabled";
+
+        metrics.put(metric.name(), metric);
+
+        return metric;
+    }
+
+    @Override
+    public synchronized @Nullable MetricSet enable() {
+        if (enabled) {
+            return null;
+        }
+
+        enabled = true;
+
+        return new MetricSet(name, description(), group(), 
Map.copyOf(metrics));
+    }
+
+    @Override
+    public synchronized void disable() {
+        enabled = false;
+    }
+
+    @Override
+    public synchronized boolean enabled() {
+        return enabled;
+    }
+}
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetrics.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetrics.java
new file mode 100644
index 00000000000..4a3769809d4
--- /dev/null
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetrics.java
@@ -0,0 +1,116 @@
+/*
+ * 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.checkpoint;
+
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.internal.metrics.AtomicLongMetric;
+
+/** Checkpoint metrics. */
+class CheckpointMetrics {
+    private final AtomicLongMetric lastLockWaitDuration;
+
+    private final AtomicLongMetric lastLockHoldDuration;
+
+    private final AtomicLongMetric lastPagesWriteDuration;
+
+    private final AtomicLongMetric lastFsyncDuration;
+
+    private final AtomicLongMetric lastBeforeLockDuration;
+
+    private final AtomicLongMetric lastReplicatorLogSyncDuration;
+
+    private final AtomicLongMetric lastSplitAndSortCheckpointPagesDuration;
+
+    private final AtomicLongMetric lastWaitPageReplacementDuration;
+
+    private final AtomicLongMetric lastCheckpointDuration;
+
+    private final AtomicLongMetric lastTotalPagesNumber;
+
+    CheckpointMetrics(CheckpointMetricSource source) {
+        lastLockWaitDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointLockWaitDuration",
+                "Duration of the last checkpoint lock wait in milliseconds."
+        ));
+
+        lastLockHoldDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointLockHoldDuration",
+                "Duration of the last checkpoint lock hold in milliseconds."
+        ));
+
+        lastBeforeLockDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointBeforeLockDuration",
+                "Duration of actions before hold lock by the last checkpoint 
in milliseconds."
+        ));
+
+        lastPagesWriteDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointPagesWriteDuration",
+                "Duration of the last checkpoint pages write in milliseconds."
+        ));
+
+        lastFsyncDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointFsyncDuration",
+                "Duration of the sync phase of the last checkpoint in 
milliseconds."
+        ));
+
+        lastReplicatorLogSyncDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointReplicatorLogSyncDuration",
+                "Duration of the replicator log sync phase of the last 
checkpoint in milliseconds."
+        ));
+
+        lastSplitAndSortCheckpointPagesDuration = source.addMetric(new 
AtomicLongMetric(
+                "LastCheckpointSplitAndSortPagesDuration",
+                "Duration of the split and sort dirty pages phase of the last 
checkpoint in milliseconds."
+        ));
+
+        lastWaitPageReplacementDuration = source.addMetric(new 
AtomicLongMetric(
+                "LastCheckpointWaitPageReplacementDuration",
+                "Duration of the wait page replacement phase of the last 
checkpoint in milliseconds."
+        ));
+
+        lastCheckpointDuration = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointDuration",
+                "Duration of the last checkpoint in milliseconds."
+        ));
+
+        lastTotalPagesNumber = source.addMetric(new AtomicLongMetric(
+                "LastCheckpointTotalPagesNumber",
+                "Total number of pages written during the last checkpoint."
+        ));
+    }
+
+    /**
+     * Updates metrics.
+     *
+     * @param tracker Checkpoint metrics tracker.
+     * @param totalPages Total number of pages written during the checkpoint.
+     */
+    void update(CheckpointMetricsTracker tracker, long totalPages) {
+        
lastLockWaitDuration.value(tracker.writeLockWaitDuration(TimeUnit.MILLISECONDS));
+        
lastLockHoldDuration.value(tracker.writeLockHoldDuration(TimeUnit.MILLISECONDS));
+        
lastBeforeLockDuration.value(tracker.beforeWriteLockDuration(TimeUnit.MILLISECONDS));
+        
lastPagesWriteDuration.value(tracker.pagesWriteDuration(TimeUnit.MILLISECONDS));
+        lastFsyncDuration.value(tracker.fsyncDuration(TimeUnit.MILLISECONDS));
+        
lastReplicatorLogSyncDuration.value(tracker.replicatorLogSyncDuration(TimeUnit.MILLISECONDS));
+        
lastSplitAndSortCheckpointPagesDuration.value(tracker.splitAndSortCheckpointPagesDuration(TimeUnit.MILLISECONDS));
+        
lastWaitPageReplacementDuration.value(tracker.waitPageReplacementDuration(TimeUnit.MILLISECONDS));
+        
lastCheckpointDuration.value(tracker.checkpointDuration(TimeUnit.MILLISECONDS));
+
+        lastTotalPagesNumber.value(totalPages);
+    }
+}
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 df0d9062170..0d331a17e74 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
@@ -99,6 +99,7 @@ import org.jetbrains.annotations.Nullable;
  * <li>Finish the checkpoint.
  * </ul>
  */
+// TODO: IGNITE-26593 Fix the counting and output of the written dirty pages 
metric
 public class Checkpointer extends IgniteWorker {
     private static final String CHECKPOINT_STARTED_LOG_TEMPLATE = "Checkpoint 
started ["
             + "checkpointId={}, "
@@ -186,6 +187,8 @@ public class Checkpointer extends IgniteWorker {
 
     private final PartitionDestructionLockManager 
partitionDestructionLockManager;
 
+    private final CheckpointMetrics checkpointMetrics;
+
     /**
      * Constructor.
      *
@@ -213,7 +216,8 @@ public class Checkpointer extends IgniteWorker {
             int pageSize,
             CheckpointConfiguration checkpointConfig,
             LogSyncer logSyncer,
-            PartitionDestructionLockManager partitionDestructionLockManager
+            PartitionDestructionLockManager partitionDestructionLockManager,
+            CheckpointMetricSource checkpointMetricSource
     ) {
         super(LOG, igniteInstanceName, "checkpoint-thread");
 
@@ -245,6 +249,8 @@ public class Checkpointer extends IgniteWorker {
         } else {
             checkpointWritePagesPool = null;
         }
+
+        checkpointMetrics = new CheckpointMetrics(checkpointMetricSource);
     }
 
     @Override
@@ -434,6 +440,8 @@ public class Checkpointer extends IgniteWorker {
                     );
                 }
             }
+
+            checkpointMetrics.update(tracker, chp.dirtyPagesSize);
         } catch (IgniteInternalCheckedException e) {
             if (chp != null) {
                 chp.progress.fail(e);
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 bc00730f078..0b00e4907bf 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
@@ -94,6 +94,7 @@ public class CheckpointManagerTest extends 
BaseIgniteAbstractTest {
                 mock(PageIoRegistry.class),
                 mock(LogSyncer.class),
                 executorService,
+                new CheckpointMetricSource("test"),
                 1024
         );
 
@@ -251,6 +252,7 @@ public class CheckpointManagerTest extends 
BaseIgniteAbstractTest {
                 mock(PageIoRegistry.class),
                 mock(LogSyncer.class),
                 executorService,
+                new CheckpointMetricSource("test"),
                 1024
         ));
 
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTest.java
new file mode 100644
index 00000000000..1601954d357
--- /dev/null
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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.checkpoint;
+
+import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.internal.manager.ComponentContext;
+import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.metrics.MetricManager;
+import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.metrics.TestMetricManager;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/** For {@link CheckpointMetrics} testing. */
+public class CheckpointMetricsTest {
+    private final MetricManager metricManager = new TestMetricManager();
+
+    private final CheckpointMetricSource metricSource = new 
CheckpointMetricSource("test");
+
+    private final CheckpointMetrics metrics = new 
CheckpointMetrics(metricSource);
+
+    @BeforeEach
+    void setUp() {
+        metricManager.registerSource(metricSource);
+        metricManager.enable(metricSource);
+
+        assertThat(metricManager.startAsync(new ComponentContext()), 
willCompleteSuccessfully());
+    }
+
+    @AfterEach
+    void tearDown() {
+        metricManager.beforeNodeStop();
+
+        assertThat(metricManager.stopAsync(new ComponentContext()), 
willCompleteSuccessfully());
+    }
+
+    @Test
+    void testUpdate() {
+        var tracker = mock(CheckpointMetricsTracker.class);
+
+        
when(tracker.writeLockWaitDuration(TimeUnit.MILLISECONDS)).thenReturn(10L);
+        
when(tracker.writeLockHoldDuration(TimeUnit.MILLISECONDS)).thenReturn(20L);
+        
when(tracker.beforeWriteLockDuration(TimeUnit.MILLISECONDS)).thenReturn(30L);
+        
when(tracker.pagesWriteDuration(TimeUnit.MILLISECONDS)).thenReturn(40L);
+        when(tracker.fsyncDuration(TimeUnit.MILLISECONDS)).thenReturn(50L);
+        
when(tracker.replicatorLogSyncDuration(TimeUnit.MILLISECONDS)).thenReturn(60L);
+        
when(tracker.splitAndSortCheckpointPagesDuration(TimeUnit.MILLISECONDS)).thenReturn(70L);
+        
when(tracker.waitPageReplacementDuration(TimeUnit.MILLISECONDS)).thenReturn(80L);
+        
when(tracker.checkpointDuration(TimeUnit.MILLISECONDS)).thenReturn(90L);
+
+        metrics.update(tracker, 100);
+
+        MetricSet metricSet = 
metricManager.metricSnapshot().metrics().get(metricSource.name());
+
+        checkMetricValue(metricSet, "LastCheckpointLockWaitDuration", "10");
+        checkMetricValue(metricSet, "LastCheckpointLockHoldDuration", "20");
+        checkMetricValue(metricSet, "LastCheckpointBeforeLockDuration", "30");
+        checkMetricValue(metricSet, "LastCheckpointPagesWriteDuration", "40");
+        checkMetricValue(metricSet, "LastCheckpointFsyncDuration", "50");
+        checkMetricValue(metricSet, "LastCheckpointReplicatorLogSyncDuration", 
"60");
+        checkMetricValue(metricSet, "LastCheckpointSplitAndSortPagesDuration", 
"70");
+        checkMetricValue(metricSet, 
"LastCheckpointWaitPageReplacementDuration", "80");
+        checkMetricValue(metricSet, "LastCheckpointDuration", "90");
+
+        checkMetricValue(metricSet, "LastCheckpointTotalPagesNumber", "100");
+    }
+
+    private static void checkMetricValue(MetricSet metricSet, String 
metricName, String exp) {
+        Metric metric = metricSet.get(metricName);
+
+        assertNotNull(metric, metricName);
+
+        assertEquals(exp, metric.getValueAsString(), metricName);
+    }
+}
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 789ac8c17e4..c225d371ce4 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
@@ -134,7 +134,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                partitionDestructionLockManager
+                partitionDestructionLockManager,
+                new CheckpointMetricSource("test")
         );
 
         assertNull(checkpointer.runner());
@@ -170,7 +171,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                new PartitionDestructionLockManager()
+                new PartitionDestructionLockManager(),
+                new CheckpointMetricSource("test")
         ));
 
         assertNull(checkpointer.lastCheckpointProgress());
@@ -277,7 +279,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                new PartitionDestructionLockManager()
+                new PartitionDestructionLockManager(),
+                new CheckpointMetricSource("test")
         );
 
         CompletableFuture<?> waitCheckpointEventFuture = 
runAsync(checkpointer::waitCheckpointEvent);
@@ -311,7 +314,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                partitionDestructionLockManager
+                partitionDestructionLockManager,
+                new CheckpointMetricSource("test")
         ));
 
         checkpointer.scheduledProgress()
@@ -413,7 +417,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mockLogSyncer,
-                partitionDestructionLockManager
+                partitionDestructionLockManager,
+                new CheckpointMetricSource("test")
         ));
 
         assertDoesNotThrow(checkpointer::doCheckpoint);
@@ -451,7 +456,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                partitionDestructionLockManager
+                partitionDestructionLockManager,
+                new CheckpointMetricSource("test")
         ));
 
         assertDoesNotThrow(checkpointer::doCheckpoint);
@@ -479,7 +485,8 @@ public class CheckpointerTest extends 
BaseIgniteAbstractTest {
                 PAGE_SIZE,
                 checkpointConfig,
                 mock(LogSyncer.class),
-                new PartitionDestructionLockManager()
+                new PartitionDestructionLockManager(),
+                new CheckpointMetricSource("test")
         );
 
         // Checks case 0 deviation.
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 5337e7831d7..93754367275 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
@@ -64,6 +64,7 @@ import 
org.apache.ignite.internal.pagememory.persistence.PartitionMetaManager;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
+import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
 import 
org.apache.ignite.internal.pagememory.persistence.store.DeltaFilePageStoreIo;
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
@@ -141,6 +142,7 @@ public abstract class AbstractPageReplacementTest extends 
IgniteAbstractTest {
                 ioRegistry,
                 mock(LogSyncer.class),
                 executorService,
+                new CheckpointMetricSource("test"),
                 PAGE_SIZE
         );
 
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/throttling/PageMemoryThrottlingTest.java
index ddd1b902e63..fe13e66e035 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
@@ -63,6 +63,7 @@ import 
org.apache.ignite.internal.pagememory.persistence.PartitionMetaManager;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
+import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState;
 import org.apache.ignite.internal.pagememory.persistence.store.FilePageStore;
@@ -153,6 +154,7 @@ public class PageMemoryThrottlingTest extends 
IgniteAbstractTest {
                 ioRegistry,
                 () -> {},
                 executorService,
+                new CheckpointMetricSource("test"),
                 PAGE_SIZE
         );
 
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 c5cd187975a..194e5dd22c5 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
@@ -48,6 +48,7 @@ import 
org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.pagememory.persistence.PartitionMetaManager;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
+import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import org.apache.ignite.internal.pagememory.tree.BplusTree;
 import org.apache.ignite.internal.storage.StorageException;
@@ -219,6 +220,8 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
 
         partitionMetaManager = new PartitionMetaManager(ioRegistry, pageSize, 
StoragePartitionMeta.FACTORY);
 
+        var checkpointMetricSource = new CheckpointMetricSource("storage." + 
ENGINE_NAME + ".checkpoint");
+
         try {
             checkpointManager = new CheckpointManager(
                     igniteInstanceName,
@@ -231,6 +234,7 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
                     ioRegistry,
                     logSyncer,
                     commonExecutorService,
+                    checkpointMetricSource,
                     pageSize
             );
 
@@ -264,6 +268,9 @@ public class PersistentPageMemoryStorageEngine extends 
AbstractPageMemoryStorage
         executor.allowCoreThreadTimeOut(true);
 
         destructionExecutor = executor;
+
+        metricManager.registerSource(checkpointMetricSource);
+        metricManager.enable(checkpointMetricSource);
     }
 
     /** Creates a checkpoint configuration based on the provided {@link 
PageMemoryCheckpointConfiguration}. */
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 e90e71da7fb..47161def84a 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
@@ -78,6 +78,7 @@ import 
org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMet
 import 
org.apache.ignite.internal.pagememory.persistence.TestPageReadWriteManager;
 import org.apache.ignite.internal.pagememory.persistence.WriteDirtyPage;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
+import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricsTracker;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgress;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointProgressImpl;
@@ -513,6 +514,7 @@ public class PersistentPageMemoryNoLoadTest extends 
AbstractPageMemoryNoLoadSelf
                 ioRegistry,
                 mock(LogSyncer.class),
                 executorService,
+                new CheckpointMetricSource("test"),
                 PAGE_SIZE
         );
     }
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/FailedCheckpointTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/FailedCheckpointTest.java
index 07e37abd0fa..d96ab9d8410 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/FailedCheckpointTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/FailedCheckpointTest.java
@@ -61,6 +61,7 @@ import 
org.apache.ignite.internal.pagememory.persistence.GroupPartitionId;
 import org.apache.ignite.internal.pagememory.persistence.PartitionMetaManager;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
+import 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointMetricSource;
 import 
org.apache.ignite.internal.pagememory.persistence.store.FilePageStoreManager;
 import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.storage.BaseMvStoragesTest;
@@ -293,6 +294,7 @@ public class FailedCheckpointTest extends 
BaseMvStoragesTest {
                     ioRegistry,
                     mock(LogSyncer.class),
                     commonExecutorService,
+                    new CheckpointMetricSource("test"),
                     pageSize
             );
 

Reply via email to