Repository: incubator-ignite
Updated Branches:
  refs/heads/master e2c4d2658 -> 70b8af951


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/70b8af95
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/70b8af95
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/70b8af95

Branch: refs/heads/master
Commit: 70b8af9516f57d87819b04eb7651a13392f80178
Parents: e2c4d26
Author: Yakov Zhdanov <yzhda...@gridgain.com>
Authored: Tue Dec 9 13:59:20 2014 +0300
Committer: Yakov Zhdanov <yzhda...@gridgain.com>
Committed: Tue Dec 9 13:59:20 2014 +0300

----------------------------------------------------------------------
 .../gridgain/grid/kernal/visor/VisorJob.java    |  27 +++-
 .../grid/kernal/visor/VisorMultiNodeTask.java   |  51 +++++++-
 .../grid/kernal/visor/VisorOneNodeTask.java     |   2 +-
 .../grid/kernal/visor/VisorTaskArgument.java    |  29 +++--
 .../kernal/visor/cache/VisorCacheClearTask.java |   7 +-
 .../visor/cache/VisorCacheCompactTask.java      |  13 +-
 .../kernal/visor/cache/VisorCacheLoadTask.java  |   7 +-
 .../visor/cache/VisorCacheMetadataTask.java     |   7 +-
 .../cache/VisorCacheMetricsCollectorTask.java   |   9 +-
 .../visor/cache/VisorCachePreloadTask.java      |   7 +-
 .../visor/cache/VisorCacheResetMetricsTask.java |   7 +-
 .../visor/cache/VisorCacheSwapBackupsTask.java  |   7 +-
 .../compute/VisorComputeCancelSessionsTask.java |   9 +-
 .../compute/VisorComputeResetMetricsTask.java   |   7 +-
 .../VisorComputeToggleMonitoringTask.java       |  17 +--
 .../kernal/visor/debug/VisorThreadDumpTask.java |   7 +-
 .../kernal/visor/file/VisorFileBlockTask.java   |   7 +-
 .../visor/file/VisorLatestTextFilesTask.java    |   7 +-
 .../kernal/visor/ggfs/VisorGgfsFormatTask.java  |   7 +-
 .../visor/ggfs/VisorGgfsProfilerClearTask.java  |   7 +-
 .../visor/ggfs/VisorGgfsProfilerTask.java       |  13 +-
 .../visor/ggfs/VisorGgfsResetMetricsTask.java   |   7 +-
 .../visor/ggfs/VisorGgfsSamplingStateTask.java  |   7 +-
 .../kernal/visor/log/VisorLogSearchTask.java    |  12 +-
 .../grid/kernal/visor/misc/VisorAckTask.java    |   9 +-
 .../visor/misc/VisorLatestVersionTask.java      |   7 +-
 .../visor/misc/VisorResolveHostNameTask.java    |   7 +-
 .../VisorNodeConfigurationCollectorJob.java     |   5 +-
 .../VisorNodeConfigurationCollectorTask.java    |   2 +-
 .../visor/node/VisorNodeDataCollectorJob.java   |   5 +-
 .../visor/node/VisorNodeDataCollectorTask.java  |   4 +-
 .../node/VisorNodeEventsCollectorTask.java      |   9 +-
 .../grid/kernal/visor/node/VisorNodeGcTask.java |  23 ++--
 .../kernal/visor/node/VisorNodePingTask.java    |  16 +--
 .../kernal/visor/node/VisorNodeRestartTask.java |   9 +-
 .../kernal/visor/node/VisorNodeStopTask.java    |   9 +-
 .../VisorPortableMetadataCollectorTask.java     |  13 +-
 .../visor/query/VisorQueryNextPageTask.java     |   7 +-
 .../grid/kernal/visor/query/VisorQueryTask.java |   7 +-
 .../streamer/VisorStreamerMetricsResetTask.java |   7 +-
 .../visor/streamer/VisorStreamerResetTask.java  |   7 +-
 .../grid/kernal/visor/util/VisorTaskUtils.java  | 123 +++++++++++++++++++
 .../visor/commands/gc/VisorGcCommand.scala      |   4 +-
 .../main/scala/org/gridgain/visor/visor.scala   |  10 +-
 44 files changed, 406 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorJob.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorJob.java 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorJob.java
index a2dbc88..fcbd13e 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorJob.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorJob.java
@@ -14,8 +14,11 @@ import org.apache.ignite.compute.*;
 import org.apache.ignite.resources.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.kernal.*;
+import org.gridgain.grid.util.typedef.internal.*;
 import org.jetbrains.annotations.*;
 
+import static org.gridgain.grid.kernal.visor.util.VisorTaskUtils.*;
+
 /**
  * Base class for Visor jobs.
  */
