You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/05/24 15:04:22 UTC

ignite git commit: IGNITE-8583 DataStorageMetricsMXBean.getOffHeapSize include checkpoint buffer size - Fixes #4054.

Repository: ignite
Updated Branches:
  refs/heads/master b9100aa7c -> 86c18998d


IGNITE-8583 DataStorageMetricsMXBean.getOffHeapSize include checkpoint buffer size - Fixes #4054.

Signed-off-by: dpavlov <dp...@apache.org>


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

Branch: refs/heads/master
Commit: 86c18998dbb430c69eb136ffce54858f52432808
Parents: b9100aa
Author: Dmitriy Govorukhin <dm...@gmail.com>
Authored: Thu May 24 18:04:02 2018 +0300
Committer: dpavlov <dp...@apache.org>
Committed: Thu May 24 18:04:02 2018 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/DataRegionMetrics.java    | 11 ++-
 .../org/apache/ignite/DataStorageMetrics.java   | 21 +++++
 .../persistence/DataRegionMetricsImpl.java      | 31 +++++--
 .../DataRegionMetricsMXBeanImpl.java            |  9 +-
 .../persistence/DataRegionMetricsSnapshot.java  | 17 +++-
 .../persistence/DataStorageMetricsImpl.java     | 54 +++++++++++
 .../persistence/DataStorageMetricsSnapshot.java | 33 ++++++-
 .../GridCacheDatabaseSharedManager.java         | 46 ++++++++++
 .../platform/cluster/PlatformClusterGroup.java  |  4 +-
 .../visor/cache/VisorMemoryMetrics.java         |  4 +-
 .../ignite/mxbean/DataStorageMetricsMXBean.java | 12 +++
 .../db/IgnitePdsDataRegionMetricsTest.java      | 97 ++++++++++++++++++--
 .../ApiParity/DataRegionMetricsParityTest.cs    |  4 +-
 .../ApiParity/DataStorageMetricsParityTest.cs   |  5 +-
 14 files changed, 318 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
