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

namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 15abfae9e05 IGNITE-17587 Fixed the "io.datastorage.StorageSize" metric 
in case of multiple persistence dataregions (#10225)
15abfae9e05 is described below

commit 15abfae9e054fdd606901378c412881543eb46df
Author: Nikita Amelchev <[email protected]>
AuthorDate: Wed Aug 31 12:16:22 2022 +0300

    IGNITE-17587 Fixed the "io.datastorage.StorageSize" metric in case of 
multiple persistence dataregions (#10225)
---
 .../cache/persistence/DataStorageMetricsImpl.java  | 22 +++------
 .../GridCacheDatabaseSharedManager.java            | 18 ++++++--
 .../cache/persistence/GridCacheOffheapManager.java | 45 +-----------------
 .../cache/persistence/checkpoint/Checkpointer.java |  7 ++-
 .../persistence/file/FilePageStoreManager.java     |  2 +-
 .../IgniteDataStorageMetricsSelfTest.java          | 54 ++++++++++++++++++----
 6 files changed, 74 insertions(+), 74 deletions(-)

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 73c8dc98203..3f6f1ab7e23 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
@@ -739,6 +739,8 @@ public class DataStorageMetricsImpl implements 
DataStorageMetricsMXBean {
      * @param totalPages Total number of all pages in checkpoint.
      * @param dataPages Total number of data pages in checkpoint.
      * @param cowPages Total number of COW-ed pages in checkpoint.
+     * @param storageSize Storage space allocated, in bytes.
+     * @param sparseStorageSize Storage space allocated adjusted for possible 
sparsity, in bytes.
      */
     public void onCheckpoint(
         long beforeLockDuration,
@@ -755,7 +757,9 @@ public class DataStorageMetricsImpl implements 
DataStorageMetricsMXBean {
         long start,
         long totalPages,
         long dataPages,
-        long cowPages
+        long cowPages,
+        long storageSize,
+        long sparseStorageSize
     ) {
         if (metricsEnabled) {
             lastCpBeforeLockDuration.value(beforeLockDuration);
@@ -773,6 +777,8 @@ public class DataStorageMetricsImpl implements 
DataStorageMetricsMXBean {
             lastCpTotalPages.value(totalPages);
             lastCpDataPages.value(dataPages);
             lastCpCowPages.value(cowPages);
+            this.storageSize.value(storageSize);
+            this.sparseStorageSize.value(sparseStorageSize);
 
             totalCheckpointTime.add(duration);
 
@@ -790,20 +796,6 @@ public class DataStorageMetricsImpl implements 
DataStorageMetricsMXBean {
         }
     }
 
-    /**
-     * @param sparseStorageSize Sparse storage size.
-     * @param storageSize Storage size.
-     */
-    public void onStorageSizeChanged(
-        long storageSize,
-        long sparseStorageSize
-    ) {
-        if (metricsEnabled) {
-            this.storageSize.value(storageSize);
-            this.sparseStorageSize.value(sparseStorageSize);
-        }
-    }
-
     /**
      * Callback on logging a record to a WAL.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index 2ca91ab167b..445e1062d8a 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -2053,6 +2053,19 @@ public class GridCacheDatabaseSharedManager extends 
IgniteCacheDatabaseSharedMan
         return res;
     }
 
+    /**
+     * @param f Consumer.
+     * @return Accumulated result for all page stores.
+     */
+    public long forAllPageStores(ToLongFunction<PageStore> f) {
+        long res = 0;
+
+        for (CacheGroupContext gctx : cacheGroupContexts())
+            res += forGroupPageStores(gctx, f);
+
+        return res;
+    }
+
     /**
      * Calculates tail pointer for WAL at the end of logical recovery.
      *
@@ -3169,11 +3182,6 @@ public class GridCacheDatabaseSharedManager extends 
IgniteCacheDatabaseSharedMan
         return new DataStorageMetricsSnapshot(dsMetrics);
     }
 
-    /** {@inheritDoc} */
-    @Override public DataStorageMetricsImpl dataStorageMetricsImpl() {
-        return dsMetrics;
-    }
-
     /** {@inheritDoc} */
     @Override public MetaStorage metaStorage() {
         return metaStorage;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 4668f482620..45bc6c55c8e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -33,7 +33,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.function.ToLongFunction;
 import java.util.stream.Stream;
 import javax.cache.processor.EntryProcessor;
 import org.apache.ignite.IgniteCheckedException;
@@ -50,7 +49,6 @@ import org.apache.ignite.internal.pagemem.PageIdUtils;
 import org.apache.ignite.internal.pagemem.PageMemory;
 import org.apache.ignite.internal.pagemem.PageSupport;
 import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager;
-import org.apache.ignite.internal.pagemem.store.PageStore;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
 import org.apache.ignite.internal.pagemem.wal.WALIterator;
 import org.apache.ignite.internal.pagemem.wal.record.DataEntry;
@@ -82,7 +80,6 @@ import 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.Grid
 import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccVersion;
 import 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointListener;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.CacheFreeList;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.SimpleDataRow;
@@ -126,6 +123,7 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.Nullable;
+
 import static org.apache.ignite.failure.FailureType.CRITICAL_ERROR;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheTtlManager.DFLT_UNWIND_THROTTLING_TIMEOUT;
 import static 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.EVICTED;
@@ -279,47 +277,6 @@ public class GridCacheOffheapManager extends 
IgniteCacheOffheapManagerImpl imple
         syncMetadata(ctx, ctx.executor(), false);
     }
 
-    /** {@inheritDoc} */
-    @Override public void afterCheckpointEnd(Context ctx) throws 
IgniteCheckedException {
-        persStoreMetrics.onStorageSizeChanged(
-            forAllPageStores(PageStore::size),
-            forAllPageStores(PageStore::getSparseSize)
-        );
-    }
-
-    /**
-     * @param f Consumer.
-     * @return Accumulated result for all page stores.
-     */
-    private long forAllPageStores(ToLongFunction<PageStore> f) {
-        return forGroupPageStores(grp, f);
-    }
-
-    /**
-     * @param gctx Group context.
-     * @param f Consumer.
-     * @return Accumulated result for all page stores.
-     */
-    private long forGroupPageStores(CacheGroupContext gctx, 
ToLongFunction<PageStore> f) {
-        int groupId = gctx.groupId();
-
-        long res = 0;
-
-        try {
-            Collection<PageStore> stores = 
((FilePageStoreManager)ctx.cache().context().pageStore()).getStores(groupId);
-
-            if (stores != null) {
-                for (PageStore store : stores)
-                    res += f.applyAsLong(store);
-            }
-        }
-        catch (IgniteCheckedException e) {
-            throw new IgniteException(e);
-        }
-
-        return res;
-    }
-
     /**
      * Syncs and saves meta-information of all data structures to page memory.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
index 457c668964f..68c993fc5e2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/Checkpointer.java
@@ -44,6 +44,7 @@ import 
org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import org.apache.ignite.internal.processors.cache.GridCacheProcessor;
 import org.apache.ignite.internal.processors.cache.persistence.CheckpointState;
 import 
org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl;
+import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.pagemem.CheckpointMetricsTracker;
 import 
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryEx;
@@ -622,6 +623,8 @@ public class Checkpointer extends GridWorker {
         }
 
         if (persStoreMetrics.metricsEnabled()) {
+            GridCacheDatabaseSharedManager dbMgr = 
(GridCacheDatabaseSharedManager)cacheProcessor.context().database();
+
             persStoreMetrics.onCheckpoint(
                 tracker.beforeLockDuration(),
                 tracker.lockWaitDuration(),
@@ -637,7 +640,9 @@ public class Checkpointer extends GridWorker {
                 tracker.checkpointStartTime(),
                 chp.pagesSize,
                 tracker.dataPagesWritten(),
-                tracker.cowPagesWritten()
+                tracker.cowPagesWritten(),
+                dbMgr.forAllPageStores(PageStore::size),
+                dbMgr.forAllPageStores(PageStore::getSparseSize)
             );
         }
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
index 02c1304a320..cf6f23515ca 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
@@ -1084,7 +1084,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
     }
 
     /**
-     * Return cache store holedr.
+     * Return cache store holder.
      *
      * @param grpId Cache group ID.
      * @return Cache store holder.
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 f767fdd634d..160be0a9bd8 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
@@ -20,11 +20,13 @@ package 
org.apache.ignite.internal.processors.cache.persistence;
 import java.io.File;
 import java.io.Serializable;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Objects;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
+import java.util.function.ToLongFunction;
 import java.util.function.UnaryOperator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -54,11 +56,13 @@ import 
org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
 import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
 import org.apache.ignite.internal.processors.metric.impl.LongGauge;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.PAX;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.mxbean.DataStorageMetricsMXBean;
 import org.apache.ignite.spi.metric.HistogramMetric;
+import org.apache.ignite.spi.metric.LongMetric;
 import org.apache.ignite.testframework.ListeningTestLogger;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
@@ -68,8 +72,10 @@ import static 
org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.cluster.ClusterState.ACTIVE;
+import static 
org.apache.ignite.internal.processors.cache.CacheGroupMetricsImpl.CACHE_GROUP_METRICS_PREFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl.DATASTORAGE_METRIC_PREFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.HEADER_RECORD_SIZE;
+import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
 import static org.apache.ignite.testframework.GridTestUtils.setFieldValue;
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
@@ -80,9 +86,18 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
     /** */
     private static final String GROUP1 = "grp1";
 
+    /** */
+    private static final String GROUP2 = "grp2";
+
     /** */
     private static final String NO_PERSISTENCE = "no-persistence";
 
+    /** */
+    private static final String PERSISTENCE_REGION_1 = "persistence-1";
+
+    /** */
+    private static final String PERSISTENCE_REGION_2 = "persistence-2";
+
     /** */
     private final ListeningTestLogger listeningLog = new 
ListeningTestLogger(log);
 
@@ -111,12 +126,18 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
                 .setMaxSize(maxRegionSize)
                 .setPersistenceEnabled(true)
                 .setMetricsEnabled(true)
-                .setName("dflt-plc"))
-            .setDataRegionConfigurations(new DataRegionConfiguration()
-                .setMaxSize(maxRegionSize)
-                .setPersistenceEnabled(false)
-                .setMetricsEnabled(true)
-                .setName(NO_PERSISTENCE))
+                .setName(PERSISTENCE_REGION_1))
+            .setDataRegionConfigurations(
+                new DataRegionConfiguration()
+                    .setMaxSize(maxRegionSize)
+                    .setPersistenceEnabled(true)
+                    .setMetricsEnabled(true)
+                    .setName(PERSISTENCE_REGION_2),
+                new DataRegionConfiguration()
+                    .setMaxSize(maxRegionSize)
+                    .setPersistenceEnabled(false)
+                    .setMetricsEnabled(true)
+                    .setName(NO_PERSISTENCE))
             .setWalMode(WALMode.LOG_ONLY)
             .setMetricsEnabled(true);
 
@@ -126,6 +147,7 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
 
         cfg.setCacheConfiguration(
             cacheConfiguration(GROUP1, "cache", PARTITIONED, ATOMIC, 1, null),
+            cacheConfiguration(GROUP2, "cache2", PARTITIONED, ATOMIC, 1, 
PERSISTENCE_REGION_2),
             cacheConfiguration(null, "cache-np", PARTITIONED, ATOMIC, 1, 
NO_PERSISTENCE));
 
         cfg.setGridLogger(listeningLog);
@@ -186,16 +208,19 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
 
         try {
             IgniteCache<Object, Object> cache = ig.cache("cache");
+            IgniteCache<Object, Object> cache2 = ig.cache("cache2");
 
-            for (int i = 0; i < 10; i++)
+            for (int i = 0; i < 10; i++) {
                 cache.put(i, new Person("first-" + i, "last-" + i));
+                cache2.put(i, new Person("first-" + i, "last-" + i));
+            }
 
             IgniteCache<Object, Object> cacheNp = ig.cache("cache-np");
 
             for (int i = 0; i < 10; i++)
                 cacheNp.put(i, new Person("first-" + i, "last-" + i));
 
-            DataRegionMetrics memMetrics = ig.dataRegionMetrics("dflt-plc");
+            DataRegionMetrics memMetrics = 
ig.dataRegionMetrics(PERSISTENCE_REGION_1);
 
             assertNotNull(memMetrics);
             assertTrue(memMetrics.getDirtyPages() > 0);
@@ -219,6 +244,19 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
                         pMetrics.getLastCheckpointDataPagesNumber() != 0;
                 }
             }, 10_000));
+
+            Collection<MetricRegistry> grpRegs = 
F.viewReadOnly(ig.context().cache().cacheGroups(),
+                ctx -> 
ig.context().metric().registry(metricName(CACHE_GROUP_METRICS_PREFIX, 
ctx.cacheOrGroupName())));
+
+            ToLongFunction<String> sumByGroups = metric -> grpRegs.stream()
+                .map(grpReg -> 
grpReg.<LongMetric>findMetric(metric).value()).mapToLong(v -> v)
+                .sum();
+
+            long storageSize = 
dsMetricRegistry(ig).<LongMetric>findMetric("StorageSize").value();
+            long sparseStorageSize = 
dsMetricRegistry(ig).<LongMetric>findMetric("SparseStorageSize").value();
+
+            assertEquals(sumByGroups.applyAsLong("StorageSize"), storageSize);
+            assertEquals(sumByGroups.applyAsLong("SparseStorageSize"), 
sparseStorageSize);
         }
         finally {
             stopAllGrids();

Reply via email to