ignite-366 Metrics for caches should work in clustered mode
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5860a312 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5860a312 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5860a312 Branch: refs/heads/ignite-366 Commit: 5860a312cf4b07463b4f8ff17fee747818bbf7ef Parents: d319bb5 Author: Andrey Gura <ag...@gridgain.com> Authored: Mon Apr 6 20:02:29 2015 +0300 Committer: Andrey Gura <ag...@gridgain.com> Committed: Wed Apr 8 15:42:30 2015 +0300 ---------------------------------------------------------------------- .../org/apache/ignite/cluster/ClusterNode.java | 12 --- .../discovery/GridDiscoveryManager.java | 3 +- .../processors/cache/CacheMetricsSnapshot.java | 2 - .../processors/cache/IgniteCacheProxy.java | 13 +++- .../spi/discovery/tcp/TcpDiscoverySpi.java | 1 - .../tcp/internal/TcpDiscoveryNode.java | 13 +++- .../messages/TcpDiscoveryHeartbeatMessage.java | 3 +- .../ignite/internal/GridDiscoverySelfTest.java | 5 -- .../CacheMetricsForClusterGroupSelfTest.java | 82 ++++++++++++++------ .../ignite/p2p/GridP2PClassLoadingSelfTest.java | 5 -- .../ignite/testframework/GridTestNode.java | 5 -- 11 files changed, 86 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java index 2c7fd46..cda2d56 100644 --- a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java +++ b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java @@ -149,18 +149,6 @@ public interface ClusterNode { public ClusterMetrics metrics(); /** - * Gets collections of cache metrics for this node. Note that node cache metrics are constantly updated - * and provide up to date information about caches. - * <p> - * Cache metrics are updated with some delay which is directly related to heartbeat - * frequency. For example, when used with default - * {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi} the update will happen every {@code 2} seconds. - * - * @return Runtime metrics snapshots for this node. - */ - public Map<Integer, CacheMetrics> cacheMetrics(); - - /** * Gets all node attributes. Attributes are assigned to nodes at startup * via {@link org.apache.ignite.configuration.IgniteConfiguration#getUserAttributes()} method. * <p> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java index 15b6ba9..88e3cc9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java @@ -657,7 +657,8 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { Map<Integer, CacheMetrics> metrics = U.newHashMap(caches.size()); for (GridCacheAdapter<?, ?> cache : caches) - metrics.put(cache.context().cacheId(), cache.metrics()); + if (cache.configuration().isStatisticsEnabled()) + metrics.put(cache.context().cacheId(), cache.metrics()); return metrics; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/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 61ca68b..5ed7c73 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 @@ -263,8 +263,6 @@ public class CacheMetricsSnapshot implements CacheMetrics, Externalizable { * @param metrics Metrics for merge. */ public CacheMetricsSnapshot(CacheMetrics loc, Collection<CacheMetrics> metrics) { - A.notEmpty(metrics, "metrics"); - id = loc.id(); cacheName = loc.name(); isEmpty = loc.isEmpty(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index e0e3972..dda1c7b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -33,6 +33,7 @@ import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.lang.*; import org.apache.ignite.mxbean.*; +import org.apache.ignite.spi.discovery.tcp.internal.*; import org.jetbrains.annotations.*; import javax.cache.*; @@ -146,8 +147,16 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V try { List<CacheMetrics> metrics = new ArrayList<>(grp.nodes().size()); - for (ClusterNode node : grp.nodes()) - metrics.add(node.cacheMetrics().get(context().cacheId())); + for (ClusterNode node : grp.nodes()) { + Map<Integer, CacheMetrics> nodeCacheMetrics = ((TcpDiscoveryNode)node).cacheMetrics(); + + if (nodeCacheMetrics != null) { + CacheMetrics e = nodeCacheMetrics.get(context().cacheId()); + + if (e != null) + metrics.add(e); + } + } return new CacheMetricsSnapshot(ctx.cache().metrics(), metrics); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 57a8869..18d6194 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -5154,7 +5154,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov metrics = hbMsg.metrics().get(nodeId).metrics(); hbMsg.removeMetrics(nodeId); - hbMsg.removeCacheMetrics(nodeId); assert !hbMsg.hasMetrics(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java index 3cafd4f..9be1207 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java @@ -214,8 +214,17 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste this.metrics = metrics; } - /** {@inheritDoc} */ - @Override public Map<Integer, CacheMetrics> cacheMetrics() { + /** + * Gets collections of cache metrics for this node. Note that node cache metrics are constantly updated + * and provide up to date information about caches. + * <p> + * Cache metrics are updated with some delay which is directly related to heartbeat + * frequency. For example, when used with default + * {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi} the update will happen every {@code 2} seconds. + * + * @return Runtime metrics snapshots for this node. + */ + public Map<Integer, CacheMetrics> cacheMetrics() { if (metricsProvider != null) cacheMetrics = metricsProvider.cacheMetrics(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java index 05268d3..4b8d46c 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java @@ -103,7 +103,8 @@ public class TcpDiscoveryHeartbeatMessage extends TcpDiscoveryAbstractMessage { assert metrics != null; assert !this.cacheMetrics.containsKey(nodeId); - this.cacheMetrics.put(nodeId, metrics); + if (!F.isEmpty(metrics)) + this.cacheMetrics.put(nodeId, metrics); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/test/java/org/apache/ignite/internal/GridDiscoverySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridDiscoverySelfTest.java index 96a1729..4a2483d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/GridDiscoverySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/GridDiscoverySelfTest.java @@ -376,11 +376,6 @@ public class GridDiscoverySelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Nullable @Override public Map<Integer, CacheMetrics> cacheMetrics() { - return null; - } - - /** {@inheritDoc} */ @Nullable @Override public Map<String, Object> attributes() { return null; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java index a3ffca9..9ebcf46 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java @@ -19,13 +19,18 @@ package org.apache.ignite.internal.processors.cache; import org.apache.ignite.*; import org.apache.ignite.cache.*; +import org.apache.ignite.cluster.*; import org.apache.ignite.configuration.*; import org.apache.ignite.lang.*; +import org.apache.ignite.spi.discovery.tcp.internal.*; +import org.apache.ignite.testframework.junits.common.*; + +import java.util.*; /** * Test for cluster wide cache metrics. */ -public class CacheMetricsForClusterGroupSelfTest extends GridCacheAbstractSelfTest { +public class CacheMetricsForClusterGroupSelfTest extends GridCommonAbstractTest { /** Grid count. */ private static final int GRID_CNT = 3; @@ -42,30 +47,45 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCacheAbstractSelfTe private static final int ENTRY_CNT_CACHE2 = 500; /** {@inheritDoc} */ - @Override protected int gridCount() { - return GRID_CNT; + @Override protected void beforeTest() throws Exception { + startGrids(GRID_CNT); } /** {@inheritDoc} */ - @Override protected void beforeTest() throws Exception { - super.beforeTest(); + @Override protected void afterTest() throws Exception { + stopAllGrids(); + } - CacheConfiguration ccfg1 = defaultCacheConfiguration(); - ccfg1.setName(CACHE1); - ccfg1.setStatisticsEnabled(true); + /** + * Test cluster group metrics in case of statistics enabled. + */ + public void testMetricsStatisticsEnabled() throws Exception { + createCaches(true); - CacheConfiguration ccfg2 = defaultCacheConfiguration(); - ccfg2.setName(CACHE2); - ccfg2.setStatisticsEnabled(true); + populateCacheData(CACHE1, ENTRY_CNT_CACHE1); + populateCacheData(CACHE2, ENTRY_CNT_CACHE2); - grid(0).getOrCreateCache(ccfg1); - grid(0).getOrCreateCache(ccfg2); + readCacheData(CACHE1, ENTRY_CNT_CACHE1); + readCacheData(CACHE2, ENTRY_CNT_CACHE2); + + // Wait for heartbeat message + Thread.sleep(3000); + + Collection<ClusterNode> nodes = grid(0).cluster().forRemotes().nodes(); + + for (ClusterNode node : nodes) + assertNotNull(((TcpDiscoveryNode)node).cacheMetrics()); + + assertMetrics(CACHE1); + assertMetrics(CACHE2); } /** - * Test cluster group metrics. + * Test cluster group metrics in case of statistics disabled. */ - public void testMetrics() throws Exception { + public void testMetricsStatisticsDisabled() throws Exception { + createCaches(false); + populateCacheData(CACHE1, ENTRY_CNT_CACHE1); populateCacheData(CACHE2, ENTRY_CNT_CACHE2); @@ -75,8 +95,26 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCacheAbstractSelfTe // Wait for heartbeat message Thread.sleep(3000); - assertMetrics(CACHE1); - assertMetrics(CACHE2); + Collection<ClusterNode> nodes = grid(0).cluster().forRemotes().nodes(); + + for (ClusterNode node : nodes) + assertNull(((TcpDiscoveryNode)node).cacheMetrics()); + } + + /** + * @param statisticsEnabled Statistics enabled. + */ + private void createCaches(boolean statisticsEnabled) { + CacheConfiguration ccfg1 = defaultCacheConfiguration(); + ccfg1.setName(CACHE1); + ccfg1.setStatisticsEnabled(statisticsEnabled); + + CacheConfiguration ccfg2 = defaultCacheConfiguration(); + ccfg2.setName(CACHE2); + ccfg2.setStatisticsEnabled(statisticsEnabled); + + grid(0).getOrCreateCache(ccfg1); + grid(0).getOrCreateCache(ccfg2); } /** @@ -107,16 +145,16 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCacheAbstractSelfTe private void assertMetrics(String name) { CacheMetrics metrics = grid(0).cache(name).metrics(grid(0).cluster().forCacheNodes(name)); - CacheMetrics[] ms = new CacheMetrics[gridCount()]; + CacheMetrics[] ms = new CacheMetrics[GRID_CNT]; - for (int i = 0; i < gridCount(); i++) + for (int i = 0; i < GRID_CNT; i++) ms[i] = grid(i).cache(name).metrics(); // Static metrics - for (int i = 0; i < gridCount(); i++) + for (int i = 0; i < GRID_CNT; i++) assertEquals(metrics.id(), ms[i].id()); - for (int i = 0; i < gridCount(); i++) + for (int i = 0; i < GRID_CNT; i++) assertEquals(metrics.name(), ms[i].name()); // Dynamic metrics @@ -146,7 +184,7 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCacheAbstractSelfTe private long sum(CacheMetrics[] ms, IgniteClosure<CacheMetrics, Long> f) { long res = 0; - for (int i = 0; i < gridCount(); i++) + for (int i = 0; i < GRID_CNT; i++) res += f.apply(ms[i]); return res; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PClassLoadingSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PClassLoadingSelfTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PClassLoadingSelfTest.java index c0e55b1..1a529a5 100644 --- a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PClassLoadingSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PClassLoadingSelfTest.java @@ -116,11 +116,6 @@ public class GridP2PClassLoadingSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Nullable @Override public Map<Integer, CacheMetrics> cacheMetrics() { - return null; - } - - /** {@inheritDoc} */ @Nullable @Override public Map<String, Object> attributes() { return null; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5860a312/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java index 58c2401..ded19d0 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java @@ -191,11 +191,6 @@ public class GridTestNode extends GridMetadataAwareAdapter implements ClusterNod } /** {@inheritDoc} */ - @Override public Map<Integer, CacheMetrics> cacheMetrics() { - return cacheMetrics; - } - - /** {@inheritDoc} */ @Override public long order() { return order != 0 ? order : (metrics == null ? -1 : metrics.getStartTime()); }