@@ -23,23 +26,39 @@ public abstract class VisorJob<A, R> extends 
ComputeJobAdapter {
     @IgniteInstanceResource
     protected GridEx g;
 
-    @IgniteLoggerResource
-    protected IgniteLogger log;
+    /** Job start time. */
+    protected long start;
+
+    /** Debug flag. */
+    protected boolean debug;
 
     /**
      * Create job with specified argument.
      *
      * @param arg Job argument.
      */
-    protected VisorJob(@Nullable A arg) {
+    protected VisorJob(@Nullable A arg, boolean debug) {
         super(arg);
+
+        this.debug = debug;
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object execute() throws GridException {
+        start = U.currentTimeMillis();
+
         A arg = argument(0);
 
-        return run(arg);
+        try {
+            if (debug)
+                logStart(g.log(), getClass(), start);
+
+            return run(arg);
+        }
+        finally {
+            if (debug)
+                logFinish(g.log(), getClass(), start);
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/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 abdf0e0..8db90e0 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
@@ -15,8 +15,11 @@ 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.*;
 
+import static org.gridgain.grid.kernal.visor.util.VisorTaskUtils.*;
+
 import java.util.*;
 
 /**
@@ -29,9 +32,15 @@ public abstract class VisorMultiNodeTask<A, R, J> implements 
ComputeTask<VisorTa
     @IgniteInstanceResource
     protected GridEx g;
 
+    /** Debug flag. */
+    protected boolean debug;
+
     /** Task argument. */
     protected A taskArg;
 
+    /** Task start time. */
+    protected long start;
+
     /**
      * @param arg Task arg.
      * @return New job.
@@ -43,16 +52,32 @@ public abstract class VisorMultiNodeTask<A, R, J> 
implements ComputeTask<VisorTa
         @Nullable VisorTaskArgument<A> arg) throws GridException {
         assert arg != null;
 
-        Collection<UUID> nodeIds = arg.nodes();
+        start = U.currentTimeMillis();
+
+        debug = arg.debug();
+
         taskArg = arg.argument();
 
-        Map<ComputeJob, ClusterNode> map = new GridLeanMap<>(nodeIds.size());
+        if (debug)
+            logStart(g.log(), getClass(), start);
+
+        Collection<UUID> nodeIds = arg.nodes();
 
-        for (ClusterNode node : subgrid)
-            if (nodeIds.contains(node.id()))
-                map.put(job(taskArg), node);
+        Map<ComputeJob, ClusterNode> map = U.newHashMap(nodeIds.size());
 
-        return map;
+        try {
+            taskArg = arg.argument();
+
+            for (ClusterNode node : subgrid)
+                if (nodeIds.contains(node.id()))
+                    map.put(job(taskArg), node);
+
+            return map;
+        }
+        finally {
+            if (debug)
+                logMapped(g.log(), getClass(), map.values());
+        }
     }
 
     /** {@inheritDoc} */
@@ -61,4 +86,18 @@ public abstract class VisorMultiNodeTask<A, R, J> implements 
ComputeTask<VisorTa
         // All Visor tasks should handle exceptions in reduce method.
         return ComputeJobResultPolicy.WAIT;
     }
+
+    /** {@inheritDoc} */
+    @Nullable protected abstract R reduce0(List<ComputeJobResult> results) 
throws GridException;
+
+    /** {@inheritDoc} */
+    @Nullable @Override public final R reduce(List<ComputeJobResult> results) 
throws GridException {
+        try {
+            return reduce0(results);
+        }
+        finally {
+            if (debug)
+                logFinish(g.log(), getClass(), start);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorOneNodeTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorOneNodeTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorOneNodeTask.java
index 1e1c002..3748968 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorOneNodeTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorOneNodeTask.java
@@ -21,7 +21,7 @@ import java.util.*;
  */
 public abstract class VisorOneNodeTask<A, R> extends VisorMultiNodeTask<A, R, 
R> {
     /** {@inheritDoc} */
-    @Nullable @Override public R reduce(List<ComputeJobResult> results) throws 
GridException {
+    @Nullable @Override protected R reduce0(List<ComputeJobResult> results) 
throws GridException {
         assert results.size() == 1;
 
         ComputeJobResult res = F.first(results);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorTaskArgument.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorTaskArgument.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorTaskArgument.java
index b7db7f5..ef6d522 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorTaskArgument.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/VisorTaskArgument.java
@@ -25,27 +25,33 @@ public class VisorTaskArgument<A> implements Serializable {
     /** Task argument. */
     private final A arg;
 
+    /** Debug flag. */
+    private final boolean debug;
+
     /**
      * Create Visor task argument.
      *
      * @param nodes Node IDs task should be mapped to.
      * @param arg Task argument.
+     * @param debug Debug flag.
      */
-    public VisorTaskArgument(Collection<UUID> nodes, A arg) {
+    public VisorTaskArgument(Collection<UUID> nodes, A arg, boolean debug) {
         assert nodes != null;
         assert !nodes.isEmpty();
 
         this.nodes = nodes;
         this.arg = arg;
+        this.debug = debug;
     }
 
     /**
      * Create Visor task argument with nodes, but without actual argument.
      *
      * @param nodes Node IDs task should be mapped to.
+     * @param debug Debug flag.
      */
-    public VisorTaskArgument(Collection<UUID> nodes) {
-        this(nodes, null);
+    public VisorTaskArgument(Collection<UUID> nodes, boolean debug) {
+        this(nodes, null, debug);
     }
 
     /**
@@ -53,18 +59,20 @@ public class VisorTaskArgument<A> implements Serializable {
      *
      * @param node Node ID task should be mapped to.
      * @param arg Task argument.
+     * @param debug Debug flag.
      */
-    public VisorTaskArgument(UUID node, A arg) {
-        this(Collections.singleton(node), arg);
+    public VisorTaskArgument(UUID node, A arg, boolean debug) {
+        this(Collections.singleton(node), arg, debug);
     }
 
     /**
      * Create Visor task argument with nodes, but without actual argument.
      *
      * @param node Node ID task should be mapped to.
+     * @param debug Debug flag.
      */
-    public VisorTaskArgument(UUID node) {
-        this(node, null);
+    public VisorTaskArgument(UUID node, boolean debug) {
+        this(node, null, debug);
     }
 
     /**
@@ -80,4 +88,11 @@ public class VisorTaskArgument<A> implements Serializable {
     public A argument() {
         return arg;
     }
+
+    /**
+     * @return Debug flag.
+     */
+    public boolean debug() {
+        return debug;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheClearTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheClearTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheClearTask.java
index 301780b..f604c3f 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheClearTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheClearTask.java
@@ -28,7 +28,7 @@ public class VisorCacheClearTask extends 
VisorOneNodeTask<Set<String>, Map<Strin
 
     /** {@inheritDoc} */
     @Override protected VisorCachesClearJob job(Set<String> arg) {
-        return new VisorCachesClearJob(arg);
+        return new VisorCachesClearJob(arg, debug);
     }
 
     /**
@@ -42,9 +42,10 @@ public class VisorCacheClearTask extends 
VisorOneNodeTask<Set<String>, Map<Strin
          * Create job.
          *
          * @param arg Cache names to clear.
+         * @param debug Debug flag.
          */
-        private VisorCachesClearJob(Set<String> arg) {
-            super(arg);
+        private VisorCachesClearJob(Set<String> arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheCompactTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheCompactTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheCompactTask.java
index 07fffd4..4891d32 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheCompactTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheCompactTask.java
@@ -28,7 +28,7 @@ public class VisorCacheCompactTask extends 
VisorOneNodeTask<Set<String>, Map<Str
 
     /** {@inheritDoc} */
     @Override protected VisorCachesCompactJob job(Set<String> names) {
-        return new VisorCachesCompactJob(names);
+        return new VisorCachesCompactJob(names, debug);
     }
 
     /** Job that compact caches on node. */
@@ -36,9 +36,14 @@ public class VisorCacheCompactTask extends 
VisorOneNodeTask<Set<String>, Map<Str
         /** */
         private static final long serialVersionUID = 0L;
 
-        /** Create job with given argument. */
-        private VisorCachesCompactJob(Set<String> names) {
-            super(names);
+        /**
+         * Create job with given argument.
+         *
+         * @param names Cache names to compact.
+         * @param debug Debug flag.
+         */
+        private VisorCachesCompactJob(Set<String> names, boolean debug) {
+            super(names, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheLoadTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheLoadTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheLoadTask.java
index c8208a2..abd9521 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheLoadTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheLoadTask.java
@@ -30,7 +30,7 @@ public class VisorCacheLoadTask extends
 
     /** {@inheritDoc} */
     @Override protected VisorCachesLoadJob job(GridTuple3<Set<String>, Long, 
Object[]> arg) {
-        return new VisorCachesLoadJob(arg);
+        return new VisorCachesLoadJob(arg, debug);
     }
 
     /** Job that load caches. */
@@ -41,9 +41,10 @@ public class VisorCacheLoadTask extends
 
         /**
          * @param arg Cache names, ttl and loader arguments.
+         * @param debug Debug flag.
          */
-        private VisorCachesLoadJob(GridTuple3<Set<String>, Long, Object[]> 
arg) {
-            super(arg);
+        private VisorCachesLoadJob(GridTuple3<Set<String>, Long, Object[]> 
arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetadataTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetadataTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetadataTask.java
index f92ce2c..101a6df 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetadataTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetadataTask.java
@@ -29,7 +29,7 @@ public class VisorCacheMetadataTask extends 
VisorOneNodeTask<String, GridCacheSq
 
     /** {@inheritDoc} */
     @Override protected VisorCacheMetadataJob job(String arg) {
-        return new VisorCacheMetadataJob(arg);
+        return new VisorCacheMetadataJob(arg, debug);
     }
 
     /**
@@ -41,9 +41,10 @@ public class VisorCacheMetadataTask extends 
VisorOneNodeTask<String, GridCacheSq
 
         /**
          * @param arg Cache name to take metadata.
+         * @param debug Debug flag.
          */
-        private VisorCacheMetadataJob(String arg) {
-            super(arg);
+        private VisorCacheMetadataJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetricsCollectorTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetricsCollectorTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetricsCollectorTask.java
index 9ac75e8..36f64f8 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetricsCollectorTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheMetricsCollectorTask.java
@@ -34,11 +34,11 @@ public class VisorCacheMetricsCollectorTask extends 
VisorMultiNodeTask<IgniteBiT
 
     /** {@inheritDoc} */
     @Override protected VisorCacheMetricsJob job(IgniteBiTuple<Boolean, 
String> arg) {
-        return new VisorCacheMetricsJob(arg);
+        return new VisorCacheMetricsJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Iterable<VisorCacheAggregatedMetrics> 
reduce(List<ComputeJobResult> results)
+    @Nullable @Override protected Iterable<VisorCacheAggregatedMetrics> 
reduce0(List<ComputeJobResult> results)
         throws GridException {
         Map<String, VisorCacheAggregatedMetrics> grpAggrMetrics = new 
HashMap<>();
 
@@ -121,9 +121,10 @@ public class VisorCacheMetricsCollectorTask extends 
VisorMultiNodeTask<IgniteBiT
          * Create job with given argument.
          *
          * @param arg Whether to collect metrics for all caches or for 
specified cache name only.
+         * @param debug Debug flag.
          */
-        private VisorCacheMetricsJob(IgniteBiTuple<Boolean, String> arg) {
-            super(arg);
+        private VisorCacheMetricsJob(IgniteBiTuple<Boolean, String> arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCachePreloadTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCachePreloadTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCachePreloadTask.java
index 3b4971c..f5738dd 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCachePreloadTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCachePreloadTask.java
@@ -28,7 +28,7 @@ public class VisorCachePreloadTask extends 
VisorOneNodeTask<Set<String>, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorCachesPreloadJob job(Set<String> arg) {
-        return new VisorCachesPreloadJob(arg);
+        return new VisorCachesPreloadJob(arg, debug);
     }
 
     /**
@@ -40,9 +40,10 @@ public class VisorCachePreloadTask extends 
VisorOneNodeTask<Set<String>, Void> {
 
         /**
          * @param arg Caches names.
+         * @param debug Debug flag.
          */
-        private VisorCachesPreloadJob(Set<String> arg) {
-            super(arg);
+        private VisorCachesPreloadJob(Set<String> arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheResetMetricsTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheResetMetricsTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheResetMetricsTask.java
index fdd2dec..35a3666 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheResetMetricsTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheResetMetricsTask.java
@@ -25,7 +25,7 @@ public class VisorCacheResetMetricsTask extends 
VisorOneNodeTask<String, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorCacheResetMetricsJob job(String arg) {
-        return new VisorCacheResetMetricsJob(arg);
+        return new VisorCacheResetMetricsJob(arg, debug);
     }
 
     /**
@@ -37,9 +37,10 @@ public class VisorCacheResetMetricsTask extends 
VisorOneNodeTask<String, Void> {
 
         /**
          * @param arg Cache name to reset metrics for.
+         * @param debug Debug flag.
          */
-        private VisorCacheResetMetricsJob(String arg) {
-            super(arg);
+        private VisorCacheResetMetricsJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheSwapBackupsTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheSwapBackupsTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheSwapBackupsTask.java
index 2aa53b5..edc16bd 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheSwapBackupsTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/cache/VisorCacheSwapBackupsTask.java
@@ -29,7 +29,7 @@ public class VisorCacheSwapBackupsTask extends 
VisorOneNodeTask<Set<String>, Map
 
     /** {@inheritDoc} */
     @Override protected VisorCachesSwapBackupsJob job(Set<String> names) {
-        return new VisorCachesSwapBackupsJob(names);
+        return new VisorCachesSwapBackupsJob(names, debug);
     }
 
     /**
@@ -44,9 +44,10 @@ public class VisorCacheSwapBackupsTask extends 
VisorOneNodeTask<Set<String>, Map
          * Create job with specified argument.
          *
          * @param names Job argument.
+         * @param debug Debug flag.
          */
-        private VisorCachesSwapBackupsJob(Set<String> names) {
-            super(names);
+        private VisorCachesSwapBackupsJob(Set<String> names, boolean debug) {
+            super(names, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeCancelSessionsTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeCancelSessionsTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeCancelSessionsTask.java
index c6213d3..1fb7826 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeCancelSessionsTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeCancelSessionsTask.java
@@ -30,11 +30,11 @@ public class VisorComputeCancelSessionsTask extends 
VisorMultiNodeTask<Map<UUID,
 
     /** {@inheritDoc} */
     @Override protected VisorComputeCancelSessionsJob job(Map<UUID, 
Set<IgniteUuid>> arg) {
-        return new VisorComputeCancelSessionsJob(arg);
+        return new VisorComputeCancelSessionsJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Void reduce(List<ComputeJobResult> results) 
throws GridException {
+    @Nullable @Override protected Void reduce0(List<ComputeJobResult> results) 
throws GridException {
         // No-op, just awaiting all jobs done.
         return null;
     }
@@ -48,9 +48,10 @@ public class VisorComputeCancelSessionsTask extends 
VisorMultiNodeTask<Map<UUID,
 
         /**
          * @param arg Map with task sessions IDs to cancel.
+         * @param debug Debug flag.
          */
-        private VisorComputeCancelSessionsJob(Map<UUID, Set<IgniteUuid>> arg) {
-            super(arg);
+        private VisorComputeCancelSessionsJob(Map<UUID, Set<IgniteUuid>> arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeResetMetricsTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeResetMetricsTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeResetMetricsTask.java
index 23be65c..b743a0e 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeResetMetricsTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeResetMetricsTask.java
@@ -24,7 +24,7 @@ public class VisorComputeResetMetricsTask extends 
VisorOneNodeTask<Void, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorComputeResetMetricsJob job(Void arg) {
-        return new VisorComputeResetMetricsJob(arg);
+        return new VisorComputeResetMetricsJob(arg, debug);
     }
 
     /**
@@ -36,9 +36,10 @@ public class VisorComputeResetMetricsTask extends 
VisorOneNodeTask<Void, Void> {
 
         /**
          * @param arg Formal job argument.
+         * @param debug Debug flag.
          */
-        private VisorComputeResetMetricsJob(Void arg) {
-            super(arg);
+        private VisorComputeResetMetricsJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeToggleMonitoringTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeToggleMonitoringTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeToggleMonitoringTask.java
index 1f8409e..99d868b 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeToggleMonitoringTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/compute/VisorComputeToggleMonitoringTask.java
@@ -33,7 +33,7 @@ public class VisorComputeToggleMonitoringTask extends
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Nullable @Override public Boolean reduce(List<ComputeJobResult> results) 
throws GridException {
+    @Nullable @Override protected Boolean reduce0(List<ComputeJobResult> 
results) throws GridException {
         Collection<Boolean> toggles = new HashSet<>();
 
         for (ComputeJobResult res: results)
@@ -43,6 +43,11 @@ public class VisorComputeToggleMonitoringTask extends
         return toggles.size() == 1;
     }
 
+    /** {@inheritDoc} */
+    @Override protected VisorComputeToggleMonitoringJob 
job(IgniteBiTuple<String, Boolean> arg) {
+        return new VisorComputeToggleMonitoringJob(arg, debug);
+    }
+
     /**
      * Job to toggle task monitoring on node.
      */
@@ -52,9 +57,10 @@ public class VisorComputeToggleMonitoringTask extends
 
         /**
          * @param arg Visor ID key and monitoring state flag.
+         * @param debug Debug flag.
          */
-        private VisorComputeToggleMonitoringJob(IgniteBiTuple<String, Boolean> 
arg) {
-            super(arg);
+        private VisorComputeToggleMonitoringJob(IgniteBiTuple<String, Boolean> 
arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
@@ -95,9 +101,4 @@ public class VisorComputeToggleMonitoringTask extends
             return S.toString(VisorComputeToggleMonitoringJob.class, this);
         }
     }
-
-    /** {@inheritDoc} */
-    @Override protected VisorComputeToggleMonitoringJob 
job(IgniteBiTuple<String, Boolean> arg) {
-        return new VisorComputeToggleMonitoringJob(arg);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/debug/VisorThreadDumpTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/debug/VisorThreadDumpTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/debug/VisorThreadDumpTask.java
index d2c31c7..b24904b 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/debug/VisorThreadDumpTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/debug/VisorThreadDumpTask.java
@@ -27,7 +27,7 @@ public class VisorThreadDumpTask extends 
VisorOneNodeTask<Void, IgniteBiTuple<Vi
 
     /** {@inheritDoc} */
     @Override protected VisorDumpThreadJob job(Void arg) {
-        return new VisorDumpThreadJob(arg);
+        return new VisorDumpThreadJob(arg, debug);
     }
 
     /**
@@ -39,9 +39,10 @@ public class VisorThreadDumpTask extends 
VisorOneNodeTask<Void, IgniteBiTuple<Vi
 
         /**
          * @param arg Formal job argument.
+         * @param debug Debug flag.
          */
-        private VisorDumpThreadJob(Void arg) {
-            super(arg);
+        private VisorDumpThreadJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorFileBlockTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorFileBlockTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorFileBlockTask.java
index 7289511..10140d3 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorFileBlockTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorFileBlockTask.java
@@ -32,7 +32,7 @@ public class VisorFileBlockTask extends 
VisorOneNodeTask<VisorFileBlockTask.Viso
 
     /** {@inheritDoc} */
     @Override protected VisorFileBlockJob job(VisorFileBlockArg arg) {
-        return new VisorFileBlockJob(arg);
+        return new VisorFileBlockJob(arg, debug);
     }
 
     /**
@@ -84,9 +84,10 @@ public class VisorFileBlockTask extends 
VisorOneNodeTask<VisorFileBlockTask.Viso
 
         /**
          * @param arg Descriptor of file block to read.
+         * @param debug Debug flag.
          */
-        private VisorFileBlockJob(VisorFileBlockArg arg) {
-            super(arg);
+        private VisorFileBlockJob(VisorFileBlockArg arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorLatestTextFilesTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorLatestTextFilesTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorLatestTextFilesTask.java
index d24c47d..cf44d2f 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorLatestTextFilesTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/file/VisorLatestTextFilesTask.java
@@ -33,7 +33,7 @@ public class VisorLatestTextFilesTask extends 
VisorOneNodeTask<IgniteBiTuple<Str
 
     /** {@inheritDoc} */
     @Override protected VisorLatestTextFilesJob job(IgniteBiTuple<String, 
String> arg) {
-        return new VisorLatestTextFilesJob(arg);
+        return new VisorLatestTextFilesJob(arg, debug);
     }
 
     /**
@@ -45,9 +45,10 @@ public class VisorLatestTextFilesTask extends 
VisorOneNodeTask<IgniteBiTuple<Str
 
         /**
          * @param arg Folder and regexp.
+         * @param debug Debug flag.
          */
-        private VisorLatestTextFilesJob(IgniteBiTuple<String, String> arg) {
-            super(arg);
+        private VisorLatestTextFilesJob(IgniteBiTuple<String, String> arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsFormatTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsFormatTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsFormatTask.java
index dd1d203..4ed43e9 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsFormatTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsFormatTask.java
@@ -24,7 +24,7 @@ public class VisorGgfsFormatTask extends 
VisorOneNodeTask<String, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorGgfsFormatJob job(String arg) {
-        return new VisorGgfsFormatJob(arg);
+        return new VisorGgfsFormatJob(arg, debug);
     }
 
     /**
@@ -36,9 +36,10 @@ public class VisorGgfsFormatTask extends 
VisorOneNodeTask<String, Void> {
 
         /**
          * @param arg GGFS name to format.
+         * @param debug Debug flag.
          */
-        private VisorGgfsFormatJob(String arg) {
-            super(arg);
+        private VisorGgfsFormatJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerClearTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerClearTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerClearTask.java
index 7e94222..98e3d6f 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerClearTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerClearTask.java
@@ -40,9 +40,10 @@ public class VisorGgfsProfilerClearTask extends 
VisorOneNodeTask<String, IgniteB
          * Create job with given argument.
          *
          * @param arg Job argument.
+         * @param debug Debug flag.
          */
-        private VisorGgfsProfilerClearJob(String arg) {
-            super(arg);
+        private VisorGgfsProfilerClearJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
@@ -98,6 +99,6 @@ public class VisorGgfsProfilerClearTask extends 
VisorOneNodeTask<String, IgniteB
 
     /** {@inheritDoc} */
     @Override protected VisorGgfsProfilerClearJob job(String arg) {
-        return new VisorGgfsProfilerClearJob(arg);
+        return new VisorGgfsProfilerClearJob(arg, debug);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerTask.java
index d47ea5b..2981638 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsProfilerTask.java
@@ -141,9 +141,14 @@ public class VisorGgfsProfilerTask extends 
VisorOneNodeTask<String, Collection<V
             TYPE_CLOSE_OUT
         );
 
-        /** Create job with given argument. */
-        private VisorGgfsProfilerJob(String arg) {
-            super(arg);
+        /**
+         * Create job with given argument.
+         *
+         * @param arg GGFS name.
+         * @param debug Debug flag.
+         */
+        private VisorGgfsProfilerJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
@@ -486,6 +491,6 @@ public class VisorGgfsProfilerTask extends 
VisorOneNodeTask<String, Collection<V
 
     /** {@inheritDoc} */
     @Override protected VisorGgfsProfilerJob job(String arg) {
-        return new VisorGgfsProfilerJob(arg);
+        return new VisorGgfsProfilerJob(arg, debug);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsResetMetricsTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsResetMetricsTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsResetMetricsTask.java
index 61a5b3a..f3c0867 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsResetMetricsTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsResetMetricsTask.java
@@ -26,7 +26,7 @@ public class VisorGgfsResetMetricsTask extends 
VisorOneNodeTask<Set<String>, Voi
 
     /** {@inheritDoc} */
     @Override protected VisorGgfsResetMetricsJob job(Set<String> arg) {
-        return new VisorGgfsResetMetricsJob(arg);
+        return new VisorGgfsResetMetricsJob(arg, debug);
     }
 
     /**
@@ -38,9 +38,10 @@ public class VisorGgfsResetMetricsTask extends 
VisorOneNodeTask<Set<String>, Voi
 
         /**
          * @param arg GGFS names.
+         * @param debug Debug flag.
          */
-        private VisorGgfsResetMetricsJob(Set<String> arg) {
-            super(arg);
+        private VisorGgfsResetMetricsJob(Set<String> arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsSamplingStateTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsSamplingStateTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsSamplingStateTask.java
index 8f36784..8c4d1f1 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsSamplingStateTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/ggfs/VisorGgfsSamplingStateTask.java
@@ -35,9 +35,10 @@ public class VisorGgfsSamplingStateTask extends 
VisorOneNodeTask<IgniteBiTuple<S
          * Create job with given argument.
          *
          * @param arg Job argument.
+         * @param debug Debug flag.
          */
-        public VisorGgfsSamplingStateJob(IgniteBiTuple<String, Boolean> arg) {
-            super(arg);
+        public VisorGgfsSamplingStateJob(IgniteBiTuple<String, Boolean> arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
@@ -60,6 +61,6 @@ public class VisorGgfsSamplingStateTask extends 
VisorOneNodeTask<IgniteBiTuple<S
 
     /** {@inheritDoc} */
     @Override protected VisorGgfsSamplingStateJob job(IgniteBiTuple<String, 
Boolean> arg) {
-        return new VisorGgfsSamplingStateJob(arg);
+        return new VisorGgfsSamplingStateJob(arg, debug);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/log/VisorLogSearchTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/log/VisorLogSearchTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/log/VisorLogSearchTask.java
index 54ba770..618a122 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/log/VisorLogSearchTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/log/VisorLogSearchTask.java
@@ -45,13 +45,12 @@ public class VisorLogSearchTask extends 
VisorMultiNodeTask<VisorLogSearchTask.Vi
 
     /** {@inheritDoc} */
     @Override protected VisorLogSearchJob job(VisorLogSearchArg arg) {
-        return new VisorLogSearchJob(arg);
+        return new VisorLogSearchJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public IgniteBiTuple<Iterable<IgniteBiTuple<Exception, 
UUID>>,
-            Iterable<VisorLogSearchResult>> reduce(List<ComputeJobResult> 
results) throws GridException {
-
+    @Nullable @Override protected 
IgniteBiTuple<Iterable<IgniteBiTuple<Exception, UUID>>,
+            Iterable<VisorLogSearchResult>> reduce0(List<ComputeJobResult> 
results) throws GridException {
         Collection<VisorLogSearchResult> searchRes = new ArrayList<>();
         Collection<IgniteBiTuple<Exception, UUID>> exRes = new ArrayList<>();
 
@@ -117,9 +116,10 @@ public class VisorLogSearchTask extends 
VisorMultiNodeTask<VisorLogSearchTask.Vi
 
         /**
          * @param arg Search descriptor.
+         * @param debug Debug flag.
          */
-        private VisorLogSearchJob(VisorLogSearchArg arg) {
-            super(arg);
+        private VisorLogSearchJob(VisorLogSearchArg arg, boolean debug) {
+            super(arg, debug);
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorAckTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorAckTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorAckTask.java
index 9f579b9..f752586 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorAckTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorAckTask.java
@@ -28,11 +28,11 @@ public class VisorAckTask extends 
VisorMultiNodeTask<String, Void, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorAckJob job(String arg) {
-        return new VisorAckJob(arg);
+        return new VisorAckJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Void reduce(List<ComputeJobResult> results) 
throws GridException {
+    @Nullable @Override protected Void reduce0(List<ComputeJobResult> results) 
throws GridException {
         return null;
     }
 
@@ -47,9 +47,10 @@ public class VisorAckTask extends VisorMultiNodeTask<String, 
Void, Void> {
          * Create job with given argument.
          *
          * @param arg Message to ack in node console.
+         * @param debug Debug flag.
          */
-        private VisorAckJob(String arg) {
-            super(arg);
+        private VisorAckJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorLatestVersionTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorLatestVersionTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorLatestVersionTask.java
index 592f0bf..21f9bf8 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorLatestVersionTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorLatestVersionTask.java
@@ -24,7 +24,7 @@ public class VisorLatestVersionTask extends 
VisorOneNodeTask<Void, String> {
 
     /** {@inheritDoc} */
     @Override protected VisorLatestVersionJob job(Void arg) {
-        return new VisorLatestVersionJob(arg);
+        return new VisorLatestVersionJob(arg, debug);
     }
 
     /**
@@ -36,9 +36,10 @@ public class VisorLatestVersionTask extends 
VisorOneNodeTask<Void, String> {
 
         /**
          * @param arg Formal job argument.
+         * @param debug Debug flag.
          */
-        private VisorLatestVersionJob(Void arg) {
-            super(arg);
+        private VisorLatestVersionJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorResolveHostNameTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorResolveHostNameTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorResolveHostNameTask.java
index 9f45ed6..0f68cd4 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorResolveHostNameTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/misc/VisorResolveHostNameTask.java
@@ -29,7 +29,7 @@ public class VisorResolveHostNameTask extends 
VisorOneNodeTask<Void, Map<String,
 
     /** {@inheritDoc} */
     @Override protected VisorResolveHostNameJob job(Void arg) {
-        return new VisorResolveHostNameJob(arg);
+        return new VisorResolveHostNameJob(arg, debug);
     }
 
     /**
@@ -43,9 +43,10 @@ public class VisorResolveHostNameTask extends 
VisorOneNodeTask<Void, Map<String,
          * Create job.
          *
          * @param arg List of IP address for resolve.
+         * @param debug Debug flag.
          */
-        private VisorResolveHostNameJob(Void arg) {
-            super(arg);
+        private VisorResolveHostNameJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorJob.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorJob.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorJob.java
index 5c1c8bc..eade4c9 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorJob.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorJob.java
@@ -12,9 +12,10 @@ public class VisorNodeConfigurationCollectorJob extends 
VisorJob<Void, VisorGrid
 
     /**
      * @param arg Formal job argument.
+     * @param debug Debug flag.
      */
-    public VisorNodeConfigurationCollectorJob(Void arg) {
-        super(arg);
+    public VisorNodeConfigurationCollectorJob(Void arg, boolean debug) {
+        super(arg, debug);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorTask.java
index 8109ee8..d9b7243 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeConfigurationCollectorTask.java
@@ -22,6 +22,6 @@ public class VisorNodeConfigurationCollectorTask extends 
VisorOneNodeTask<Void,
 
     /** {@inheritDoc} */
     @Override protected VisorNodeConfigurationCollectorJob job(Void arg) {
-        return new VisorNodeConfigurationCollectorJob(arg);
+        return new VisorNodeConfigurationCollectorJob(arg, debug);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/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 b22eb37..1b5df78 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
@@ -33,9 +33,10 @@ public class VisorNodeDataCollectorJob extends 
VisorJob<VisorNodeDataCollectorTa
      * Create job with given argument.
      *
      * @param arg Job argument.
+     * @param debug Debug flag.
      */
-    public VisorNodeDataCollectorJob(VisorNodeDataCollectorTaskArg arg) {
-        super(arg);
+    public VisorNodeDataCollectorJob(VisorNodeDataCollectorTaskArg arg, 
boolean debug) {
+        super(arg, debug);
     }
 
     /** Collect events. */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/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 6939b25..7ff18e9 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
@@ -48,11 +48,11 @@ public class VisorNodeDataCollectorTask extends 
VisorMultiNodeTask<VisorNodeData
 
     /** {@inheritDoc} */
     @Override protected VisorNodeDataCollectorJob 
job(VisorNodeDataCollectorTaskArg arg) {
-        return new VisorNodeDataCollectorJob(arg);
+        return new VisorNodeDataCollectorJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public VisorNodeDataCollectorTaskResult 
reduce(List<ComputeJobResult> results) throws GridException {
+    @Nullable @Override protected VisorNodeDataCollectorTaskResult 
reduce0(List<ComputeJobResult> results) throws GridException {
         return reduce(new VisorNodeDataCollectorTaskResult(), results);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeEventsCollectorTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeEventsCollectorTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeEventsCollectorTask.java
index d5275ff..ef17bd8 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeEventsCollectorTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeEventsCollectorTask.java
@@ -38,11 +38,11 @@ public class VisorNodeEventsCollectorTask extends 
VisorMultiNodeTask<VisorNodeEv
 
     /** {@inheritDoc} */
     @Override protected VisorEventsCollectJob 
job(VisorNodeEventsCollectorTaskArg arg) {
-        return new VisorEventsCollectJob(arg);
+        return new VisorEventsCollectJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Override public Iterable<? extends VisorGridEvent> reduce(
+    @Override protected Iterable<? extends VisorGridEvent> reduce0(
         List<ComputeJobResult> results) throws GridException {
 
         Collection<VisorGridEvent> allEvents = new ArrayList<>();
@@ -177,9 +177,10 @@ public class VisorNodeEventsCollectorTask extends 
VisorMultiNodeTask<VisorNodeEv
          * Create job with specified argument.
          *
          * @param arg Job argument.
+         * @param debug Debug flag.
          */
-        private VisorEventsCollectJob(VisorNodeEventsCollectorTaskArg arg) {
-            super(arg);
+        private VisorEventsCollectJob(VisorNodeEventsCollectorTaskArg arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeGcTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeGcTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeGcTask.java
index 74573b5..9c267dd 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeGcTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeGcTask.java
@@ -24,18 +24,18 @@ import java.util.*;
  * Task to run gc on nodes.
  */
 @GridInternal
-public class VisorNodeGcTask extends VisorMultiNodeTask<Boolean, Map<UUID, 
IgniteBiTuple<Long, Long>>,
+public class VisorNodeGcTask extends VisorMultiNodeTask<Void, Map<UUID, 
IgniteBiTuple<Long, Long>>,
     IgniteBiTuple<Long, Long>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorGcJob job(Boolean arg) {
-        return new VisorGcJob(arg);
+    @Override protected VisorGcJob job(Void arg) {
+        return new VisorGcJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Map<UUID, IgniteBiTuple<Long, Long>> 
reduce(List<ComputeJobResult> results)
+    @Nullable @Override protected Map<UUID, IgniteBiTuple<Long, Long>> 
reduce0(List<ComputeJobResult> results)
         throws GridException {
         Map<UUID, IgniteBiTuple<Long, Long>> total = new HashMap<>();
 
@@ -49,17 +49,22 @@ public class VisorNodeGcTask extends 
VisorMultiNodeTask<Boolean, Map<UUID, Ignit
     }
 
     /** Job that perform GC on node. */
-    private static class VisorGcJob extends VisorJob<Boolean, 
IgniteBiTuple<Long, Long>> {
+    private static class VisorGcJob extends VisorJob<Void, IgniteBiTuple<Long, 
Long>> {
         /** */
         private static final long serialVersionUID = 0L;
 
-        /** Create job with given argument. */
-        private VisorGcJob(Boolean arg) {
-            super(arg);
+        /**
+         * Create job with given argument.
+         *
+         * @param arg Formal task argument.
+         * @param debug Debug flag.
+         */
+        private VisorGcJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected IgniteBiTuple<Long, Long> run(Boolean arg) throws 
GridException {
+        @Override protected IgniteBiTuple<Long, Long> run(Void arg) throws 
GridException {
             ClusterNode locNode = g.localNode();
 
             long before = freeHeap(locNode);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodePingTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodePingTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodePingTask.java
index 23ffd24..e1e1ae8 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodePingTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodePingTask.java
@@ -30,16 +30,15 @@ public class VisorNodePingTask extends 
VisorOneNodeTask<UUID, GridTuple3<Boolean
 
     /** {@inheritDoc} */
     @Override protected VisorPingJob job(UUID arg) {
-        return new VisorPingJob(arg);
+        return new VisorPingJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public GridTuple3<Boolean, Long, Long> 
reduce(List<ComputeJobResult> results) throws GridException {
+    @Nullable @Override protected GridTuple3<Boolean, Long, Long> 
reduce0(List<ComputeJobResult> results) throws GridException {
         try {
-            return super.reduce(results);
-        } catch (ClusterGroupEmptyException ignored) {
-            return new GridTuple3<>(false, -1L, -1L);
-        } catch (ClusterTopologyException ignored) {
+            return super.reduce0(results);
+        }
+        catch (ClusterTopologyException ignored) {
             return new GridTuple3<>(false, -1L, -1L);
         }
     }
@@ -53,9 +52,10 @@ public class VisorNodePingTask extends 
VisorOneNodeTask<UUID, GridTuple3<Boolean
 
         /**
          * @param arg Node ID to ping.
+         * @param debug Debug flag.
          */
-        protected VisorPingJob(UUID arg) {
-            super(arg);
+        protected VisorPingJob(UUID arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeRestartTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeRestartTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeRestartTask.java
index dc1aee8..38a3133 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeRestartTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeRestartTask.java
@@ -28,7 +28,7 @@ public class VisorNodeRestartTask extends 
VisorMultiNodeTask<Void, Void, Void> {
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Nullable @Override public Void reduce(List<ComputeJobResult> results) 
throws GridException {
+    @Nullable @Override protected Void reduce0(List<ComputeJobResult> results) 
throws GridException {
         return null;
     }
 
@@ -41,9 +41,10 @@ public class VisorNodeRestartTask extends 
VisorMultiNodeTask<Void, Void, Void> {
 
         /**
          * @param arg Formal job argument.
+         * @param debug Debug flag.
          */
-        private VisorNodesRestartJob(Void arg) {
-            super(arg);
+        private VisorNodesRestartJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
@@ -65,6 +66,6 @@ public class VisorNodeRestartTask extends 
VisorMultiNodeTask<Void, Void, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorNodesRestartJob job(Void arg) {
-        return new VisorNodesRestartJob(arg);
+        return new VisorNodesRestartJob(arg, debug);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeStopTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeStopTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeStopTask.java
index 309ab76..c094dc1 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeStopTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/node/VisorNodeStopTask.java
@@ -29,11 +29,11 @@ public class VisorNodeStopTask extends 
VisorMultiNodeTask<Void, Void, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorNodesStopJob job(Void arg) {
-        return new VisorNodesStopJob(arg);
+        return new VisorNodesStopJob(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Void reduce(List<ComputeJobResult> results) 
throws GridException {
+    @Nullable @Override protected Void reduce0(List<ComputeJobResult> results) 
throws GridException {
         return null;
     }
 
@@ -46,9 +46,10 @@ public class VisorNodeStopTask extends 
VisorMultiNodeTask<Void, Void, Void> {
 
         /**
          * @param arg Formal job argument.
+         * @param debug Debug flag.
          */
-        private VisorNodesStopJob(Void arg) {
-            super(arg);
+        private VisorNodesStopJob(Void arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/portable/VisorPortableMetadataCollectorTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/portable/VisorPortableMetadataCollectorTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/portable/VisorPortableMetadataCollectorTask.java
index ef87b58..9ee00da 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/portable/VisorPortableMetadataCollectorTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/portable/VisorPortableMetadataCollectorTask.java
@@ -29,7 +29,7 @@ public class VisorPortableMetadataCollectorTask extends 
VisorOneNodeTask<Long, I
 
     /** {@inheritDoc} */
     @Override protected VisorPortableCollectMetadataJob job(Long lastUpdate) {
-        return new VisorPortableCollectMetadataJob(lastUpdate);
+        return new VisorPortableCollectMetadataJob(lastUpdate, debug);
     }
 
     /** Job that collect portables metadata on node. */
@@ -37,9 +37,14 @@ public class VisorPortableMetadataCollectorTask extends 
VisorOneNodeTask<Long, I
         /** */
         private static final long serialVersionUID = 0L;
 
-        /** Create job with given argument. */
-        private VisorPortableCollectMetadataJob(Long lastUpdate) {
-            super(lastUpdate);
+        /**
+         * Create job with given argument.
+         *
+         * @param lastUpdate Time data was collected last time.
+         * @param debug Debug flag.
+         */
+        private VisorPortableCollectMetadataJob(Long lastUpdate, boolean 
debug) {
+            super(lastUpdate, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryNextPageTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryNextPageTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryNextPageTask.java
index 92c9cca..7cc0eb8 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryNextPageTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryNextPageTask.java
@@ -29,7 +29,7 @@ public class VisorQueryNextPageTask extends 
VisorOneNodeTask<IgniteBiTuple<Strin
 
     /** {@inheritDoc} */
     @Override protected VisorQueryNextPageJob job(IgniteBiTuple<String, 
Integer> arg) {
-        return new VisorQueryNextPageJob(arg);
+        return new VisorQueryNextPageJob(arg, debug);
     }
 
     /**
@@ -43,9 +43,10 @@ public class VisorQueryNextPageTask extends 
VisorOneNodeTask<IgniteBiTuple<Strin
          * Create job with specified argument.
          *
          * @param arg Job argument.
+         * @param debug Debug flag.
          */
-        private VisorQueryNextPageJob(IgniteBiTuple<String, Integer> arg) {
-            super(arg);
+        private VisorQueryNextPageJob(IgniteBiTuple<String, Integer> arg, 
boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryTask.java
index 87ce34b..6486b8f 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/query/VisorQueryTask.java
@@ -39,7 +39,7 @@ public class VisorQueryTask extends 
VisorOneNodeTask<VisorQueryTask.VisorQueryAr
 
     /** {@inheritDoc} */
     @Override protected VisorQueryJob job(VisorQueryArg arg) {
-        return new VisorQueryJob(arg);
+        return new VisorQueryJob(arg, debug);
     }
 
     /**
@@ -168,9 +168,10 @@ public class VisorQueryTask extends 
VisorOneNodeTask<VisorQueryTask.VisorQueryAr
          * Create job with specified argument.
          *
          * @param arg Job argument.
+         * @param debug Debug flag.
          */
-        protected VisorQueryJob(VisorQueryArg arg) {
-            super(arg);
+        protected VisorQueryJob(VisorQueryArg arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerMetricsResetTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerMetricsResetTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerMetricsResetTask.java
index 548f9ed..ec05f2e 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerMetricsResetTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerMetricsResetTask.java
@@ -27,7 +27,7 @@ public class VisorStreamerMetricsResetTask extends 
VisorOneNodeTask<String, Void
 
     /** {@inheritDoc} */
     @Override protected VisorStreamerMetricsResetJob job(String arg) {
-        return new VisorStreamerMetricsResetJob(arg);
+        return new VisorStreamerMetricsResetJob(arg, debug);
     }
 
     /**
@@ -39,9 +39,10 @@ public class VisorStreamerMetricsResetTask extends 
VisorOneNodeTask<String, Void
 
         /**
          * @param arg Streamer name.
+         * @param debug Debug flag.
          */
-        private VisorStreamerMetricsResetJob(String arg) {
-            super(arg);
+        private VisorStreamerMetricsResetJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerResetTask.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerResetTask.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerResetTask.java
index 3df38be..d0e9d59 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerResetTask.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/streamer/VisorStreamerResetTask.java
@@ -27,7 +27,7 @@ public class VisorStreamerResetTask extends 
VisorOneNodeTask<String, Void> {
 
     /** {@inheritDoc} */
     @Override protected VisorStreamerResetJob job(String arg) {
-        return new VisorStreamerResetJob(arg);
+        return new VisorStreamerResetJob(arg, debug);
     }
 
     /**
@@ -39,9 +39,10 @@ public class VisorStreamerResetTask extends 
VisorOneNodeTask<String, Void> {
 
         /**
          * @param arg Streamer name.
+         * @param debug Debug flag.
          */
-        private VisorStreamerResetJob(String arg) {
-            super(arg);
+        private VisorStreamerResetJob(String arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/core/src/main/java/org/gridgain/grid/kernal/visor/util/VisorTaskUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/util/VisorTaskUtils.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/util/VisorTaskUtils.java
index db87151..b9fa6f7 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/visor/util/VisorTaskUtils.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/visor/util/VisorTaskUtils.java
@@ -32,6 +32,7 @@ import java.nio.*;
 import java.nio.channels.*;
 import java.nio.charset.*;
 import java.nio.file.*;
+import java.text.*;
 import java.util.*;
 import java.util.concurrent.atomic.*;
 
@@ -103,6 +104,14 @@ public class VisorTaskUtils {
         }
     };
 
+    /** Debug date format. */
+    private static final ThreadLocal<SimpleDateFormat> DEBUG_DATE_FMT = new 
ThreadLocal<SimpleDateFormat>() {
+        /** {@inheritDoc} */
+        @Override protected SimpleDateFormat initialValue() {
+            return new SimpleDateFormat("HH:mm:ss,SSS");
+        }
+    };
+
     /**
      * @param name Grid-style nullable name.
      * @return Name with {@code null} replaced to &lt;default&gt;.
@@ -216,6 +225,12 @@ public class VisorTaskUtils {
         return U.compact(obj.getClass().getName());
     }
 
+    /**
+     * Compact class names.
+     *
+     * @param obj Object for compact.
+     * @return Compacted string.
+     */
     @Nullable public static String compactClass(Object obj) {
         if (obj == null)
             return null;
@@ -624,4 +639,112 @@ public class VisorTaskUtils {
 
         return null;
     }
+
+    /**
+     * Pretty-formatting for duration.
+     *
+     * @param ms Millisecond to format.
+     * @return Formatted presentation.
+     */
+    private static String formatDuration(long ms) {
+        assert ms >= 0;
+
+        if (ms == 0)
+            return "< 1 ms";
+
+        SB sb = new SB();
+
+        long dd = ms / 1440000; // 1440 mins = 60 mins * 24 hours
+
+        if (dd > 0)
+            sb.a(dd).a(dd == 1 ? " day " : " days ");
+
+        ms %= 1440000;
+
+        long hh = ms / 60000;
+
+        if (hh > 0)
+            sb.a(hh).a(hh == 1 ? " hour " : " hours ");
+
+        long min = ms / 60000;
+
+        if (min > 0)
+            sb.a(min).a(min == 1 ? " min " : " mins ");
+
+        ms %= 60000;
+
+        if (ms > 0)
+            sb.a(ms).a(" ms ");
+
+        return sb.toString().trim();
+    }
+
+    /**
+     *
+     * @param log Logger.
+     * @param time Time.
+     * @param msg Message.
+     */
+    private static void log0(@Nullable IgniteLogger log, long time, String 
msg) {
+        if (log != null) {
+            if (log.isDebugEnabled())
+                log.debug(msg);
+            else
+                log.warning(msg);
+        }
+        else
+            X.println("[" + DEBUG_DATE_FMT.get().format(time) + "]" +
+                String.format("%30s %s", "<" + 
Thread.currentThread().getName() + ">", msg));
+    }
+
+    /**
+     * Log start.
+     *
+     * @param log Logger.
+     * @param clazz Class.
+     * @param start Start time.
+     */
+    public static void logStart(@Nullable IgniteLogger log, Class<?> clazz, 
long start) {
+        log0(log, start, "[" + clazz.getSimpleName() + "]: STARTED");
+    }
+
+    /**
+     * Log finished.
+     *
+     * @param log Logger.
+     * @param clazz Class.
+     * @param start Start time.
+     */
+    public static void logFinish(@Nullable IgniteLogger log, Class<?> clazz, 
long start) {
+        final long end = U.currentTimeMillis();
+
+        log0(log, end, String.format("[%s]: FINISHED, duration: %s", 
clazz.getSimpleName(), formatDuration(end - start)));
+    }
+
+    /**
+     * Log task mapped.
+     *
+     * @param log Logger.
+     * @param clazz Task class.
+     * @param nodes Mapped nodes.
+     */
+    public static void logMapped(@Nullable IgniteLogger log, Class<?> clazz, 
Collection<ClusterNode> nodes) {
+        log0(log, U.currentTimeMillis(),
+            String.format("[%s]: MAPPED: %s", clazz.getSimpleName(), 
U.toShortString(nodes)));
+    }
+
+    /**
+     * Log message.
+     *
+     * @param log Logger.
+     * @param clazz class.
+     * @param start start time.
+     */
+    public static long log(@Nullable IgniteLogger log, String msg, Class<?> 
clazz, long start) {
+        final long end = U.currentTimeMillis();
+
+        log0(log, end, String.format("[%s]: %s, duration: %s", 
clazz.getSimpleName(), msg, formatDuration(end - start)));
+
+        return end;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/visor-console/src/main/scala/org/gridgain/visor/commands/gc/VisorGcCommand.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/gridgain/visor/commands/gc/VisorGcCommand.scala
 
b/modules/visor-console/src/main/scala/org/gridgain/visor/commands/gc/VisorGcCommand.scala
index 5e0ece4..4458b67 100644
--- 
a/modules/visor-console/src/main/scala/org/gridgain/visor/commands/gc/VisorGcCommand.scala
+++ 
b/modules/visor-console/src/main/scala/org/gridgain/visor/commands/gc/VisorGcCommand.scala
@@ -140,8 +140,10 @@ class VisorGcCommand {
 
                 val nids = prj.nodes().map(_.id())
 
+                val NULL: Void = null
+
                 
grid.compute(prj).withNoFailover().execute(classOf[VisorNodeGcTask],
-                    toTaskArgument(nids, new JavaBoolean(dgc))).foreach { case 
(nid, stat) =>
+                    toTaskArgument(nids, NULL)).foreach { case (nid, stat) =>
                     val roundHb = stat.get1() / (1024L * 1024L)
                     val roundHa = stat.get2() / (1024L * 1024L)
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/70b8af95/modules/visor-console/src/main/scala/org/gridgain/visor/visor.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/main/scala/org/gridgain/visor/visor.scala 
b/modules/visor-console/src/main/scala/org/gridgain/visor/visor.scala
index 364ee33..f380464 100644
--- a/modules/visor-console/src/main/scala/org/gridgain/visor/visor.scala
+++ b/modules/visor-console/src/main/scala/org/gridgain/visor/visor.scala
@@ -1808,15 +1808,17 @@ object visor extends VisorTag {
     }
 
     /** Convert to task argument. */
-    def emptyTaskArgument[A](nid: UUID): VisorTaskArgument[Void] = new 
VisorTaskArgument(nid)
+    def emptyTaskArgument[A](nid: UUID): VisorTaskArgument[Void] = new 
VisorTaskArgument(nid, false)
 
-    def emptyTaskArgument[A](nids: Iterable[UUID]): VisorTaskArgument[Void] = 
new VisorTaskArgument(new JHashSet(nids))
+    def emptyTaskArgument[A](nids: Iterable[UUID]): VisorTaskArgument[Void] = 
new VisorTaskArgument(new JHashSet(nids),
+      false)
 
     /** Convert to task argument. */
-    def toTaskArgument[A](nid: UUID, arg: A): VisorTaskArgument[A] = new 
VisorTaskArgument(nid, arg)
+    def toTaskArgument[A](nid: UUID, arg: A): VisorTaskArgument[A] = new 
VisorTaskArgument(nid, arg, false)
 
     /** Convert to task argument. */
-    def toTaskArgument[A](nids: Iterable[UUID], arg: A): VisorTaskArgument[A] 
= new VisorTaskArgument(new JHashSet(nids), arg)
+    def toTaskArgument[A](nids: Iterable[UUID], arg: A): VisorTaskArgument[A] 
= new VisorTaskArgument(
+        new JHashSet(nids), arg, false)
 
     /**
      * Asks user to select a node from the list.

Reply via email to