index ca2fc66..88dcd16 100644
--- a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java
@@ -146,11 +146,18 @@ public interface DataRegionMetrics {
     public long getPhysicalMemorySize();
 
     /**
-     * Gets checkpoint buffer size in pages.
+     * Gets used checkpoint buffer size in pages.
      *
      * @return Checkpoint buffer size in pages.
      */
-    public long getCheckpointBufferPages();
+    public long getUsedCheckpointBufferPages();
+
+    /**
+     * Gets used checkpoint buffer size in bytes.
+     *
+     * @return Checkpoint buffer size in bytes.
+     */
+    public long getUsedCheckpointBufferSize();
 
     /**
      * Gets checkpoint buffer size in bytes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
index 5fb2b1e..cdde0ac 100644
--- a/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/DataStorageMetrics.java
@@ -191,4 +191,25 @@ public interface DataStorageMetrics {
      * @return Total size of memory allocated in bytes.
      */
     public long getTotalAllocatedSize();
+
+    /**
+     * Gets used checkpoint buffer size in pages.
+     *
+     * @return Checkpoint buffer size in pages.
+     */
+    public long getUsedCheckpointBufferPages();
+
+    /**
+     * Gets used checkpoint buffer size in bytes.
+     *
+     * @return Checkpoint buffer size in bytes.
+     */
+    public long getUsedCheckpointBufferSize();
+
+    /**
+     * Checkpoint buffer size in bytes.
+     *
+     * @return Checkpoint buffer size in bytes.
+     */
+    public long getCheckpointBufferSize();
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/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 cb13747..a82f73b 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
@@ -62,6 +62,9 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
     private final AtomicLong offHeapSize = new AtomicLong();
 
     /** */
+    private final AtomicLong checkpointBufferSize = new AtomicLong();
+
+    /** */
     private volatile boolean metricsEnabled;
 
     /** */
@@ -129,7 +132,7 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
     @Override public long getTotalAllocatedSize() {
         assert pageMem != null;
 
-        return getTotalAllocatedPages() * pageMem.pageSize();
+        return getTotalAllocatedPages() * (persistenceEnabled ? pageMem.pageSize() : pageMem.systemPageSize());
     }
 
     /** {@inheritDoc} */
@@ -211,12 +214,12 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
 
     /** {@inheritDoc} */
     @Override public long getPhysicalMemorySize() {
-        return getPhysicalMemoryPages() * pageMem.pageSize();
+        return getPhysicalMemoryPages() * pageMem.systemPageSize();
     }
 
     /** {@inheritDoc} */
-    @Override public long getCheckpointBufferPages() {
-        if (!metricsEnabled)
+    @Override public long getUsedCheckpointBufferPages() {
+        if (!metricsEnabled || !persistenceEnabled)
             return 0;
 
         assert pageMem != null;
@@ -225,8 +228,16 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
     }
 
     /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferSize() {
+        return getUsedCheckpointBufferPages() * pageMem.systemPageSize();
+    }
+
+    /** {@inheritDoc} */
     @Override public long getCheckpointBufferSize() {
-        return getCheckpointBufferPages() * pageMem.pageSize();
+        if (!metricsEnabled || !persistenceEnabled)
+            return 0;
+
+        return checkpointBufferSize.get();
     }
 
     /** {@inheritDoc} */
@@ -276,11 +287,10 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
         if (!metricsEnabled)
             return 0;
 
-        return pageMem.loadedPages() * pageMem.pageSize();
+        return pageMem.loadedPages() * pageMem.systemPageSize();
     }
 
     /**
-     *
      * @param size Region size.
      */
     public void updateOffHeapSize(long size) {
@@ -288,6 +298,13 @@ public class DataRegionMetricsImpl implements DataRegionMetrics, AllocatedPageTr
     }
 
     /**
+     * @param size Checkpoint buffer size.
+     */
+    public void updateCheckpointBufferSize(long size) {
+        this.checkpointBufferSize.addAndGet(size);
+    }
+
+    /**
      * Updates pageReplaceRate metric.
      */
     public void updatePageReplaceRate(long pageAge) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
index 9ab6824..f837168 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsMXBeanImpl.java
@@ -97,8 +97,13 @@ class DataRegionMetricsMXBeanImpl implements DataRegionMetricsMXBean {
     }
 
     /** {@inheritDoc} */
-    @Override public long getCheckpointBufferPages() {
-        return memMetrics.getCheckpointBufferPages();
+    @Override public long getUsedCheckpointBufferPages() {
+        return memMetrics.getUsedCheckpointBufferPages();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferSize() {
+        return memMetrics.getUsedCheckpointBufferSize();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
index 6126c4b..f119419 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java
@@ -60,7 +60,10 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
     private long physicalMemorySize;
 
     /** */
-    private long checkpointBufferPages;
+    private long usedCheckpointBufferPages;
+
+    /** */
+    private long usedCheckpointBufferSize;
 
     /** */
     private long checkpointBufferSize;
@@ -99,7 +102,8 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
         pageReplaceAge = metrics.getPagesReplaceAge();
         physicalMemoryPages = metrics.getPhysicalMemoryPages();
         physicalMemorySize = metrics.getPhysicalMemorySize();
-        checkpointBufferPages = metrics.getCheckpointBufferPages();
+        usedCheckpointBufferPages = metrics.getUsedCheckpointBufferPages();
+        usedCheckpointBufferSize = metrics.getUsedCheckpointBufferSize();
         checkpointBufferSize = metrics.getCheckpointBufferSize();
         pageSize = metrics.getPageSize();
         readPages = metrics.getPagesRead();
@@ -170,8 +174,13 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics {
     }
 
     /** {@inheritDoc} */
-    @Override public long getCheckpointBufferPages() {
-        return checkpointBufferPages;
+    @Override public long getUsedCheckpointBufferPages() {
+        return usedCheckpointBufferPages;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferSize() {
+        return usedCheckpointBufferSize;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java
----------------------------------------------------------------------
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 b7f99e5..03955a4 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
@@ -396,6 +396,60 @@ public class DataStorageMetricsImpl implements DataStorageMetricsMXBean {
         return totalAllocatedSize;
     }
 
+    /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferPages() {
+        if (!metricsEnabled)
+            return 0;
+
+        Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+        if (F.isEmpty(regionMetrics0))
+            return 0;
+
+        long usedCheckpointBufferPages = 0L;
+
+        for (DataRegionMetrics rm : regionMetrics0)
+            usedCheckpointBufferPages += rm.getUsedCheckpointBufferPages();
+
+        return usedCheckpointBufferPages;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferSize() {
+        if (!metricsEnabled)
+            return 0;
+
+        Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+        if (F.isEmpty(regionMetrics0))
+            return 0;
+
+        long usedCheckpointBufferSize = 0L;
+
+        for (DataRegionMetrics rm : regionMetrics0)
+            usedCheckpointBufferSize += rm.getUsedCheckpointBufferSize();
+
+        return usedCheckpointBufferSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getCheckpointBufferSize(){
+        if (!metricsEnabled)
+            return 0;
+
+        Collection<DataRegionMetrics> regionMetrics0 = regionMetrics;
+
+        if (F.isEmpty(regionMetrics0))
+            return 0;
+
+        long checkpointBufferSize = 0L;
+
+        for (DataRegionMetrics rm : regionMetrics0)
+            checkpointBufferSize += rm.getCheckpointBufferSize();
+
+        return checkpointBufferSize;
+    }
+
     /**
      * @param wal Write-ahead log manager.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
index cb52279..c3bcd5b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsSnapshot.java
@@ -69,7 +69,16 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
     private long walLastRollOverTime;
 
     /** */
-    private long checkpointTotalSize;
+    private long checkpointTotalTime;
+
+    /** */
+    private long usedCheckpointBufferSize;
+
+    /** */
+    private long usedCheckpointBufferPages;
+
+    /** */
+    private long checkpointBufferSize;
 
     /** */
     private long dirtyPages;
@@ -111,7 +120,10 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
         lastCpCowPages = metrics.getLastCheckpointCopiedOnWritePagesNumber();
         walTotalSize = metrics.getWalTotalSize();
         walLastRollOverTime = metrics.getWalLastRollOverTime();
-        checkpointTotalSize = metrics.getCheckpointTotalTime();
+        checkpointTotalTime = metrics.getCheckpointTotalTime();
+        usedCheckpointBufferSize = metrics.getUsedCheckpointBufferSize();
+        usedCheckpointBufferPages = metrics.getUsedCheckpointBufferPages();
+        checkpointBufferSize = metrics.getCheckpointBufferSize();
         dirtyPages = metrics.getDirtyPages();
         readPages = metrics.getPagesRead();
         writtenPages = metrics.getPagesWritten();
@@ -198,7 +210,7 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
 
     /** {@inheritDoc} */
     @Override public long getCheckpointTotalTime() {
-        return checkpointTotalSize;
+        return checkpointTotalTime;
     }
 
     /** {@inheritDoc} */
@@ -237,6 +249,21 @@ public class DataStorageMetricsSnapshot implements DataStorageMetrics {
     }
 
     /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferPages() {
+        return usedCheckpointBufferPages;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getUsedCheckpointBufferSize() {
+        return usedCheckpointBufferSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getCheckpointBufferSize(){
+        return checkpointBufferSize;
+    }
+
+    /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(DataStorageMetricsSnapshot.class, this);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------
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 2eb6e6f..2e1fcb4 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
@@ -85,6 +85,7 @@ import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
 import org.apache.ignite.internal.mem.DirectMemoryProvider;
+import org.apache.ignite.internal.mem.DirectMemoryRegion;
 import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider;
 import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider;
 import org.apache.ignite.internal.pagemem.FullPageId;
@@ -1059,6 +1060,51 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
     }
 
     /**
+     * @param memoryProvider0 Memory provider.
+     * @param memMetrics Memory metrics.
+     * @return Wrapped memory provider.
+     */
+    @Override protected DirectMemoryProvider wrapMetricsMemoryProvider(
+            final DirectMemoryProvider memoryProvider0,
+            final DataRegionMetricsImpl memMetrics
+    ) {
+        return new DirectMemoryProvider() {
+            private AtomicInteger checkPointBufferIdxCnt = new AtomicInteger();
+
+            private final DirectMemoryProvider memProvider = memoryProvider0;
+
+            @Override public void initialize(long[] chunkSizes) {
+                memProvider.initialize(chunkSizes);
+
+                checkPointBufferIdxCnt.set(chunkSizes.length);
+            }
+
+            @Override public void shutdown() {
+                memProvider.shutdown();
+            }
+
+            @Override public DirectMemoryRegion nextRegion() {
+                DirectMemoryRegion nextMemoryRegion = memProvider.nextRegion();
+
+                if (nextMemoryRegion == null)
+                    return null;
+
+                int idx = checkPointBufferIdxCnt.decrementAndGet();
+
+                long chunkSize = nextMemoryRegion.size();
+
+                // Checkpoint chunk last in the long[] chunkSizes.
+                if (idx != 0)
+                    memMetrics.updateOffHeapSize(chunkSize);
+                else
+                    memMetrics.updateCheckpointBufferSize(chunkSize);
+
+                return nextMemoryRegion;
+            }
+        };
+    }
+
+    /**
      * Resolves throttling policy according to the settings.
      */
     @NotNull private PageMemoryImpl.ThrottlingPolicy resolveThrottlingPolicy() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
index f95e69b..d7a6b56 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cluster/PlatformClusterGroup.java
@@ -560,8 +560,8 @@ public class PlatformClusterGroup extends PlatformAbstractTarget {
         writer.writeFloat(metrics.getPagesReplaceAge());
         writer.writeLong(metrics.getPhysicalMemoryPages());
         writer.writeLong(metrics.getPhysicalMemorySize());
-        writer.writeLong(metrics.getCheckpointBufferPages());
-        writer.writeLong(metrics.getCheckpointBufferSize());
+        writer.writeLong(metrics.getUsedCheckpointBufferPages());
+        writer.writeLong(metrics.getUsedCheckpointBufferSize());
         writer.writeInt(metrics.getPageSize());
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorMemoryMetrics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorMemoryMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorMemoryMetrics.java
index c19fd36..5b46220 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorMemoryMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorMemoryMetrics.java
@@ -96,8 +96,8 @@ public class VisorMemoryMetrics extends VisorDataTransferObject {
         physicalMemoryPages = m.getPhysicalMemoryPages();
         totalAllocatedSz = m.getTotalAllocatedSize();
         physicalMemSz = m.getPhysicalMemorySize();
-        cpBufPages = m.getCheckpointBufferPages();
-        cpBufSz = m.getCheckpointBufferSize();
+        cpBufPages = m.getUsedCheckpointBufferPages();
+        cpBufSz = m.getUsedCheckpointBufferSize();
         pageSize = m.getPageSize();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
index 2450874..2069099 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/DataStorageMetricsMXBean.java
@@ -57,6 +57,18 @@ public interface DataStorageMetricsMXBean extends DataStorageMetrics {
     @Override long getCheckpointTotalTime();
 
     /** {@inheritDoc} */
+    @MXBeanDescription("Used checkpoint buffer size in pages.")
+    @Override long getUsedCheckpointBufferPages();
+
+    /** {@inheritDoc} */
+    @MXBeanDescription("Used checkpoint buffer size in bytes.")
+    @Override long getUsedCheckpointBufferSize();
+
+    /** {@inheritDoc} */
+    @MXBeanDescription("Total size in bytes for checkpoint buffer.")
+    @Override  long getCheckpointBufferSize();
+
+    /** {@inheritDoc} */
     @MXBeanDescription("Duration of the last checkpoint in milliseconds.")
     @Override long getLastCheckpointDuration();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/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 4b7d6ae..18a4781 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
@@ -17,10 +17,11 @@
 
 package org.apache.ignite.internal.processors.cache.persistence.db;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.Random;
+import java.util.HashMap;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.stream.Collectors;
 import org.apache.ignite.DataRegionMetrics;
@@ -32,14 +33,20 @@ import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.processors.cache.CacheGroupContext;
 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.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.typedef.PA;
+import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Assert;
 
 import static org.apache.ignite.configuration.DataStorageConfiguration.DFLT_DATA_REG_DEFAULT_NAME;
 
@@ -54,6 +61,9 @@ public class IgnitePdsDataRegionMetricsTest extends GridCommonAbstractTest {
     private static final long INIT_REGION_SIZE = 10 << 20;
 
     /** */
+    private static final long MAX_REGION_SIZE = INIT_REGION_SIZE * 10;
+
+    /** */
     private static final int ITERATIONS = 3;
 
     /** */
@@ -72,11 +82,13 @@ public class IgnitePdsDataRegionMetricsTest extends GridCommonAbstractTest {
         ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(IP_FINDER);
 
         DataStorageConfiguration memCfg = new DataStorageConfiguration()
-            .setDefaultDataRegionConfiguration(
-                new DataRegionConfiguration()
-                    .setInitialSize(INIT_REGION_SIZE)
-                    .setPersistenceEnabled(true)
-                    .setMetricsEnabled(true));
+                .setDefaultDataRegionConfiguration(
+                        new DataRegionConfiguration()
+                                .setInitialSize(INIT_REGION_SIZE)
+                                .setMaxSize(MAX_REGION_SIZE)
+                                .setPersistenceEnabled(true)
+                                .setMetricsEnabled(true))
+                .setCheckpointFrequency(1000);
 
         cfg.setDataStorageConfiguration(memCfg);
 
@@ -194,6 +206,79 @@ public class IgnitePdsDataRegionMetricsTest extends GridCommonAbstractTest {
         checkMetricsConsistency(node2, grpIds);
     }
 
+    /**
+     * Test for check checkpoint size metric.
+     *
+     * @throws Exception If failed.
+     */
+    public void testCheckpointBufferSize() throws Exception {
+        IgniteEx ig = startGrid(0);
+
+        ig.cluster().active(true);
+
+        DataRegionMetricsImpl regionMetrics = ig.cachex(DEFAULT_CACHE_NAME)
+                .context().group().dataRegion().memoryMetrics();
+
+        Assert.assertTrue(regionMetrics.getCheckpointBufferSize() != 0);
+        Assert.assertTrue(regionMetrics.getCheckpointBufferSize() <= MAX_REGION_SIZE);
+    }
+
+    /**
+     * Test for check used checkpoint size metric.
+     *
+     * @throws Exception If failed.
+     */
+    public void testUsedCheckpointBuffer() throws Exception {
+        IgniteEx ig = startGrid(0);
+
+        ig.cluster().active(true);
+
+        final DataRegionMetricsImpl regionMetrics = ig.cachex(DEFAULT_CACHE_NAME)
+                .context().group().dataRegion().memoryMetrics();
+
+        Assert.assertEquals(0, regionMetrics.getUsedCheckpointBufferPages());
+        Assert.assertEquals(0, regionMetrics.getUsedCheckpointBufferSize());
+
+        load(ig);
+
+        GridCacheDatabaseSharedManager psMgr = (GridCacheDatabaseSharedManager) ig.context().cache().context().database();
+
+        GridFutureAdapter<T2<Long, Long>> metricsResult = new GridFutureAdapter<>();
+
+        IgniteInternalFuture chpBeginFut = psMgr.wakeupForCheckpoint(null);
+
+        chpBeginFut.listen((f) -> {
+            load(ig);
+
+            metricsResult.onDone(new T2<>(
+                regionMetrics.getUsedCheckpointBufferPages(),
+                regionMetrics.getUsedCheckpointBufferSize()
+            ));
+        });
+
+        metricsResult.get();
+
+        Assert.assertTrue(metricsResult.get().get1() > 0);
+        Assert.assertTrue(metricsResult.get().get2() > 0);
+    }
+
+    /**
+     * @param ig Ignite.
+     */
+    private void load(Ignite ig){
+        IgniteCache<Integer, byte[]> cache = ig.cache(DEFAULT_CACHE_NAME);
+
+        Random rnd = new Random();
+
+        for (int i = 0; i < 1000; i++) {
+            byte[] payload = new byte[128];
+
+            rnd.nextBytes(payload);
+
+            cache.put(i, payload);
+        }
+    }
+
     /** */
     private static DataRegionMetrics getDfltRegionMetrics(Ignite node) {
         for (DataRegionMetrics m : node.dataRegionMetrics())

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
index 22b8986..463eaa4 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataRegionMetricsParityTest.cs
@@ -39,7 +39,9 @@ namespace Apache.Ignite.Core.Tests.ApiParity
             "PagesWritten",
             "PagesReplaced",
             "OffHeapSize",
-            "OffheapUsedSize"
+            "OffheapUsedSize",
+            "UsedCheckpointBufferPages",
+            "UsedCheckpointBufferSize"
         };
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/86c18998/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
index 300ab25..58c974e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/DataStorageMetricsParityTest.cs
@@ -38,7 +38,10 @@ namespace Apache.Ignite.Core.Tests.ApiParity
             "PagesReplaced",
             "OffHeapSize",
             "OffheapUsedSize",
-            "TotalAllocatedSize"
+            "TotalAllocatedSize",
+            "UsedCheckpointBufferPages",
+            "UsedCheckpointBufferSize",
+            "CheckpointBufferSize"
         };
 
         /// <summary>