IGNITE-9455 Total allocated size memory metric is always zero for metastore 
data region - Fixes #5195.

Signed-off-by: Aleksey Plekhanov <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/137a0e7b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/137a0e7b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/137a0e7b

Branch: refs/heads/ignite-10189
Commit: 137a0e7b302a2fa6f4c8bb4d81916e45ffa7ff09
Parents: 472889d
Author: pereslegin-pa <[email protected]>
Authored: Fri Dec 7 14:32:44 2018 +0300
Committer: Aleksey Plekhanov <[email protected]>
Committed: Fri Dec 7 14:32:44 2018 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/IgniteKernal.java    |  8 +---
 .../cache/CacheGroupMetricsMXBeanImpl.java      |  7 +++
 .../persistence/DataRegionMetricsImpl.java      | 19 ++++++++
 .../persistence/file/FilePageStoreManager.java  |  6 ++-
 .../persistence/metastorage/MetaStorage.java    |  2 +
 .../internal/GridNodeMetricsLogPdsSelfTest.java |  9 +---
 .../db/IgnitePdsDataRegionMetricsTest.java      | 50 +++++++++++++-------
 7 files changed, 68 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index f777980..15f3c6a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -130,7 +130,6 @@ import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProce
 import org.apache.ignite.internal.processors.cache.mvcc.MvccProcessorImpl;
 import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
 import 
org.apache.ignite.internal.processors.cache.persistence.DataStorageMXBeanImpl;
-import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsConsistentIdProcessor;
 import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.apache.ignite.internal.processors.closure.GridClosureProcessor;
