You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/10/24 09:46:34 UTC

ignite git commit: IGNITE-9881 Added events for management tasks - Fixes #5006.

Repository: ignite
Updated Branches:
  refs/heads/master 0d7535340 -> ff29b6791


IGNITE-9881 Added events for management tasks - Fixes #5006.

Signed-off-by: Alexey Goncharuk <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ff29b679
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ff29b679
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ff29b679

Branch: refs/heads/master
Commit: ff29b679174b19c6372ec3f84bde937c45fa0a3a
Parents: 0d75353
Author: Andrei Aleksandrov <ae...@gmail.com>
Authored: Wed Oct 24 12:39:19 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Oct 24 12:41:03 2018 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/events/EventType.java     |  10 +
 .../managers/deployment/GridDeployment.java     |  16 ++
 .../processors/task/GridTaskProcessor.java      |  20 ++
 .../task/GridVisorManagementTask.java           |  38 ++++
 .../visor/baseline/VisorBaselineTask.java       |   2 +
 .../VisorBinaryMetadataCollectorTask.java       |   2 +
 .../visor/cache/VisorCacheAffinityNodeTask.java |   2 +
 .../visor/cache/VisorCacheClearTask.java        |   2 +
 .../visor/cache/VisorCacheLoadTask.java         |   2 +
 .../cache/VisorCacheLostPartitionsTask.java     |   2 +
 .../cache/VisorCacheLostPartitionsTaskArg.java  |  10 +-
 .../visor/cache/VisorCacheModifyTask.java       |   2 +
 .../visor/cache/VisorCacheModifyTaskArg.java    |   6 +
 .../visor/cache/VisorCacheRebalanceTask.java    |   2 +
 .../VisorCacheResetLostPartitionsTask.java      |   2 +
 .../VisorCacheResetLostPartitionsTaskArg.java   |   8 +
 .../visor/cache/VisorCacheStartTask.java        |   2 +
 .../visor/cache/VisorCacheStopTask.java         |   2 +
 .../compute/VisorComputeCancelSessionsTask.java |   2 +
 .../compute/VisorComputeResetMetricsTask.java   |   2 +
 .../visor/debug/VisorThreadDumpTask.java        |   2 +
 .../visor/igfs/VisorIgfsFormatTask.java         |   2 +
 .../visor/igfs/VisorIgfsProfilerClearTask.java  |   2 +
 .../visor/igfs/VisorIgfsResetMetricsTask.java   |   2 +
 .../internal/visor/log/VisorLogSearchTask.java  |   2 +
 .../misc/VisorChangeGridActiveStateTask.java    |   2 +
 .../internal/visor/node/VisorNodeGcTask.java    |   2 +
 .../internal/visor/node/VisorNodePingTask.java  |   2 +
 .../visor/node/VisorNodeRestartTask.java        |   2 +
 .../internal/visor/node/VisorNodeStopTask.java  |   2 +
 .../visor/query/VisorQueryCancelTask.java       |   2 +
 .../visor/query/VisorQueryResetMetricsTask.java |   2 +
 .../internal/visor/query/VisorQueryTask.java    |   2 +
 .../visor/service/VisorCancelServiceTask.java   |   2 +
 .../TestManagementVisorMultiNodeTask.java       |  66 +++++++
 .../TestManagementVisorOneNodeTask.java         |  66 +++++++
 .../TestNotManagementVisorMultiNodeTask.java    |  64 +++++++
 .../TestNotManagementVisorOneNodeTask.java      |  64 +++++++
 .../internal/VisorManagementEventSelfTest.java  | 192 +++++++++++++++++++
 .../testsuites/IgniteComputeGridTestSuite.java  |   3 +
 40 files changed, 616 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/events/EventType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/events/EventType.java b/modules/core/src/main/java/org/apache/ignite/events/EventType.java
