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

tkalkirill 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 d8285e06d7 IGNITE-23819 Fix the time output in "Checkpoint finished" 
(#4819)
d8285e06d7 is described below

commit d8285e06d793fc694bff575478727ab84709a48d
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Tue Dec 3 13:44:22 2024 +0300

    IGNITE-23819 Fix the time output in "Checkpoint finished" (#4819)
---
 .../checkpoint/CheckpointMetricsTracker.java       | 242 ++++++++++++---------
 .../persistence/checkpoint/CheckpointWorkflow.java |   6 +-
 .../persistence/checkpoint/Checkpointer.java       |  17 +-
 .../persistence/checkpoint/Duration.java           |  56 +++++
 .../checkpoint/CheckpointMetricsTrackerTest.java   |  83 +++----
 .../checkpoint/CheckpointWorkflowTest.java         |  19 +-
 6 files changed, 262 insertions(+), 161 deletions(-)

diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTracker.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTracker.java
index 5d68995520..e8429ea3bc 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTracker.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTracker.java
@@ -52,241 +52,289 @@ public class CheckpointMetricsTracker {
 
     private final long startTimestamp = 
FastTimestamps.coarseCurrentTimeMillis();
 
-    private final long startNanos = System.nanoTime();
+    private final Duration checkpointDuration = new Duration();
 
-    private long writeLockWaitStartNanos;
+    private final Duration writeLockWaitDuration = new Duration();
 
-    private long onMarkCheckpointBeginEndNanos;
+    private final Duration onMarkCheckpointBeginDuration = new Duration();
 
-    private long onMarkCheckpointBeginStartNanos;
+    private final Duration writeLockHoldDuration = new Duration();
 
-    private long writeLockReleaseNanos;
+    private final Duration pagesWriteDuration = new Duration();
 
-    private long pagesWriteStartNanos;
+    private final Duration fsyncDuration = new Duration();
 
-    private long fsyncStartNanos;
+    private final Duration replicatorLogSyncDuration = new Duration();
 
-    private long replicatorLogSyncStartNanos;
-
-    private long endNanos;
-
-    private long splitAndSortPagesStartNanos;
-
-    private long splitAndSortPagesEndNanos;
+    private final Duration splitAndSortCheckpointPagesDuration = new 
Duration();
 
     /**
-     * Returns checkpoint start timestamp in mills.
+     * Increments counter if copy on write page was written.
      *
      * <p>Thread safe.
      */
-    public long checkpointStartTime() {
-        return startTimestamp;
+    public void onCopyOnWritePageWritten() {
+        COPY_ON_WRITE_PAGES_WRITTEN_UPDATER.incrementAndGet(this);
     }
 
     /**
-     * Callback on checkpoint end.
+     * Returns written copy on write pages.
      *
-     * <p>Not thread safe.
+     * <p>Thread safe.
      */
-    public void onCheckpointEnd() {
-        endNanos = System.nanoTime();
+    public int copyOnWritePagesWritten() {
+        return copyOnWritePagesWritten;
     }
 
     /**
-     * Increments counter if copy on write page was written.
+     * Increments counter if data page was written.
      *
      * <p>Thread safe.
      */
-    public void onCopyOnWritePageWritten() {
-        COPY_ON_WRITE_PAGES_WRITTEN_UPDATER.incrementAndGet(this);
+    public void onDataPageWritten() {
+        DATA_PAGES_WRITTEN_UPDATER.incrementAndGet(this);
     }
 
     /**
-     * Increments counter if data page was written.
+     * Returns data pages written.
      *
      * <p>Thread safe.
      */
-    public void onDataPageWritten() {
-        DATA_PAGES_WRITTEN_UPDATER.incrementAndGet(this);
+    public int dataPagesWritten() {
+        return dataPagesWritten;
     }
 
     /**
-     * Returns written copy on write pages.
+     * Returns checkpoint start timestamp in mills.
      *
-     * <p>Thread safe.
+     * <p>Not thread safe.</p>
      */
-    public int copyOnWritePagesWritten() {
-        return copyOnWritePagesWritten;
+    public long checkpointStartTime() {
+        return startTimestamp;
     }
 
     /**
-     * Returns data pages written.
+     * Callback on checkpoint start.
      *
-     * <p>Thread safe.
+     * <p>Not thread safe.</p>
      */
-    public int dataPagesWritten() {
-        return dataPagesWritten;
+    public void onCheckpointStart() {
+        checkpointDuration.onStart();
     }
 
     /**
-     * Callback before acquiring checkpoint write lock.
+     * Callback on checkpoint end.
+     *
+     * <p>Not thread safe.</p>
+     */
+    public void onCheckpointEnd() {
+        checkpointDuration.onEnd();
+    }
+
+    /**
+     * Returns total checkpoint duration.
      *
      * <p>Not thread safe.
      */
+    public long checkpointDuration(TimeUnit timeUnit) {
+        return checkpointDuration.duration(timeUnit);
+    }
+
+    /**
+     * Callback before acquiring checkpoint write lock.
+     *
+     * <p>Not thread safe.</p>
+     */
     public void onWriteLockWaitStart() {
-        writeLockWaitStartNanos = System.nanoTime();
+        writeLockWaitDuration.onStart();
     }
 
     /**
-     * Callback after release checkpoint write lock.
+     * Callback after acquiring checkpoint write lock.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public void onWriteLockRelease() {
-        writeLockReleaseNanos = System.nanoTime();
+    public void onWriteLockWaitEnd() {
+        writeLockWaitDuration.onEnd();
+    }
+
+    /**
+     * Returns total acquiring checkpoint write lock duration.
+     *
+     * <p>Not thread safe.</p>
+     */
+    public long writeLockWaitDuration(TimeUnit timeUnit) {
+        return writeLockWaitDuration.duration(timeUnit);
     }
 
     /**
      * Callback before all {@link CheckpointListener#onMarkCheckpointBegin}.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
     public void onMarkCheckpointBeginStart() {
-        onMarkCheckpointBeginStartNanos = System.nanoTime();
+        onMarkCheckpointBeginDuration.onStart();
     }
 
     /**
      * Callback after all {@link CheckpointListener#onMarkCheckpointBegin}.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
     public void onMarkCheckpointBeginEnd() {
-        onMarkCheckpointBeginEndNanos = System.nanoTime();
+        onMarkCheckpointBeginDuration.onEnd();
+    }
+
+    /**
+     * Returns execution all {@link CheckpointListener#onMarkCheckpointBegin} 
under write lock duration in the given time unit.
+     *
+     * <p>Not thread safe.</p>
+     */
+    public long onMarkCheckpointBeginDuration(TimeUnit timeUnit) {
+        return onMarkCheckpointBeginDuration.duration(timeUnit);
     }
 
     /**
      * Callback on start writes pages to {@link PageStore}s.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
     public void onPagesWriteStart() {
-        pagesWriteStartNanos = System.nanoTime();
+        pagesWriteDuration.onStart();
+    }
+
+    /**
+     * Callback on end writes pages to {@link PageStore}s.
+     *
+     * <p>Not thread safe.</p>
+     */
+    public void onPagesWriteEnd() {
+        pagesWriteDuration.onEnd();
+    }
+
+    /**
+     * Returns pages write duration in the given time unit.
+     *
+     * <p>Not thread safe.</p>
+     */
+    public long pagesWriteDuration(TimeUnit timeUnit) {
+        return pagesWriteDuration.duration(timeUnit);
     }
 
     /**
      * Callback on start fsync {@link PageStore}s.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
     public void onFsyncStart() {
-        fsyncStartNanos = System.nanoTime();
+        fsyncDuration.onStart();
     }
 
     /**
-     * Callback before split and sort checkpoint pages.
+     * Callback on end fsync {@link PageStore}s.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public void onSplitAndSortCheckpointPagesStart() {
-        splitAndSortPagesStartNanos = System.nanoTime();
+    public void onFsyncEnd() {
+        fsyncDuration.onEnd();
     }
 
     /**
-     * Callback after split and sort checkpoint pages.
+     * Returns checkpoint fsync duration in the given time unit.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public void onSplitAndSortCheckpointPagesEnd() {
-        splitAndSortPagesEndNanos = System.nanoTime();
+    public long fsyncDuration(TimeUnit timeUnit) {
+        return fsyncDuration.duration(timeUnit);
     }
 
     /**
-     * Callback at the start of the replication protocol write-ahead-log sync.
+     * Callback before split and sort checkpoint pages.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public void onReplicatorLogSyncStart() {
-        replicatorLogSyncStartNanos = System.nanoTime();
+    public void onSplitAndSortCheckpointPagesStart() {
+        splitAndSortCheckpointPagesDuration.onStart();
     }
 
     /**
-     * Returns total checkpoint duration.
+     * Callback after split and sort checkpoint pages.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long totalDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(endNanos - startNanos, NANOSECONDS);
+    public void onSplitAndSortCheckpointPagesEnd() {
+        splitAndSortCheckpointPagesDuration.onEnd();
     }
 
     /**
-     * Returns checkpoint write lock wait duration in the given time unit.
+     * Returns duration of splitting and sorting checkpoint pages in mills.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long writeLockWaitDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(onMarkCheckpointBeginStartNanos - 
writeLockWaitStartNanos, NANOSECONDS);
+    public long splitAndSortCheckpointPagesDuration(TimeUnit timeUnit) {
+        return splitAndSortCheckpointPagesDuration.duration(timeUnit);
     }
 
     /**
-     * Returns checkpoint action before taken write lock duration in the given 
time unit.
+     * Callback at the start of the replication protocol write-ahead-log sync.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long beforeWriteLockDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(writeLockWaitStartNanos - startNanos, 
NANOSECONDS);
+    public void onReplicatorLogSyncStart() {
+        replicatorLogSyncDuration.onStart();
     }
 
     /**
-     * Returns execution all {@link CheckpointListener#onMarkCheckpointBegin} 
under write lock duration in the given time unit.
+     * Callback at the end of the replication protocol write-ahead-log sync.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long onMarkCheckpointBeginDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(onMarkCheckpointBeginEndNanos - 
onMarkCheckpointBeginStartNanos, NANOSECONDS);
+    public void onReplicatorLogSyncEnd() {
+        replicatorLogSyncDuration.onEnd();
     }
 
     /**
-     * Returns checkpoint write lock hold duration in the given time unit.
+     * Returns checkpoint replication protocol write-ahead-log sync duration 
in the given time unit.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long writeLockHoldDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(writeLockReleaseNanos - 
onMarkCheckpointBeginStartNanos, NANOSECONDS);
+    public long replicatorLogSyncDuration(TimeUnit timeUnit) {
+        return replicatorLogSyncDuration.duration(timeUnit);
     }
 
     /**
-     * Returns pages write duration in the given time unit.
+     * Callback after acquire checkpoint write lock.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long pagesWriteDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(fsyncStartNanos - pagesWriteStartNanos, 
NANOSECONDS);
+    public void onWriteLockHoldStart() {
+        writeLockHoldDuration.onStart();
     }
 
     /**
-     * Returns checkpoint fsync duration in the given time unit.
+     * Callback after release checkpoint write lock.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long fsyncDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(endNanos - fsyncStartNanos, NANOSECONDS);
+    public void onWriteLockHoldEnd() {
+        writeLockHoldDuration.onEnd();
     }
 
     /**
-     * Returns duration of splitting and sorting checkpoint pages in mills.
+     * Returns checkpoint write lock hold duration in the given time unit.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long splitAndSortCheckpointPagesDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(splitAndSortPagesEndNanos - 
splitAndSortPagesStartNanos, NANOSECONDS);
+    public long writeLockHoldDuration(TimeUnit timeUnit) {
+        return writeLockHoldDuration.duration(timeUnit);
     }
 
     /**
-     * Returns checkpoint replication protocol write-ahead-log sync duration 
in the given time unit.
+     * Returns checkpoint action before taken write lock duration in the given 
time unit.
      *
-     * <p>Not thread safe.
+     * <p>Not thread safe.</p>
      */
-    public long replicatorLogSyncDuration(TimeUnit timeUnit) {
-        return timeUnit.convert(endNanos - replicatorLogSyncStartNanos, 
NANOSECONDS);
+    public long beforeWriteLockDuration(TimeUnit timeUnit) {
+        return timeUnit.convert(writeLockWaitDuration.startNanos() - 
checkpointDuration.startNanos(), NANOSECONDS);
     }
 }
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflow.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflow.java
index 2f8415a544..99a0059e4a 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflow.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflow.java
@@ -233,6 +233,10 @@ class CheckpointWorkflow {
 
         checkpointReadWriteLock.writeLock();
 
+        tracker.onWriteLockWaitEnd();
+
+        tracker.onWriteLockHoldStart();
+
         DataRegionsDirtyPages dirtyPages;
 
         try {
@@ -265,7 +269,7 @@ class CheckpointWorkflow {
         } finally {
             checkpointReadWriteLock.writeUnlock();
 
-            tracker.onWriteLockRelease();
+            tracker.onWriteLockHoldEnd();
 
             onReleaseWriteLock.run();
         }
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 cf1de7712e..3cac430c33 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
@@ -325,6 +325,8 @@ public class Checkpointer extends IgniteWorker {
         try {
             var tracker = new CheckpointMetricsTracker();
 
+            tracker.onCheckpointStart();
+
             startCheckpointProgress();
 
             try {
@@ -385,9 +387,6 @@ public class Checkpointer extends IgniteWorker {
                             chp.progress.reason()
                     );
                 }
-
-                tracker.onPagesWriteStart();
-                tracker.onFsyncStart();
             }
 
             // Must mark successful checkpoint only if there are no exceptions 
or interrupts.
@@ -397,7 +396,7 @@ public class Checkpointer extends IgniteWorker {
 
             if (chp.hasDelta()) {
                 if (log.isInfoEnabled()) {
-                    float totalDurationInSeconds = 
tracker.totalDuration(MILLISECONDS) / 1000.0f;
+                    float totalDurationInSeconds = 
tracker.checkpointDuration(MILLISECONDS) / 1000.0f;
                     float avgWriteSpeedInBytes = ((long) pageSize * 
chp.dirtyPagesSize) / totalDurationInSeconds;
 
                     log.info(
@@ -406,8 +405,8 @@ public class Checkpointer extends IgniteWorker {
                             chp.dirtyPagesSize,
                             tracker.pagesWriteDuration(MILLISECONDS),
                             tracker.fsyncDuration(MILLISECONDS),
-                            tracker.replicatorLogSyncDuration(MICROSECONDS),
-                            tracker.totalDuration(MILLISECONDS),
+                            tracker.replicatorLogSyncDuration(MILLISECONDS),
+                            tracker.checkpointDuration(MILLISECONDS),
                             
WriteSpeedFormatter.formatWriteSpeed(avgWriteSpeedInBytes)
                     );
                 }
@@ -480,6 +479,8 @@ public class Checkpointer extends IgniteWorker {
         // Wait and check for errors.
         CompletableFuture.allOf(futures).join();
 
+        tracker.onPagesWriteEnd();
+
         // Must re-check shutdown flag here because threads may have skipped 
some pages because of it.
         // If so, we should not finish checkpoint.
         if (shutdownNow.getAsBoolean()) {
@@ -505,6 +506,8 @@ public class Checkpointer extends IgniteWorker {
 
         syncUpdatedPageStores(updatedPartitions, currentCheckpointProgress);
 
+        tracker.onFsyncEnd();
+
         compactor.triggerCompaction();
 
         if (shutdownNow.getAsBoolean()) {
@@ -900,6 +903,8 @@ public class Checkpointer extends IgniteWorker {
             tracker.onReplicatorLogSyncStart();
 
             logSyncer.sync();
+
+            tracker.onReplicatorLogSyncEnd();
         } catch (Exception e) {
             log.error("Failed to sync write-ahead log during checkpoint", e);
 
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Duration.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Duration.java
new file mode 100644
index 0000000000..46433716c6
--- /dev/null
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/Duration.java
@@ -0,0 +1,56 @@
+/*
+ * 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;
+
+/**
+ * Class for getting the duration of an operation.
+ *
+ * <p>Not thread safe.</p>
+ */
+class Duration {
+    private long startNanos;
+
+    private long endNanos;
+
+    /** Callback before the operation starts. */
+    void onStart() {
+        startNanos = System.nanoTime();
+    }
+
+    /** Callback after the end of the operation. */
+    void onEnd() {
+        endNanos = System.nanoTime();
+    }
+
+    /** Returns the start time of the operation in nanos. */
+    long startNanos() {
+        return startNanos;
+    }
+
+    /** Returns the end time of the operation in nanos. */
+    long endNanos() {
+        return startNanos;
+    }
+
+    /** Returns the duration in the specified time unit. */
+    long duration(TimeUnit timeUnit) {
+        return timeUnit.convert(endNanos - startNanos, TimeUnit.NANOSECONDS);
+    }
+}
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTrackerTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTrackerTest.java
index 8ad44189ca..39452dfc8b 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTrackerTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointMetricsTrackerTest.java
@@ -32,27 +32,30 @@ import org.junit.jupiter.api.Test;
  * For {@link CheckpointMetricsTracker} testing.
  */
 public class CheckpointMetricsTrackerTest {
+    private final CheckpointMetricsTracker tracker = new 
CheckpointMetricsTracker();
+
     @Test
-    void testStartAndEndCheckpoint() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
+    void testCheckpoint() {
+        assertThat(tracker.checkpointDuration(NANOSECONDS), equalTo(0L));
 
-        long checkpointStartTime = tracker.checkpointStartTime();
-
-        assertThat(checkpointStartTime, allOf(greaterThan(0L), 
lessThanOrEqualTo(coarseCurrentTimeMillis())));
+        tracker.onCheckpointStart();
 
         waitForTimeChange();
 
         tracker.onCheckpointEnd();
 
-        assertThat(tracker.checkpointStartTime(), 
equalTo(checkpointStartTime));
+        assertThat(tracker.checkpointDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
+    }
 
-        assertThat(tracker.totalDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
+    @Test
+    void testCheckpointStartTime() {
+        long checkpointStartTime = tracker.checkpointStartTime();
+
+        assertThat(checkpointStartTime, allOf(greaterThan(0L), 
lessThanOrEqualTo(coarseCurrentTimeMillis())));
     }
 
     @Test
     void testCopyOnWritePageWritten() {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
         assertThat(tracker.copyOnWritePagesWritten(), equalTo(0));
 
         tracker.onCopyOnWritePageWritten();
@@ -66,8 +69,6 @@ public class CheckpointMetricsTrackerTest {
 
     @Test
     void testDataPagesWritten() {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
         assertThat(tracker.dataPagesWritten(), equalTo(0));
 
         tracker.onDataPageWritten();
@@ -80,9 +81,7 @@ public class CheckpointMetricsTrackerTest {
     }
 
     @Test
-    void testSplitAndSortCheckpointPages() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
+    void testSplitAndSortCheckpointPages() {
         assertThat(tracker.splitAndSortCheckpointPagesDuration(NANOSECONDS), 
equalTo(0L));
 
         tracker.onSplitAndSortCheckpointPagesStart();
@@ -95,54 +94,46 @@ public class CheckpointMetricsTrackerTest {
     }
 
     @Test
-    void testFsync() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
+    void testFsync() {
         assertThat(tracker.fsyncDuration(NANOSECONDS), equalTo(0L));
 
         tracker.onFsyncStart();
 
         waitForTimeChange();
 
-        tracker.onCheckpointEnd();
+        tracker.onFsyncEnd();
 
         assertThat(tracker.fsyncDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
     }
 
     @Test
-    void testReplicatorLogSync() throws Exception {
-        var tracker = new CheckpointMetricsTracker();
-
+    void testReplicatorLogSync() {
         assertThat(tracker.replicatorLogSyncDuration(NANOSECONDS), 
equalTo(0L));
 
         tracker.onReplicatorLogSyncStart();
 
         waitForTimeChange();
 
-        tracker.onCheckpointEnd();
+        tracker.onReplicatorLogSyncEnd();
 
         assertThat(tracker.replicatorLogSyncDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
     }
 
     @Test
-    void testPagesWrite() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
+    void testPagesWrite() {
         assertThat(tracker.pagesWriteDuration(NANOSECONDS), equalTo(0L));
 
         tracker.onPagesWriteStart();
 
         waitForTimeChange();
 
-        tracker.onFsyncStart();
+        tracker.onPagesWriteEnd();
 
         assertThat(tracker.pagesWriteDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
     }
 
     @Test
-    void testOnMarkCheckpointBegin() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
+    void testOnMarkCheckpointBegin() {
         assertThat(tracker.onMarkCheckpointBeginDuration(NANOSECONDS), 
equalTo(0L));
 
         tracker.onMarkCheckpointBeginStart();
@@ -155,40 +146,32 @@ public class CheckpointMetricsTrackerTest {
     }
 
     @Test
-    void testWriteLock() throws Exception {
-        CheckpointMetricsTracker tracker = new CheckpointMetricsTracker();
-
-        assertThat(tracker.writeLockWaitDuration(NANOSECONDS), equalTo(0L));
+    void testWriteLockHold() {
         assertThat(tracker.writeLockHoldDuration(NANOSECONDS), equalTo(0L));
 
-        waitForTimeChange();
-
-        tracker.onWriteLockWaitStart();
-
-        long beforeWriteLockDuration = 
tracker.beforeWriteLockDuration(NANOSECONDS);
-
-        assertThat(beforeWriteLockDuration, greaterThanOrEqualTo(1L));
-        assertThat(tracker.writeLockHoldDuration(NANOSECONDS), equalTo(0L));
+        tracker.onWriteLockHoldStart();
 
         waitForTimeChange();
 
-        tracker.onMarkCheckpointBeginStart();
+        tracker.onWriteLockHoldEnd();
+
+        assertThat(tracker.writeLockHoldDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
+    }
 
-        long writeLockWaitDuration = 
tracker.writeLockWaitDuration(NANOSECONDS);
+    @Test
+    void testWriteLockWait() {
+        assertThat(tracker.writeLockWaitDuration(NANOSECONDS), equalTo(0L));
 
-        assertThat(tracker.beforeWriteLockDuration(NANOSECONDS), 
equalTo(beforeWriteLockDuration));
-        assertThat(writeLockWaitDuration, greaterThanOrEqualTo(1L));
+        tracker.onWriteLockWaitStart();
 
         waitForTimeChange();
 
-        tracker.onWriteLockRelease();
+        tracker.onWriteLockWaitEnd();
 
-        assertThat(tracker.beforeWriteLockDuration(NANOSECONDS), 
equalTo(beforeWriteLockDuration));
-        assertThat(tracker.writeLockWaitDuration(NANOSECONDS), 
equalTo(writeLockWaitDuration));
-        assertThat(tracker.writeLockHoldDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
+        assertThat(tracker.writeLockWaitDuration(NANOSECONDS), 
greaterThanOrEqualTo(1L));
     }
 
-    private static void waitForTimeChange() throws Exception {
+    private static void waitForTimeChange() {
         long start = System.nanoTime();
 
         while (System.nanoTime() == start) {
diff --git 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
index 2c6c00ccc0..3bd860e9b2 100644
--- 
a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
+++ 
b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/checkpoint/CheckpointWorkflowTest.java
@@ -216,7 +216,6 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
         Runnable onReleaseWriteLock = mock(Runnable.class);
 
         workflow.addCheckpointListener(new TestCheckpointListener(events) {
-            /** {@inheritDoc} */
             @Override
             public void beforeCheckpointBegin(CheckpointProgress progress, 
@Nullable Executor exec) throws IgniteInternalCheckedException {
                 super.beforeCheckpointBegin(progress, exec);
@@ -230,9 +229,11 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
                 assertThat(checkpointStateArgumentCaptor.getAllValues(), 
empty());
 
                 verify(tracker, never()).onWriteLockWaitStart();
+                verify(tracker, never()).onWriteLockWaitEnd();
+                verify(tracker, never()).onWriteLockHoldStart();
+                verify(tracker, never()).onWriteLockHoldEnd();
                 verify(tracker, never()).onMarkCheckpointBeginStart();
                 verify(tracker, never()).onMarkCheckpointBeginEnd();
-                verify(tracker, never()).onWriteLockRelease();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesStart();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesEnd();
 
@@ -242,7 +243,6 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
                 verify(onReleaseWriteLock, never()).run();
             }
 
-            /** {@inheritDoc} */
             @Override
             public void onMarkCheckpointBegin(CheckpointProgress progress, 
@Nullable Executor exec) throws IgniteInternalCheckedException {
                 super.onMarkCheckpointBegin(progress, exec);
@@ -256,9 +256,11 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
                 assertThat(checkpointStateArgumentCaptor.getAllValues(), 
equalTo(List.of(LOCK_TAKEN)));
 
                 verify(tracker, times(1)).onWriteLockWaitStart();
+                verify(tracker, times(1)).onWriteLockWaitEnd();
+                verify(tracker, times(1)).onWriteLockHoldStart();
                 verify(tracker, times(1)).onMarkCheckpointBeginStart();
                 verify(tracker, never()).onMarkCheckpointBeginEnd();
-                verify(tracker, never()).onWriteLockRelease();
+                verify(tracker, never()).onWriteLockHoldEnd();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesStart();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesEnd();
 
@@ -268,7 +270,6 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
                 verify(onReleaseWriteLock, never()).run();
             }
 
-            /** {@inheritDoc} */
             @Override
             public void onCheckpointBegin(CheckpointProgress progress) throws 
IgniteInternalCheckedException {
                 super.onCheckpointBegin(progress);
@@ -284,9 +285,11 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
                 assertThat(pagesCountArgumentCaptor.getAllValues(), 
equalTo(List.of(3)));
 
                 verify(tracker, times(1)).onWriteLockWaitStart();
+                verify(tracker, times(1)).onWriteLockWaitEnd();
+                verify(tracker, times(1)).onWriteLockHoldStart();
+                verify(tracker, times(1)).onWriteLockHoldEnd();
                 verify(tracker, times(1)).onMarkCheckpointBeginStart();
                 verify(tracker, times(1)).onMarkCheckpointBeginEnd();
-                verify(tracker, times(1)).onWriteLockRelease();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesStart();
                 verify(tracker, never()).onSplitAndSortCheckpointPagesEnd();
 
@@ -306,9 +309,11 @@ public class CheckpointWorkflowTest extends 
BaseIgniteAbstractTest {
         );
 
         verify(tracker, times(1)).onWriteLockWaitStart();
+        verify(tracker, times(1)).onWriteLockWaitEnd();
+        verify(tracker, times(1)).onWriteLockHoldStart();
+        verify(tracker, times(1)).onWriteLockHoldEnd();
         verify(tracker, times(1)).onMarkCheckpointBeginStart();
         verify(tracker, times(1)).onMarkCheckpointBeginEnd();
-        verify(tracker, times(1)).onWriteLockRelease();
         verify(tracker, times(1)).onSplitAndSortCheckpointPagesStart();
         verify(tracker, times(1)).onSplitAndSortCheckpointPagesEnd();
 

Reply via email to