IGNITE-49 Fixed extra read events.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d6992165 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d6992165 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d6992165 Branch: refs/heads/ignite-49 Commit: d699216521219e72c7a1dc0b7ab58d13d0569259 Parents: 3ea7ea0 Author: nikolay_tikhonov <ntikho...@gridgain.com> Authored: Tue Jan 20 12:13:35 2015 +0300 Committer: nikolay_tikhonov <ntikho...@gridgain.com> Committed: Tue Jan 20 12:13:35 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheAdapter.java | 39 ++++++++++++-------- .../cache/GridCacheMetricsAdapter.java | 12 +++++- .../dht/GridPartitionedGetFuture.java | 2 +- .../dht/atomic/GridDhtAtomicCache.java | 4 +- .../dht/colocated/GridDhtColocatedCache.java | 4 +- .../local/atomic/GridLocalAtomicCache.java | 27 +++++++++----- .../cache/GridCacheAbstractMetricsSelfTest.java | 26 +++++-------- 7 files changed, 69 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java index 84cd94c..4e0cb9e 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheAdapter.java @@ -2088,9 +2088,9 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im /** {@inheritDoc} */ @Nullable @Override public V put(final K key, final V val, @Nullable final GridCacheEntryEx<K, V> cached, final long ttl, @Nullable final IgnitePredicate<GridCacheEntry<K, V>>[] filter) throws IgniteCheckedException { - boolean statisticsEnabled = ctx.config().isStatisticsEnabled(); + boolean statsEnabled = ctx.config().isStatisticsEnabled(); - long start = statisticsEnabled ? System.nanoTime() : 0L; + long start = statsEnabled ? System.nanoTime() : 0L; A.notNull(key, "key", val, "val"); @@ -2113,10 +2113,8 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im } })); - if (statisticsEnabled) { - ctx.cache().metrics0().addPutTimeNanos(System.nanoTime() - start); - ctx.cache().metrics0().addGetTimeNanos(System.nanoTime() - start); - } + if (statsEnabled) + ctx.cache().metrics0().addPutAndGetTimeNanos(System.nanoTime() - start); return prevValue; } @@ -2540,9 +2538,9 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im /** {@inheritDoc} */ @Override public boolean putxIfAbsent(final K key, final V val) throws IgniteCheckedException { - boolean statisticsEnabled = ctx.config().isStatisticsEnabled(); + boolean statsEnabled = ctx.config().isStatisticsEnabled(); - long start = statisticsEnabled ? System.nanoTime() : 0L; + long start = statsEnabled ? System.nanoTime() : 0L; A.notNull(key, "key", val, "val"); @@ -2565,7 +2563,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im } }); - if (statisticsEnabled && stored) + if (statsEnabled && stored) ctx.cache().metrics0().addPutTimeNanos(System.nanoTime() - start); return stored; @@ -2938,15 +2936,24 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im /** {@inheritDoc} */ @Override public boolean removex(final K key, final IgnitePredicate<GridCacheEntry<K, V>>... filter) throws IgniteCheckedException { - return removex(key, null, filter); + boolean statsEnabled = ctx.config().isStatisticsEnabled(); + + long start = statsEnabled ? System.nanoTime() : 0L; + + boolean removed = removex(key, null, filter); + + if (statsEnabled && removed) + ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start); + + return removed; } /** {@inheritDoc} */ @Override public boolean removex(final K key, @Nullable final GridCacheEntryEx<K, V> entry, @Nullable final IgnitePredicate<GridCacheEntry<K, V>>... filter) throws IgniteCheckedException { - boolean statisticsEnabled = ctx.config().isStatisticsEnabled(); + boolean statsEnabled = ctx.config().isStatisticsEnabled(); - long start = statisticsEnabled ? System.nanoTime() : 0L; + long start = statsEnabled ? System.nanoTime() : 0L; ctx.denyOnLocalRead(); @@ -2967,7 +2974,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im } }); - if (statisticsEnabled && removed) + if (statsEnabled && removed) ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start); return removed; @@ -3151,9 +3158,9 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im /** {@inheritDoc} */ @Override public boolean remove(final K key, final V val) throws IgniteCheckedException { - boolean statisticsEnabled = ctx.config().isStatisticsEnabled(); + boolean statsEnabled = ctx.config().isStatisticsEnabled(); - long start = statisticsEnabled ? System.nanoTime() : 0L; + long start = statsEnabled ? System.nanoTime() : 0L; ctx.denyOnLocalRead(); @@ -3184,7 +3191,7 @@ public abstract class GridCacheAdapter<K, V> extends GridMetadataAwareAdapter im } }); - if (statisticsEnabled && removed) + if (statsEnabled && removed) ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start); return removed; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/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 e30b38b..2c22aee 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 @@ -270,7 +270,7 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable } /** - * Increments the remove and get time accumulators. + * Increments remove and get time accumulators. * * @param duration the time taken in nanoseconds. */ @@ -279,6 +279,16 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable getTimeNanos += duration; } + /** + * Increments put and get time accumulators. + * + * @param duration the time taken in nanoseconds. + */ + public void addPutAndGetTimeNanos(long duration) { + putTimeNanos += duration; + getTimeNanos += duration; + } + /** {@inheritDoc} */ @Override public float getAverageGetTime() { long timeNanos = getTimeNanos; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridPartitionedGetFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridPartitionedGetFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridPartitionedGetFuture.java index a5ddaf7..3e3d8d4 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridPartitionedGetFuture.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/GridPartitionedGetFuture.java @@ -425,7 +425,7 @@ public class GridPartitionedGetFuture<K, V> extends GridCompoundIdentityFuture<M /*read-through*/false, /*fail-fast*/true, /*unmarshal*/true, - /**update-metrics*/true, + /**update-metrics*/false, /*event*/true, /*temporary*/false, subjId, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java index c3f1bf5..d27323b 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java @@ -886,7 +886,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { /*read-through*/false, /*fail-fast*/true, /*unmarshal*/true, - /**update-metrics*/true, + /**update-metrics*/false, /*event*/true, /*temporary*/false, subjId, @@ -941,6 +941,8 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> { if (!success) break; + else + ctx.cache().metrics0().onRead(true); } if (success) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java index 62c12f9..5d9226c 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java @@ -276,7 +276,7 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte /*read-through*/false, /*fail-fast*/true, /*unmarshal*/true, - /**update-metrics*/true, + /**update-metrics*/false, /*event*/true, /*temporary*/false, subjId, @@ -329,6 +329,8 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte if (!success) break; + else + ctx.cache().metrics0().onRead(true); } if (success) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java index fca2dd5..7f495ce 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java @@ -403,19 +403,28 @@ public class GridLocalAtomicCache<K, V> extends GridCacheAdapter<K, V> { @Override public boolean removex(K key, @Nullable GridCacheEntryEx<K, V> entry, @Nullable IgnitePredicate<GridCacheEntry<K, V>>... filter) throws IgniteCheckedException { + boolean statsEnabled = ctx.config().isStatisticsEnabled(); + + long start = statsEnabled ? System.nanoTime() : 0L; + A.notNull(key, "key"); ctx.denyOnLocalRead(); - return (Boolean)updateAllInternal(DELETE, - Collections.singleton(key), - null, - null, - expiryPerCall(), - false, - false, - filter, - ctx.isStoreEnabled()); + Boolean removed = (Boolean)updateAllInternal(DELETE, + Collections.singleton(key), + null, + null, + expiryPerCall(), + false, + false, + filter, + ctx.isStoreEnabled()); + + if (statsEnabled && removed) + ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start); + + return removed; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d6992165/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 59b70b3..5767494 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 @@ -35,9 +35,6 @@ import static java.util.concurrent.TimeUnit.*; */ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstractSelfTest { /** */ - public static final String CACHE_NAME = "metric_test"; - - /** */ private static final int KEY_CNT = 50; /** {@inheritDoc} */ @@ -158,21 +155,16 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract jcache.put(1, 1); assertEquals(0.0, cache.metrics().getAverageGetTime(), 0.0); - assertEquals(0, cache.metrics().reads()); - - long start = System.nanoTime(); jcache.get(1); float averageGetTime = cache.metrics().getAverageGetTime(); - assert averageGetTime >= 0; - - assertEquals(1, cache.metrics().reads()); + assert averageGetTime > 0; jcache.get(2); - assert cache.metrics().getAverageGetTime() >= 0; + assert cache.metrics().getAverageGetTime() > 0; } /** @@ -182,12 +174,13 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract IgniteCache<Integer, Integer> jcache = grid(0).jcache(null); GridCache<Object, Object> cache = grid(0).cache(null); + assertEquals(0.0, cache.metrics().getAverageGetTime(), 0.0); + jcache.put(1, 1); jcache.put(2, 2); jcache.put(3, 3); assertEquals(0.0, cache.metrics().getAverageGetTime(), 0.0); - assertEquals(0, cache.metrics().reads()); Set<Integer> keys = new HashSet<>(); keys.add(1); @@ -196,10 +189,7 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract jcache.getAll(keys); - float averageGetTime = cache.metrics().getAverageGetTime(); - - assert averageGetTime >= 0; - assertEquals(3, cache.metrics().reads()); + assert cache.metrics().getAverageGetTime() > 0; } /** @@ -357,7 +347,8 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract for (int i = 0; i < keyCnt; i++) { assertNull("Value is not null for key: " + i, cache.get(i)); - if (cache.affinity().isPrimary(grid(0).localNode(), i)) + if (cache.configuration().getCacheMode() == GridCacheMode.REPLICATED || + cache.affinity().isPrimary(grid(0).localNode(), i)) expReads++; else expReads += 2; @@ -390,6 +381,9 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract public void testMissesOnEmptyCache() throws Exception { GridCache<Integer, Integer> cache = grid(0).cache(null); + assertEquals("Expected 0 read", 0, cache.metrics().reads()); + assertEquals("Expected 0 miss", 0, cache.metrics().misses()); + Integer key = null; for (int i = 0; i < 1000; i++) {