index 485e567..97017d6 100644
--- a/modules/core/src/main/java/org/apache/ignite/events/EventType.java
+++ b/modules/core/src/main/java/org/apache/ignite/events/EventType.java
@@ -245,6 +245,16 @@ public interface EventType {
     public static final int EVT_TASK_REDUCED = 25;
 
     /**
+     * Built-in event type: Visor or Web Console management task started.
+     * <p>
+     * NOTE: all types in range <b>from 1 to 1000 are reserved</b> for
+     * internal Ignite events and should not be used by user-defined events.
+     *
+     * @see TaskEvent
+     */
+    public static final int EVT_MANAGEMENT_TASK_STARTED = 26;
+
+    /**
      * Built-in event type: non-task class deployed.
      * <p>
      * NOTE: all types in range <b>from 1 to 1000 are reserved</b> for

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
index c3efc59..3450aa5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
@@ -35,6 +35,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.compute.ComputeTask;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.GridLeanSet;
 import org.apache.ignite.internal.util.lang.GridMetadataAwareAdapter;
 import org.apache.ignite.internal.util.lang.GridPeerDeployAware;
@@ -45,6 +46,7 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteUuid;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -384,6 +386,20 @@ public class GridDeployment extends GridMetadataAwareAdapter implements GridDepl
     }
 
     /**
+     * Checks whether task class is annotated with {@link GridVisorManagementTask}.
+     *
+     * @param task Task.
+     * @param taskCls Task class.
+     * @return {@code True} if task is internal.
+     */
+    @SuppressWarnings("unchecked")
+    public boolean visorManagementTask(@Nullable ComputeTask task, @NotNull Class<?> taskCls) {
+        return annotation(task instanceof GridPeerDeployAware ?
+                ((GridPeerDeployAware)task).deployClass() : taskCls,
+            GridVisorManagementTask.class) != null;
+    }
+
+    /**
      * @param cls Class to create new instance of (using default constructor).
      * @return New instance.
      * @throws IgniteCheckedException If failed.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
index fb6be71..d3f64be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
@@ -73,6 +73,7 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.LT;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteUuid;
@@ -83,6 +84,7 @@ import org.jetbrains.annotations.Nullable;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static org.apache.ignite.events.EventType.EVT_TASK_SESSION_ATTR_SET;
+import static org.apache.ignite.events.EventType.EVT_MANAGEMENT_TASK_STARTED;
 import static org.apache.ignite.internal.GridTopic.TOPIC_JOB_SIBLINGS;
 import static org.apache.ignite.internal.GridTopic.TOPIC_TASK;
 import static org.apache.ignite.internal.GridTopic.TOPIC_TASK_CANCEL;
@@ -768,6 +770,24 @@ public class GridTaskProcessor extends GridProcessorAdapter implements IgniteCha
 
                 assert taskWorker0 == null : "Session ID is not unique: " + sesId;
 
+                if (ctx.event().isRecordable(EVT_MANAGEMENT_TASK_STARTED) && dep.visorManagementTask(task, taskCls)) {
+                    VisorTaskArgument visorTaskArgument = (VisorTaskArgument)arg;
+
+                    Event evt = new TaskEvent(
+                        ctx.discovery().localNode(),
+                        visorTaskArgument != null && visorTaskArgument.getArgument() != null
+                            ? visorTaskArgument.getArgument().toString() : "[]",
+                        EVT_MANAGEMENT_TASK_STARTED,
+                        ses.getId(),
+                        taskCls == null ? null : taskCls.getSimpleName(),
+                        "VisorManagementTask",
+                        false,
+                        subjId
+                    );
+
+                    ctx.event().record(evt);
+                }
+
                 if (!ctx.clientDisconnected()) {
                     if (dep.annotation(taskCls, ComputeTaskMapAsync.class) != null) {
                         try {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridVisorManagementTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridVisorManagementTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridVisorManagementTask.java
new file mode 100644
index 0000000..09c87bf
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridVisorManagementTask.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.task;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates that annotated task is a visor task that was invoked by user. They can be handled by event listeners.
+ *
+ * This annotation intended for internal use only.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface GridVisorManagementTask {
+    // No-op.
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineTask.java
index 3c00452..be5fcca 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineTask.java
@@ -27,6 +27,7 @@ import org.apache.ignite.cluster.BaselineNode;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.cluster.IgniteClusterEx;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -37,6 +38,7 @@ import org.jetbrains.annotations.Nullable;
  * Task that will collect information about baseline topology and can change its state.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorBaselineTask extends VisorOneNodeTask<VisorBaselineTaskArg, VisorBaselineTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTask.java
index bf072e2..c62c658 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTask.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.binary;
 import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -29,6 +30,7 @@ import org.apache.ignite.marshaller.Marshaller;
  * Task that collects binary metadata.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorBinaryMetadataCollectorTask
     extends VisorOneNodeTask<VisorBinaryMetadataCollectorTaskArg, VisorBinaryMetadataCollectorTaskResult> {
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityNodeTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityNodeTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityNodeTask.java
index 447cc11..439b8d3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityNodeTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityNodeTask.java
@@ -21,6 +21,7 @@ import java.util.UUID;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -30,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
  * Task that will find affinity node for key.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheAffinityNodeTask extends VisorOneNodeTask<VisorCacheAffinityNodeTaskArg, UUID> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTask.java
index bdfc9eb..68142b9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTask.java
@@ -21,6 +21,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.compute.ComputeJobContext;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -32,6 +33,7 @@ import org.apache.ignite.resources.JobContextResource;
  * Task that clears specified caches on specified node.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheClearTask extends VisorOneNodeTask<VisorCacheClearTaskArg, VisorCacheClearTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTask.java
index 7b25ae4..5d1bccd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTask.java
@@ -26,6 +26,7 @@ import javax.cache.expiry.ExpiryPolicy;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -35,6 +36,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task to loads caches.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheLoadTask extends
     VisorOneNodeTask<VisorCacheLoadTaskArg, Map<String, Integer>> {
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTask.java
index 9785b9c..daa4af7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTask.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
 import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -32,6 +33,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Collect list of lost partitions.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheLostPartitionsTask
     extends VisorOneNodeTask<VisorCacheLostPartitionsTaskArg, VisorCacheLostPartitionsTaskResult> {
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTaskArg.java
index d6404bf..3ccaeaa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTaskArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLostPartitionsTaskArg.java
@@ -35,6 +35,9 @@ public class VisorCacheLostPartitionsTaskArg extends VisorDataTransferObject {
     /** List of cache names. */
     private List<String> cacheNames;
 
+    /** Created for toString method because Collection can't be printed. */
+    private String modifiedCaches;
+
     /**
      * Default constructor.
      */
@@ -47,6 +50,9 @@ public class VisorCacheLostPartitionsTaskArg extends VisorDataTransferObject {
      */
     public VisorCacheLostPartitionsTaskArg(List<String> cacheNames) {
         this.cacheNames = cacheNames;
+
+        if (cacheNames != null)
+            modifiedCaches = cacheNames.toString();
     }
 
     /**
@@ -59,11 +65,13 @@ public class VisorCacheLostPartitionsTaskArg extends VisorDataTransferObject {
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeCollection(out, cacheNames);
+        U.writeString(out, modifiedCaches);
     }
 
     /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException   {
         cacheNames = U.readList(in);
+        modifiedCaches = U.readString(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTask.java
index 62e7ac6..f68efa8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTask.java
@@ -21,6 +21,7 @@ import java.util.UUID;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -31,6 +32,7 @@ import org.apache.ignite.internal.visor.util.VisorTaskUtils;
  * Task that modify value in specified cache.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheModifyTask extends VisorOneNodeTask<VisorCacheModifyTaskArg, VisorCacheModifyTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTaskArg.java
index bef73ed..3948a2f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTaskArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheModifyTaskArg.java
@@ -43,6 +43,9 @@ public class VisorCacheModifyTaskArg extends VisorDataTransferObject {
     /** Specified value. */
     private Object val;
 
+    /** Created for toString method because Object can't be printed. */
+    private String modifiedValues;
+
     /**
      * Default constructor.
      */
@@ -61,6 +64,7 @@ public class VisorCacheModifyTaskArg extends VisorDataTransferObject {
         this.mode = mode;
         this.key = key;
         this.val = val;
+        this.modifiedValues = "[Key=" + key + ", Value=" + val + "]";
     }
 
     /**
@@ -97,6 +101,7 @@ public class VisorCacheModifyTaskArg extends VisorDataTransferObject {
         U.writeEnum(out, mode);
         out.writeObject(key);
         out.writeObject(val);
+        U.writeString(out, modifiedValues);
     }
 
     /** {@inheritDoc} */
@@ -105,6 +110,7 @@ public class VisorCacheModifyTaskArg extends VisorDataTransferObject {
         mode = VisorModifyCacheMode.fromOrdinal(in.readByte());
         key = in.readObject();
         val = in.readObject();
+        modifiedValues = U.readString(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTask.java
index 87a2ce6..9c3fd37 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTask.java
@@ -23,6 +23,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -32,6 +33,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Pre-loads caches. Made callable just to conform common pattern.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheRebalanceTask extends VisorOneNodeTask<VisorCacheRebalanceTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTask.java
index 2ad88ee..aa90d3e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTask.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.visor.cache;
 
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -26,6 +27,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Reset lost partitions for caches.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheResetLostPartitionsTask extends VisorOneNodeTask<VisorCacheResetLostPartitionsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTaskArg.java
index 2f365c8..5f60730 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTaskArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetLostPartitionsTaskArg.java
@@ -35,6 +35,9 @@ public class VisorCacheResetLostPartitionsTaskArg extends VisorDataTransferObjec
     /** List of cache names. */
     private List<String> cacheNames;
 
+    /** Created for toString method because Collection can't be printed. */
+    private String modifiedCaches;
+
     /**
      * Default constructor.
      */
@@ -47,6 +50,9 @@ public class VisorCacheResetLostPartitionsTaskArg extends VisorDataTransferObjec
      */
     public VisorCacheResetLostPartitionsTaskArg(List<String> cacheNames) {
         this.cacheNames = cacheNames;
+
+        if(cacheNames != null)
+            modifiedCaches = cacheNames.toString();
     }
 
     /**
@@ -59,11 +65,13 @@ public class VisorCacheResetLostPartitionsTaskArg extends VisorDataTransferObjec
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeCollection(out, cacheNames);
+        U.writeString(out, modifiedCaches);
     }
 
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         cacheNames = U.readList(in);
+        modifiedCaches = U.readString(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartTask.java
index 5f6337b..7663827 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartTask.java
@@ -29,6 +29,7 @@ import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -40,6 +41,7 @@ import org.jetbrains.annotations.Nullable;
  * Task that start cache or near cache with specified configuration.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheStartTask extends VisorMultiNodeTask<VisorCacheStartTaskArg, Map<UUID, IgniteException>, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTask.java
index df95c5e..b76fc3d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTask.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.cache;
 import java.util.Collection;
 import java.util.HashSet;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -29,6 +30,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task that stop specified caches on specified node.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCacheStopTask extends VisorOneNodeTask<VisorCacheStopTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTask.java
index 6cd683c..8b29a40 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTask.java
@@ -24,6 +24,7 @@ import org.apache.ignite.IgniteCompute;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskFuture;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -34,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
  * Cancels given tasks sessions.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorComputeCancelSessionsTask extends VisorOneNodeTask<VisorComputeCancelSessionsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeResetMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeResetMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeResetMetricsTask.java
index eefeb74..ac3e18b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeResetMetricsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeResetMetricsTask.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.visor.compute;
 
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -26,6 +27,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Reset compute grid metrics task.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorComputeResetMetricsTask extends VisorOneNodeTask<Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadDumpTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadDumpTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadDumpTask.java
index 9c6aa60..f064028 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadDumpTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadDumpTask.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.debug;
 import java.lang.management.ThreadInfo;
 import java.lang.management.ThreadMXBean;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -29,6 +30,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Creates thread dump.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorThreadDumpTask extends VisorOneNodeTask<Void, VisorThreadDumpTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTask.java
index e4685b7..340abea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTask.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.visor.igfs;
 
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -27,6 +28,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Format IGFS instance.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorIgfsFormatTask extends VisorOneNodeTask<VisorIgfsFormatTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTask.java
index c730840..dc1a30a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTask.java
@@ -28,6 +28,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteFileSystem;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorJob;
@@ -39,6 +40,7 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.resolveIgfsPr
  * Remove all IGFS profiler logs.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<VisorIgfsProfilerClearTaskArg, VisorIgfsProfilerClearTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTask.java
index ee90edf..b1eadda 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTask.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.visor.igfs;
 
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -27,6 +28,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Resets IGFS metrics.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorIgfsResetMetricsTask extends VisorOneNodeTask<VisorIgfsResetMetricsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchTask.java
index e4d2882..04ee29c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchTask.java
@@ -30,6 +30,7 @@ import java.util.UUID;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.io.GridReversedLinesFileReader;
 import org.apache.ignite.internal.util.lang.GridTuple3;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -48,6 +49,7 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.textFile;
  * Search text matching in logs
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorLogSearchTask extends VisorMultiNodeTask<VisorLogSearchTaskArg, VisorLogSearchTaskResult,
     Collection<VisorLogSearchResult>> {
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTask.java
index bde4d6c..86aee03 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTask.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.visor.misc;
 
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -26,6 +27,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task for changing grid active state.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorChangeGridActiveStateTask extends VisorOneNodeTask<VisorChangeGridActiveStateTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeGcTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeGcTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeGcTask.java
index bdc1104..1e0ca47 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeGcTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeGcTask.java
@@ -25,6 +25,7 @@ import org.apache.ignite.cluster.ClusterMetrics;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorMultiNodeTask;
@@ -34,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
  * Task to run gc on nodes.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorNodeGcTask extends VisorMultiNodeTask<Void, Map<UUID, VisorNodeGcTaskResult>, VisorNodeGcTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTask.java
index ee2e968..656d12a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTask.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.ignite.cluster.ClusterTopologyException;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -30,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
  * Ping other node.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorNodePingTask extends VisorOneNodeTask<VisorNodePingTaskArg, VisorNodePingTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeRestartTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeRestartTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeRestartTask.java
index bb29371..693665a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeRestartTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeRestartTask.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorMultiNodeTask;
@@ -30,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
  * Restarts nodes.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorNodeRestartTask extends VisorMultiNodeTask<Void, Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeStopTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeStopTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeStopTask.java
index 16bf5d6..6581e44 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeStopTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeStopTask.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorMultiNodeTask;
@@ -30,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
  * Stops nodes.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorNodeStopTask extends VisorMultiNodeTask<Void, Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTask.java
index 207b690..32dc93c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTask.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
 import org.jetbrains.annotations.Nullable;
@@ -30,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
  * Task to cancel queries.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorQueryCancelTask extends VisorOneNodeTask<VisorQueryCancelTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTask.java
index 1d807f1..a339f8d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTask.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.visor.query;
 
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -27,6 +28,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Reset compute grid query metrics.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorQueryResetMetricsTask extends VisorOneNodeTask<VisorQueryResetMetricsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
index b5af1b0..97ee83e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
@@ -28,6 +28,7 @@ import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
 import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -44,6 +45,7 @@ import static org.apache.ignite.internal.visor.query.VisorQueryUtils.scheduleRes
  * Task for execute SQL fields query and get first page of results.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorQueryTask extends VisorOneNodeTask<VisorQueryTaskArg, VisorEither<VisorQueryResult>> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTask.java
index 53c3bb3..1bb7ecd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTask.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.visor.service;
 
 import org.apache.ignite.IgniteServices;
 import org.apache.ignite.internal.processors.task.GridInternal;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.visor.VisorJob;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -27,6 +28,7 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task for cancel services with specified name.
  */
 @GridInternal
+@GridVisorManagementTask
 public class VisorCancelServiceTask extends VisorOneNodeTask<VisorCancelServiceTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorMultiNodeTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorMultiNodeTask.java b/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorMultiNodeTask.java
new file mode 100644
index 0000000..beccd79
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorMultiNodeTask.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.List;
+import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
+import org.apache.ignite.internal.visor.VisorJob;
+import org.apache.ignite.internal.visor.VisorMultiNodeTask;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+@GridVisorManagementTask
+public class TestManagementVisorMultiNodeTask extends VisorMultiNodeTask<VisorTaskArgument, Object, Object> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** {@inheritDoc} */
+    @Override protected VisorValidMultiNodeJob job(VisorTaskArgument arg) {
+        return new VisorValidMultiNodeJob(arg, debug);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override protected Object reduce0(List<ComputeJobResult> results) {
+        return null;
+    }
+
+    /**
+     * Valid Management multi node visor job.
+     */
+    private static class VisorValidMultiNodeJob extends VisorJob<VisorTaskArgument, Object> {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param arg Argument.
+         * @param debug Debug flag.
+         */
+        protected VisorValidMultiNodeJob(VisorTaskArgument arg, boolean debug) {
+            super(arg, debug);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object run(VisorTaskArgument arg) {
+            return null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorOneNodeTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorOneNodeTask.java b/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorOneNodeTask.java
new file mode 100644
index 0000000..f7479af
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/TestManagementVisorOneNodeTask.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.List;
+import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.processors.task.GridVisorManagementTask;
+import org.apache.ignite.internal.visor.VisorJob;
+import org.apache.ignite.internal.visor.VisorOneNodeTask;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+@GridVisorManagementTask
+public class TestManagementVisorOneNodeTask extends VisorOneNodeTask<VisorTaskArgument, Object> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** {@inheritDoc} */
+    @Override protected VisorValidOneNodeJob job(VisorTaskArgument arg) {
+        return new VisorValidOneNodeJob(arg, debug);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override protected Object reduce0(List<ComputeJobResult> results) {
+        return null;
+    }
+
+    /**
+     * Valid Management one node visor job.
+     */
+    private static class VisorValidOneNodeJob extends VisorJob<VisorTaskArgument, Object> {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param arg Argument.
+         * @param debug Debug flag.
+         */
+        protected VisorValidOneNodeJob(VisorTaskArgument arg, boolean debug) {
+            super(arg, debug);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object run(VisorTaskArgument arg) {
+            return null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorMultiNodeTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorMultiNodeTask.java b/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorMultiNodeTask.java
new file mode 100644
index 0000000..d8f2793
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorMultiNodeTask.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.List;
+import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.visor.VisorJob;
+import org.apache.ignite.internal.visor.VisorMultiNodeTask;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+public class TestNotManagementVisorMultiNodeTask extends VisorMultiNodeTask<VisorTaskArgument, Object, Object> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** {@inheritDoc} */
+    @Override protected VisorNotManagementMultiNodeJob job(VisorTaskArgument arg) {
+        return new VisorNotManagementMultiNodeJob(arg, debug);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override protected Object reduce0(List<ComputeJobResult> results) {
+        return null;
+    }
+
+    /**
+     * Not management multi node visor job.
+     */
+    private static class VisorNotManagementMultiNodeJob extends VisorJob<VisorTaskArgument, Object> {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param arg Argument.
+         * @param debug Debug flag.
+         */
+        protected VisorNotManagementMultiNodeJob(VisorTaskArgument arg, boolean debug) {
+            super(arg, debug);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object run(VisorTaskArgument arg) {
+            return null;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorOneNodeTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorOneNodeTask.java b/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorOneNodeTask.java
new file mode 100644
index 0000000..ea47ee0
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/TestNotManagementVisorOneNodeTask.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.List;
+import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.visor.VisorJob;
+import org.apache.ignite.internal.visor.VisorOneNodeTask;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+public class TestNotManagementVisorOneNodeTask extends VisorOneNodeTask<VisorTaskArgument, Object> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** {@inheritDoc} */
+    @Override protected VisorNotManagementOneNodeJob job(VisorTaskArgument arg) {
+        return new VisorNotManagementOneNodeJob(arg, debug);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override protected Object reduce0(List<ComputeJobResult> results) {
+        return null;
+    }
+
+    /**
+     * Not management one node visor job.
+     */
+    private static class VisorNotManagementOneNodeJob extends VisorJob<VisorTaskArgument, Object> {
+        /** */
+        private static final long serialVersionUID = 0L;
+
+        /**
+         * @param arg Argument.
+         * @param debug Debug flag.
+         */
+        protected VisorNotManagementOneNodeJob(VisorTaskArgument arg, boolean debug) {
+            super(arg, debug);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object run(VisorTaskArgument arg) {
+            return null;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/internal/VisorManagementEventSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/VisorManagementEventSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/VisorManagementEventSelfTest.java
new file mode 100644
index 0000000..1e8e0ca
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/VisorManagementEventSelfTest.java
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.compute.ComputeTask;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.events.EventType;
+import org.apache.ignite.events.TaskEvent;
+import org.apache.ignite.internal.visor.VisorTaskArgument;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import static org.apache.ignite.events.EventType.EVT_MANAGEMENT_TASK_STARTED;;
+
+/**
+ *
+ */
+public class VisorManagementEventSelfTest extends GridCommonAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        // Enable visor management events.
+        cfg.setIncludeEventTypes(
+            EVT_MANAGEMENT_TASK_STARTED
+        );
+
+        cfg.setCacheConfiguration(
+            new CacheConfiguration<Integer, Integer>()
+                .setName("TEST")
+                .setIndexedTypes(Integer.class, Integer.class)
+                .setStatisticsEnabled(true)
+        );
+
+        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
+
+        List<String> addrs = Arrays.asList("127.0.0.1:47500..47502");
+
+        ipFinder.setAddresses(addrs);
+
+        TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
+
+        discoSpi.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(discoSpi);
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+
+        cleanPersistenceDir();
+
+        super.afterTest();
+    }
+
+    /**
+     * Current test case start valid one node visor task that has GridVisorManagementTask annotation.
+     * No exceptions are expected.
+     *
+     * @throws Exception If failed.
+     */
+    public void testManagementOneNodeVisorTask() throws Exception {
+        IgniteEx ignite = startGrid(0);
+
+        doTestVisorTask(TestManagementVisorOneNodeTask.class, new VisorTaskArgument(), ignite);
+    }
+
+    /**
+     * Current test case start valid multi node visor task that has GridVisorManagementTask annotation.
+     * No exceptions are expected.
+     *
+     * @throws Exception If failed.
+     */
+    public void testManagementMultiNodeVisorTask() throws Exception {
+        IgniteEx ignite = startGrid(0);
+
+        doTestVisorTask(TestManagementVisorMultiNodeTask.class, new VisorTaskArgument(), ignite);
+    }
+
+    /**
+     * Current test case start one node visor task that has not GridVisorManagementTask annotation.
+     * No exceptions are expected.
+     *
+     * @throws Exception If failed.
+     */
+    public void testNotManagementOneNodeVisorTask() throws Exception {
+        IgniteEx ignite = startGrid(0);
+
+        doTestNotManagementVisorTask(TestNotManagementVisorOneNodeTask.class, new VisorTaskArgument(), ignite);
+    }
+
+    /**
+     * Current test case start multi node visor task that has not GridVisorManagementTask annotation.
+     * No exceptions are expected.
+     *
+     * @throws Exception If failed.
+     */
+    public void testNotManagementMultiNodeVisorTask() throws Exception {
+        IgniteEx ignite = startGrid(0);
+
+        doTestNotManagementVisorTask(TestNotManagementVisorMultiNodeTask.class, new VisorTaskArgument(), ignite);
+    }
+
+    /**
+     * @param cls class of the task.
+     * @param arg argument.
+     * @param ignite instance of Ignite.
+     *
+     * @throws Exception If failed.
+     */
+    private <T, R>  void doTestVisorTask(
+        Class<? extends ComputeTask<VisorTaskArgument<T>, R>> cls, T arg, IgniteEx ignite) throws Exception
+    {
+        final AtomicReference<TaskEvent> evt = new AtomicReference<>();
+
+        final CountDownLatch evtLatch = new CountDownLatch(1);
+
+        ignite.events().localListen(new IgnitePredicate<TaskEvent>() {
+            @Override public boolean apply(TaskEvent e) {
+                evt.set(e);
+
+                evtLatch.countDown();
+
+                return false;
+            }
+        }, EventType.EVT_MANAGEMENT_TASK_STARTED);
+
+        for (ClusterNode node : ignite.cluster().forServers().nodes())
+            ignite.compute().executeAsync(cls, new VisorTaskArgument<>(node.id(), arg, true));
+
+        assertTrue(evtLatch.await(10000, TimeUnit.MILLISECONDS));
+
+        assertNotNull(evt.get());
+    }
+
+    /**
+     * @param cls class of the task.
+     * @param arg argument.
+     * @param ignite instance of Ignite.
+     *
+     * @throws Exception If failed.
+     */
+    private <T, R>  void doTestNotManagementVisorTask(
+        Class<? extends ComputeTask<VisorTaskArgument<T>, R>> cls, T arg, IgniteEx ignite) throws Exception
+    {
+        final AtomicReference<TaskEvent> evt = new AtomicReference<>();
+
+        final CountDownLatch evtLatch = new CountDownLatch(1);
+
+        ignite.events().localListen(new IgnitePredicate<TaskEvent>() {
+            @Override public boolean apply(TaskEvent e) {
+                evt.set(e);
+
+                evtLatch.countDown();
+
+                return false;
+            }
+        }, EventType.EVT_MANAGEMENT_TASK_STARTED);
+
+        for (ClusterNode node : ignite.cluster().forServers().nodes())
+            ignite.compute().executeAsync(cls, new VisorTaskArgument<>(node.id(), arg, true));
+
+        assertFalse(evtLatch.await(10000, TimeUnit.MILLISECONDS));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/ff29b679/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
index 2e5708d..2771864 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteComputeGridTestSuite.java
@@ -77,6 +77,7 @@ import org.apache.ignite.internal.IgniteExecutorServiceTest;
 import org.apache.ignite.internal.IgniteExplicitImplicitDeploymentSelfTest;
 import org.apache.ignite.internal.IgniteRoundRobinErrorAfterClientReconnectTest;
 import org.apache.ignite.internal.TaskNodeRestartTest;
+import org.apache.ignite.internal.VisorManagementEventSelfTest;
 import org.apache.ignite.internal.managers.checkpoint.GridCheckpointManagerSelfTest;
 import org.apache.ignite.internal.managers.checkpoint.GridCheckpointTaskSelfTest;
 import org.apache.ignite.internal.managers.communication.GridCommunicationManagerListenersSelfTest;
@@ -178,6 +179,8 @@ public class IgniteComputeGridTestSuite {
 
         suite.addTestSuite(IgniteComputeJobOneThreadTest.class);
 
+        suite.addTestSuite(VisorManagementEventSelfTest.class);
+
         return suite;
     }
 }