Repository: ignite Updated Branches: refs/heads/master b9100aa7c -> 86c18998d
IGNITE-8583 DataStorageMetricsMXBean.getOffHeapSize include checkpoint buffer size - Fixes #4054. Signed-off-by: dpavlov <[email protected]> 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 <[email protected]> Authored: Thu May 24 18:04:02 2018 +0300 Committer: dpavlov <[email protected]> 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>