@@ -2109,12 +2108,7 @@ public class IgniteKernal implements IgniteEx, 
IgniteMXBean, Externalizable {
 
                         pdsUsedSummary += pdsUsed;
 
-                        // TODO 
https://issues.apache.org/jira/browse/IGNITE-9455
-                        // TODO Print actual value for meta store region when 
issue will be fixed.
-                        boolean metastore =
-                            
GridCacheDatabaseSharedManager.METASTORE_DATA_REGION_NAME.equals(region.config().getName());
-
-                        String pdsUsedSize = metastore ? "unknown" : 
dblFmt.format(pdsUsedMBytes) + "MB";
+                        String pdsUsedSize = dblFmt.format(pdsUsedMBytes) + 
"MB";
 
                         pdsRegionsInfo.append("    ^--   ")
                             .append(region.config().getName()).append(" 
region")

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
index 59894e3..85689f7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsMXBeanImpl.java
@@ -85,6 +85,13 @@ public class CacheGroupMetricsMXBeanImpl implements 
CacheGroupMetricsMXBean {
 
             delegate.updateTotalAllocatedPages(delta);
         }
+
+        /**
+         * Resets count of allocated pages to zero.
+         */
+        public void reset() {
+            totalAllocatedPages.reset();
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
index 0a83c36..29cfc71 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java
@@ -480,4 +480,23 @@ public class DataRegionMetricsImpl implements 
DataRegionMetrics, AllocatedPageTr
         pageReplaceRate = new HitRateMetrics((int)rateTimeInterval, subInts);
         pageReplaceAge = new HitRateMetrics((int)rateTimeInterval, subInts);
     }
+
+    /**
+     * Clear metrics.
+     */
+    public void clear() {
+        totalAllocatedPages.reset();
+        grpAllocationTrackers.values().forEach(GroupAllocationTracker::reset);
+        largeEntriesPages.reset();
+        dirtyPages.reset();
+        readPages.reset();
+        writtenPages.reset();
+        replacedPages.reset();
+        offHeapSize.set(0);
+        checkpointBufferSize.set(0);
+        allocRate.clear();
+        evictRate.clear();
+        pageReplaceRate.clear();
+        pageReplaceAge.clear();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
----------------------------------------------------------------------
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 3544485..e80107f 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
@@ -61,7 +61,9 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheContext;
 import 
org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter;
 import org.apache.ignite.internal.processors.cache.StoredCacheData;
 import 
org.apache.ignite.internal.processors.cache.persistence.AllocatedPageTracker;
+import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
 import 
org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl;
+import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.StorageException;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderSettings;
 import 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
@@ -368,11 +370,13 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
         int grpId = MetaStorage.METASTORAGE_CACHE_ID;
 
         if (!idxCacheStores.containsKey(grpId)) {
+            DataRegion dataRegion = 
cctx.database().dataRegion(GridCacheDatabaseSharedManager.METASTORE_DATA_REGION_NAME);
+
             CacheStoreHolder holder = initDir(
                 new File(storeWorkDir, META_STORAGE_NAME),
                     grpId,
                     1,
-                    AllocatedPageTracker.NO_OP,
+                    dataRegion.memoryMetrics(),
                     false);
 
             CacheStoreHolder old = idxCacheStores.put(grpId, holder);

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
index 91fbec0..a61bf64 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/MetaStorage.java
@@ -139,6 +139,8 @@ public class MetaStorage implements DbCheckpointListener, 
ReadOnlyMetastorage, R
 
     /** */
     public void init(IgniteCacheDatabaseSharedManager db) throws 
IgniteCheckedException {
+        regionMetrics.clear();
+
         getOrAllocateMetas();
 
         if (!empty) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/test/java/org/apache/ignite/internal/GridNodeMetricsLogPdsSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/GridNodeMetricsLogPdsSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/GridNodeMetricsLogPdsSelfTest.java
index a768a11..41c3588 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/GridNodeMetricsLogPdsSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/GridNodeMetricsLogPdsSelfTest.java
@@ -32,9 +32,6 @@ import org.apache.ignite.internal.util.typedef.F;
  * Check logging local node metrics with PDS enabled.
  */
 public class GridNodeMetricsLogPdsSelfTest extends GridNodeMetricsLogSelfTest {
-    /** */
-    private static final String UNKNOWN_SIZE = "unknown";
-
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -85,7 +82,7 @@ public class GridNodeMetricsLogPdsSelfTest extends 
GridNodeMetricsLogSelfTest {
         Set<String> regions = new HashSet<>();
 
         Pattern ptrn = Pattern.compile("(?m).{2,}( {3}(?<name>.+) 
region|Ignite persistence) " +
-            "\\[used=(?<used>[-.\\d]+|" + UNKNOWN_SIZE + ")?.*]");
+            "\\[used=(?<used>[-.\\d]+)?.*]");
 
         Matcher matcher = ptrn.matcher(logOutput);
 
@@ -96,9 +93,7 @@ public class GridNodeMetricsLogPdsSelfTest extends 
GridNodeMetricsLogSelfTest {
 
             String usedSize = matcher.group("used");
 
-            // TODO https://issues.apache.org/jira/browse/IGNITE-9455
-            // TODO The actual value of the metric should be printed when this 
issue is solved.
-            int used = UNKNOWN_SIZE.equals(usedSize) ? 0 : 
Integer.parseInt(usedSize);
+            int used = Integer.parseInt(usedSize);
 
             assertTrue(used + " should be non negative: " + subj, used >= 0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/137a0e7b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
index 0154c14..0326c84 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
@@ -36,6 +36,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.pagemem.PageIdAllocator;
+import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import 
org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore;
@@ -51,6 +52,10 @@ import org.junit.Assert;
 
 import static java.nio.file.Files.newDirectoryStream;
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_DATA_REG_DEFAULT_NAME;
+import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.UTILITY_CACHE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.META_STORAGE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_ID;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_NAME;
 
 /**
  *
@@ -150,7 +155,7 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
 
                 forceCheckpoint();
 
-                checkMetricsConsistency(node, DEFAULT_CACHE_NAME);
+                checkMetricsConsistency(node);
             }
 
             currMetrics = getDfltRegionMetrics(node);
@@ -183,8 +188,8 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
 
         forceCheckpoint();
 
-        checkMetricsConsistency(node0, DEFAULT_CACHE_NAME);
-        checkMetricsConsistency(node1, DEFAULT_CACHE_NAME);
+        checkMetricsConsistency(node0);
+        checkMetricsConsistency(node1);
 
         IgniteEx node2 = startGrid(2);
 
@@ -194,9 +199,9 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
 
         forceCheckpoint();
 
-        checkMetricsConsistency(node0, DEFAULT_CACHE_NAME);
-        checkMetricsConsistency(node1, DEFAULT_CACHE_NAME);
-        checkMetricsConsistency(node2, DEFAULT_CACHE_NAME);
+        checkMetricsConsistency(node0);
+        checkMetricsConsistency(node1);
+        checkMetricsConsistency(node2);
 
         stopGrid(1, true);
 
@@ -206,8 +211,8 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
 
         forceCheckpoint();
 
-        checkMetricsConsistency(node0, DEFAULT_CACHE_NAME);
-        checkMetricsConsistency(node2, DEFAULT_CACHE_NAME);
+        checkMetricsConsistency(node0);
+        checkMetricsConsistency(node2);
     }
 
     /**
@@ -293,14 +298,22 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
     }
 
     /** */
+    private void checkMetricsConsistency(final IgniteEx node) throws Exception 
{
+        checkMetricsConsistency(node, DEFAULT_CACHE_NAME);
+        checkMetricsConsistency(node, UTILITY_CACHE_NAME);
+        checkMetricsConsistency(node, METASTORAGE_CACHE_NAME);
+    }
+
+    /** */
     private void checkMetricsConsistency(final IgniteEx node, String 
cacheName) throws Exception {
         FilePageStoreManager pageStoreMgr = 
(FilePageStoreManager)node.context().cache().context().pageStore();
 
         assert pageStoreMgr != null : "Persistence is not enabled";
 
-        File cacheWorkDir = pageStoreMgr.cacheWorkDir(
-            
node.getOrCreateCache(cacheName).getConfiguration(CacheConfiguration.class)
-        );
+        boolean metaStore = METASTORAGE_CACHE_NAME.equals(cacheName);
+
+        File cacheWorkDir = metaStore ? new File(pageStoreMgr.workDir(), 
META_STORAGE_NAME) :
+            pageStoreMgr.cacheWorkDir(node.cachex(cacheName).configuration());
 
         long totalPersistenceSize = 0;
 
@@ -310,7 +323,8 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
             for (Path path : files) {
                 File file = path.toFile();
 
-                FilePageStore store = 
(FilePageStore)pageStoreMgr.getStore(CU.cacheId(cacheName), partId(file));
+                FilePageStore store = 
(FilePageStore)pageStoreMgr.getStore(metaStore ?
+                    METASTORAGE_CACHE_ID : CU.cacheId(cacheName), 
partId(file));
 
                 int pageSize = store.getPageSize();
                 long storeSize = path.toFile().length() - store.headerSize();
@@ -322,12 +336,12 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
             }
         }
 
-        long totalAllocatedPagesFromMetrics = node.context().cache().context()
-            .cacheContext(CU.cacheId(DEFAULT_CACHE_NAME))
-            .group()
-            .dataRegion()
-            .memoryMetrics()
-            .getTotalAllocatedPages();
+        GridCacheSharedContext cctx = node.context().cache().context();
+
+        String regionName = metaStore ? 
GridCacheDatabaseSharedManager.METASTORE_DATA_REGION_NAME :
+            
cctx.cacheContext(CU.cacheId(cacheName)).group().dataRegion().config().getName();
+
+        long totalAllocatedPagesFromMetrics = 
cctx.database().memoryMetrics(regionName).getTotalAllocatedPages();
 
         assertEquals("Number of allocated pages is different than in metrics 
for [node=" + node.name() + ", cache=" + cacheName + "]",
             totalPersistenceSize / pageStoreMgr.pageSize(), 
totalAllocatedPagesFromMetrics);

Reply via email to