IGNITE-49 Implemented CacheStatisticsMXBean#getCacheRemovals()
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/70d98c20 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/70d98c20 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/70d98c20 Branch: refs/heads/ignite-49 Commit: 70d98c20922d1cb9c31c3ef7b7d131acbcea2459 Parents: 9e7f696 Author: nikolay_tikhonov <ntikho...@gridgain.com> Authored: Wed Dec 24 12:00:34 2014 +0300 Committer: nikolay_tikhonov <ntikho...@gridgain.com> Committed: Fri Jan 16 14:13:33 2015 +0300 ---------------------------------------------------------------------- .../ignite/cache/CacheConfigurationMXBean.java | 68 ++++++++++++ .../gridgain/grid/cache/GridCacheMetrics.java | 3 +- .../processors/cache/GridCacheMapEntry.java | 23 ++++- .../cache/GridCacheMetricsAdapter.java | 103 ++++++++++++++++++- .../cache/GridCacheAbstractMetricsSelfTest.java | 11 ++ 5 files changed, 201 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70d98c20/modules/core/src/main/java/org/apache/ignite/cache/CacheConfigurationMXBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheConfigurationMXBean.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheConfigurationMXBean.java new file mode 100644 index 0000000..2f04cc8 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheConfigurationMXBean.java @@ -0,0 +1,68 @@ +// @java.file.header + +/* _________ _____ __________________ _____ + * __ ____/___________(_)______ /__ ____/______ ____(_)_______ + * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \ + * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / / + * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/ + */ + +package org.apache.ignite.cache; + +import javax.cache.*; +import javax.cache.configuration.*; +import javax.cache.management.*; + +/** + * TODO: Add class description. + */ +public class CacheConfigurationMXBean<K, V> implements CacheMXBean { + /** + * + */ + private final Cache<K, V> cache; + + /** + * Constructor. + * + * @param cache The cache. + */ + public CacheConfigurationMXBean(Cache<K, V> cache) { + this.cache = cache; + } + + /** {@inheritDoc} */ + @Override public String getKeyType() { + return cache.getConfiguration(CompleteConfiguration.class).getKeyType().getName(); + } + + /** {@inheritDoc} */ + @Override public String getValueType() { + return cache.getConfiguration(CompleteConfiguration.class).getValueType().getName(); + } + + /** {@inheritDoc} */ + @Override public boolean isReadThrough() { + return cache.getConfiguration(CompleteConfiguration.class).isReadThrough(); + } + + /** {@inheritDoc} */ + @Override public boolean isWriteThrough() { + return cache.getConfiguration(CompleteConfiguration.class).isWriteThrough(); + } + + /** {@inheritDoc} */ + @Override public boolean isStoreByValue() { + return cache.getConfiguration(Configuration.class).isStoreByValue(); + } + + /** {@inheritDoc} */ + @Override public boolean isStatisticsEnabled() { + return cache.getConfiguration(CompleteConfiguration.class).isStatisticsEnabled(); + } + + /** {@inheritDoc} */ + @Override public boolean isManagementEnabled() { + return cache.getConfiguration(CompleteConfiguration.class).isManagementEnabled(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70d98c20/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheMetrics.java b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheMetrics.java index c6a5302..d523c25 100644 --- a/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheMetrics.java +++ b/modules/core/src/main/java/org/gridgain/grid/cache/GridCacheMetrics.java @@ -17,13 +17,14 @@ package org.gridgain.grid.cache; +import javax.cache.management.*; import java.io.*; /** * Cache metrics used to obtain statistics on cache itself. * Use {@link GridCache#metrics()} to obtain metrics for a cache. */ -public interface GridCacheMetrics extends Serializable { +public interface GridCacheMetrics extends CacheStatisticsMXBean, Serializable { /** * Gets create time of the owning entity (either cache or entry). * http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70d98c20/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java index 9b8945a..46dc22d 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java @@ -1293,7 +1293,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> drReplicate(drType, null, null, newVer); if (metrics) - cctx.cache().metrics0().onWrite(); + cctx.cache().metrics0().onRemove(); if (tx == null) obsoleteVer = newVer; @@ -1588,8 +1588,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> res = hadVal; } - if (metrics) - cctx.cache().metrics0().onWrite(); + updateMetrics(op, metrics); cctx.continuousQueries().onEntryUpdate(this, key, val, valueBytesUnlocked(), old, oldBytes); @@ -2057,8 +2056,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> newDrExpireTime = -1L; } - if (metrics) - cctx.cache().metrics0().onWrite(); + updateMetrics(op, metrics); if (primary || cctx.isReplicated()) cctx.continuousQueries().onEntryUpdate(this, key, val, valueBytesUnlocked(), old, oldBytes); @@ -4130,6 +4128,21 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V> } /** + * Updates metrics. + * + * @param op Operation. + * @param metrics Update merics flag. + */ + private void updateMetrics(GridCacheOperation op, boolean metrics) { + if (metrics) { + if (op == DELETE) + cctx.cache().metrics0().onRemove(); + else + cctx.cache().metrics0().onWrite(); + } + } + + /** * @return TTL. */ public long ttlExtras() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70d98c20/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java index 9a01ef5..63899f8 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java @@ -64,6 +64,10 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable /** Number of transaction rollbacks. */ private volatile int txRollbacks; + private volatile long getCnt; + private volatile long putCnt; + private volatile long rmCnt; + /** Cache metrics. */ @GridToStringExclude private transient GridCacheMetricsAdapter delegate; @@ -90,6 +94,7 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable misses = m.misses(); txCommits = m.txCommits(); txRollbacks = m.txRollbacks(); + rmCnt = m.getCacheRemovals(); } /** @@ -131,7 +136,7 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable /** {@inheritDoc} */ @Override public int writes() { - return writes; + return (int)(writes + rmCnt); } /** {@inheritDoc} */ @@ -154,6 +159,90 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable return txRollbacks; } + /** {@inheritDoc} */ + @Override public void clear() { + //TODO: rewrite + createTime = U.currentTimeMillis(); + readTime = createTime; + writeTime = createTime; + commitTime = createTime; + rollbackTime = createTime; + reads = 0; + writes = 0; + hits = 0; + misses = 0; + txCommits = 0; + txRollbacks = 0; + } + + /** {@inheritDoc} */ + @Override public long getCacheHits() { + return hits; + } + + /** {@inheritDoc} */ + @Override public float getCacheHitPercentage() { + long hits0 = hits; + + if (hits0 == 0) + return 0; + + return (float) hits0 / getCacheGets() * 100.0f; + } + + /** {@inheritDoc} */ + @Override public long getCacheMisses() { + return misses; + } + + /** {@inheritDoc} */ + @Override public float getCacheMissPercentage() { + long misses0 = misses; + + if (misses0 == 0) + return 0; + + return (float) misses0 / getCacheGets() * 100.0f; + } + + /** {@inheritDoc} */ + @Override public long getCacheGets() { + //TODO: split read + return 0; + } + + /** {@inheritDoc} */ + @Override public long getCachePuts() { + //TODO: split write + return 0; + } + + @Override + public long getCacheRemovals() { + return rmCnt; + } + + @Override + public long getCacheEvictions() { + //TODO: discuss with Semen + return 0; + } + + @Override + public float getAverageGetTime() { + return 0; + } + + @Override + public float getAveragePutTime() { + return 0; + } + + @Override + public float getAverageRemoveTime() { + return 0; + } + /** * Cache read callback. * @param isHit Hit or miss flag. @@ -185,6 +274,18 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable } /** + * Cache remove callback. + */ + public void onRemove(){ + writeTime = U.currentTimeMillis(); + + rmCnt++; + + if (delegate != null) + delegate.onRemove(); + } + + /** * Transaction commit callback. */ public void onTxCommit() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70d98c20/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java index 54a2b2d..33fa252 100644 --- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java +++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java @@ -215,4 +215,15 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract assertEquals("Expected 2 misses", 2, cache.metrics().misses()); assertEquals("Expected 1 hit", 1, cache.metrics().hits()); } + + public void testRemoves() throws Exception { + GridCache<Integer, Integer> cache = grid(0).cache(null); + + cache.put(1, 1); + + // +1 remove + cache.remove(1); + + assert cache.metrics().getCacheRemovals() == 1; + } }