Repository: ignite Updated Branches: refs/heads/master 39f6e899c -> 0dc906f01
IGNITE-6565 Use long type for size and keySize in cache metrics Signed-off-by: Anton Vinogradov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0dc906f0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0dc906f0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0dc906f0 Branch: refs/heads/master Commit: 0dc906f01e347bced9f775aca31e2e7fa0be835d Parents: 39f6e89 Author: Alexander Menshikov <[email protected]> Authored: Wed Apr 25 14:03:24 2018 +0300 Committer: Anton Vinogradov <[email protected]> Committed: Wed Apr 25 14:03:24 2018 +0300 ---------------------------------------------------------------------- .../org/apache/ignite/cache/CacheMetrics.java | 11 ++++++ .../cache/CacheClusterMetricsMXBeanImpl.java | 5 +++ .../cache/CacheLocalMetricsMXBeanImpl.java | 5 +++ .../processors/cache/CacheMetricsImpl.java | 30 ++++++++++++++- .../processors/cache/CacheMetricsSnapshot.java | 10 +++++ .../platform/cache/PlatformCache.java | 1 + .../internal/visor/cache/VisorCacheMetrics.java | 17 +++++++++ .../ignite/mxbean/CacheMetricsMXBean.java | 4 ++ .../cache/GridCacheAbstractMetricsSelfTest.java | 39 ++++++++++++++++++++ .../platform/PlatformCacheWriteMetricsTask.java | 5 +++ .../Cache/CacheMetricsTest.cs | 7 ++++ .../Apache.Ignite.Core/Cache/ICacheMetrics.cs | 8 ++++ .../Impl/Cache/CacheMetricsImpl.cs | 7 ++++ 13 files changed, 148 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java index c466bee..99bf2c2 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java @@ -240,14 +240,25 @@ public interface CacheMetrics { * Gets number of non-{@code null} values in the cache. * * @return Number of non-{@code null} values in the cache. + * @deprecated Can overflow. Use {@link CacheMetrics#getCacheSize()} instead. */ + @Deprecated public int getSize(); /** + * Gets number of non-{@code null} values in the cache as a long value. + * + * @return Number of non-{@code null} values in the cache. + */ + public long getCacheSize(); + + /** * Gets number of keys in the cache, possibly with {@code null} values. * * @return Number of keys in the cache. + * @deprecated Can overflow. Use {@link CacheMetrics#getCacheSize()} instead. */ + @Deprecated public int getKeySize(); /** http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClusterMetricsMXBeanImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClusterMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClusterMetricsMXBeanImpl.java index ce6416f..32603cb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClusterMetricsMXBeanImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClusterMetricsMXBeanImpl.java @@ -115,6 +115,11 @@ class CacheClusterMetricsMXBeanImpl implements CacheMetricsMXBean { } /** {@inheritDoc} */ + @Override public long getCacheSize() { + return cache.clusterMetrics().getCacheSize(); + } + + /** {@inheritDoc} */ @Override public int getKeySize() { return cache.clusterMetrics().getKeySize(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLocalMetricsMXBeanImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLocalMetricsMXBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLocalMetricsMXBeanImpl.java index 438c8c6..d3060d3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLocalMetricsMXBeanImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLocalMetricsMXBeanImpl.java @@ -116,6 +116,11 @@ class CacheLocalMetricsMXBeanImpl implements CacheMetricsMXBean { } /** {@inheritDoc} */ + @Override public long getCacheSize() { + return cache.metrics0().getCacheSize(); + } + + /** {@inheritDoc} */ @Override public int getKeySize() { return cache.metrics0().getKeySize(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java index b402ff2..96f40bf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java @@ -255,6 +255,11 @@ public class CacheMetricsImpl implements CacheMetrics { } /** {@inheritDoc} */ + @Override public long getCacheSize() { + return getEntriesStat().cacheSize(); + } + + /** {@inheritDoc} */ @Override public int getKeySize() { return getEntriesStat().keySize(); } @@ -754,6 +759,7 @@ public class CacheMetricsImpl implements CacheMetrics { long offHeapBackupEntriesCnt = 0L; long heapEntriesCnt = 0L; int size = 0; + long sizeLong = 0L; boolean isEmpty; try { @@ -765,8 +771,9 @@ public class CacheMetricsImpl implements CacheMetrics { offHeapBackupEntriesCnt = offHeapEntriesCnt; size = cctx.cache().size(); + sizeLong = cctx.cache().sizeLong(); - heapEntriesCnt = size; + heapEntriesCnt = sizeLong; } } else { @@ -806,6 +813,8 @@ public class CacheMetricsImpl implements CacheMetrics { heapEntriesCnt += part.publicSize(cctx.cacheId()); } + + sizeLong = offHeapEntriesCnt; } } catch (Exception e) { @@ -816,6 +825,7 @@ public class CacheMetricsImpl implements CacheMetrics { offHeapBackupEntriesCnt = -1L; heapEntriesCnt = -1L; size = -1; + sizeLong = -1L; } isEmpty = (offHeapEntriesCnt == 0); @@ -827,6 +837,7 @@ public class CacheMetricsImpl implements CacheMetrics { stat.offHeapBackupEntriesCount(offHeapBackupEntriesCnt); stat.heapEntriesCount(heapEntriesCnt); stat.size(size); + stat.cacheSize(sizeLong); stat.keySize(size); stat.isEmpty(isEmpty); stat.totalPartitionsCount(owningPartCnt + movingPartCnt); @@ -1039,6 +1050,9 @@ public class CacheMetricsImpl implements CacheMetrics { /** Size. */ private int size; + /** Long size. */ + private long cacheSize; + /** Key size. */ private int keySize; @@ -1158,6 +1172,20 @@ public class CacheMetricsImpl implements CacheMetrics { } /** + * @return Long size. + */ + public long cacheSize() { + return cacheSize; + } + + /** + * @param cacheSize Size long. + */ + public void cacheSize(long cacheSize) { + this.cacheSize = cacheSize; + } + + /** * @return Is empty. */ public boolean isEmpty() { http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsSnapshot.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsSnapshot.java index e693720..539ad59 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsSnapshot.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsSnapshot.java @@ -110,6 +110,9 @@ public class CacheMetricsSnapshot implements CacheMetrics, Externalizable { /** Number of non-{@code null} values in the cache. */ private int size; + /** Number of non-{@code null} values in the cache as long value as a long value. */ + private long cacheSize; + /** Number of keys in the cache, possibly with {@code null} values. */ private int keySize; @@ -286,6 +289,7 @@ public class CacheMetricsSnapshot implements CacheMetrics, Externalizable { offHeapAllocatedSize = m.getOffHeapAllocatedSize(); size = entriesStat.size(); + cacheSize = entriesStat.cacheSize(); keySize = entriesStat.keySize(); isEmpty = entriesStat.isEmpty(); @@ -351,6 +355,7 @@ public class CacheMetricsSnapshot implements CacheMetrics, Externalizable { writeBehindStoreBatchSize = loc.getWriteBehindStoreBatchSize(); writeBehindBufSize = loc.getWriteBehindBufferSize(); size = loc.getSize(); + cacheSize = loc.getCacheSize(); keySize = loc.getKeySize(); keyType = loc.getKeyType(); @@ -634,6 +639,11 @@ public class CacheMetricsSnapshot implements CacheMetrics, Externalizable { } /** {@inheritDoc} */ + @Override public long getCacheSize() { + return cacheSize; + } + + /** {@inheritDoc} */ @Override public int getKeySize() { return keySize; } http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java index c78f2d6..818fd67 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java @@ -1503,6 +1503,7 @@ public class PlatformCache extends PlatformAbstractTarget { writer.writeLong(metrics.getEstimatedRebalancingFinishTime()); writer.writeLong(metrics.getRebalancingStartTime()); writer.writeLong(metrics.getRebalanceClearingPartitionsLeft()); + writer.writeLong(metrics.getCacheSize()); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java index 5d8bc81..59f16b2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java @@ -55,6 +55,9 @@ public class VisorCacheMetrics extends VisorDataTransferObject { /** Gets number of keys in the cache, possibly with {@code null} values. */ private int keySize; + /** Number of non-{@code null} values in the cache as a long value. */ + private long cacheSize; + /** Total number of reads of the owning entity (either cache or entry). */ private long reads; @@ -224,6 +227,8 @@ public class VisorCacheMetrics extends VisorDataTransferObject { size = m.getSize(); keySize = m.getKeySize(); + cacheSize = m.getCacheSize(); + reads = m.getCacheGets(); writes = m.getCachePuts() + m.getCacheRemovals(); hits = m.getCacheHits(); @@ -457,6 +462,13 @@ public class VisorCacheMetrics extends VisorDataTransferObject { } /** + * @return Number of non-{@code null} values in the cache as a long value. + */ + public long getCacheSize() { + return cacheSize; + } + + /** * @return Gets query metrics for cache. */ public VisorQueryMetrics getQueryMetrics() { @@ -694,6 +706,8 @@ public class VisorCacheMetrics extends VisorDataTransferObject { out.writeLong(rebalancingBytesRate); out.writeObject(qryMetrics); + + out.writeLong(cacheSize); } /** {@inheritDoc} */ @@ -751,6 +765,9 @@ public class VisorCacheMetrics extends VisorDataTransferObject { rebalancingBytesRate = in.readLong(); qryMetrics = (VisorQueryMetrics)in.readObject(); + + if (in.available() > 0) + cacheSize = in.readLong(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java index ae03a5a..16bdede 100644 --- a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java +++ b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java @@ -152,6 +152,10 @@ public interface CacheMetricsMXBean extends CacheStatisticsMXBean, CacheMXBean, public int getSize(); /** {@inheritDoc} */ + @MXBeanDescription("Number of non-null values in the cache as a long value.") + public long getCacheSize(); + + /** {@inheritDoc} */ @MXBeanDescription("Number of keys in the cache (possibly with null values).") public int getKeySize(); http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java index e207158..7948569 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java @@ -675,6 +675,45 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract } /** + * Test {@link CacheMetrics#getSize()} and {@link CacheMetrics#getCacheSize()} work equally. + * + * @throws Exception If failed. + */ + public void testCacheSizeWorksAsSize() throws Exception { + IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME); + + assertEquals(cache.metrics().getSize(), cache.metrics().getCacheSize()); + + for (int i = 0; i < KEY_CNT; i++) { + cache.put(i, i); + + CacheMetrics metrics = cache.metrics(); + + assertEquals(metrics.getSize(), metrics.getCacheSize()); + + CacheMetrics localMetrics = cache.localMetrics(); + + assertEquals(localMetrics.getSize(), localMetrics.getCacheSize()); + } + + for (int i = 0; i < KEY_CNT / 2; i++) { + cache.remove(i, i); + + CacheMetrics metrics = cache.metrics(); + + assertEquals(metrics.getSize(), metrics.getCacheSize()); + + CacheMetrics localMetrics = cache.localMetrics(); + + assertEquals(localMetrics.getSize(), localMetrics.getCacheSize()); + } + + cache.removeAll(); + + assertEquals(cache.metrics().getSize(), cache.metrics().getCacheSize()); + } + + /** * @throws Exception If failed. */ public void testTxEvictions() throws Exception { http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java b/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java index 3b7bb89..44a15d5 100644 --- a/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java +++ b/modules/core/src/test/java/org/apache/ignite/platform/PlatformCacheWriteMetricsTask.java @@ -468,5 +468,10 @@ public class PlatformCacheWriteMetricsTask extends ComputeTaskAdapter<Long, Obje @Override public long getRebalanceClearingPartitionsLeft() { return 64; } + + /** {@inheritDoc} */ + @Override public long getCacheSize() { + return 65; + } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheMetricsTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheMetricsTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheMetricsTest.cs index 3f671d9..129b4b5 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheMetricsTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheMetricsTest.cs @@ -67,10 +67,12 @@ namespace Apache.Ignite.Core.Tests.Cache var remoteMetrics = metrics.Item2; Assert.AreEqual(1, localMetrics.Size); + Assert.AreEqual(1, localMetrics.CacheSize); Assert.AreEqual(1, localMetrics.CacheGets); Assert.AreEqual(1, localMetrics.CachePuts); Assert.AreEqual(0, remoteMetrics.Size); + Assert.AreEqual(0, remoteMetrics.CacheSize); Assert.AreEqual(0, remoteMetrics.CacheGets); Assert.AreEqual(0, remoteMetrics.CachePuts); } @@ -87,10 +89,12 @@ namespace Apache.Ignite.Core.Tests.Cache var remoteMetrics = metrics.Item2; Assert.AreEqual(1, localMetrics.Size); + Assert.AreEqual(1, localMetrics.CacheSize); Assert.AreEqual(1, localMetrics.CacheGets); Assert.AreEqual(1, localMetrics.CachePuts); Assert.AreEqual(0, remoteMetrics.Size); + Assert.AreEqual(0, remoteMetrics.CacheSize); Assert.AreEqual(1, remoteMetrics.CacheGets); Assert.AreEqual(1, remoteMetrics.CachePuts); } @@ -111,10 +115,12 @@ namespace Apache.Ignite.Core.Tests.Cache var remoteMetrics = metrics.Item1; Assert.AreEqual(1, localMetrics.Size); + Assert.AreEqual(1, localMetrics.CacheSize); Assert.AreEqual(1, localMetrics.CacheGets); Assert.AreEqual(1, localMetrics.CachePuts); Assert.AreEqual(1, remoteMetrics.Size); + Assert.AreEqual(1, remoteMetrics.CacheSize); Assert.AreEqual(0, remoteMetrics.CacheGets); Assert.AreEqual(0, remoteMetrics.CachePuts); } @@ -203,6 +209,7 @@ namespace Apache.Ignite.Core.Tests.Cache Assert.AreEqual(59, metrics.HeapEntriesCount); Assert.AreEqual(62, metrics.EstimatedRebalancingFinishTime); Assert.AreEqual(63, metrics.RebalancingStartTime); + Assert.AreEqual(65, metrics.CacheSize); Assert.AreEqual("foo", metrics.KeyType); Assert.AreEqual("bar", metrics.ValueType); Assert.AreEqual(true, metrics.IsStoreByValue); http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs index a328cf5..d775c05 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/ICacheMetrics.cs @@ -257,6 +257,14 @@ namespace Apache.Ignite.Core.Cache int Size { get; } /// <summary> + /// Gets number of non-null values in the cache. + /// </summary> + /// <returns> + /// Number of non-null values in the cache. + /// </returns> + long CacheSize { get; } + + /// <summary> /// Gets number of keys in the cache, possibly with null values. /// </summary> /// <returns> http://git-wip-us.apache.org/repos/asf/ignite/blob/0dc906f0/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheMetricsImpl.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheMetricsImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheMetricsImpl.cs index fbc5d4c..1fdc877 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheMetricsImpl.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheMetricsImpl.cs @@ -116,6 +116,9 @@ namespace Apache.Ignite.Core.Impl.Cache private readonly int _keySize; /** */ + private readonly long _cacheSize; + + /** */ private readonly bool _isEmpty; /** */ @@ -323,6 +326,7 @@ namespace Apache.Ignite.Core.Impl.Cache _estimatedRebalancingFinishTime = reader.ReadLong(); _rebalancingStartTime = reader.ReadLong(); _rebalancingClearingPartitionsLeft = reader.ReadLong(); + _cacheSize = reader.ReadLong(); } /** <inheritDoc /> */ @@ -413,6 +417,9 @@ namespace Apache.Ignite.Core.Impl.Cache public int Size { get { return _size; } } /** <inheritDoc /> */ + public long CacheSize { get { return _cacheSize; } } + + /** <inheritDoc /> */ public int KeySize { get { return _keySize; } } /** <inheritDoc /> */
