From f47b67c3c867940c51a50d1d034e2e50b46f3fd7 Mon Sep 17 00:00:00 2001 From: Maksim Davydov <70368398+maksaska@users.noreply.github.com> Date: Tue, 28 Jan 2025 19:10:21 +0300 Subject: [PATCH] IGNITE-24157 Added LastArchivedSegment metric (#11794) --- docs/_docs/monitoring-metrics/new-metrics.adoc | 1 + .../cache/persistence/DataStorageMetricsImpl.java | 14 ++++++++++++++ .../IgniteDataStorageMetricsSelfTest.java | 14 +++++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/_docs/monitoring-metrics/new-metrics.adoc b/docs/_docs/monitoring-metrics/new-metrics.adoc index 3bc1efd2a13a7..c1e6a1904e51f 100644 --- a/docs/_docs/monitoring-metrics/new-metrics.adoc +++ b/docs/_docs/monitoring-metrics/new-metrics.adoc @@ -431,6 +431,7 @@ Register name: `io.datastorage` |CheckpointTotalTime| long | Total duration of checkpoint |CheckpointWalRecordFsyncHistogram| histogram | Histogram of the WAL fsync after logging ChTotalNodeseckpointRecord on begin of checkpoint duration in milliseconds. |CheckpointWriteEntryHistogram| histogram | Histogram of entry buffer writing to file duration in milliseconds. +|LastArchivedSegment | long | Last archived segment index. |LastCheckpointBeforeLockDuration| long | Duration of the checkpoint action before taken write lock in milliseconds. |LastCheckpointCopiedOnWritePagesNumber| long | Number of pages copied to a temporary checkpoint buffer during the last checkpoint. |LastCheckpointDataPagesNumber| long | Total number of data pages written during the last checkpoint. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java index 7db01041defa2..4d163a47c36fd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java @@ -275,6 +275,10 @@ public DataStorageMetricsImpl( this::walTotalSize, "Total size in bytes for storage wal files."); + mreg.register("LastArchivedSegment", + this::lastArchivedSegment, + "Last archived segment index."); + long[] cpBounds = new long[] {100, 500, 1000, 5000, 30000}; cpBeforeLockHistogram = mreg.histogram("CheckpointBeforeLockHistogram", cpBounds, @@ -362,6 +366,16 @@ private int walArchiveSegments() { return walMgr == null ? 0 : walMgr.walArchiveSegments(); } + /** @return Last archived segment index. */ + private long lastArchivedSegment() { + if (!metricsEnabled) + return -1; + + IgniteWriteAheadLogManager walMgr = this.wal; + + return walMgr == null ? -1 : walMgr.lastArchivedSegment(); + } + /** * @return The average WAL fsync duration in microseconds over the last time interval. */ diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java index ec50e390e4de4..d7fbcd290d892 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java @@ -125,7 +125,8 @@ public class IgniteDataStorageMetricsSelfTest extends GridCommonAbstractTest { .setMaxSize(maxRegionSize) .setPersistenceEnabled(true) .setMetricsEnabled(true) - .setName(PERSISTENCE_REGION_1)) + .setName(PERSISTENCE_REGION_1) + .setCdcEnabled(true)) .setDataRegionConfigurations( new DataRegionConfiguration() .setMaxSize(maxRegionSize) @@ -538,6 +539,17 @@ private void checkWalArchiveAndTotalSize(IgniteEx igniteEx, boolean hasWalArchiv totalSize += walMgr.totalSize(walFiles(router.getWalArchiveDir())); assertEquals(totalSize, dsMetricRegistry(igniteEx).findMetric("WalTotalSize").value()); + + long lastArchivedSegIdx = dsMetricRegistry(igniteEx).findMetric("LastArchivedSegment").value(); + + if (router.hasArchive()) { + long cdcWalArchiveSegments = walFiles(walMgr.walCdcDirectory()).length; + + // Count of segments = LastArchivedSegmentIndex + 1 + assertEquals(cdcWalArchiveSegments, lastArchivedSegIdx + 1); + } + else + assertEquals(-1, lastArchivedSegIdx); } /**