Repository: ignite Updated Branches: refs/heads/master bf5131fa4 -> e36e383f1
IGNITE-7476 Avoid NPE during metrics gathering leading to discovery thread failure. - Fixes #3448. Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e36e383f Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e36e383f Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e36e383f Branch: refs/heads/master Commit: e36e383f1dea725c44270fad6b40648d832b187a Parents: bf5131f Author: Ilya Kasnacheev <ilya.kasnach...@gmail.com> Authored: Fri Feb 9 17:07:55 2018 +0300 Committer: Alexey Goncharuk <alexey.goncha...@gmail.com> Committed: Fri Feb 9 17:07:55 2018 +0300 ---------------------------------------------------------------------- .../discovery/GridDiscoveryManager.java | 27 +++++++++++--------- .../datastreamer/DataStreamerImpl.java | 4 +-- 2 files changed, 16 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e36e383f/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 82d0f66..e731c52 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 @@ -1059,25 +1059,28 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { /** {@inheritDoc} */ @Override public Map<Integer, CacheMetrics> cacheMetrics() { - Collection<GridCacheAdapter<?, ?>> caches = ctx.cache().internalCaches(); + try { + Collection<GridCacheAdapter<?, ?>> caches = ctx.cache().internalCaches(); - if (F.isEmpty(caches)) - return Collections.emptyMap(); + if (!F.isEmpty(caches)) { + Map<Integer, CacheMetrics> metrics = U.newHashMap(caches.size()); - Map<Integer, CacheMetrics> metrics = null; + for (GridCacheAdapter<?, ?> cache : caches) { + if (cache.context().isStatisticsEnabled() && + cache.context().started() && + cache.context().affinity().affinityTopologyVersion().topologyVersion() > 0) { - for (GridCacheAdapter<?, ?> cache : caches) { - if (cache.context().statisticsEnabled() && - cache.context().started() && - cache.context().affinity().affinityTopologyVersion().topologyVersion() > 0) { - if (metrics == null) - metrics = U.newHashMap(caches.size()); + metrics.put(cache.context().cacheId(), cache.localMetrics()); + } + } - metrics.put(cache.context().cacheId(), cache.localMetrics()); + return metrics; } + } catch (Exception e) { + U.warn(log, "Failed to compute cache metrics", e); } - return metrics == null ? Collections.<Integer, CacheMetrics>emptyMap() : metrics; + return Collections.emptyMap(); } }; } http://git-wip-us.apache.org/repos/asf/ignite/blob/e36e383f/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java index 7d6a8d3..2b8a6c5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java @@ -2132,9 +2132,7 @@ public class DataStreamerImpl<K, V> implements IgniteDataStreamer<K, V>, Delayed // No-op. } catch (IgniteCheckedException ex) { - IgniteLogger log = cache.unwrap(Ignite.class).log(); - - U.error(log, "Failed to set initial value for cache entry: " + e, ex); + throw new IgniteException("Failed to set initial value for cache entry", ex); } finally { cctx.shared().database().checkpointReadUnlock();