Repository: incubator-ignite Updated Branches: refs/heads/master 20872dc75 -> a0e5f1bb9
master: visor debug reworked Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/a0e5f1bb Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/a0e5f1bb Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/a0e5f1bb Branch: refs/heads/master Commit: a0e5f1bb9abdf979b6603927f2deb0db02101ce9 Parents: 20872dc Author: Yakov Zhdanov <yzhda...@gridgain.com> Authored: Wed Dec 10 12:26:04 2014 +0300 Committer: Yakov Zhdanov <yzhda...@gridgain.com> Committed: Wed Dec 10 12:26:04 2014 +0300 ---------------------------------------------------------------------- .../grid/kernal/visor/VisorMultiNodeTask.java | 31 +++++++--- .../visor/node/VisorNodeDataCollectorJob.java | 64 ++++++++++++++++---- .../visor/node/VisorNodeDataCollectorTask.java | 24 ++++---- 3 files changed, 88 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a0e5f1bb/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorMultiNodeTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorMultiNodeTask.java b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorMultiNodeTask.java index 8db90e0..de6d88b 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorMultiNodeTask.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorMultiNodeTask.java @@ -14,7 +14,6 @@ import org.apache.ignite.compute.*; import org.apache.ignite.resources.*; import org.gridgain.grid.*; import org.gridgain.grid.kernal.*; -import org.gridgain.grid.util.*; import org.gridgain.grid.util.typedef.internal.*; import org.jetbrains.annotations.*; @@ -48,8 +47,8 @@ public abstract class VisorMultiNodeTask<A, R, J> implements ComputeTask<VisorTa protected abstract VisorJob<A, J> job(A arg); /** {@inheritDoc} */ - @Nullable @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, - @Nullable VisorTaskArgument<A> arg) throws GridException { + @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, VisorTaskArgument<A> arg) + throws GridException { assert arg != null; start = U.currentTimeMillis(); @@ -61,13 +60,24 @@ public abstract class VisorMultiNodeTask<A, R, J> implements ComputeTask<VisorTa if (debug) logStart(g.log(), getClass(), start); + return map0(subgrid, arg); + } + + /** + * Actual map logic. + * + * @param arg Task execution argument. + * @param subgrid Nodes available for this task execution. + * @return Map of grid jobs assigned to subgrid node. + * @throws GridException If mapping could not complete successfully. + */ + protected Map<? extends ComputeJob, ClusterNode> map0(List<ClusterNode> subgrid, VisorTaskArgument<A> arg) + throws GridException { Collection<UUID> nodeIds = arg.nodes(); Map<ComputeJob, ClusterNode> map = U.newHashMap(nodeIds.size()); try { - taskArg = arg.argument(); - for (ClusterNode node : subgrid) if (nodeIds.contains(node.id())) map.put(job(taskArg), node); @@ -75,8 +85,7 @@ public abstract class VisorMultiNodeTask<A, R, J> implements ComputeTask<VisorTa return map; } finally { - if (debug) - logMapped(g.log(), getClass(), map.values()); + logMapped(g.log(), getClass(), map.values()); } } @@ -87,7 +96,13 @@ public abstract class VisorMultiNodeTask<A, R, J> implements ComputeTask<VisorTa return ComputeJobResultPolicy.WAIT; } - /** {@inheritDoc} */ + /** + * Actual reduce logic. + * + * @param results Job results. + * @return Task result. + * @throws GridException If reduction or results caused an error. + */ @Nullable protected abstract R reduce0(List<ComputeJobResult> results) throws GridException; /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a0e5f1bb/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorJob.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorJob.java b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorJob.java index 1b5df78..7b3cec1 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorJob.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorJob.java @@ -86,8 +86,17 @@ public class VisorNodeDataCollectorJob extends VisorJob<VisorNodeDataCollectorTa for (GridCache cache : g.cachesx()) { String cacheName = cache.name(); - if (arg.systemCaches() || !(isSystemCache(cacheName) || isGgfsCache(cfg, cacheName))) - res.caches().add(VisorCache.from(g, cache, arg.sample())); + if (arg.systemCaches() || !(isSystemCache(cacheName) || isGgfsCache(cfg, cacheName))) { + long start0 = U.currentTimeMillis(); + + try { + res.caches().add(VisorCache.from(g, cache, arg.sample())); + } + finally { + if (debug) + log(g.log(), "Collected cache: " + cache.name(), getClass(), start0); + } + } } } catch (Throwable cachesEx) { @@ -101,16 +110,24 @@ public class VisorNodeDataCollectorJob extends VisorJob<VisorNodeDataCollectorTa GridGgfsProcessorAdapter ggfsProc = ((GridKernal)g).context().ggfs(); for (IgniteFs ggfs : ggfsProc.ggfss()) { - Collection<GridIpcServerEndpoint> endPoints = ggfsProc.endpoints(ggfs.name()); + long start0 = U.currentTimeMillis(); - if (endPoints != null) { - for (GridIpcServerEndpoint ep : endPoints) - if (ep.isManagement()) - res.ggfsEndpoints().add(new VisorGgfsEndpoint(ggfs.name(), g.name(), - ep.getHost(), ep.getPort())); - } + try { + Collection<GridIpcServerEndpoint> endPoints = ggfsProc.endpoints(ggfs.name()); - res.ggfss().add(VisorGgfs.from(ggfs)); + if (endPoints != null) { + for (GridIpcServerEndpoint ep : endPoints) + if (ep.isManagement()) + res.ggfsEndpoints().add(new VisorGgfsEndpoint(ggfs.name(), g.name(), + ep.getHost(), ep.getPort())); + } + + res.ggfss().add(VisorGgfs.from(ggfs)); + } + finally { + if (debug) + log(g.log(), "Collected GGFS: " + ggfs.name(), getClass(), start0); + } } } catch (Throwable ggfssEx) { @@ -124,8 +141,17 @@ public class VisorNodeDataCollectorJob extends VisorJob<VisorNodeDataCollectorTa StreamerConfiguration[] cfgs = g.configuration().getStreamerConfiguration(); if (cfgs != null) { - for (StreamerConfiguration cfg : cfgs) - res.streamers().add(VisorStreamer.from(g.streamer(cfg.getName()))); + for (StreamerConfiguration cfg : cfgs) { + long start0 = U.currentTimeMillis(); + + try { + res.streamers().add(VisorStreamer.from(g.streamer(cfg.getName()))); + } + finally { + if (debug) + log(g.log(), "Collected streamer: " + cfg.getName(), getClass(), start0); + } + } } } catch (Throwable streamersEx) { @@ -144,14 +170,28 @@ public class VisorNodeDataCollectorJob extends VisorJob<VisorNodeDataCollectorTa res.topologyVersion(g.topologyVersion()); + long start0 = U.currentTimeMillis(); + events(res, arg); + if (debug) + start0 = log(g.log(), "Collected events", getClass(), start0); + caches(res, arg); + if (debug) + start0 = log(g.log(), "Collected caches", getClass(), start0); + ggfs(res); + if (debug) + start0 = log(g.log(), "Collected ggfs", getClass(), start0); + streamers(res); + if (debug) + log(g.log(), "Collected streamers", getClass(), start0); + return res; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a0e5f1bb/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorTask.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorTask.java b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorTask.java index 7ff18e9..6107d4a 100644 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorTask.java +++ b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeDataCollectorTask.java @@ -19,6 +19,8 @@ import org.jetbrains.annotations.*; import java.util.*; +import static org.gridgain.grid.kernal.visor.util.VisorTaskUtils.*; + /** * Collects current Grid state mostly topology and metrics. */ @@ -29,21 +31,21 @@ public class VisorNodeDataCollectorTask extends VisorMultiNodeTask<VisorNodeData private static final long serialVersionUID = 0L; /** {@inheritDoc} */ - @Nullable @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, - @Nullable VisorTaskArgument<VisorNodeDataCollectorTaskArg> arg) throws GridException { + @Override protected Map<? extends ComputeJob, ClusterNode> map0(List<ClusterNode> subgrid, + VisorTaskArgument<VisorNodeDataCollectorTaskArg> arg) throws GridException { assert arg != null; - taskArg = arg.argument(); - - Collection<ClusterNode> nodes = g.nodes(); - - Map<ComputeJob, ClusterNode> map = U.newHashMap(nodes.size()); + Map<ComputeJob, ClusterNode> map = U.newHashMap(subgrid.size()); - // Collect data from ALL nodes. - for (ClusterNode node : nodes) - map.put(job(taskArg), node); + try { + for (ClusterNode node : subgrid) + map.put(job(taskArg), node); - return map; + return map; + } + finally { + logMapped(g.log(), getClass(), map.values()); + } } /** {@inheritDoc} */