You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2017/04/27 04:01:42 UTC

[1/4] ignite git commit: IGNITE-4988 Rework Visor task arguments. Code cleanup for ignite-2.0.

Repository: ignite
Updated Branches:
  refs/heads/ignite-2.0 f4d233ced -> 6a435b17e


http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTaskArg.java
new file mode 100644
index 0000000..878a612
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTaskArg.java
@@ -0,0 +1,75 @@
+/*
+ * 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.visor.query;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for task {@link VisorQueryCleanupTask}
+ */
+public class VisorQueryCleanupTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Query IDs to cancel. */
+    private Map<UUID, Collection<String>> qryIds;
+
+    /**
+     * Default constructor.
+     */
+    public VisorQueryCleanupTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param qryIds Query IDs to cancel.
+     */
+    public VisorQueryCleanupTaskArg(Map<UUID, Collection<String>> qryIds) {
+        this.qryIds = qryIds;
+    }
+
+    /**
+     * @return Query IDs to cancel.
+     */
+    public Map<UUID, Collection<String>> getQueryIds() {
+        return qryIds;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeMap(out, qryIds);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        qryIds = U.readMap(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorQueryCleanupTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTask.java
index 7c1379f..8cef43f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTask.java
@@ -43,13 +43,13 @@ import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isSyste
  * Task to collect cache query metrics.
  */
 @GridInternal
-public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<Long, Collection<VisorQueryDetailMetrics>,
-    Collection<? extends QueryDetailMetrics>> {
+public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<VisorQueryDetailMetricsCollectorTaskArg,
+    Collection<VisorQueryDetailMetrics>, Collection<? extends QueryDetailMetrics>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheQueryDetailMetricsCollectorJob job(Long arg) {
+    @Override protected VisorCacheQueryDetailMetricsCollectorJob job(VisorQueryDetailMetricsCollectorTaskArg arg) {
         return new VisorCacheQueryDetailMetricsCollectorJob(arg, debug);
     }
 
@@ -80,7 +80,8 @@ public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<Lon
     /**
      * Job that will actually collect query metrics.
      */
-    private static class VisorCacheQueryDetailMetricsCollectorJob extends VisorJob<Long, Collection<? extends QueryDetailMetrics>> {
+    private static class VisorCacheQueryDetailMetricsCollectorJob
+        extends VisorJob<VisorQueryDetailMetricsCollectorTaskArg, Collection<? extends QueryDetailMetrics>> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -90,7 +91,7 @@ public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<Lon
          * @param arg Last time when metrics were collected.
          * @param debug Debug flag.
          */
-        protected VisorCacheQueryDetailMetricsCollectorJob(@Nullable Long arg, boolean debug) {
+        protected VisorCacheQueryDetailMetricsCollectorJob(@Nullable VisorQueryDetailMetricsCollectorTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
@@ -113,7 +114,9 @@ public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<Lon
         }
 
         /** {@inheritDoc} */
-        @Override protected Collection<? extends QueryDetailMetrics> run(@Nullable Long arg) throws IgniteException {
+        @Override protected Collection<? extends QueryDetailMetrics> run(
+            @Nullable VisorQueryDetailMetricsCollectorTaskArg arg
+        ) throws IgniteException {
             assert arg != null;
 
             IgniteConfiguration cfg = ignite.configuration();
@@ -131,7 +134,7 @@ public class VisorQueryDetailMetricsCollectorTask extends VisorMultiNodeTask<Lon
                     if (cache == null || !cache.context().started())
                         continue;
 
-                    aggregateMetrics(arg, aggMetrics, cache.context().queries().detailMetrics());
+                    aggregateMetrics(arg.getSince(), aggMetrics, cache.context().queries().detailMetrics());
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTaskArg.java
new file mode 100644
index 0000000..5c76951
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryDetailMetricsCollectorTaskArg.java
@@ -0,0 +1,71 @@
+/*
+ * 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.visor.query;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for task {@link VisorQueryDetailMetricsCollectorTask}
+ */
+public class VisorQueryDetailMetricsCollectorTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Time when metrics were collected last time. */
+    private long since;
+
+    /**
+     * Default constructor.
+     */
+    public VisorQueryDetailMetricsCollectorTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param since Time when metrics were collected last time.
+     */
+    public VisorQueryDetailMetricsCollectorTaskArg(long since) {
+        this.since = since;
+    }
+
+    /**
+     * @return Time when metrics were collected last time.
+     */
+    public long getSince() {
+        return since;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        out.writeLong(since);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        since = in.readLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorQueryDetailMetricsCollectorTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetDetailMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetDetailMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetDetailMetricsTask.java
index 6d35e32..a0da797 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetDetailMetricsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetDetailMetricsTask.java
@@ -56,8 +56,10 @@ public class VisorQueryResetDetailMetricsTask extends VisorOneNodeTask<Void, Voi
             for (String cacheName : ignite.cacheNames()) {
                 IgniteCache cache = ignite.cache(cacheName);
 
-                if (cache != null)
-                    cache.resetQueryDetailMetrics();
+                if (cache == null)
+                    throw new IllegalStateException("Failed to find cache for name: " + cacheName);
+
+                cache.resetQueryDetailMetrics();
             }
 
             return null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 3c5c668..1d807f1 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
@@ -27,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Reset compute grid query metrics.
  */
 @GridInternal
-public class VisorQueryResetMetricsTask extends VisorOneNodeTask<String, Void> {
+public class VisorQueryResetMetricsTask extends VisorOneNodeTask<VisorQueryResetMetricsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorQueryResetMetricsJob job(String arg) {
+    @Override protected VisorQueryResetMetricsJob job(VisorQueryResetMetricsTaskArg arg) {
         return new VisorQueryResetMetricsJob(arg, debug);
     }
 
     /**
      * Job that reset cache query metrics.
      */
-    private static class VisorQueryResetMetricsJob extends VisorJob<String, Void> {
+    private static class VisorQueryResetMetricsJob extends VisorJob<VisorQueryResetMetricsTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -47,16 +47,20 @@ public class VisorQueryResetMetricsTask extends VisorOneNodeTask<String, Void> {
          * @param arg Cache name to reset query metrics for.
          * @param debug Debug flag.
          */
-        private VisorQueryResetMetricsJob(String arg, boolean debug) {
+        private VisorQueryResetMetricsJob(VisorQueryResetMetricsTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(String cacheName) {
+        @Override protected Void run(VisorQueryResetMetricsTaskArg arg) {
+            String cacheName = arg.getCacheName();
+
             IgniteCache cache = ignite.cache(cacheName);
 
-            if (cache != null)
-                cache.resetQueryMetrics();
+            if (cache == null)
+                throw new IllegalStateException("Failed to find cache for name: " + cacheName);
+
+            cache.resetQueryMetrics();
 
             return null;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTaskArg.java
new file mode 100644
index 0000000..8faa43b
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryResetMetricsTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.query;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorQueryResetMetricsTask}.
+ */
+public class VisorQueryResetMetricsTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorQueryResetMetricsTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorQueryResetMetricsTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorQueryResetMetricsTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTask.java
index a267f06..f6bbf7c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTask.java
@@ -36,12 +36,12 @@ import org.jetbrains.annotations.Nullable;
  * Task to collect currently running queries.
  */
 @GridInternal
-public class VisorRunningQueriesCollectorTask extends VisorMultiNodeTask<Long, Map<UUID, Collection<VisorRunningQuery>>, Collection<VisorRunningQuery>> {
+public class VisorRunningQueriesCollectorTask extends VisorMultiNodeTask<VisorRunningQueriesCollectorTaskArg, Map<UUID, Collection<VisorRunningQuery>>, Collection<VisorRunningQuery>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCollectRunningQueriesJob job(Long arg) {
+    @Override protected VisorCollectRunningQueriesJob job(VisorRunningQueriesCollectorTaskArg arg) {
         return new VisorCollectRunningQueriesJob(arg, debug);
     }
 
@@ -62,7 +62,8 @@ public class VisorRunningQueriesCollectorTask extends VisorMultiNodeTask<Long, M
     /**
      * Job to collect currently running queries from node.
      */
-    private static class VisorCollectRunningQueriesJob extends VisorJob<Long, Collection<VisorRunningQuery>> {
+    private static class VisorCollectRunningQueriesJob
+        extends VisorJob<VisorRunningQueriesCollectorTaskArg, Collection<VisorRunningQuery>> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -72,14 +73,17 @@ public class VisorRunningQueriesCollectorTask extends VisorMultiNodeTask<Long, M
          * @param arg Job argument.
          * @param debug Flag indicating whether debug information should be printed into node log.
          */
-        protected VisorCollectRunningQueriesJob(@Nullable Long arg, boolean debug) {
+        protected VisorCollectRunningQueriesJob(@Nullable VisorRunningQueriesCollectorTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Collection<VisorRunningQuery> run(@Nullable Long duration) throws IgniteException {
+        @Override protected Collection<VisorRunningQuery> run(@Nullable VisorRunningQueriesCollectorTaskArg arg)
+            throws IgniteException {
+            assert arg != null;
+
             Collection<GridRunningQueryInfo> queries = ignite.context().query()
-                .runningQueries(duration != null ? duration : 0);
+                .runningQueries(arg.getDuration() != null ? arg.getDuration() : 0);
 
             Collection<VisorRunningQuery> res = new ArrayList<>(queries.size());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTaskArg.java
new file mode 100644
index 0000000..c851559
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorRunningQueriesCollectorTaskArg.java
@@ -0,0 +1,71 @@
+/*
+ * 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.visor.query;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for task {@link VisorRunningQueriesCollectorTask}
+ */
+public class VisorRunningQueriesCollectorTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Duration to check. */
+    private Long duration;
+
+    /**
+     * Default constructor.
+     */
+    public VisorRunningQueriesCollectorTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param duration Duration to check.
+     */
+    public VisorRunningQueriesCollectorTaskArg(Long duration) {
+        this.duration = duration;
+    }
+
+    /**
+     * @return Duration to check.
+     */
+    public Long getDuration() {
+        return duration;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        out.writeObject(duration);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        duration = (Long)in.readObject();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorRunningQueriesCollectorTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorScanQueryArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorScanQueryArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorScanQueryArg.java
deleted file mode 100644
index cc12ac5..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorScanQueryArg.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.visor.query;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.internal.visor.VisorDataTransferObject;
-
-/**
- * Arguments for {@link VisorScanQueryTask}.
- */
-public class VisorScanQueryArg extends VisorDataTransferObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Cache name for query. */
-    private String cacheName;
-
-    /** Filter text. */
-    private String filter;
-
-    /** Filter is regular expression */
-    private boolean regEx;
-
-    /** Case sensitive filtration */
-    private boolean caseSensitive;
-
-    /** Scan of near cache */
-    private boolean near;
-
-    /** Flag whether to execute query locally. */
-    private boolean loc;
-
-    /** Result batch size. */
-    private int pageSize;
-
-    /**
-     * Default constructor.
-     */
-    public VisorScanQueryArg() {
-        // No-op.
-    }
-
-    /**
-     * @param cacheName Cache name for query.
-     * @param filter Filter text.
-     * @param regEx Filter is regular expression.
-     * @param caseSensitive Case sensitive filtration.
-     * @param near Scan near cache.
-     * @param loc Flag whether to execute query locally.
-     * @param pageSize Result batch size.
-     */
-    public VisorScanQueryArg(String cacheName, String filter, boolean regEx, boolean caseSensitive, boolean near,
-        boolean loc, int pageSize) {
-        this.cacheName = cacheName;
-        this.filter = filter;
-        this.regEx = regEx;
-        this.caseSensitive = caseSensitive;
-        this.near = near;
-        this.loc = loc;
-        this.pageSize = pageSize;
-    }
-
-    /**
-     * @return Cache name.
-     */
-    public String getCacheName() {
-        return cacheName;
-    }
-
-    /**
-     * @return Filter is regular expression.
-     */
-    public boolean isRegEx() {
-        return regEx;
-    }
-
-    /**
-     * @return Filter.
-     */
-    public String getFilter() {
-        return filter;
-    }
-
-    /**
-     * @return Case sensitive filtration.
-     */
-    public boolean isCaseSensitive() {
-        return caseSensitive;
-    }
-
-    /**
-     * @return Scan of near cache.
-     */
-    public boolean isNear() {
-        return near;
-    }
-
-    /**
-     * @return {@code true} if query should be executed locally.
-     */
-    public boolean isLocal() {
-        return loc;
-    }
-
-    /**
-     * @return Page size.
-     */
-    public int getPageSize() {
-        return pageSize;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        U.writeString(out, cacheName);
-        U.writeString(out, filter);
-        out.writeBoolean(regEx);
-        out.writeBoolean(caseSensitive);
-        out.writeBoolean(near);
-        out.writeBoolean(loc);
-        out.writeInt(pageSize);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        cacheName = U.readString(in);
-        filter = U.readString(in);
-        regEx = in.readBoolean();
-        caseSensitive = in.readBoolean();
-        near = in.readBoolean();
-        loc = in.readBoolean();
-        pageSize = in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(VisorScanQueryArg.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 64987e9..53c3bb3 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
@@ -27,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task for cancel services with specified name.
  */
 @GridInternal
-public class VisorCancelServiceTask extends VisorOneNodeTask<String, Void> {
+public class VisorCancelServiceTask extends VisorOneNodeTask<VisorCancelServiceTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCancelServiceJob job(String arg) {
+    @Override protected VisorCancelServiceJob job(VisorCancelServiceTaskArg arg) {
         return new VisorCancelServiceJob(arg, debug);
     }
 
     /**
      * Job for cancel services with specified name.
      */
-    private static class VisorCancelServiceJob extends VisorJob<String, Void> {
+    private static class VisorCancelServiceJob extends VisorJob<VisorCancelServiceTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -49,15 +49,15 @@ public class VisorCancelServiceTask extends VisorOneNodeTask<String, Void> {
          * @param arg Job argument.
          * @param debug Debug flag.
          */
-        protected VisorCancelServiceJob(String arg, boolean debug) {
+        protected VisorCancelServiceJob(VisorCancelServiceTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(final String arg) {
+        @Override protected Void run(final VisorCancelServiceTaskArg arg) {
             IgniteServices services = ignite.services();
 
-            services.cancel(arg);
+            services.cancel(arg.getName());
 
             return null;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTaskArg.java
new file mode 100644
index 0000000..477715f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/service/VisorCancelServiceTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.service;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCancelServiceTask}.
+ */
+public class VisorCancelServiceTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Service name. */
+    private String name;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCancelServiceTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param name Service name.
+     */
+    public VisorCancelServiceTaskArg(String name) {
+        this.name = name;
+    }
+
+    /**
+     * @return Service name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, name);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        name = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCancelServiceTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java
index 897ac89..c9ed882 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java
@@ -333,6 +333,29 @@ public class VisorTaskUtils {
     }
 
     /**
+     * Joins iterable collection elements to string.
+     *
+     * @param col Iterable collection.
+     * @return String.
+     */
+    @Nullable public static String compactIterable(Iterable col) {
+        if (col == null || !col.iterator().hasNext())
+            return null;
+
+        String sep = ", ";
+
+        StringBuilder sb = new StringBuilder();
+
+        for (Object s : col)
+            sb.append(s).append(sep);
+
+        if (sb.length() > 0)
+            sb.setLength(sb.length() - sep.length());
+
+        return U.compact(sb.toString());
+    }
+
+    /**
      * Returns boolean value from system property or provided function.
      *
      * @param propName System property name.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index bc1e534..ca5f756 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1687,6 +1687,7 @@ org.apache.ignite.internal.visor.VisorTaskArgument
 org.apache.ignite.internal.visor.binary.VisorBinaryMetadata
 org.apache.ignite.internal.visor.binary.VisorBinaryMetadataCollectorTask
 org.apache.ignite.internal.visor.binary.VisorBinaryMetadataCollectorTask$VisorBinaryCollectMetadataJob
+org.apache.ignite.internal.visor.binary.VisorBinaryMetadataCollectorTaskArg
 org.apache.ignite.internal.visor.binary.VisorBinaryMetadataCollectorTaskResult
 org.apache.ignite.internal.visor.binary.VisorBinaryMetadataField
 org.apache.ignite.internal.visor.cache.VisorCache
@@ -1698,10 +1699,12 @@ org.apache.ignite.internal.visor.cache.VisorCacheAggregatedMetrics
 org.apache.ignite.internal.visor.cache.VisorCacheClearTask
 org.apache.ignite.internal.visor.cache.VisorCacheClearTask$VisorCacheClearJob
 org.apache.ignite.internal.visor.cache.VisorCacheClearTask$VisorCacheClearJob$1
+org.apache.ignite.internal.visor.cache.VisorCacheClearTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheClearTaskResult
 org.apache.ignite.internal.visor.cache.VisorCacheConfiguration
 org.apache.ignite.internal.visor.cache.VisorCacheConfigurationCollectorJob
 org.apache.ignite.internal.visor.cache.VisorCacheConfigurationCollectorTask
+org.apache.ignite.internal.visor.cache.VisorCacheConfigurationCollectorTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheEvictionConfiguration
 org.apache.ignite.internal.visor.cache.VisorCacheJdbcType
 org.apache.ignite.internal.visor.cache.VisorCacheJdbcTypeField
@@ -1710,6 +1713,7 @@ org.apache.ignite.internal.visor.cache.VisorCacheLoadTask$VisorCachesLoadJob
 org.apache.ignite.internal.visor.cache.VisorCacheLoadTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheMetadataTask
 org.apache.ignite.internal.visor.cache.VisorCacheMetadataTask$VisorCacheMetadataJob
+org.apache.ignite.internal.visor.cache.VisorCacheMetadataTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheMetrics
 org.apache.ignite.internal.visor.cache.VisorCacheMetricsCollectorTask
 org.apache.ignite.internal.visor.cache.VisorCacheMetricsCollectorTask$VisorCacheMetricsCollectorJob
@@ -1717,6 +1721,7 @@ org.apache.ignite.internal.visor.cache.VisorCacheMetricsCollectorTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheNearConfiguration
 org.apache.ignite.internal.visor.cache.VisorCacheNodesTask
 org.apache.ignite.internal.visor.cache.VisorCacheNodesTask$VisorCacheNodesJob
+org.apache.ignite.internal.visor.cache.VisorCacheNodesTaskArg
 org.apache.ignite.internal.visor.cache.VisorCachePartitions
 org.apache.ignite.internal.visor.cache.VisorCachePartitionsTask
 org.apache.ignite.internal.visor.cache.VisorCachePartitionsTask$VisorCachePartitionsJob
@@ -1724,20 +1729,23 @@ org.apache.ignite.internal.visor.cache.VisorCachePartitionsTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheRebalanceConfiguration
 org.apache.ignite.internal.visor.cache.VisorCacheRebalanceTask
 org.apache.ignite.internal.visor.cache.VisorCacheRebalanceTask$VisorCachesRebalanceJob
+org.apache.ignite.internal.visor.cache.VisorCacheRebalanceTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTask
 org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTask$VisorCacheResetMetricsJob
+org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheSqlIndexMetadata
 org.apache.ignite.internal.visor.cache.VisorCacheSqlMetadata
-org.apache.ignite.internal.visor.cache.VisorCacheStartArg
 org.apache.ignite.internal.visor.cache.VisorCacheStartTask
 org.apache.ignite.internal.visor.cache.VisorCacheStartTask$VisorCacheStartJob
 org.apache.ignite.internal.visor.cache.VisorCacheStartTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheStopTask
 org.apache.ignite.internal.visor.cache.VisorCacheStopTask$VisorCacheStopJob
+org.apache.ignite.internal.visor.cache.VisorCacheStopTaskArg
 org.apache.ignite.internal.visor.cache.VisorCacheStoreConfiguration
 org.apache.ignite.internal.visor.cache.VisorPartitionMap
 org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTask
 org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTask$VisorComputeCancelSessionsJob
+org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTaskArg
 org.apache.ignite.internal.visor.compute.VisorComputeResetMetricsTask
 org.apache.ignite.internal.visor.compute.VisorComputeResetMetricsTask$VisorComputeResetMetricsJob
 org.apache.ignite.internal.visor.compute.VisorComputeToggleMonitoringTask
@@ -1759,7 +1767,6 @@ org.apache.ignite.internal.visor.event.VisorGridEventsLost
 org.apache.ignite.internal.visor.event.VisorGridJobEvent
 org.apache.ignite.internal.visor.event.VisorGridTaskEvent
 org.apache.ignite.internal.visor.file.VisorFileBlock
-org.apache.ignite.internal.visor.file.VisorFileBlockArg
 org.apache.ignite.internal.visor.file.VisorFileBlockTask
 org.apache.ignite.internal.visor.file.VisorFileBlockTask$VisorFileBlockJob
 org.apache.ignite.internal.visor.file.VisorFileBlockTaskArg
@@ -1770,21 +1777,24 @@ org.apache.ignite.internal.visor.igfs.VisorIgfs
 org.apache.ignite.internal.visor.igfs.VisorIgfsEndpoint
 org.apache.ignite.internal.visor.igfs.VisorIgfsFormatTask
 org.apache.ignite.internal.visor.igfs.VisorIgfsFormatTask$VisorIgfsFormatJob
+org.apache.ignite.internal.visor.igfs.VisorIgfsFormatTaskArg
 org.apache.ignite.internal.visor.igfs.VisorIgfsMetrics
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTask
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTask$VisorIgfsProfilerClearJob
+org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTaskArg
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTaskResult
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerEntry
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerTask
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerTask$VisorIgfsProfilerJob
+org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerTaskArg
 org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerUniformityCounters
 org.apache.ignite.internal.visor.igfs.VisorIgfsResetMetricsTask
 org.apache.ignite.internal.visor.igfs.VisorIgfsResetMetricsTask$VisorIgfsResetMetricsJob
+org.apache.ignite.internal.visor.igfs.VisorIgfsResetMetricsTaskArg
 org.apache.ignite.internal.visor.igfs.VisorIgfsSamplingStateTask
 org.apache.ignite.internal.visor.igfs.VisorIgfsSamplingStateTask$VisorIgfsSamplingStateJob
 org.apache.ignite.internal.visor.igfs.VisorIgfsSamplingStateTaskArg
 org.apache.ignite.internal.visor.log.VisorLogFile
-org.apache.ignite.internal.visor.log.VisorLogSearchArg
 org.apache.ignite.internal.visor.log.VisorLogSearchResult
 org.apache.ignite.internal.visor.log.VisorLogSearchTask
 org.apache.ignite.internal.visor.log.VisorLogSearchTask$VisorLogSearchJob
@@ -1792,8 +1802,10 @@ org.apache.ignite.internal.visor.log.VisorLogSearchTaskArg
 org.apache.ignite.internal.visor.log.VisorLogSearchTaskResult
 org.apache.ignite.internal.visor.misc.VisorAckTask
 org.apache.ignite.internal.visor.misc.VisorAckTask$VisorAckJob
+org.apache.ignite.internal.visor.misc.VisorAckTaskArg
 org.apache.ignite.internal.visor.misc.VisorChangeGridActiveStateTask
 org.apache.ignite.internal.visor.misc.VisorChangeGridActiveStateTask$VisorChangeGridActiveStateJob
+org.apache.ignite.internal.visor.misc.VisorChangeGridActiveStateTaskArg
 org.apache.ignite.internal.visor.misc.VisorLatestVersionTask
 org.apache.ignite.internal.visor.misc.VisorLatestVersionTask$VisorLatestVersionJob
 org.apache.ignite.internal.visor.misc.VisorNopTask
@@ -1802,8 +1814,13 @@ org.apache.ignite.internal.visor.misc.VisorResolveHostNameTask
 org.apache.ignite.internal.visor.misc.VisorResolveHostNameTask$VisorResolveHostNameJob
 org.apache.ignite.internal.visor.node.VisorAtomicConfiguration
 org.apache.ignite.internal.visor.node.VisorBasicConfiguration
+org.apache.ignite.internal.visor.node.VisorBinaryConfiguration
+org.apache.ignite.internal.visor.node.VisorBinaryTypeConfiguration
+org.apache.ignite.internal.visor.node.VisorCacheKeyConfiguration
+org.apache.ignite.internal.visor.node.VisorExecutorConfiguration
 org.apache.ignite.internal.visor.node.VisorExecutorServiceConfiguration
 org.apache.ignite.internal.visor.node.VisorGridConfiguration
+org.apache.ignite.internal.visor.node.VisorHadoopConfiguration
 org.apache.ignite.internal.visor.node.VisorIgfsConfiguration
 org.apache.ignite.internal.visor.node.VisorLifecycleConfiguration
 org.apache.ignite.internal.visor.node.VisorMemoryConfiguration
@@ -1825,6 +1842,7 @@ org.apache.ignite.internal.visor.node.VisorNodeGcTask$VisorNodeGcJob
 org.apache.ignite.internal.visor.node.VisorNodeGcTaskResult
 org.apache.ignite.internal.visor.node.VisorNodePingTask
 org.apache.ignite.internal.visor.node.VisorNodePingTask$VisorNodePingJob
+org.apache.ignite.internal.visor.node.VisorNodePingTaskArg
 org.apache.ignite.internal.visor.node.VisorNodePingTaskResult
 org.apache.ignite.internal.visor.node.VisorNodeRestartTask
 org.apache.ignite.internal.visor.node.VisorNodeRestartTask$VisorNodesRestartJob
@@ -1833,22 +1851,27 @@ org.apache.ignite.internal.visor.node.VisorNodeStopTask$VisorNodesStopJob
 org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrors
 org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrorsTask
 org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrorsTask$VisorNodeSuppressedErrorsJob
+org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrorsTaskArg
+org.apache.ignite.internal.visor.node.VisorOdbcConfiguration
 org.apache.ignite.internal.visor.node.VisorPeerToPeerConfiguration
 org.apache.ignite.internal.visor.node.VisorRestConfiguration
 org.apache.ignite.internal.visor.node.VisorSegmentationConfiguration
+org.apache.ignite.internal.visor.node.VisorServiceConfiguration
 org.apache.ignite.internal.visor.node.VisorSpiDescription
 org.apache.ignite.internal.visor.node.VisorSpisConfiguration
 org.apache.ignite.internal.visor.node.VisorSuppressedError
 org.apache.ignite.internal.visor.node.VisorTransactionConfiguration
-org.apache.ignite.internal.visor.query.VisorQueryArg
 org.apache.ignite.internal.visor.query.VisorQueryCancelTask
 org.apache.ignite.internal.visor.query.VisorQueryCancelTask$VisorCancelQueriesJob
+org.apache.ignite.internal.visor.query.VisorQueryCancelTaskArg
 org.apache.ignite.internal.visor.query.VisorQueryCleanupTask
 org.apache.ignite.internal.visor.query.VisorQueryCleanupTask$VisorQueryCleanupJob
+org.apache.ignite.internal.visor.query.VisorQueryCleanupTaskArg
 org.apache.ignite.internal.visor.query.VisorQueryConfiguration
 org.apache.ignite.internal.visor.query.VisorQueryDetailMetrics
 org.apache.ignite.internal.visor.query.VisorQueryDetailMetricsCollectorTask
 org.apache.ignite.internal.visor.query.VisorQueryDetailMetricsCollectorTask$VisorCacheQueryDetailMetricsCollectorJob
+org.apache.ignite.internal.visor.query.VisorQueryDetailMetricsCollectorTaskArg
 org.apache.ignite.internal.visor.query.VisorQueryEntity
 org.apache.ignite.internal.visor.query.VisorQueryField
 org.apache.ignite.internal.visor.query.VisorQueryIndex
@@ -1861,6 +1884,7 @@ org.apache.ignite.internal.visor.query.VisorQueryResetDetailMetricsTask
 org.apache.ignite.internal.visor.query.VisorQueryResetDetailMetricsTask$VisorCacheResetQueryDetailMetricsJob
 org.apache.ignite.internal.visor.query.VisorQueryResetMetricsTask
 org.apache.ignite.internal.visor.query.VisorQueryResetMetricsTask$VisorQueryResetMetricsJob
+org.apache.ignite.internal.visor.query.VisorQueryResetMetricsTaskArg
 org.apache.ignite.internal.visor.query.VisorQueryResult
 org.apache.ignite.internal.visor.query.VisorQueryScanRegexFilter
 org.apache.ignite.internal.visor.query.VisorQueryTask
@@ -1868,13 +1892,14 @@ org.apache.ignite.internal.visor.query.VisorQueryTask$VisorQueryJob
 org.apache.ignite.internal.visor.query.VisorQueryTaskArg
 org.apache.ignite.internal.visor.query.VisorRunningQueriesCollectorTask
 org.apache.ignite.internal.visor.query.VisorRunningQueriesCollectorTask$VisorCollectRunningQueriesJob
+org.apache.ignite.internal.visor.query.VisorRunningQueriesCollectorTaskArg
 org.apache.ignite.internal.visor.query.VisorRunningQuery
-org.apache.ignite.internal.visor.query.VisorScanQueryArg
 org.apache.ignite.internal.visor.query.VisorScanQueryTask
 org.apache.ignite.internal.visor.query.VisorScanQueryTask$VisorScanQueryJob
 org.apache.ignite.internal.visor.query.VisorScanQueryTaskArg
 org.apache.ignite.internal.visor.service.VisorCancelServiceTask
 org.apache.ignite.internal.visor.service.VisorCancelServiceTask$VisorCancelServiceJob
+org.apache.ignite.internal.visor.service.VisorCancelServiceTaskArg
 org.apache.ignite.internal.visor.service.VisorServiceDescriptor
 org.apache.ignite.internal.visor.service.VisorServiceTask
 org.apache.ignite.internal.visor.service.VisorServiceTask$VisorServiceJob
@@ -1972,11 +1997,11 @@ org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDiscardMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryDuplicateIdMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeRequest
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryHandshakeResponse
+org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryJoinRequestMessage
+org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryLoopbackProblemMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$MetricsSet
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryMetricsUpdateMessage$MetricsSet$1
-org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryJoinRequestMessage
-org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryLoopbackProblemMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddFinishedMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeAddedMessage
 org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryNodeFailedMessage

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryConfigurationCustomSerializerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryConfigurationCustomSerializerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryConfigurationCustomSerializerSelfTest.java
index 1da2967..cedbbaf 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryConfigurationCustomSerializerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryConfigurationCustomSerializerSelfTest.java
@@ -36,6 +36,7 @@ import org.apache.ignite.internal.client.GridClientProtocol;
 import org.apache.ignite.internal.client.balancer.GridClientRoundRobinBalancer;
 import org.apache.ignite.internal.visor.VisorTaskArgument;
 import org.apache.ignite.internal.visor.node.VisorNodePingTask;
+import org.apache.ignite.internal.visor.node.VisorNodePingTaskArg;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
 /**
@@ -100,7 +101,8 @@ public class BinaryConfigurationCustomSerializerSelfTest extends GridCommonAbstr
         GridClient client = GridClientFactory.start(clnCfg);
 
         // Execute some task.
-        client.compute().execute(VisorNodePingTask.class.getName(), new VisorTaskArgument<>(nid, nid, false));
+        client.compute().execute(VisorNodePingTask.class.getName(),
+            new VisorTaskArgument<>(nid, new VisorNodePingTaskArg(nid), false));
 
         GridClientFactory.stop(client.id(), false);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/test/java/org/apache/ignite/spi/loadbalancing/internal/GridInternalTasksLoadBalancingSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/loadbalancing/internal/GridInternalTasksLoadBalancingSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/loadbalancing/internal/GridInternalTasksLoadBalancingSelfTest.java
index f9d74b4..26f4a3b 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/loadbalancing/internal/GridInternalTasksLoadBalancingSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/loadbalancing/internal/GridInternalTasksLoadBalancingSelfTest.java
@@ -34,6 +34,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.visor.VisorTaskArgument;
 import org.apache.ignite.internal.visor.node.VisorNodePingTask;
+import org.apache.ignite.internal.visor.node.VisorNodePingTaskArg;
 import org.apache.ignite.internal.visor.node.VisorNodePingTaskResult;
 import org.apache.ignite.spi.IgniteSpiAdapter;
 import org.apache.ignite.spi.IgniteSpiException;
@@ -93,7 +94,8 @@ public class GridInternalTasksLoadBalancingSelfTest extends GridCommonAbstractTe
         UUID nid = ignite.cluster().localNode().id();
 
         VisorNodePingTaskResult ping = ignite.compute()
-            .execute(VisorNodePingTask.class.getName(), new VisorTaskArgument<>(nid, nid, false));
+            .execute(VisorNodePingTask.class.getName(),
+                new VisorTaskArgument<>(nid, new VisorNodePingTaskArg(nid), false));
 
         assertTrue(ping.isAlive());
 
@@ -123,7 +125,8 @@ public class GridInternalTasksLoadBalancingSelfTest extends GridCommonAbstractTe
         UUID nid = ignite.cluster().localNode().id();
 
         VisorNodePingTaskResult ping = ignite.compute()
-            .execute(VisorNodePingTask.class.getName(), new VisorTaskArgument<>(nid, nid, false));
+            .execute(VisorNodePingTask.class.getName(),
+                new VisorTaskArgument<>(nid, new VisorNodePingTaskArg(nid), false));
 
         assertTrue(ping.isAlive());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
index 2e3659d..13c343a 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/ack/VisorAckCommand.scala
@@ -22,8 +22,7 @@ import org.apache.ignite.internal.util.scala.impl
 import org.apache.ignite.visor.VisorTag
 import org.apache.ignite.visor.commands.common.VisorConsoleCommand
 import org.apache.ignite.visor.visor._
-
-import org.apache.ignite.internal.visor.misc.VisorAckTask
+import org.apache.ignite.internal.visor.misc.{VisorAckTask, VisorAckTaskArg}
 
 import scala.language.implicitConversions
 
@@ -93,7 +92,7 @@ class VisorAckCommand extends VisorConsoleCommand {
             adviseToConnect()
         else
             try {
-                executeMulti(classOf[VisorAckTask], msg)
+                executeMulti(classOf[VisorAckTask], new VisorAckTaskArg(msg))
             }
             catch {
                 case _: ClusterGroupEmptyException => scold("Topology is empty.")

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommand.scala
index 517028a..96d0a86 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommand.scala
@@ -20,8 +20,7 @@ package org.apache.ignite.visor.commands.cache
 import org.apache.ignite.cluster.{ClusterGroupEmptyException, ClusterNode}
 import org.apache.ignite.visor.commands.common.VisorTextTable
 import org.apache.ignite.visor.visor._
-
-import org.apache.ignite.internal.visor.cache.VisorCacheClearTask
+import org.apache.ignite.internal.visor.cache.{VisorCacheClearTask, VisorCacheClearTaskArg}
 import org.apache.ignite.internal.visor.util.VisorTaskUtils._
 
 import scala.language.reflectiveCalls
@@ -103,7 +102,7 @@ class VisorCacheClearCommand {
 
             t #= ("Node ID8(@)", "Cache Size Before", "Cache Size After")
 
-            val res = executeOne(nid, classOf[VisorCacheClearTask], cacheName)
+            val res = executeOne(nid, classOf[VisorCacheClearTask], new VisorCacheClearTaskArg(cacheName))
 
             t += (nodeId8(nid), res.getSizeBefore, res.getSizeAfter)
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheResetCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheResetCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheResetCommand.scala
index b59155b..4c4d21b 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheResetCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheResetCommand.scala
@@ -18,7 +18,7 @@
 package org.apache.ignite.visor.commands.cache
 
 import org.apache.ignite.cluster.{ClusterGroupEmptyException, ClusterNode}
-import org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTask
+import org.apache.ignite.internal.visor.cache.{VisorCacheResetMetricsTask, VisorCacheResetMetricsTaskArg}
 import org.apache.ignite.internal.visor.util.VisorTaskUtils._
 import org.apache.ignite.visor.visor._
 
@@ -104,7 +104,7 @@ class VisorCacheResetCommand {
         }
 
         try {
-            executeRandom(grp, classOf[VisorCacheResetMetricsTask], cacheName)
+            executeRandom(grp, classOf[VisorCacheResetMetricsTask], new VisorCacheResetMetricsTaskArg(cacheName))
 
             println("Visor successfully reset metrics for cache: " + escapeName(cacheName))
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheStopCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheStopCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheStopCommand.scala
index 22fb89d..185b452 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheStopCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/cache/VisorCacheStopCommand.scala
@@ -19,7 +19,7 @@ package org.apache.ignite.visor.commands.cache
 
 import org.apache.ignite.cluster.{ClusterGroupEmptyException, ClusterNode}
 import org.apache.ignite.visor.visor._
-import org.apache.ignite.internal.visor.cache.VisorCacheStopTask
+import org.apache.ignite.internal.visor.cache.{VisorCacheStopTask, VisorCacheStopTaskArg}
 import org.apache.ignite.internal.visor.util.VisorTaskUtils._
 
 /**
@@ -106,7 +106,7 @@ class VisorCacheStopCommand {
         ask(s"Are you sure you want to stop cache: ${escapeName(cacheName)}? (y/n) [$dflt]: ", dflt) match {
             case "y" | "Y" =>
                 try {
-                    executeRandom(grp, classOf[VisorCacheStopTask], cacheName)
+                    executeRandom(grp, classOf[VisorCacheStopTask], new VisorCacheStopTaskArg(cacheName))
 
                     println("Visor successfully stop cache: " + escapeName(cacheName))
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
index 75c34ab..299c300 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
@@ -162,7 +162,7 @@ class VisorConfigurationCommand extends VisorConsoleCommand {
         cmnT += ("Grid name", escapeName(basic.getIgniteInstanceName))
         cmnT += ("Ignite home", safe(basic.getGgHome))
         cmnT += ("Localhost", safe(basic.getLocalHost))
-        cmnT += ("Node ID", safe(basic.getNodeId))
+        cmnT += ("Consistent ID", safe(basic.getConsistentId))
         cmnT += ("Marshaller", basic.getMarshaller)
         cmnT += ("Deployment mode", safe(basic.getDeploymentMode))
         cmnT += ("ClientMode", javaBoolToStr(basic.isClientMode))

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
index e1dd14e..87ca5b1 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/visor.scala
@@ -272,7 +272,8 @@ object visor extends VisorTag {
     def groupForDataNode(node: Option[ClusterNode], cacheName: String) = {
         val grp = node match {
             case Some(n) => ignite.cluster.forNode(n)
-            case None => ignite.cluster.forNodeIds(executeRandom(classOf[VisorCacheNodesTask], cacheName))
+            case None => ignite.cluster.forNodeIds(executeRandom(classOf[VisorCacheNodesTask],
+                new VisorCacheNodesTaskArg(cacheName)))
         }
 
         if (grp.nodes().isEmpty)
@@ -1832,7 +1833,7 @@ object visor extends VisorTag {
     @throws[ClusterGroupEmptyException]("In case of empty topology.")
     def cacheConfigurations(nid: UUID): JavaCollection[VisorCacheConfiguration] =
         executeOne(nid, classOf[VisorCacheConfigurationCollectorTask],
-            null.asInstanceOf[JavaCollection[IgniteUuid]]).values()
+            new VisorCacheConfigurationCollectorTaskArg(null.asInstanceOf[JavaCollection[IgniteUuid]])).values()
 
     /**
      * Asks user to select a node from the list.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/backend/app/browsersHandler.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/app/browsersHandler.js b/modules/web-console/backend/app/browsersHandler.js
index d77d9ce..9f31046 100644
--- a/modules/web-console/backend/app/browsersHandler.js
+++ b/modules/web-console/backend/app/browsersHandler.js
@@ -202,8 +202,7 @@ module.exports.factory = (_, socketio, configure, errors) => {
             this.registerVisorTask('querySql', internalVisor('query.VisorQueryTask'), internalVisor('query.VisorQueryTaskArg'));
             this.registerVisorTask('queryScan', internalVisor('query.VisorScanQueryTask'), internalVisor('query.VisorScanQueryTaskArg'));
             this.registerVisorTask('queryFetch', internalVisor('query.VisorQueryNextPageTask'), internalVisor('query.VisorQueryNextPageTaskArg'));
-            this.registerVisorTask('queryClose', internalVisor('query.VisorQueryCleanupTask'),
-                'java.util.Map', 'java.util.UUID', 'java.util.Set');
+            this.registerVisorTask('queryClose', internalVisor('query.VisorQueryCleanupTask'), internalVisor('query.VisorQueryCleanupTaskArg'));
 
             // Return command result from grid to browser.
             sock.on('node:visor', (clusterId, taskId, nids, ...args) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/backend/app/mongo.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/app/mongo.js b/modules/web-console/backend/app/mongo.js
index 3038ad2..c68e4f8 100644
--- a/modules/web-console/backend/app/mongo.js
+++ b/modules/web-console/backend/app/mongo.js
@@ -390,9 +390,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
             networkTimeout: Number,
             joinTimeout: Number,
             threadPriority: Number,
-            heartbeatFrequency: Number,
-            maxMissedHeartbeats: Number,
-            maxMissedClientHeartbeats: Number,
+            metricsUpdateFrequency: Number,
             topHistorySize: Number,
             listener: String,
             dataExchange: String,

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
index 3b39463..4c388f1 100644
--- a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
+++ b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
@@ -470,7 +470,8 @@ export default class IgniteAgentManager {
      * @returns {Promise}
      */
     queryClose(nid, queryId) {
-        return this.visorTask('queryClose', nid, queryId);
+        return this.visorTask('queryClose', nid, 'java.util.Map', 'java.util.UUID', 'java.util.Collection',
+            nid + '=' + queryId);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
index a76d486..434a4b4 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -158,7 +158,7 @@ export default class IgniteConfigurationGenerator {
         if (client)
             cfg.prop('boolean', 'clientMode', true);
 
-        cfg.stringProperty('name', 'gridName')
+        cfg.stringProperty('name', 'igniteInstanceName')
             .stringProperty('localHost');
 
         if (_.isNil(cluster.discovery))
@@ -906,6 +906,8 @@ export default class IgniteConfigurationGenerator {
 
     // Generate discovery group.
     static clusterDiscovery(discovery, cfg = this.igniteConfigurationBean(), discoSpi = this.discoveryConfigurationBean(discovery)) {
+        // TODO IGNITE-4988 cfg.intProperty('metricsUpdateFrequency')
+
         discoSpi.stringProperty('localAddress')
             .intProperty('localPort')
             .intProperty('localPortRange')
@@ -916,9 +918,6 @@ export default class IgniteConfigurationGenerator {
             .intProperty('networkTimeout')
             .intProperty('joinTimeout')
             .intProperty('threadPriority')
-            .intProperty('heartbeatFrequency')
-            .intProperty('maxMissedHeartbeats')
-            .intProperty('maxMissedClientHeartbeats')
             .intProperty('topHistorySize')
             .emptyBeanProperty('listener')
             .emptyBeanProperty('dataExchange')

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
index 807303d..233ecb2 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/PlatformGenerator.js
@@ -184,6 +184,8 @@ export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatfo
         // Generate discovery group.
         static clusterDiscovery(discovery, cfg = this.igniteConfigurationBean()) {
             if (discovery) {
+                // TODO IGNITE-4988 cfg.intProperty('metricsUpdateFrequency')
+
                 let discoveryCfg = cfg.findProperty('discovery');
 
                 if (_.isNil(discoveryCfg)) {
@@ -200,9 +202,6 @@ export default ['JavaTypes', 'igniteClusterPlatformDefaults', 'igniteCachePlatfo
                     .intProperty('networkTimeout')
                     .intProperty('joinTimeout')
                     .intProperty('threadPriority')
-                    .intProperty('heartbeatFrequency')
-                    .intProperty('maxMissedHeartbeats')
-                    .intProperty('maxMissedClientHeartbeats')
                     .intProperty('topHistorySize')
                     .intProperty('reconnectCount')
                     .intProperty('statisticsPrintFrequency')

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cluster.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cluster.service.js b/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cluster.service.js
index 60f52a6..5ed90c5 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cluster.service.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/defaults/Cluster.service.js
@@ -26,9 +26,7 @@ const DFLT_CLUSTER = {
         networkTimeout: 5000,
         joinTimeout: 0,
         threadPriority: 10,
-        heartbeatFrequency: 2000,
-        maxMissedHeartbeats: 1,
-        maxMissedClientHeartbeats: 5,
+        metricsUpdateFrequency: 2000,
         topHistorySize: 1000,
         reconnectCount: 10,
         statisticsPrintFrequency: 0,

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/sql/sql.controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/sql/sql.controller.js b/modules/web-console/frontend/app/modules/sql/sql.controller.js
index bb94b0c..b3ca91b 100644
--- a/modules/web-console/frontend/app/modules/sql/sql.controller.js
+++ b/modules/web-console/frontend/app/modules/sql/sql.controller.js
@@ -1303,7 +1303,7 @@ export default ['$rootScope', '$scope', '$http', '$q', '$timeout', '$interval',
         const _closeOldQuery = (paragraph) => {
             const nid = paragraph.resNodeId;
 
-            if (paragraph.queryId && _.find($scope.caches, ({nodes}) => _.includes(nodes, nid)))
+            if (paragraph.queryId && _.find($scope.caches, ({nodes}) => _.find(nodes, {nid: nid.toUpperCase()})))
                 return agentMgr.queryClose(nid, paragraph.queryId);
 
             return $q.when();

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug
index af9d875..71d9974 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/discovery.pug
@@ -56,13 +56,7 @@ include /app/helpers/jade/mixins
                 .settings-row
                     +number('Thread priority:', `${model}.threadPriority`, '"threadPriority"', 'true', '10', '1', 'Thread priority for all threads started by SPI')
                 .settings-row
-                    +number('Heartbeat frequency:', `${model}.heartbeatFrequency`, '"heartbeatFrequency"', 'true', '2000', '1', 'Heartbeat messages issuing frequency')
-                .settings-row
-                    +number('Max heartbeats miss w/o init:', `${model}.maxMissedHeartbeats`, '"maxMissedHeartbeats"', 'true', '1', '1',
-                        'Max heartbeats count node can miss without initiating status check')
-                .settings-row
-                    +number('Max missed client heartbeats:', `${model}.maxMissedClientHeartbeats`, '"maxMissedClientHeartbeats"', 'true', '5', '1',
-                        'Max heartbeats count node can miss without failing client node')
+                    +number('Metrics update frequency:', `${model}.metricsUpdateFrequency`, '"metricsUpdateFrequency"', 'true', '2000', '1', 'Metrics update messages issuing frequency')
                 .settings-row
                     +number('Topology history:', `${model}.topHistorySize`, '"topHistorySize"', 'true', '1000', '0', 'Size of topology snapshots history')
                 .settings-row


[3/4] ignite git commit: IGNITE-4988 Rework Visor task arguments. Code cleanup for ignite-2.0.

Posted by ak...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 f90ddbd..9f7c018 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
@@ -27,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task that stop specified caches on specified node.
  */
 @GridInternal
-public class VisorCacheStopTask extends VisorOneNodeTask<String, Void> {
+public class VisorCacheStopTask extends VisorOneNodeTask<VisorCacheStopTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheStopJob job(String arg) {
+    @Override protected VisorCacheStopJob job(VisorCacheStopTaskArg arg) {
         return new VisorCacheStopJob(arg, debug);
     }
 
     /**
      * Job that stop specified caches.
      */
-    private static class VisorCacheStopJob extends VisorJob<String, Void> {
+    private static class VisorCacheStopJob extends VisorJob<VisorCacheStopTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -49,14 +49,19 @@ public class VisorCacheStopTask extends VisorOneNodeTask<String, Void> {
          * @param cacheName Cache name to clear.
          * @param debug Debug flag.
          */
-        private VisorCacheStopJob(String cacheName, boolean debug) {
+        private VisorCacheStopJob(VisorCacheStopTaskArg cacheName, boolean debug) {
             super(cacheName, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(String cacheName) {
+        @Override protected Void run(VisorCacheStopTaskArg arg) {
+            String cacheName = arg.getCacheName();
+
             IgniteCache cache = ignite.cache(cacheName);
 
+            if (cache == null)
+                throw new IllegalStateException("Failed to find cache for name: " + cacheName);
+
             cache.destroy();
 
             return null;
@@ -67,4 +72,4 @@ public class VisorCacheStopTask extends VisorOneNodeTask<String, Void> {
             return S.toString(VisorCacheStopJob.class, this);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTaskArg.java
new file mode 100644
index 0000000..4976036
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStopTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheStopTask}.
+ */
+public class VisorCacheStopTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheStopTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorCacheStopTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheStopTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStoreConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStoreConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStoreConfiguration.java
index dc1ba2a..1c0c6b8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStoreConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStoreConfiguration.java
@@ -72,6 +72,9 @@ public class VisorCacheStoreConfiguration extends VisorDataTransferObject {
     /** Keep binary in store flag. */
     private boolean storeKeepBinary;
 
+    /** Write coalescing flag for write-behind cache store */
+    private boolean writeBehindCoalescing;
+
     /**
      * Default constructor.
      */
@@ -105,6 +108,8 @@ public class VisorCacheStoreConfiguration extends VisorDataTransferObject {
         flushThreadCnt = ccfg.getWriteBehindFlushThreadCount();
 
         storeKeepBinary = ccfg.isStoreKeepBinary();
+
+        writeBehindCoalescing = ccfg.getWriteBehindCoalescing();
     }
 
     /**
@@ -191,6 +196,13 @@ public class VisorCacheStoreConfiguration extends VisorDataTransferObject {
         return storeKeepBinary;
     }
 
+    /**
+     * @return Write coalescing flag.
+     */
+    public boolean getWriteBehindCoalescing() {
+        return writeBehindCoalescing;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeBoolean(jdbcStore);
@@ -204,6 +216,7 @@ public class VisorCacheStoreConfiguration extends VisorDataTransferObject {
         out.writeInt(flushSz);
         out.writeInt(flushThreadCnt);
         out.writeBoolean(storeKeepBinary);
+        out.writeBoolean(writeBehindCoalescing);
     }
 
     /** {@inheritDoc} */
@@ -219,6 +232,7 @@ public class VisorCacheStoreConfiguration extends VisorDataTransferObject {
         flushSz = in.readInt();
         flushThreadCnt = in.readInt();
         storeKeepBinary = in.readBoolean();
+        writeBehindCoalescing = in.readBoolean();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorPartitionMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorPartitionMap.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorPartitionMap.java
index f263db5..cadad0c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorPartitionMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorPartitionMap.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.cache;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.HashMap;
 import java.util.Map;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtPartitionState;
 import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
@@ -75,12 +76,31 @@ public class VisorPartitionMap extends VisorDataTransferObject {
 
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        U.writeIntKeyMap(out, parts);
+        if (parts != null) {
+            out.writeInt(parts.size());
+
+            for (Map.Entry<Integer, GridDhtPartitionState> e : parts.entrySet()) {
+                out.writeInt(e.getKey());
+                U.writeEnum(out, e.getValue());
+            }
+        }
+        else
+            out.writeInt(-1);
     }
 
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        parts = U.readIntKeyMap(in);
+        int size = in.readInt();
+
+        // Check null flag.
+        if (size == -1)
+            parts = null;
+        else {
+            parts = new HashMap<>(size, 1.0f);
+
+            for (int i = 0; i < size; i++)
+                parts.put(in.readInt(), GridDhtPartitionState.fromOrdinal(in.readByte()));
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 4ee025d..f28d988 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
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.visor.compute;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 import org.apache.ignite.IgniteCompute;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskFuture;
@@ -35,12 +34,12 @@ import org.jetbrains.annotations.Nullable;
  * Cancels given tasks sessions.
  */
 @GridInternal
-public class VisorComputeCancelSessionsTask extends VisorMultiNodeTask<Map<UUID, Set<IgniteUuid>>, Void, Void> {
+public class VisorComputeCancelSessionsTask extends VisorMultiNodeTask<VisorComputeCancelSessionsTaskArg, Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorComputeCancelSessionsJob job(Map<UUID, Set<IgniteUuid>> arg) {
+    @Override protected VisorComputeCancelSessionsJob job(VisorComputeCancelSessionsTaskArg arg) {
         return new VisorComputeCancelSessionsJob(arg, debug);
     }
 
@@ -53,7 +52,7 @@ public class VisorComputeCancelSessionsTask extends VisorMultiNodeTask<Map<UUID,
     /**
      * Job that cancel tasks.
      */
-    private static class VisorComputeCancelSessionsJob extends VisorJob<Map<UUID, Set<IgniteUuid>>, Void> {
+    private static class VisorComputeCancelSessionsJob extends VisorJob<VisorComputeCancelSessionsTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -61,13 +60,13 @@ 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, boolean debug) {
+        private VisorComputeCancelSessionsJob(VisorComputeCancelSessionsTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(Map<UUID, Set<IgniteUuid>> arg) {
-            Set<IgniteUuid> sesIds = arg.get(ignite.localNode().id());
+        @Override protected Void run(VisorComputeCancelSessionsTaskArg arg) {
+            Set<IgniteUuid> sesIds = arg.getSessionIds().get(ignite.localNode().id());
 
             if (sesIds != null && !sesIds.isEmpty()) {
                 IgniteCompute compute = ignite.compute(ignite.cluster().forLocal());

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTaskArg.java
new file mode 100644
index 0000000..28b7953
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorComputeCancelSessionsTaskArg.java
@@ -0,0 +1,76 @@
+/*
+ * 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.visor.compute;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+import org.apache.ignite.lang.IgniteUuid;
+
+/**
+ * Arguments for task {@link VisorComputeCancelSessionsTask}
+ */
+public class VisorComputeCancelSessionsTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Session IDs to cancel. */
+    private Map<UUID, Set<IgniteUuid>> sesIds;
+
+    /**
+     * Default constructor.
+     */
+    public VisorComputeCancelSessionsTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param sesIds Session IDs to cancel.
+     */
+    public VisorComputeCancelSessionsTaskArg(Map<UUID, Set<IgniteUuid>> sesIds) {
+        this.sesIds = sesIds;
+    }
+
+    /**
+     * @return Session IDs to cancel.
+     */
+    public Map<UUID, Set<IgniteUuid>> getSessionIds() {
+        return sesIds;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeMap(out, sesIds);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        sesIds = U.readMap(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorComputeCancelSessionsTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorGatewayTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorGatewayTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorGatewayTask.java
index 658d6a1..f1fb79b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorGatewayTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/compute/VisorGatewayTask.java
@@ -63,6 +63,18 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
     /** */
     private static final int JOB_ARG_IDX = 3;
 
+    /** Array with additional length in arguments for specific nested types */
+    private static final Map<Class, Integer> TYPE_ARG_LENGTH = new HashMap<>(4);
+
+    static {
+        TYPE_ARG_LENGTH.put(Collection.class, 2);
+        TYPE_ARG_LENGTH.put(Set.class, 2);
+        TYPE_ARG_LENGTH.put(List.class, 2);
+        TYPE_ARG_LENGTH.put(Map.class, 3);
+        TYPE_ARG_LENGTH.put(IgniteBiTuple.class, 4);
+        TYPE_ARG_LENGTH.put(GridTuple3.class, 6);
+    }
+
     /** Auto-injected grid instance. */
     @IgniteInstanceResource
     protected transient IgniteEx ignite;
@@ -140,16 +152,19 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
          * Construct job argument.
          *
          * @param cls Class.
+         * @param startIdx Index of first value argument.
          */
-        @Nullable private Object toJobArgument(Class cls) throws ClassNotFoundException {
-            String arg = argument(JOB_ARG_IDX);
+        @Nullable private Object toJobArgument(Class cls, int startIdx) throws ClassNotFoundException {
+            String arg = argument(startIdx);
 
-            if (cls == Collection.class || cls == Set.class) {
+            boolean isList = cls == Collection.class || cls == List.class;
+
+            if (isList || cls == Set.class) {
                 Class<?> itemsCls = Class.forName(arg);
 
-                Collection<Object> res = cls == Collection.class ? new ArrayList<>() : new HashSet<>();
+                Collection<Object> res = isList ? new ArrayList<>() : new HashSet<>();
 
-                String items = argument(JOB_ARG_IDX + 1);
+                String items = argument(startIdx + 1);
 
                 if (items != null) {
                     for (String item : items.split(";"))
@@ -162,20 +177,20 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
             if (cls == IgniteBiTuple.class) {
                 Class<?> keyCls = Class.forName(arg);
 
-                String valClsName = argument(JOB_ARG_IDX + 1);
+                String valClsName = argument(startIdx + 1);
 
                 assert valClsName != null;
 
                 Class<?> valCls = Class.forName(valClsName);
 
-                return new IgniteBiTuple<>(toObject(keyCls, (String)argument(JOB_ARG_IDX + 2)),
-                    toObject(valCls, (String)argument(JOB_ARG_IDX + 3)));
+                return new IgniteBiTuple<>(toObject(keyCls, (String)argument(startIdx + 2)),
+                    toObject(valCls, (String)argument(startIdx + 3)));
             }
 
             if (cls == Map.class) {
                 Class<?> keyCls = Class.forName(arg);
 
-                String valClsName = argument(JOB_ARG_IDX + 1);
+                String valClsName = argument(startIdx + 1);
 
                 assert valClsName != null;
 
@@ -183,7 +198,7 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
 
                 Map<Object, Object> res = new HashMap<>();
 
-                String entries = argument(JOB_ARG_IDX + 2);
+                String entries = argument(startIdx + 2);
 
                 if (entries != null) {
                     for (String entry : entries.split(";")) {
@@ -202,8 +217,8 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
             }
 
             if (cls == GridTuple3.class) {
-                String v2ClsName = argument(JOB_ARG_IDX + 1);
-                String v3ClsName = argument(JOB_ARG_IDX + 2);
+                String v2ClsName = argument(startIdx + 1);
+                String v3ClsName = argument(startIdx + 2);
 
                 assert v2ClsName != null;
                 assert v3ClsName != null;
@@ -212,8 +227,8 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
                 Class<?> v2Cls = Class.forName(v2ClsName);
                 Class<?> v3Cls = Class.forName(v3ClsName);
 
-                return new GridTuple3<>(toObject(v1Cls, (String)argument(JOB_ARG_IDX + 3)), toObject(v2Cls,
-                    (String)argument(JOB_ARG_IDX + 4)), toObject(v3Cls, (String)argument(JOB_ARG_IDX + 5)));
+                return new GridTuple3<>(toObject(v1Cls, (String)argument(startIdx + 3)), toObject(v2Cls,
+                    (String)argument(startIdx + 4)), toObject(v3Cls, (String)argument(startIdx + 5)));
             }
 
             return toObject(cls, arg);
@@ -299,6 +314,17 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
                 IgniteUuid.class == cls || IgniteBiTuple.class == cls || GridTuple3.class == cls;
         }
 
+        /**
+         * Extract Class object from arguments.
+         *
+         * @param idx Index of argument.
+         */
+        private Class toClass(int idx) throws ClassNotFoundException {
+            Object arg = argument(idx);  // Workaround generics: extract argument as Object to use in String.valueOf().
+
+            return Class.forName(String.valueOf(arg));
+        }
+
         /** {@inheritDoc} */
         @SuppressWarnings("unchecked")
         @Override public Object execute() throws IgniteException {
@@ -321,20 +347,41 @@ public class VisorGatewayTask implements ComputeTask<Object[], Object> {
                     if (argCls == Void.class)
                         jobArgs = null;
                     else if (isBuildInObject(argCls))
-                        jobArgs = toJobArgument(argCls);
+                        jobArgs = toJobArgument(argCls, JOB_ARG_IDX);
                     else {
                         int beanArgsCnt = argsCnt - JOB_ARG_IDX;
 
                         for (Constructor ctor : argCls.getDeclaredConstructors()) {
                             Class[] types = ctor.getParameterTypes();
 
-                            if (types.length == beanArgsCnt) {
-                                Object[] initArgs = new Object[beanArgsCnt];
+                            int args = types.length;
+
+                            // Length of arguments that required to constructor by influence of nested complex objects.
+                            int needArgs = args;
+
+                            for (Class type: types)
+                                // When constructor required specified types increase length of required arguments.
+                                if (TYPE_ARG_LENGTH.containsKey(type))
+                                    needArgs += TYPE_ARG_LENGTH.get(type);
+
+                            if (needArgs == beanArgsCnt) {
+                                Object[] initArgs = new Object[args];
+
+                                for (int i = 0, ctrIdx = 0; i < beanArgsCnt; i++, ctrIdx++) {
+                                    Class type = types[ctrIdx];
+
+                                    // Parse nested complex objects from arguments for specified types.
+                                    if (TYPE_ARG_LENGTH.containsKey(type)) {
+                                        initArgs[ctrIdx] = toJobArgument(toClass(JOB_ARG_IDX + i), JOB_ARG_IDX + 1 + i);
 
-                                for (int i = 0; i < beanArgsCnt; i++) {
-                                    String val = argument(i + JOB_ARG_IDX);
+                                        i += TYPE_ARG_LENGTH.get(type);
+                                    }
+                                    // In common case convert value to object.
+                                    else {
+                                        String val = argument(JOB_ARG_IDX + i);
 
-                                    initArgs[i] = toObject(types[i], val);
+                                        initArgs[ctrIdx] = toObject(type, val);
+                                    }
                                 }
 
                                 jobArgs = ctor.newInstance(initArgs);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadInfo.java
index 3db4074..f48e6c1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadInfo.java
@@ -42,7 +42,7 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     private String name;
 
     /** Thread ID. */
-    private Long id;
+    private long id;
 
     /** Thread state. */
     private Thread.State state;
@@ -54,28 +54,28 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     private String lockName;
 
     /** Lock owner thread ID. */
-    private Long lockOwnerId;
+    private long lockOwnerId;
 
     /** Lock owner name. */
     private String lockOwnerName;
 
     /** Thread executing native code. */
-    private Boolean inNative;
+    private boolean inNative;
 
     /** Thread is suspended. */
-    private Boolean suspended;
+    private boolean suspended;
 
     /** Waited count. */
-    private Long waitedCnt;
+    private long waitedCnt;
 
     /** Waited time. */
-    private Long waitedTime;
+    private long waitedTime;
 
     /** Blocked count. */
-    private Long blockedCnt;
+    private long blockedCnt;
 
     /** Blocked time. */
-    private Long blockedTime;
+    private long blockedTime;
 
     /** Stack trace. */
     private List<StackTraceElement> stackTrace;
@@ -141,7 +141,7 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     /**
      * @return Thread ID.
      */
-    public Long getId() {
+    public long getId() {
         return id;
     }
 
@@ -169,7 +169,7 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     /**
      * @return Lock owner thread ID.
      */
-    public Long getLockOwnerId() {
+    public long getLockOwnerId() {
         return lockOwnerId;
     }
 
@@ -183,42 +183,42 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     /**
      * @return Thread executing native code.
      */
-    public Boolean isInNative() {
+    public boolean isInNative() {
         return inNative;
     }
 
     /**
      * @return Thread is suspended.
      */
-    public Boolean isSuspended() {
+    public boolean isSuspended() {
         return suspended;
     }
 
     /**
      * @return Waited count.
      */
-    public Long getWaitedCount() {
+    public long getWaitedCount() {
         return waitedCnt;
     }
 
     /**
      * @return Waited time.
      */
-    public Long getWaitedTime() {
+    public long getWaitedTime() {
         return waitedTime;
     }
 
     /**
      * @return Blocked count.
      */
-    public Long getBlockedCount() {
+    public long getBlockedCount() {
         return blockedCnt;
     }
 
     /**
      * @return Blocked time.
      */
-    public Long getBlockedTime() {
+    public long getBlockedTime() {
         return blockedTime;
     }
 
@@ -246,18 +246,18 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
-        out.writeObject(id);
+        out.writeLong(id);
         U.writeString(out, state.toString());
         out.writeObject(lock);
         U.writeString(out, lockName);
-        out.writeObject(lockOwnerId);
+        out.writeLong(lockOwnerId);
         U.writeString(out, lockOwnerName);
-        out.writeObject(inNative);
-        out.writeObject(suspended);
-        out.writeObject(waitedCnt);
-        out.writeObject(waitedTime);
-        out.writeObject(blockedCnt);
-        out.writeObject(blockedTime);
+        out.writeBoolean(inNative);
+        out.writeBoolean(suspended);
+        out.writeLong(waitedCnt);
+        out.writeLong(waitedTime);
+        out.writeLong(blockedCnt);
+        out.writeLong(blockedTime);
         U.writeCollection(out, stackTrace);
         U.writeCollection(out, locks);
         U.writeCollection(out, lockedMonitors);
@@ -266,7 +266,7 @@ public class VisorThreadInfo extends VisorDataTransferObject {
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         name = U.readString(in);
-        id = (Long)in.readObject();
+        id = in.readLong();
 
         String statePresentation = U.readString(in);
 
@@ -275,14 +275,14 @@ public class VisorThreadInfo extends VisorDataTransferObject {
 
         lock = (VisorThreadLockInfo)in.readObject();
         lockName = U.readString(in);
-        lockOwnerId = (Long)in.readObject();
+        lockOwnerId = in.readLong();
         lockOwnerName = U.readString(in);
-        inNative = (Boolean)in.readObject();
-        suspended = (Boolean)in.readObject();
-        waitedCnt = (Long)in.readObject();
-        waitedTime = (Long)in.readObject();
-        blockedCnt = (Long)in.readObject();
-        blockedTime = (Long)in.readObject();
+        inNative = in.readBoolean();
+        suspended = in.readBoolean();
+        waitedCnt = in.readLong();
+        waitedTime = in.readLong();
+        blockedCnt = in.readLong();
+        blockedTime = in.readLong();
         stackTrace = U.readList(in);
         locks = U.readList(in);
         lockedMonitors = U.readList(in);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadMonitorInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadMonitorInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadMonitorInfo.java
index 11e1141..e6171ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadMonitorInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/debug/VisorThreadMonitorInfo.java
@@ -33,7 +33,7 @@ public class VisorThreadMonitorInfo extends VisorThreadLockInfo {
     private static final long serialVersionUID = 0L;
 
     /** Stack depth. */
-    private Integer stackDepth;
+    private int stackDepth;
 
     /** Stack frame. */
     private StackTraceElement stackFrame;
@@ -60,7 +60,7 @@ public class VisorThreadMonitorInfo extends VisorThreadLockInfo {
     /**
      * @return Stack depth.
      */
-    public Integer getStackDepth() {
+    public int getStackDepth() {
         return stackDepth;
     }
 
@@ -83,7 +83,7 @@ public class VisorThreadMonitorInfo extends VisorThreadLockInfo {
             super.writeExternalData(dtout);
         }
 
-        out.writeObject(stackDepth);
+        out.writeInt(stackDepth);
         out.writeObject(stackFrame);
     }
 
@@ -93,7 +93,7 @@ public class VisorThreadMonitorInfo extends VisorThreadLockInfo {
             super.readExternalData(dtin.readByte(), dtin);
         }
 
-        stackDepth = (Integer)in.readObject();
+        stackDepth = in.readInt();
         stackFrame = (StackTraceElement)in.readObject();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/file/VisorFileBlockArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/file/VisorFileBlockArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/file/VisorFileBlockArg.java
deleted file mode 100644
index babb630..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/file/VisorFileBlockArg.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.visor.file;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.internal.visor.VisorDataTransferObject;
-
-/**
- * Arguments for {@link VisorFileBlockTask}
- */
-public class VisorFileBlockArg extends VisorDataTransferObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Log file path. */
-    private String path;
-
-    /** Log file offset. */
-    private long off;
-
-    /** Block size. */
-    private int blockSz;
-
-    /** Log file last modified timestamp. */
-    private long lastModified;
-
-    /**
-     * Default constructor.
-     */
-    public VisorFileBlockArg() {
-        // No-op.
-    }
-
-    /**
-     * @param path Log file path.
-     * @param off Offset in file.
-     * @param blockSz Block size.
-     * @param lastModified Log file last modified timestamp.
-     */
-    public VisorFileBlockArg(String path, long off, int blockSz, long lastModified) {
-        this.path = path;
-        this.off = off;
-        this.blockSz = blockSz;
-        this.lastModified = lastModified;
-    }
-
-    /**
-     * @return Log file path.
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * @return Log file offset.
-     */
-    public long getOffset() {
-        return off;
-    }
-
-    /**
-     * @return Block size
-     */
-    public int getBlockSize() {
-        return blockSz;
-    }
-
-    /**
-     * @return Log file last modified timestamp.
-     */
-    public long getLastModified() {
-        return lastModified;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        U.writeString(out, path);
-        out.writeLong(off);
-        out.writeInt(blockSz);
-        out.writeLong(lastModified);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        path = U.readString(in);
-        off = in.readLong();
-        blockSz = in.readInt();
-        lastModified = in.readLong();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(VisorFileBlockArg.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 3a9f683..0a75416 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
@@ -27,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Format IGFS instance.
  */
 @GridInternal
-public class VisorIgfsFormatTask extends VisorOneNodeTask<String, Void> {
+public class VisorIgfsFormatTask extends VisorOneNodeTask<VisorIgfsFormatTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorIgfsFormatJob job(String arg) {
+    @Override protected VisorIgfsFormatJob job(VisorIgfsFormatTaskArg arg) {
         return new VisorIgfsFormatJob(arg, debug);
     }
 
     /**
      * Job that format IGFS.
      */
-    private static class VisorIgfsFormatJob extends VisorJob<String, Void> {
+    private static class VisorIgfsFormatJob extends VisorJob<VisorIgfsFormatTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -47,17 +47,17 @@ public class VisorIgfsFormatTask extends VisorOneNodeTask<String, Void> {
          * @param arg IGFS name to format.
          * @param debug Debug flag.
          */
-        private VisorIgfsFormatJob(String arg, boolean debug) {
+        private VisorIgfsFormatJob(VisorIgfsFormatTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(String igfsName) {
+        @Override protected Void run(VisorIgfsFormatTaskArg arg) {
             try {
-                ignite.fileSystem(igfsName).clear();
+                ignite.fileSystem(arg.getIgfsName()).clear();
             }
             catch (IllegalArgumentException iae) {
-                throw new IgniteException("Failed to format IGFS: " + igfsName, iae);
+                throw new IgniteException("Failed to format IGFS: " + arg.getIgfsName(), iae);
             }
 
             return null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTaskArg.java
new file mode 100644
index 0000000..b8450cf
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsFormatTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.igfs;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorIgfsFormatTask}.
+ */
+public class VisorIgfsFormatTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** IGFS name. */
+    private String igfsName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorIgfsFormatTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param igfsName IGFS name.
+     */
+    public VisorIgfsFormatTaskArg(String igfsName) {
+        this.igfsName = igfsName;
+    }
+
+    /**
+     * @return IGFS name.
+     */
+    public String getIgfsName() {
+        return igfsName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, igfsName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        igfsName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorIgfsFormatTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 b8bfe9e..c730840 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
@@ -39,14 +39,19 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.resolveIgfsPr
  * Remove all IGFS profiler logs.
  */
 @GridInternal
-public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<String, VisorIgfsProfilerClearTaskResult> {
+public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<VisorIgfsProfilerClearTaskArg, VisorIgfsProfilerClearTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;
 
+    /** {@inheritDoc} */
+    @Override protected VisorIgfsProfilerClearJob job(VisorIgfsProfilerClearTaskArg arg) {
+        return new VisorIgfsProfilerClearJob(arg, debug);
+    }
+
     /**
      * Job to clear profiler logs.
      */
-    private static class VisorIgfsProfilerClearJob extends VisorJob<String, VisorIgfsProfilerClearTaskResult> {
+    private static class VisorIgfsProfilerClearJob extends VisorJob<VisorIgfsProfilerClearTaskArg, VisorIgfsProfilerClearTaskResult> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -56,23 +61,23 @@ public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<String, VisorIg
          * @param arg Job argument.
          * @param debug Debug flag.
          */
-        private VisorIgfsProfilerClearJob(String arg, boolean debug) {
+        private VisorIgfsProfilerClearJob(VisorIgfsProfilerClearTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorIgfsProfilerClearTaskResult run(String arg) {
+        @Override protected VisorIgfsProfilerClearTaskResult run(VisorIgfsProfilerClearTaskArg arg) {
             int deleted = 0;
             int notDeleted = 0;
 
             try {
-                IgniteFileSystem igfs = ignite.fileSystem(arg);
+                IgniteFileSystem igfs = ignite.fileSystem(arg.getIgfsName());
 
                 Path logsDir = resolveIgfsProfilerLogsDir(igfs);
 
                 if (logsDir != null) {
                     PathMatcher matcher = FileSystems.getDefault().getPathMatcher(
-                        "glob:igfs-log-" + arg + "-*.csv");
+                        "glob:igfs-log-" + arg.getIgfsName() + "-*.csv");
 
                     try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(logsDir)) {
                         for (Path p : dirStream) {
@@ -99,7 +104,7 @@ public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<String, VisorIg
                 }
             }
             catch (IOException | IllegalArgumentException e) {
-                throw new IgniteException("Failed to clear profiler logs for IGFS: " + arg, e);
+                throw new IgniteException("Failed to clear profiler logs for IGFS: " + arg.getIgfsName(), e);
             }
             catch (IgniteCheckedException e) {
                 throw U.convertException(e);
@@ -113,9 +118,4 @@ public class VisorIgfsProfilerClearTask extends VisorOneNodeTask<String, VisorIg
             return S.toString(VisorIgfsProfilerClearJob.class, this);
         }
     }
-
-    /** {@inheritDoc} */
-    @Override protected VisorIgfsProfilerClearJob job(String arg) {
-        return new VisorIgfsProfilerClearJob(arg, debug);
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskArg.java
new file mode 100644
index 0000000..1afbb1c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.igfs;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorIgfsProfilerClearTask}.
+ */
+public class VisorIgfsProfilerClearTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** IGFS name. */
+    private String igfsName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorIgfsProfilerClearTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param igfsName IGFS name.
+     */
+    public VisorIgfsProfilerClearTaskArg(String igfsName) {
+        this.igfsName = igfsName;
+    }
+
+    /**
+     * @return IGFS name.
+     */
+    public String getIgfsName() {
+        return igfsName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, igfsName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        igfsName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorIgfsProfilerClearTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskResult.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskResult.java
index 4eafe53..4e22f37 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerClearTaskResult.java
@@ -31,10 +31,10 @@ public class VisorIgfsProfilerClearTaskResult extends VisorDataTransferObject {
     private static final long serialVersionUID = 0L;
 
     /** Count of deleted files. */
-    private Integer deleted;
+    private int deleted;
 
     /** Count of not deleted files. */
-    private Integer notDeleted;
+    private int notDeleted;
 
     /**
      * Default constructor.
@@ -47,7 +47,7 @@ public class VisorIgfsProfilerClearTaskResult extends VisorDataTransferObject {
      * @param deleted Count of deleted files.
      * @param notDeleted Count of not deleted files.
      */
-    public VisorIgfsProfilerClearTaskResult(Integer deleted, Integer notDeleted) {
+    public VisorIgfsProfilerClearTaskResult(int deleted, int notDeleted) {
         this.deleted = deleted;
         this.notDeleted = notDeleted;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTask.java
index 956458c..935a3da 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTask.java
@@ -56,7 +56,7 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.resolveIgfsPr
  * Task that parse hadoop profiler logs.
  */
 @GridInternal
-public class VisorIgfsProfilerTask extends VisorOneNodeTask<String, List<VisorIgfsProfilerEntry>> {
+public class VisorIgfsProfilerTask extends VisorOneNodeTask<VisorIgfsProfilerTaskArg, List<VisorIgfsProfilerEntry>> {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -140,14 +140,14 @@ public class VisorIgfsProfilerTask extends VisorOneNodeTask<String, List<VisorIg
         };
 
     /** {@inheritDoc} */
-    @Override protected VisorIgfsProfilerJob job(String arg) {
+    @Override protected VisorIgfsProfilerJob job(VisorIgfsProfilerTaskArg arg) {
         return new VisorIgfsProfilerJob(arg, debug);
     }
 
     /**
      * Job that do actual profiler work.
      */
-    private static class VisorIgfsProfilerJob extends VisorJob<String, List<VisorIgfsProfilerEntry>> {
+    private static class VisorIgfsProfilerJob extends VisorJob<VisorIgfsProfilerTaskArg, List<VisorIgfsProfilerEntry>> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -196,22 +196,24 @@ public class VisorIgfsProfilerTask extends VisorOneNodeTask<String, List<VisorIg
          * @param arg IGFS name.
          * @param debug Debug flag.
          */
-        private VisorIgfsProfilerJob(String arg, boolean debug) {
+        private VisorIgfsProfilerJob(VisorIgfsProfilerTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected List<VisorIgfsProfilerEntry> run(String arg) {
+        @Override protected List<VisorIgfsProfilerEntry> run(VisorIgfsProfilerTaskArg arg) {
+            String name = arg.getIgfsName();
+
             try {
-                Path logsDir = resolveIgfsProfilerLogsDir(ignite.fileSystem(arg));
+                Path logsDir = resolveIgfsProfilerLogsDir(ignite.fileSystem(name));
 
                 if (logsDir != null)
-                    return parse(logsDir, arg);
+                    return parse(logsDir, name);
 
                 return Collections.emptyList();
             }
             catch (IOException | IllegalArgumentException e) {
-                throw new IgniteException("Failed to parse profiler logs for IGFS: " + arg, e);
+                throw new IgniteException("Failed to parse profiler logs for IGFS: " + name, e);
             }
             catch (IgniteCheckedException e) {
                 throw U.convertException(e);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTaskArg.java
new file mode 100644
index 0000000..7fe9935
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsProfilerTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.igfs;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorIgfsProfilerTask}.
+ */
+public class VisorIgfsProfilerTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** IGFS name. */
+    private String igfsName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorIgfsProfilerTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param igfsName IGFS name.
+     */
+    public VisorIgfsProfilerTaskArg(String igfsName) {
+        this.igfsName = igfsName;
+    }
+
+    /**
+     * @return IGFS name.
+     */
+    public String getIgfsName() {
+        return igfsName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, igfsName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        igfsName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorIgfsProfilerTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 b10cce3..ee90edf 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
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.visor.igfs;
 
-import java.util.Set;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -28,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Resets IGFS metrics.
  */
 @GridInternal
-public class VisorIgfsResetMetricsTask extends VisorOneNodeTask<Set<String>, Void> {
+public class VisorIgfsResetMetricsTask extends VisorOneNodeTask<VisorIgfsResetMetricsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorIgfsResetMetricsJob job(Set<String> arg) {
+    @Override protected VisorIgfsResetMetricsJob job(VisorIgfsResetMetricsTaskArg arg) {
         return new VisorIgfsResetMetricsJob(arg, debug);
     }
 
     /**
      * Job that reset IGFS metrics.
      */
-    private static class VisorIgfsResetMetricsJob extends VisorJob<Set<String>, Void> {
+    private static class VisorIgfsResetMetricsJob extends VisorJob<VisorIgfsResetMetricsTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -48,13 +47,13 @@ public class VisorIgfsResetMetricsTask extends VisorOneNodeTask<Set<String>, Voi
          * @param arg IGFS names.
          * @param debug Debug flag.
          */
-        private VisorIgfsResetMetricsJob(Set<String> arg, boolean debug) {
+        private VisorIgfsResetMetricsJob(VisorIgfsResetMetricsTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(Set<String> igfsNames) {
-            for (String igfsName : igfsNames)
+        @Override protected Void run(VisorIgfsResetMetricsTaskArg arg) {
+            for (String igfsName : arg.getIgfsNames())
                 try {
                     ignite.fileSystem(igfsName).resetMetrics();
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTaskArg.java
new file mode 100644
index 0000000..033a05d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/igfs/VisorIgfsResetMetricsTaskArg.java
@@ -0,0 +1,73 @@
+/*
+ * 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.visor.igfs;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Set;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorIgfsResetMetricsTask}.
+ */
+public class VisorIgfsResetMetricsTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** IGFS names. */
+    private Set<String> igfsNames;
+
+    /**
+     * Default constructor.
+     */
+    public VisorIgfsResetMetricsTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param igfsNames IGFS names.
+     */
+    public VisorIgfsResetMetricsTaskArg(Set<String> igfsNames) {
+        this.igfsNames = igfsNames;
+    }
+
+    /**
+     * @return IGFS names.
+     */
+    public Set<String> getIgfsNames() {
+        return igfsNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeCollection(out, igfsNames);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        igfsNames = U.readSet(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorIgfsResetMetricsTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchArg.java
deleted file mode 100644
index 2a6b79b..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/log/VisorLogSearchArg.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * 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.visor.log;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.internal.visor.VisorDataTransferObject;
-
-/**
- * Arguments for {@link VisorLogSearchTask}.
- */
-public class VisorLogSearchArg extends VisorDataTransferObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Searched string. */
-    private String searchStr;
-
-    /** Folder. */
-    private String folder;
-
-    /** File name search pattern. */
-    private String filePtrn;
-
-    /** Max number of results. */
-    private int limit;
-
-    /**
-     * Default constructor.
-     */
-    public VisorLogSearchArg() {
-        // No-op.
-    }
-
-    /**
-     * @param searchStr Searched string.
-     * @param folder Folder.
-     * @param filePtrn File name search pattern.
-     * @param limit Max number of results.
-     */
-    public VisorLogSearchArg(String searchStr, String folder, String filePtrn, int limit) {
-        this.searchStr = searchStr;
-        this.folder = folder;
-        this.filePtrn = filePtrn;
-        this.limit = limit;
-    }
-
-    /**
-     * @return Searched string.
-     */
-    public String getSearchString() {
-        return searchStr;
-    }
-
-    /**
-     * @return Folder.
-     */
-    public String getFolder() {
-        return folder;
-    }
-
-    /**
-     * @return File name search pattern.
-     */
-    public String getFilePattern() {
-        return filePtrn;
-    }
-
-    /**
-     * @return Max number of results.
-     */
-    public int getLimit() {
-        return limit;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        U.writeString(out, searchStr);
-        U.writeString(out, folder);
-        U.writeString(out, filePtrn);
-        out.writeInt(limit);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        searchStr = U.readString(in);
-        folder = U.readString(in);
-        filePtrn = U.readString(in);
-        limit = in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(VisorLogSearchArg.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTask.java
index bad3f53..eaa036c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTask.java
@@ -29,12 +29,12 @@ import org.jetbrains.annotations.Nullable;
  * Ack task to run on node.
  */
 @GridInternal
-public class VisorAckTask extends VisorMultiNodeTask<String, Void, Void> {
+public class VisorAckTask extends VisorMultiNodeTask<VisorAckTaskArg, Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorAckJob job(String arg) {
+    @Override protected VisorAckJob job(VisorAckTaskArg arg) {
         return new VisorAckJob(arg, debug);
     }
 
@@ -46,7 +46,7 @@ public class VisorAckTask extends VisorMultiNodeTask<String, Void, Void> {
     /**
      * Ack job to run on node.
      */
-    private static class VisorAckJob extends VisorJob<String, Void> {
+    private static class VisorAckJob extends VisorJob<VisorAckTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -56,13 +56,13 @@ public class VisorAckTask extends VisorMultiNodeTask<String, Void, Void> {
          * @param arg Message to ack in node console.
          * @param debug Debug flag.
          */
-        private VisorAckJob(String arg, boolean debug) {
+        private VisorAckJob(VisorAckTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(String arg) {
-            System.out.println("<visor>: ack: " + (arg == null ? ignite.localNode().id() : arg));
+        @Override protected Void run(VisorAckTaskArg arg) {
+            System.out.println("<visor>: ack: " + (arg.getMessage() == null ? ignite.localNode().id() : arg.getMessage()));
 
             return null;
         }
@@ -72,4 +72,4 @@ public class VisorAckTask extends VisorMultiNodeTask<String, Void, Void> {
             return S.toString(VisorAckJob.class, this);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTaskArg.java
new file mode 100644
index 0000000..93c4aef
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorAckTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.misc;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for {@link VisorAckTask}.
+ */
+public class VisorAckTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Message to show. */
+    private String msg;
+
+    /**
+     * Default constructor.
+     */
+    public VisorAckTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param msg Message to show.
+     */
+    public VisorAckTaskArg(String msg) {
+        this.msg = msg;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getMessage() {
+        return msg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, msg);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        msg = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorAckTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 08a0067..bde4d6c 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
@@ -26,19 +26,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task for changing grid active state.
  */
 @GridInternal
-public class VisorChangeGridActiveStateTask extends VisorOneNodeTask<Boolean, Void> {
+public class VisorChangeGridActiveStateTask extends VisorOneNodeTask<VisorChangeGridActiveStateTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorChangeGridActiveStateJob job(Boolean arg) {
+    @Override protected VisorChangeGridActiveStateJob job(VisorChangeGridActiveStateTaskArg arg) {
         return new VisorChangeGridActiveStateJob(arg, debug);
     }
 
     /**
      * Job for changing grid active state.
      */
-    private static class VisorChangeGridActiveStateJob extends VisorJob<Boolean, Void> {
+    private static class VisorChangeGridActiveStateJob extends VisorJob<VisorChangeGridActiveStateTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -46,13 +46,13 @@ public class VisorChangeGridActiveStateTask extends VisorOneNodeTask<Boolean, Vo
          * @param arg New state of grid.
          * @param debug Debug flag.
          */
-        private VisorChangeGridActiveStateJob(Boolean arg, boolean debug) {
+        private VisorChangeGridActiveStateJob(VisorChangeGridActiveStateTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(Boolean arg) {
-            ignite.active(arg);
+        @Override protected Void run(VisorChangeGridActiveStateTaskArg arg) {
+            ignite.active(arg.isActive());
 
             return null;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTaskArg.java
new file mode 100644
index 0000000..15e76fb
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/misc/VisorChangeGridActiveStateTaskArg.java
@@ -0,0 +1,71 @@
+/*
+ * 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.visor.misc;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorChangeGridActiveStateTask}.
+ */
+public class VisorChangeGridActiveStateTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** If True start activation process. If False start deactivation process. */
+    private boolean active;
+
+    /**
+     * Default constructor.
+     */
+    public VisorChangeGridActiveStateTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param active If True start activation process. If False start deactivation process.
+     */
+    public VisorChangeGridActiveStateTaskArg(boolean active) {
+        this.active = active;
+    }
+
+    /**
+     * @return If True start activation process. If False start deactivation process.
+     */
+    public boolean isActive() {
+        return active;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        out.writeBoolean(active);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        active = in.readBoolean();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorChangeGridActiveStateTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBasicConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBasicConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBasicConfiguration.java
index 0a3a8ea..56d000d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBasicConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBasicConfiguration.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.visor.node;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.util.UUID;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
@@ -59,9 +58,6 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
     /** Local host value used. */
     private String locHost;
 
-    /** Node id. */
-    private UUID nodeId;
-
     /** Marshaller used. */
     private String marsh;
 
@@ -113,9 +109,54 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
     /** Whether update checker is enabled. */
     private boolean updateNtf;
 
+    /** Active on start flag. */
+    private boolean activeOnStart;
+
+    /** Address resolver. */
+    private String addrRslvr;
+
+    /** Flag indicating whether cache sanity check is enabled. */
+    private boolean cacheSanityCheckEnabled;
+
+    /** User's class loader. */
+    private String clsLdr;
+
+    /** Consistent globally unique node ID which survives node restarts. */
+    private String consistentId;
+
+    /** Failure detection timeout. */
+    private Long failureDetectionTimeout;
+
+    /** Ignite work folder. */
+    private String igniteWorkDir;
+
+    /** */
+    private boolean lateAffAssignment;
+
+    /** Marshal local jobs. */
+    private boolean marshLocJobs;
+
     /** Full metrics enabled flag. */
     private long metricsUpdateFreq;
 
+    /** Failure detection timeout for client nodes. */
+    private Long clientFailureDetectionTimeout;
+
+    /** Message send retries delay. */
+    private int sndRetryCnt;
+
+    /** Interval between message send retries. */
+    private long sndRetryDelay;
+
+    /** Base port number for time server. */
+    private int timeSrvPortBase;
+
+    /** Port number range for time server. */
+    private int timeSrvPortRange;
+
+    /** Utility cache pool keep alive time. */
+    private long utilityCacheKeepAliveTime;
+
     /**
      * Default constructor.
      */
@@ -133,7 +174,6 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
         igniteInstanceName = c.getIgniteInstanceName();
         ggHome = getProperty(IGNITE_HOME, c.getIgniteHome());
         locHost = getProperty(IGNITE_LOCAL_HOST, c.getLocalHost());
-        nodeId = ignite.localNode().id();
         marsh = compactClass(c.getMarshaller());
         deployMode = c.getDeploymentMode();
         clientMode = c.isClientMode();
@@ -151,7 +191,22 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
         quiet = boolValue(IGNITE_QUIET, true);
         successFile = getProperty(IGNITE_SUCCESS_FILE);
         updateNtf = boolValue(IGNITE_UPDATE_NOTIFIER, true);
+        activeOnStart = c.isActiveOnStart();
+        addrRslvr = compactClass(c.getAddressResolver());
+        cacheSanityCheckEnabled = c.isCacheSanityCheckEnabled();
+        clsLdr = compactClass(c.getClassLoader());
+        consistentId = String.valueOf(c.getConsistentId());
+        failureDetectionTimeout = c.getFailureDetectionTimeout();
+        igniteWorkDir = c.getWorkDirectory();
+        lateAffAssignment = c.isLateAffinityAssignment();
+        marshLocJobs = c.isMarshalLocalJobs();
         metricsUpdateFreq = c.getMetricsUpdateFrequency();
+        clientFailureDetectionTimeout = c.getClientFailureDetectionTimeout();
+        sndRetryCnt = c.getNetworkSendRetryCount();
+        sndRetryDelay = c.getNetworkSendRetryDelay();
+        timeSrvPortBase = c.getTimeServerPortBase();
+        timeSrvPortRange = c.getTimeServerPortRange();
+        utilityCacheKeepAliveTime = c.getUtilityCacheKeepAliveTime();
     }
 
     /**
@@ -176,13 +231,6 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
     }
 
     /**
-     * @return Node id.
-     */
-    public UUID getNodeId() {
-        return nodeId;
-    }
-
-    /**
      * @return Marshaller used.
      */
     public String getMarshaller() {
@@ -302,18 +350,124 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
     }
 
     /**
+     * @return Active on start flag.
+     */
+    public boolean isActiveOnStart() {
+        return activeOnStart;
+    }
+
+    /**
+     * @return Class name of address resolver instance.
+     */
+    public String getAddressResolver() {
+        return addrRslvr;
+    }
+
+    /**
+     * @return Flag indicating whether cache sanity check is enabled.
+     */
+    public boolean isCacheSanityCheckEnabled() {
+        return cacheSanityCheckEnabled;
+    }
+
+    /**
+     * @return User's class loader.
+     */
+    public String getClassLoader() {
+        return clsLdr;
+    }
+
+    /**
+     * Gets consistent globally unique node ID which survives node restarts.
+     *
+     * @return Node consistent ID.a
+     */
+    public String getConsistentId() {
+        return consistentId;
+    }
+
+    /**
+     * @return Failure detection timeout in milliseconds.
+     */
+    public Long getFailureDetectionTimeout() {
+        return failureDetectionTimeout;
+    }
+
+    /**
+     * @return Ignite work directory.
+     */
+    public String getWorkDirectory() {
+        return igniteWorkDir;
+    }
+
+    /**
+     * @return Late affinity assignment flag.
+     */
+    public boolean isLateAffinityAssignment() {
+        return lateAffAssignment;
+    }
+
+    /**
+     * @return {@code True} if local jobs should be marshalled.
+     */
+    public boolean isMarshalLocalJobs() {
+        return marshLocJobs;
+    }
+
+    /**
      * @return Job metrics update frequency in milliseconds.
      */
     public long getMetricsUpdateFrequency() {
         return metricsUpdateFreq;
     }
 
+    /**
+     * @return Failure detection timeout for client nodes in milliseconds.
+     */
+    public Long getClientFailureDetectionTimeout() {
+        return clientFailureDetectionTimeout;
+    }
+
+    /**
+     * @return Message send retries count.
+     */
+    public int getNetworkSendRetryCount() {
+        return sndRetryCnt;
+    }
+
+    /**
+     * @return Interval between message send retries.
+     */
+    public long getNetworkSendRetryDelay() {
+        return sndRetryDelay;
+    }
+
+    /**
+     * @return Base UPD port number for grid time server.
+     */
+    public int getTimeServerPortBase() {
+        return timeSrvPortBase;
+    }
+
+    /**
+     * @return Number of ports to try before server initialization fails.
+     */
+    public int getTimeServerPortRange() {
+        return timeSrvPortRange;
+    }
+
+    /**
+     * @return Thread pool keep alive time (in milliseconds) to be used in grid for utility cache messages.
+     */
+    public long getUtilityCacheKeepAliveTime() {
+        return utilityCacheKeepAliveTime;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, igniteInstanceName);
         U.writeString(out, ggHome);
         U.writeString(out, locHost);
-        U.writeUuid(out, nodeId);
         U.writeString(out, marsh);
         U.writeEnum(out, deployMode);
         out.writeObject(clientMode);
@@ -331,7 +485,22 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
         out.writeBoolean(quiet);
         U.writeString(out, successFile);
         out.writeBoolean(updateNtf);
+        out.writeBoolean(activeOnStart);
+        U.writeString(out, addrRslvr);
+        out.writeBoolean(cacheSanityCheckEnabled);
+        U.writeString(out, clsLdr);
+        U.writeString(out, consistentId);
+        out.writeObject(failureDetectionTimeout);
+        U.writeString(out, igniteWorkDir);
+        out.writeBoolean(lateAffAssignment);
+        out.writeBoolean(marshLocJobs);
         out.writeLong(metricsUpdateFreq);
+        out.writeObject(clientFailureDetectionTimeout);
+        out.writeInt(sndRetryCnt);
+        out.writeLong(sndRetryDelay);
+        out.writeInt(timeSrvPortBase);
+        out.writeInt(timeSrvPortRange);
+        out.writeLong(utilityCacheKeepAliveTime);
     }
 
     /** {@inheritDoc} */
@@ -339,7 +508,6 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
         igniteInstanceName = U.readString(in);
         ggHome = U.readString(in);
         locHost = U.readString(in);
-        nodeId = U.readUuid(in);
         marsh = U.readString(in);
         deployMode = DeploymentMode.fromOrdinal(in.readByte());
         clientMode = (Boolean)in.readObject();
@@ -357,7 +525,22 @@ public class VisorBasicConfiguration extends VisorDataTransferObject {
         quiet = in.readBoolean();
         successFile = U.readString(in);
         updateNtf = in.readBoolean();
+        activeOnStart = in.readBoolean();
+        addrRslvr = U.readString(in);
+        cacheSanityCheckEnabled = in.readBoolean();
+        clsLdr = U.readString(in);
+        consistentId = U.readString(in);
+        failureDetectionTimeout = (Long)in.readObject();
+        igniteWorkDir = U.readString(in);
+        lateAffAssignment = in.readBoolean();
+        marshLocJobs = in.readBoolean();
         metricsUpdateFreq = in.readLong();
+        clientFailureDetectionTimeout = (Long)in.readObject();
+        sndRetryCnt = in.readInt();
+        sndRetryDelay = in.readLong();
+        timeSrvPortBase = in.readInt();
+        timeSrvPortRange = in.readInt();
+        utilityCacheKeepAliveTime = in.readLong();
     }
 
     /** {@inheritDoc} */


[4/4] ignite git commit: IGNITE-4988 Rework Visor task arguments. Code cleanup for ignite-2.0.

Posted by ak...@apache.org.
IGNITE-4988 Rework Visor task arguments. Code cleanup for ignite-2.0.


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

Branch: refs/heads/ignite-2.0
Commit: 6a435b17e23239d58c3410d405b61147ee152dd9
Parents: f4d233c
Author: Vasiliy Sisko <vs...@gridgain.com>
Authored: Thu Apr 27 11:02:42 2017 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Thu Apr 27 11:02:43 2017 +0700

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     | 124 +++++++++--
 .../configuration/DataPageEvictionMode.java     |  17 +-
 .../visor/binary/VisorBinaryMetadata.java       |   8 +-
 .../VisorBinaryMetadataCollectorTask.java       |  16 +-
 .../VisorBinaryMetadataCollectorTaskArg.java    |  71 +++++++
 .../VisorBinaryMetadataCollectorTaskResult.java |   4 +-
 .../cache/VisorCacheAffinityConfiguration.java  |   8 +-
 .../visor/cache/VisorCacheClearTask.java        |  19 +-
 .../visor/cache/VisorCacheClearTaskArg.java     |  72 +++++++
 .../visor/cache/VisorCacheConfiguration.java    | 149 +++++++++++++
 .../VisorCacheConfigurationCollectorJob.java    |  12 +-
 .../VisorCacheConfigurationCollectorTask.java   |   5 +-
 ...VisorCacheConfigurationCollectorTaskArg.java |  74 +++++++
 .../visor/cache/VisorCacheLoadTask.java         |   5 +-
 .../visor/cache/VisorCacheLoadTaskArg.java      |   2 +-
 .../visor/cache/VisorCacheMetadataTask.java     |  14 +-
 .../visor/cache/VisorCacheMetadataTaskArg.java  |  72 +++++++
 .../visor/cache/VisorCacheNodesTask.java        |  12 +-
 .../visor/cache/VisorCacheNodesTaskArg.java     |  72 +++++++
 .../cache/VisorCacheRebalanceConfiguration.java |  26 +++
 .../visor/cache/VisorCacheRebalanceTask.java    |  13 +-
 .../visor/cache/VisorCacheRebalanceTaskArg.java |  73 +++++++
 .../visor/cache/VisorCacheResetMetricsTask.java |  14 +-
 .../cache/VisorCacheResetMetricsTaskArg.java    |  72 +++++++
 .../visor/cache/VisorCacheStartArg.java         | 100 ---------
 .../visor/cache/VisorCacheStopTask.java         |  17 +-
 .../visor/cache/VisorCacheStopTaskArg.java      |  72 +++++++
 .../cache/VisorCacheStoreConfiguration.java     |  14 ++
 .../internal/visor/cache/VisorPartitionMap.java |  24 ++-
 .../compute/VisorComputeCancelSessionsTask.java |  13 +-
 .../VisorComputeCancelSessionsTaskArg.java      |  76 +++++++
 .../visor/compute/VisorGatewayTask.java         |  87 ++++++--
 .../internal/visor/debug/VisorThreadInfo.java   |  64 +++---
 .../visor/debug/VisorThreadMonitorInfo.java     |   8 +-
 .../internal/visor/file/VisorFileBlockArg.java  | 114 ----------
 .../visor/igfs/VisorIgfsFormatTask.java         |  14 +-
 .../visor/igfs/VisorIgfsFormatTaskArg.java      |  72 +++++++
 .../visor/igfs/VisorIgfsProfilerClearTask.java  |  24 +--
 .../igfs/VisorIgfsProfilerClearTaskArg.java     |  72 +++++++
 .../igfs/VisorIgfsProfilerClearTaskResult.java  |   6 +-
 .../visor/igfs/VisorIgfsProfilerTask.java       |  18 +-
 .../visor/igfs/VisorIgfsProfilerTaskArg.java    |  72 +++++++
 .../visor/igfs/VisorIgfsResetMetricsTask.java   |  13 +-
 .../igfs/VisorIgfsResetMetricsTaskArg.java      |  73 +++++++
 .../internal/visor/log/VisorLogSearchArg.java   | 114 ----------
 .../internal/visor/misc/VisorAckTask.java       |  14 +-
 .../internal/visor/misc/VisorAckTaskArg.java    |  72 +++++++
 .../misc/VisorChangeGridActiveStateTask.java    |  12 +-
 .../misc/VisorChangeGridActiveStateTaskArg.java |  71 +++++++
 .../visor/node/VisorBasicConfiguration.java     | 211 +++++++++++++++++--
 .../visor/node/VisorBinaryConfiguration.java    | 131 ++++++++++++
 .../node/VisorBinaryTypeConfiguration.java      | 150 +++++++++++++
 .../visor/node/VisorCacheKeyConfiguration.java  | 108 ++++++++++
 .../visor/node/VisorExecutorConfiguration.java  | 108 ++++++++++
 .../node/VisorExecutorServiceConfiguration.java | 115 ++++++++++
 .../visor/node/VisorGridConfiguration.java      | 110 ++++++++++
 .../visor/node/VisorHadoopConfiguration.java    | 145 +++++++++++++
 .../visor/node/VisorIgfsConfiguration.java      |  42 +++-
 .../node/VisorMemoryPolicyConfiguration.java    |  41 ++++
 .../internal/visor/node/VisorNodePingTask.java  |  13 +-
 .../visor/node/VisorNodePingTaskArg.java        |  73 +++++++
 .../visor/node/VisorNodeSuppressedErrors.java   |   6 +-
 .../node/VisorNodeSuppressedErrorsTask.java     |  12 +-
 .../node/VisorNodeSuppressedErrorsTaskArg.java  |  74 +++++++
 .../visor/node/VisorOdbcConfiguration.java      | 114 ++++++++++
 .../visor/node/VisorRestConfiguration.java      | 207 +++++++++++++++++-
 .../node/VisorSegmentationConfiguration.java    |  13 ++
 .../visor/node/VisorServiceConfiguration.java   | 176 ++++++++++++++++
 .../internal/visor/query/VisorQueryArg.java     | 155 --------------
 .../visor/query/VisorQueryCancelTask.java       |  12 +-
 .../visor/query/VisorQueryCancelTaskArg.java    |  71 +++++++
 .../visor/query/VisorQueryCleanupTask.java      |  10 +-
 .../visor/query/VisorQueryCleanupTaskArg.java   |  75 +++++++
 .../VisorQueryDetailMetricsCollectorTask.java   |  17 +-
 ...VisorQueryDetailMetricsCollectorTaskArg.java |  71 +++++++
 .../query/VisorQueryResetDetailMetricsTask.java |   6 +-
 .../visor/query/VisorQueryResetMetricsTask.java |  18 +-
 .../query/VisorQueryResetMetricsTaskArg.java    |  72 +++++++
 .../query/VisorRunningQueriesCollectorTask.java |  16 +-
 .../VisorRunningQueriesCollectorTaskArg.java    |  71 +++++++
 .../internal/visor/query/VisorScanQueryArg.java | 157 --------------
 .../visor/service/VisorCancelServiceTask.java   |  12 +-
 .../service/VisorCancelServiceTaskArg.java      |  72 +++++++
 .../internal/visor/util/VisorTaskUtils.java     |  23 ++
 .../resources/META-INF/classnames.properties    |  39 +++-
 ...ryConfigurationCustomSerializerSelfTest.java |   4 +-
 .../GridInternalTasksLoadBalancingSelfTest.java |   7 +-
 .../visor/commands/ack/VisorAckCommand.scala    |   5 +-
 .../commands/cache/VisorCacheClearCommand.scala |   5 +-
 .../commands/cache/VisorCacheResetCommand.scala |   4 +-
 .../commands/cache/VisorCacheStopCommand.scala  |   4 +-
 .../config/VisorConfigurationCommand.scala      |   2 +-
 .../scala/org/apache/ignite/visor/visor.scala   |   5 +-
 .../web-console/backend/app/browsersHandler.js  |   3 +-
 modules/web-console/backend/app/mongo.js        |   4 +-
 .../app/modules/agent/AgentManager.service.js   |   3 +-
 .../generator/ConfigurationGenerator.js         |   7 +-
 .../generator/PlatformGenerator.js              |   5 +-
 .../generator/defaults/Cluster.service.js       |   4 +-
 .../frontend/app/modules/sql/sql.controller.js  |   2 +-
 .../states/configuration/clusters/discovery.pug |   8 +-
 101 files changed, 4043 insertions(+), 965 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 9a59338..130d9d1 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -59,21 +59,29 @@ import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.cache.VisorCacheClearTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheClearTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheConfigurationCollectorTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheConfigurationCollectorTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheLoadTask;
 import org.apache.ignite.internal.visor.cache.VisorCacheLoadTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheMetadataTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheMetadataTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheMetricsCollectorTask;
 import org.apache.ignite.internal.visor.cache.VisorCacheMetricsCollectorTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheNodesTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheNodesTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCachePartitionsTask;
 import org.apache.ignite.internal.visor.cache.VisorCachePartitionsTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheRebalanceTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheRebalanceTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheResetMetricsTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheStartTaskArg;
 import org.apache.ignite.internal.visor.cache.VisorCacheStartTask;
 import org.apache.ignite.internal.visor.cache.VisorCacheStopTask;
+import org.apache.ignite.internal.visor.cache.VisorCacheStopTaskArg;
 import org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTask;
+import org.apache.ignite.internal.visor.compute.VisorComputeCancelSessionsTaskArg;
 import org.apache.ignite.internal.visor.compute.VisorComputeResetMetricsTask;
 import org.apache.ignite.internal.visor.compute.VisorComputeToggleMonitoringTask;
 import org.apache.ignite.internal.visor.compute.VisorComputeToggleMonitoringTaskArg;
@@ -84,14 +92,21 @@ import org.apache.ignite.internal.visor.file.VisorFileBlockTask;
 import org.apache.ignite.internal.visor.file.VisorLatestTextFilesTask;
 import org.apache.ignite.internal.visor.file.VisorLatestTextFilesTaskArg;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsFormatTask;
+import org.apache.ignite.internal.visor.igfs.VisorIgfsFormatTaskArg;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTask;
+import org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerClearTaskArg;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerTask;
+import org.apache.ignite.internal.visor.igfs.VisorIgfsProfilerTaskArg;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsResetMetricsTask;
+import org.apache.ignite.internal.visor.igfs.VisorIgfsResetMetricsTaskArg;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsSamplingStateTask;
 import org.apache.ignite.internal.visor.igfs.VisorIgfsSamplingStateTaskArg;
 import org.apache.ignite.internal.visor.log.VisorLogSearchTaskArg;
 import org.apache.ignite.internal.visor.log.VisorLogSearchTask;
 import org.apache.ignite.internal.visor.misc.VisorAckTask;
+import org.apache.ignite.internal.visor.misc.VisorAckTaskArg;
+import org.apache.ignite.internal.visor.misc.VisorChangeGridActiveStateTask;
+import org.apache.ignite.internal.visor.misc.VisorChangeGridActiveStateTaskArg;
 import org.apache.ignite.internal.visor.misc.VisorLatestVersionTask;
 import org.apache.ignite.internal.visor.misc.VisorResolveHostNameTask;
 import org.apache.ignite.internal.visor.node.VisorNodeConfigurationCollectorTask;
@@ -101,12 +116,23 @@ import org.apache.ignite.internal.visor.node.VisorNodeEventsCollectorTask;
 import org.apache.ignite.internal.visor.node.VisorNodeEventsCollectorTaskArg;
 import org.apache.ignite.internal.visor.node.VisorNodeGcTask;
 import org.apache.ignite.internal.visor.node.VisorNodePingTask;
+import org.apache.ignite.internal.visor.node.VisorNodePingTaskArg;
 import org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrorsTask;
+import org.apache.ignite.internal.visor.node.VisorNodeSuppressedErrorsTaskArg;
+import org.apache.ignite.internal.visor.query.VisorQueryCancelTask;
+import org.apache.ignite.internal.visor.query.VisorQueryCancelTaskArg;
+import org.apache.ignite.internal.visor.query.VisorQueryCleanupTaskArg;
+import org.apache.ignite.internal.visor.query.VisorQueryDetailMetricsCollectorTask;
+import org.apache.ignite.internal.visor.query.VisorQueryDetailMetricsCollectorTaskArg;
+import org.apache.ignite.internal.visor.query.VisorQueryResetMetricsTask;
+import org.apache.ignite.internal.visor.query.VisorQueryResetMetricsTaskArg;
 import org.apache.ignite.internal.visor.query.VisorQueryTaskArg;
 import org.apache.ignite.internal.visor.query.VisorQueryCleanupTask;
 import org.apache.ignite.internal.visor.query.VisorQueryNextPageTask;
 import org.apache.ignite.internal.visor.query.VisorQueryNextPageTaskArg;
 import org.apache.ignite.internal.visor.query.VisorQueryTask;
+import org.apache.ignite.internal.visor.query.VisorRunningQueriesCollectorTask;
+import org.apache.ignite.internal.visor.query.VisorRunningQueriesCollectorTaskArg;
 import org.apache.ignite.lang.IgniteBiPredicate;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteUuid;
@@ -1276,6 +1302,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         String ret = content(new VisorGatewayArgument(VisorCacheConfigurationCollectorTask.class)
             .forNode(locNode)
+            .argument(VisorCacheConfigurationCollectorTaskArg.class)
             .collection(IgniteUuid.class, cid));
 
         info("VisorCacheConfigurationCollectorTask result: " + ret);
@@ -1284,7 +1311,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheNodesTask.class)
             .forNode(locNode)
-            .argument("person"));
+            .argument(VisorCacheNodesTaskArg.class, "person"));
 
         info("VisorCacheNodesTask result: " + ret);
 
@@ -1300,7 +1327,9 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheLoadTask.class)
             .forNode(locNode)
-            .argument(VisorCacheLoadTaskArg.class, "person", 0, "null"));
+            .argument(VisorCacheLoadTaskArg.class)
+            .set(String.class, "person")
+            .arguments(0, "null"));
 
         info("VisorCacheLoadTask result: " + ret);
 
@@ -1308,6 +1337,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheRebalanceTask.class)
             .forNode(locNode)
+            .argument(VisorCacheRebalanceTaskArg.class)
             .set(String.class, "person"));
 
         info("VisorCacheRebalanceTask result: " + ret);
@@ -1316,7 +1346,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheMetadataTask.class)
             .forNode(locNode)
-            .argument("person"));
+            .argument(VisorCacheMetadataTaskArg.class, "person"));
 
         info("VisorCacheMetadataTask result: " + ret);
 
@@ -1324,7 +1354,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheResetMetricsTask.class)
             .forNode(locNode)
-            .argument("person"));
+            .argument(VisorCacheResetMetricsTaskArg.class, "person"));
 
         info("VisorCacheResetMetricsTask result: " + ret);
 
@@ -1340,7 +1370,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorIgfsProfilerClearTask.class)
             .forNode(locNode)
-            .argument("igfs"));
+            .argument(VisorIgfsProfilerClearTaskArg.class, "igfs"));
 
         info("VisorIgfsProfilerClearTask result: " + ret);
 
@@ -1348,7 +1378,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorIgfsProfilerTask.class)
             .forNode(locNode)
-            .argument("igfs"));
+            .argument(VisorIgfsProfilerTaskArg.class, "igfs"));
 
         info("VisorIgfsProfilerTask result: " + ret);
 
@@ -1356,7 +1386,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorIgfsFormatTask.class)
             .forNode(locNode)
-            .argument("igfs"));
+            .argument(VisorIgfsFormatTaskArg.class, "igfs"));
 
         info("VisorIgfsFormatTask result: " + ret);
 
@@ -1364,6 +1394,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorIgfsResetMetricsTask.class)
             .forNode(locNode)
+            .argument(VisorIgfsResetMetricsTaskArg.class)
             .set(String.class, "igfs"));
 
         info("VisorIgfsResetMetricsTask result: " + ret);
@@ -1402,7 +1433,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorNodePingTask.class)
             .forNode(locNode)
-            .argument(UUID.class, locNode.id()));
+            .argument(VisorNodePingTaskArg.class, locNode.id()));
 
         info("VisorNodePingTask result: " + ret);
 
@@ -1442,6 +1473,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
         jsonTaskResult(ret);
 
         ret = content(new VisorGatewayArgument(VisorQueryCleanupTask.class)
+            .argument(VisorQueryCleanupTaskArg.class)
             .map(UUID.class, Set.class, F.asMap(locNode.id(), qryId)));
 
         info("VisorQueryCleanupTask result: " + ret);
@@ -1455,9 +1487,38 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         jsonTaskResult(ret);
 
+        ret = content(new VisorGatewayArgument(VisorQueryCancelTask.class)
+            .argument(VisorQueryCancelTaskArg.class, 0L));
+
+        info("VisorResolveHostNameTask result: " + ret);
+
+        jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorQueryResetMetricsTask.class)
+            .argument(VisorQueryResetMetricsTaskArg.class, "person"));
+
+        info("VisorResolveHostNameTask result: " + ret);
+
+        jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorQueryCancelTask.class)
+            .argument(VisorQueryCancelTaskArg.class, 0L));
+
+        info("VisorResolveHostNameTask result: " + ret);
+
+        jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorQueryResetMetricsTask.class)
+            .argument(VisorQueryResetMetricsTaskArg.class, "person"));
+
+        info("VisorResolveHostNameTask result: " + ret);
+
+        jsonTaskResult(ret);
+
         // Multinode tasks
 
         ret = content(new VisorGatewayArgument(VisorComputeCancelSessionsTask.class)
+            .argument(VisorComputeCancelSessionsTaskArg.class)
             .map(UUID.class, Set.class, new HashMap()));
 
         info("VisorComputeCancelSessionsTask result: " + ret);
@@ -1465,13 +1526,15 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
         jsonTaskResult(ret);
 
         ret = content(new VisorGatewayArgument(VisorCacheMetricsCollectorTask.class)
-            .argument(VisorCacheMetricsCollectorTaskArg.class, false, "person"));
+            .argument(VisorCacheMetricsCollectorTaskArg.class, false)
+            .collection(String.class, "person"));
 
         info("VisorCacheMetricsCollectorTask result: " + ret);
 
         ret = content(new VisorGatewayArgument(VisorCacheMetricsCollectorTask.class)
             .forNodes(grid(1).cluster().nodes())
-            .argument(VisorCacheMetricsCollectorTaskArg.class, false, "person"));
+            .argument(VisorCacheMetricsCollectorTaskArg.class, false)
+            .collection(String.class, "person"));
 
         info("VisorCacheMetricsCollectorTask (with nodes) result: " + ret);
 
@@ -1491,7 +1554,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
         jsonTaskResult(ret);
 
         ret = content(new VisorGatewayArgument(VisorAckTask.class)
-            .argument("MSG"));
+            .argument(VisorAckTaskArg.class, "MSG"));
 
         info("VisorAckTask result: " + ret);
 
@@ -1521,6 +1584,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
         jsonTaskResult(ret);
 
         ret = content(new VisorGatewayArgument(VisorNodeSuppressedErrorsTask.class)
+            .argument(VisorNodeSuppressedErrorsTaskArg.class)
             .map(UUID.class, Long.class, new HashMap()));
 
         info("VisorNodeSuppressedErrorsTask result: " + ret);
@@ -1529,7 +1593,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheClearTask.class)
             .forNode(locNode)
-            .argument("person"));
+            .argument(VisorCacheClearTaskArg.class, "person"));
 
         info("VisorCacheClearTask result: " + ret);
 
@@ -1557,11 +1621,32 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
 
         ret = content(new VisorGatewayArgument(VisorCacheStopTask.class)
             .forNode(locNode)
-            .argument(String.class, "c"));
+            .argument(VisorCacheStopTaskArg.class, "c"));
 
         info("VisorCacheStopTask result: " + ret);
 
         jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorQueryDetailMetricsCollectorTask.class)
+            .argument(VisorQueryDetailMetricsCollectorTaskArg.class, 0));
+
+        info("VisorQueryDetailMetricsCollectorTask result: " + ret);
+
+        jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorRunningQueriesCollectorTask.class)
+            .argument(VisorRunningQueriesCollectorTaskArg.class, 0L));
+
+        info("VisorQueryDetailMetricsCollectorTask result: " + ret);
+
+        jsonTaskResult(ret);
+
+        ret = content(new VisorGatewayArgument(VisorChangeGridActiveStateTask.class)
+            .argument(VisorChangeGridActiveStateTaskArg.class, true));
+
+        info("VisorQueryDetailMetricsCollectorTask result: " + ret);
+
+        jsonTaskResult(ret);
     }
 
     /**
@@ -2125,6 +2210,19 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
         }
 
         /**
+         * Add custom argument.
+         *
+         * @param vals Values.
+         * @return This helper for chaining method calls.
+         */
+        public VisorGatewayArgument arguments(Object... vals) {
+            for (Object val: vals)
+                put("p" + idx++, String.valueOf(val));
+
+            return this;
+        }
+
+        /**
          * Add string argument.
          *
          * @param val Value.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java
index 0d1b5b9..1aec15a 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataPageEvictionMode.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.configuration;
 
+import org.jetbrains.annotations.Nullable;
+
 /**
  * Defines memory page eviction algorithm. A mode is set for a specific
  * {@link MemoryPolicyConfiguration}. Only data pages, that store key-value entries, are eligible for eviction. The
@@ -49,5 +51,18 @@ public enum DataPageEvictionMode {
      * minimums of other pages that might be evicted. LRU-2 outperforms LRU by resolving "one-hit wonder" problem -
      * if a data page is accessed rarely, but accidentally accessed once, it's protected from eviction for a long time.
      */
-    RANDOM_2_LRU
+    RANDOM_2_LRU;
+
+    /** Enumerated values. */
+    private static final DataPageEvictionMode[] VALS = values();
+
+    /**
+     * Efficiently gets enumerated value from its ordinal.
+     *
+     * @param ord Ordinal value.
+     * @return Enumerated value or {@code null} if ordinal out of range.
+     */
+    @Nullable public static DataPageEvictionMode fromOrdinal(int ord) {
+        return ord >= 0 && ord < VALS.length ? VALS[ord] : null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadata.java
index 285bff9..6f7e625 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadata.java
@@ -41,7 +41,7 @@ public class VisorBinaryMetadata extends VisorDataTransferObject {
     private String typeName;
 
     /** Type Id */
-    private Integer typeId;
+    private int typeId;
 
     /** Affinity key field name. */
     private String affinityKeyFieldName;
@@ -97,7 +97,7 @@ public class VisorBinaryMetadata extends VisorDataTransferObject {
     /**
      * @return Type Id.
      */
-    public Integer getTypeId() {
+    public int getTypeId() {
         return typeId;
     }
 
@@ -118,7 +118,7 @@ public class VisorBinaryMetadata extends VisorDataTransferObject {
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, typeName);
-        out.writeObject(typeId);
+        out.writeInt(typeId);
         U.writeString(out, affinityKeyFieldName);
         U.writeCollection(out, fields);
     }
@@ -126,7 +126,7 @@ public class VisorBinaryMetadata extends VisorDataTransferObject {
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         typeName = U.readString(in);
-        typeId = (Integer)in.readObject();
+        typeId = in.readInt();
         affinityKeyFieldName = U.readString(in);
         fields = U.readList(in);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 de67805..bf072e2 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
@@ -29,32 +29,34 @@ import org.apache.ignite.marshaller.Marshaller;
  * Task that collects binary metadata.
  */
 @GridInternal
-public class VisorBinaryMetadataCollectorTask extends VisorOneNodeTask<Long, VisorBinaryMetadataCollectorTaskResult> {
+public class VisorBinaryMetadataCollectorTask
+    extends VisorOneNodeTask<VisorBinaryMetadataCollectorTaskArg, VisorBinaryMetadataCollectorTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorBinaryCollectMetadataJob job(Long lastUpdate) {
+    @Override protected VisorBinaryCollectMetadataJob job(VisorBinaryMetadataCollectorTaskArg lastUpdate) {
         return new VisorBinaryCollectMetadataJob(lastUpdate, debug);
     }
 
     /** Job that collect portables metadata on node. */
-    private static class VisorBinaryCollectMetadataJob extends VisorJob<Long, VisorBinaryMetadataCollectorTaskResult> {
+    private static class VisorBinaryCollectMetadataJob
+        extends VisorJob<VisorBinaryMetadataCollectorTaskArg, VisorBinaryMetadataCollectorTaskResult> {
         /** */
         private static final long serialVersionUID = 0L;
 
         /**
          * Create job with given argument.
          *
-         * @param lastUpdate Time data was collected last time.
+         * @param arg Task argument.
          * @param debug Debug flag.
          */
-        private VisorBinaryCollectMetadataJob(Long lastUpdate, boolean debug) {
-            super(lastUpdate, debug);
+        private VisorBinaryCollectMetadataJob(VisorBinaryMetadataCollectorTaskArg arg, boolean debug) {
+            super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorBinaryMetadataCollectorTaskResult run(Long lastUpdate) {
+        @Override protected VisorBinaryMetadataCollectorTaskResult run(VisorBinaryMetadataCollectorTaskArg arg) {
             Marshaller marsh =  ignite.configuration().getMarshaller();
 
             IgniteBinary binary = marsh == null || marsh instanceof BinaryMarshaller ? ignite.binary() : null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskArg.java
new file mode 100644
index 0000000..84ff96a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskArg.java
@@ -0,0 +1,71 @@
+/*
+ * 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.visor.binary;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for {@link VisorBinaryMetadataCollectorTask}.
+ */
+public class VisorBinaryMetadataCollectorTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Time data was collected last time. */
+    private long lastUpdate;
+
+    /**
+     * Default constructor.
+     */
+    public VisorBinaryMetadataCollectorTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param lastUpdate Time data was collected last time.
+     */
+    public VisorBinaryMetadataCollectorTaskArg(long lastUpdate) {
+        this.lastUpdate = lastUpdate;
+    }
+
+    /**
+     * @return Time data was collected last time.
+     */
+    public long getMessage() {
+        return lastUpdate;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        out.writeLong(lastUpdate);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        lastUpdate = in.readLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorBinaryMetadataCollectorTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskResult.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskResult.java
index e96b7ef..b31897c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/binary/VisorBinaryMetadataCollectorTaskResult.java
@@ -33,7 +33,7 @@ public class VisorBinaryMetadataCollectorTaskResult extends VisorDataTransferObj
     private static final long serialVersionUID = 0L;
 
     /** Last binary metadata update date. */
-    private Long lastUpdate;
+    private long lastUpdate;
 
     /** Remote data center IDs for which full state transfer was requested. */
     private List<VisorBinaryMetadata> binary;
@@ -57,7 +57,7 @@ public class VisorBinaryMetadataCollectorTaskResult extends VisorDataTransferObj
     /**
      * @return Last binary metadata update date.
      */
-    public Long getLastUpdate() {
+    public long getLastUpdate() {
         return lastUpdate;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityConfiguration.java
index d8616d3..eb4eb35 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAffinityConfiguration.java
@@ -49,7 +49,7 @@ public class VisorCacheAffinityConfiguration extends VisorDataTransferObject {
     private int partitionedBackups;
 
     /** Total partition count. */
-    private Integer partitions;
+    private int partitions;
 
     /** Cache partitioned affinity exclude neighbors. */
     private Boolean exclNeighbors;
@@ -110,7 +110,7 @@ public class VisorCacheAffinityConfiguration extends VisorDataTransferObject {
     /**
      * @return Total partition count.
      */
-    public Integer getPartitions() {
+    public int getPartitions() {
         return partitions;
     }
 
@@ -126,7 +126,7 @@ public class VisorCacheAffinityConfiguration extends VisorDataTransferObject {
         U.writeString(out, function);
         U.writeString(out, mapper);
         out.writeInt(partitionedBackups);
-        out.writeObject(partitions);
+        out.writeInt(partitions);
         out.writeObject(exclNeighbors);
     }
 
@@ -135,7 +135,7 @@ public class VisorCacheAffinityConfiguration extends VisorDataTransferObject {
         function = U.readString(in);
         mapper = U.readString(in);
         partitionedBackups = in.readInt();
-        partitions = (Integer)in.readObject();
+        partitions = in.readInt();
         exclNeighbors = (Boolean)in.readObject();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 6d14939..bdfc9eb 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
@@ -32,19 +32,19 @@ import org.apache.ignite.resources.JobContextResource;
  * Task that clears specified caches on specified node.
  */
 @GridInternal
-public class VisorCacheClearTask extends VisorOneNodeTask<String, VisorCacheClearTaskResult> {
+public class VisorCacheClearTask extends VisorOneNodeTask<VisorCacheClearTaskArg, VisorCacheClearTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheClearJob job(String arg) {
+    @Override protected VisorCacheClearJob job(VisorCacheClearTaskArg arg) {
         return new VisorCacheClearJob(arg, debug);
     }
 
     /**
      * Job that clear specified caches.
      */
-    private static class VisorCacheClearJob extends VisorJob<String, VisorCacheClearTaskResult> {
+    private static class VisorCacheClearJob extends VisorJob<VisorCacheClearTaskArg, VisorCacheClearTaskResult> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -61,11 +61,11 @@ public class VisorCacheClearTask extends VisorOneNodeTask<String, VisorCacheClea
         /**
          * Create job.
          *
-         * @param cacheName Cache name to clear.
+         * @param arg Task argument.
          * @param debug Debug flag.
          */
-        private VisorCacheClearJob(String cacheName, boolean debug) {
-            super(cacheName, debug);
+        private VisorCacheClearJob(VisorCacheClearTaskArg arg, boolean debug) {
+            super(arg, debug);
 
             lsnr = new IgniteInClosure<IgniteFuture>() {
                 /** */
@@ -97,13 +97,18 @@ public class VisorCacheClearTask extends VisorOneNodeTask<String, VisorCacheClea
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorCacheClearTaskResult run(final String cacheName) {
+        @Override protected VisorCacheClearTaskResult run(final VisorCacheClearTaskArg arg) {
             if (futs == null)
                 futs = new IgniteFuture[3];
 
             if (futs[0] == null || futs[1] == null || futs[2] == null) {
+                String cacheName = arg.getCacheName();
+
                 IgniteCache cache = ignite.cache(cacheName);
 
+                if (cache == null)
+                    throw new IllegalStateException("Failed to find cache for name: " + cacheName);
+
                 if (futs[0] == null) {
                     futs[0] = cache.sizeLongAsync(CachePeekMode.PRIMARY);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTaskArg.java
new file mode 100644
index 0000000..ade2e12
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheClearTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheClearTask}.
+ */
+public class VisorCacheClearTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheClearTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorCacheClearTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheClearTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
index 5b5d3a8..c1b56c1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
@@ -26,6 +26,7 @@ import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.PartitionLossPolicy;
 import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.MemoryPolicyConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -35,6 +36,7 @@ import org.apache.ignite.internal.visor.query.VisorQueryEntity;
 import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactIterable;
 
 /**
  * Data transfer object for cache configuration properties.
@@ -127,6 +129,39 @@ public class VisorCacheConfiguration extends VisorDataTransferObject {
     /** Query parallelism. */
     private int qryParallelism;
 
+    /** Copy on read flag. */
+    private boolean cpOnRead;
+
+    /** Eviction filter. */
+    private String evictFilter;
+
+    /** Listener configurations. */
+    private String lsnrConfigurations;
+
+    /** */
+    private boolean loadPrevVal;
+
+    /** Name of {@link MemoryPolicyConfiguration} for this cache */
+    private String memPlcName;
+
+    /** Maximum inline size for sql indexes. */
+    private int sqlIdxMaxInlineSize;
+
+    /** Node filter specifying nodes on which this cache should be deployed. */
+    private String nodeFilter;
+
+    /** */
+    private int qryDetailMetricsSz;
+
+    /** Flag indicating whether data can be read from backup. */
+    private boolean readFromBackup;
+
+    /** Name of class implementing GridCacheTmLookup. */
+    private String tmLookupClsName;
+
+    /** Cache topology validator. */
+    private String topValidator;
+
     /**
      * Default constructor.
      */
@@ -173,6 +208,18 @@ public class VisorCacheConfiguration extends VisorDataTransferObject {
         storeCfg = new VisorCacheStoreConfiguration(ignite, ccfg);
 
         qryCfg = new VisorQueryConfiguration(ccfg);
+
+        cpOnRead = ccfg.isCopyOnRead();
+        evictFilter = compactClass(ccfg.getEvictionFilter());
+        lsnrConfigurations = compactIterable(ccfg.getCacheEntryListenerConfigurations());
+        loadPrevVal = ccfg.isLoadPreviousValue();
+        memPlcName = ccfg.getMemoryPolicyName();
+        sqlIdxMaxInlineSize = ccfg.getSqlIndexMaxInlineSize();
+        nodeFilter = compactClass(ccfg.getNodeFilter());
+        qryDetailMetricsSz = ccfg.getQueryDetailMetricsSize();
+        readFromBackup = ccfg.isReadFromBackup();
+        tmLookupClsName = ccfg.getTransactionManagerLookupClassName();
+        topValidator = compactClass(ccfg.getTopologyValidator());
     }
 
     /**
@@ -385,6 +432,85 @@ public class VisorCacheConfiguration extends VisorDataTransferObject {
         return qryParallelism;
     }
 
+    /**
+     * @return Copy on read flag.
+     */
+    public boolean isCopyOnRead() {
+        return cpOnRead;
+    }
+
+    /**
+     * @return Eviction filter or {@code null}.
+     */
+    public String getEvictionFilter() {
+        return evictFilter;
+    }
+
+    /**
+     * @return Listener configurations.
+     */
+    public String getLsnrConfigurations() {
+        return lsnrConfigurations;
+    }
+
+    /**
+     * @return Load previous value flag.
+     */
+    public boolean isLoadPreviousValue() {
+        return loadPrevVal;
+    }
+
+    /**
+     * @return {@link MemoryPolicyConfiguration} name.
+     */
+    public String getMemoryPolicyName() {
+        return memPlcName;
+    }
+
+    /**
+     * @return Maximum payload size for offheap indexes.
+     */
+    public int getSqlIdxMaxInlineSize() {
+        return sqlIdxMaxInlineSize;
+    }
+
+    /**
+     * @return Predicate specifying on which nodes the cache should be started.
+     */
+    public String getNodeFilter() {
+        return nodeFilter;
+    }
+
+    /**
+     * @return Maximum number of query metrics that will be stored in memory.
+     */
+    public int getQueryDetailMetricsSize() {
+        return qryDetailMetricsSz;
+    }
+
+    /**
+     * @return {@code true} if data can be read from backup node or {@code false} if data always
+     *      should be read from primary node and never from backup.
+     */
+    public boolean isReadFromBackup() {
+        return readFromBackup;
+    }
+
+    /**
+     * @return Transaction manager finder.
+     */
+    @Deprecated
+    public String getTransactionManagerLookupClassName() {
+        return tmLookupClsName;
+    }
+
+    /**
+     * @return validator.
+     */
+    public String getTopologyValidator() {
+        return topValidator;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
@@ -415,6 +541,17 @@ public class VisorCacheConfiguration extends VisorDataTransferObject {
         out.writeBoolean(onheapCache);
         U.writeEnum(out, partLossPlc);
         out.writeInt(qryParallelism);
+        out.writeBoolean(cpOnRead);
+        U.writeString(out, evictFilter);
+        U.writeString(out, lsnrConfigurations);
+        out.writeBoolean(loadPrevVal);
+        U.writeString(out, memPlcName);
+        out.writeInt(sqlIdxMaxInlineSize);
+        U.writeString(out, nodeFilter);
+        out.writeInt(qryDetailMetricsSz);
+        out.writeBoolean(readFromBackup);
+        U.writeString(out, tmLookupClsName);
+        U.writeString(out, topValidator);
     }
 
     /** {@inheritDoc} */
@@ -443,9 +580,21 @@ public class VisorCacheConfiguration extends VisorDataTransferObject {
         expiryPlcFactory = U.readString(in);
         qryCfg = (VisorQueryConfiguration)in.readObject();
         sys = in.readBoolean();
+        storeKeepBinary = in.readBoolean();
         onheapCache = in.readBoolean();
         partLossPlc = PartitionLossPolicy.fromOrdinal(in.readByte());
         qryParallelism = in.readInt();
+        cpOnRead = in.readBoolean();
+        evictFilter = U.readString(in);
+        lsnrConfigurations = U.readString(in);
+        loadPrevVal = in.readBoolean();
+        memPlcName = U.readString(in);
+        sqlIdxMaxInlineSize = in.readInt();
+        nodeFilter = U.readString(in);
+        qryDetailMetricsSz = in.readInt();
+        readFromBackup = in.readBoolean();
+        tmLookupClsName = U.readString(in);
+        topValidator = U.readString(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorJob.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorJob.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorJob.java
index c2a3c02..fcce158 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorJob.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorJob.java
@@ -30,7 +30,7 @@ import org.apache.ignite.lang.IgniteUuid;
  * Job that collect cache metrics from node.
  */
 public class VisorCacheConfigurationCollectorJob
-    extends VisorJob<Collection<IgniteUuid>, Map<IgniteUuid, VisorCacheConfiguration>> {
+    extends VisorJob<VisorCacheConfigurationCollectorTaskArg, Map<IgniteUuid, VisorCacheConfiguration>> {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -40,22 +40,24 @@ public class VisorCacheConfigurationCollectorJob
      * @param arg Whether to collect metrics for all caches or for specified cache name only.
      * @param debug Debug flag.
      */
-    public VisorCacheConfigurationCollectorJob(Collection<IgniteUuid> arg, boolean debug) {
+    public VisorCacheConfigurationCollectorJob(VisorCacheConfigurationCollectorTaskArg arg, boolean debug) {
         super(arg, debug);
     }
 
     /** {@inheritDoc} */
-    @Override protected Map<IgniteUuid, VisorCacheConfiguration> run(Collection<IgniteUuid> arg) {
+    @Override protected Map<IgniteUuid, VisorCacheConfiguration> run(VisorCacheConfigurationCollectorTaskArg arg) {
         Collection<IgniteCacheProxy<?, ?>> caches = ignite.context().cache().jcaches();
 
-        boolean all = arg == null || arg.isEmpty();
+        Collection<IgniteUuid> depIds = arg.getDeploymentIds();
+
+        boolean all = depIds == null || depIds.isEmpty();
 
         Map<IgniteUuid, VisorCacheConfiguration> res = U.newHashMap(caches.size());
 
         for (IgniteCacheProxy<?, ?> cache : caches) {
             IgniteUuid deploymentId = cache.context().dynamicDeploymentId();
 
-            if (all || arg.contains(deploymentId))
+            if (all || depIds.contains(deploymentId))
                 res.put(deploymentId, config(cache.getConfiguration(CacheConfiguration.class)));
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTask.java
index 49e8de4..f931b17 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTask.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.visor.cache;
 
-import java.util.Collection;
 import java.util.Map;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.visor.VisorOneNodeTask;
@@ -28,12 +27,12 @@ import org.apache.ignite.lang.IgniteUuid;
  */
 @GridInternal
 public class VisorCacheConfigurationCollectorTask
-    extends VisorOneNodeTask<Collection<IgniteUuid>, Map<IgniteUuid, VisorCacheConfiguration>> {
+    extends VisorOneNodeTask<VisorCacheConfigurationCollectorTaskArg, Map<IgniteUuid, VisorCacheConfiguration>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheConfigurationCollectorJob job(Collection<IgniteUuid> arg) {
+    @Override protected VisorCacheConfigurationCollectorJob job(VisorCacheConfigurationCollectorTaskArg arg) {
         return new VisorCacheConfigurationCollectorJob(arg, debug);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTaskArg.java
new file mode 100644
index 0000000..9dd8632
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfigurationCollectorTaskArg.java
@@ -0,0 +1,74 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+import org.apache.ignite.lang.IgniteUuid;
+
+/**
+ * Argument for {@link VisorCacheConfigurationCollectorTask}.
+ */
+public class VisorCacheConfigurationCollectorTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Collection of cache deployment IDs. */
+    private Collection<IgniteUuid> deploymentIds;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheConfigurationCollectorTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param deploymentIds Collection of cache deployment IDs.
+     */
+    public VisorCacheConfigurationCollectorTaskArg(Collection<IgniteUuid> deploymentIds) {
+        this.deploymentIds = deploymentIds;
+    }
+
+    /**
+     * @return Collection of cache deployment IDs.
+     */
+    public Collection<IgniteUuid> getDeploymentIds() {
+        return deploymentIds;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeCollection(out, deploymentIds);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        deploymentIds = U.readCollection(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheConfigurationCollectorTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 34ae12c..7b25ae4 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
@@ -63,7 +63,7 @@ public class VisorCacheLoadTask extends
         @Override protected Map<String, Integer> run(VisorCacheLoadTaskArg arg) {
             Set<String> cacheNames = arg.getCacheNames();
             long ttl = arg.getTtl();
-            Object[] ldrArgs = arg.getLdrArgs();
+            Object[] ldrArgs = arg.getLoaderArguments();
 
             assert cacheNames != null && !cacheNames.isEmpty();
 
@@ -74,6 +74,9 @@ public class VisorCacheLoadTask extends
             for (String cacheName : cacheNames) {
                 IgniteCache cache = ignite.cache(cacheName);
 
+                if (cache == null)
+                    throw new IllegalStateException("Failed to find cache for name: " + cacheName);
+
                 if (ttl > 0) {
                     if (plc == null)
                         plc = new CreatedExpiryPolicy(new Duration(TimeUnit.MILLISECONDS, ttl));

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTaskArg.java
index d5c7f20..b5da993 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTaskArg.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheLoadTaskArg.java
@@ -76,7 +76,7 @@ public class VisorCacheLoadTaskArg extends VisorDataTransferObject {
     /**
      * @return Optional user arguments to be passed into CacheStore.loadCache(IgniteBiInClosure, Object...) method.
      */
-    public Object[] getLdrArgs() {
+    public Object[] getLoaderArguments() {
         return ldrArgs;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTask.java
index 598c8cf..0330875 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTask.java
@@ -34,19 +34,19 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.escapeName;
  * Task to get cache SQL metadata.
  */
 @GridInternal
-public class VisorCacheMetadataTask extends VisorOneNodeTask<String, VisorCacheSqlMetadata> {
+public class VisorCacheMetadataTask extends VisorOneNodeTask<VisorCacheMetadataTaskArg, VisorCacheSqlMetadata> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheMetadataJob job(String arg) {
+    @Override protected VisorCacheMetadataJob job(VisorCacheMetadataTaskArg arg) {
         return new VisorCacheMetadataJob(arg, debug);
     }
 
     /**
      * Job to get cache SQL metadata.
      */
-    private static class VisorCacheMetadataJob extends VisorJob<String, VisorCacheSqlMetadata> {
+    private static class VisorCacheMetadataJob extends VisorJob<VisorCacheMetadataTaskArg, VisorCacheSqlMetadata> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -54,14 +54,14 @@ public class VisorCacheMetadataTask extends VisorOneNodeTask<String, VisorCacheS
          * @param arg Cache name to take metadata.
          * @param debug Debug flag.
          */
-        private VisorCacheMetadataJob(String arg, boolean debug) {
+        private VisorCacheMetadataJob(VisorCacheMetadataTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorCacheSqlMetadata run(String cacheName) {
+        @Override protected VisorCacheSqlMetadata run(VisorCacheMetadataTaskArg arg) {
             try {
-                IgniteInternalCache<Object, Object> cache = ignite.cachex(cacheName);
+                IgniteInternalCache<Object, Object> cache = ignite.cachex(arg.getCacheName());
 
                 if (cache != null) {
                     GridCacheSqlMetadata meta = F.first(cache.context().queries().sqlMetadata());
@@ -72,7 +72,7 @@ public class VisorCacheMetadataTask extends VisorOneNodeTask<String, VisorCacheS
                     return null;
                 }
 
-                throw new IgniteException("Cache not found: " + escapeName(cacheName));
+                throw new IgniteException("Cache not found: " + escapeName(arg.getCacheName()));
             }
             catch (IgniteCheckedException e) {
                 throw U.convertException(e);

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTaskArg.java
new file mode 100644
index 0000000..99ee350
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetadataTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheMetadataTask}.
+ */
+public class VisorCacheMetadataTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheMetadataTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorCacheMetadataTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheMetadataTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTask.java
index 955fc64..2dc6dc1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTask.java
@@ -30,19 +30,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Task that returns collection of cache data nodes IDs.
  */
 @GridInternal
-public class VisorCacheNodesTask extends VisorOneNodeTask<String, Collection<UUID>> {
+public class VisorCacheNodesTask extends VisorOneNodeTask<VisorCacheNodesTaskArg, Collection<UUID>> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheNodesJob job(String arg) {
+    @Override protected VisorCacheNodesJob job(VisorCacheNodesTaskArg arg) {
         return new VisorCacheNodesJob(arg, debug);
     }
 
     /**
      * Job that collects cluster group for specified cache.
      */
-    private static class VisorCacheNodesJob extends VisorJob<String, Collection<UUID>> {
+    private static class VisorCacheNodesJob extends VisorJob<VisorCacheNodesTaskArg, Collection<UUID>> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -52,13 +52,13 @@ public class VisorCacheNodesTask extends VisorOneNodeTask<String, Collection<UUI
          * @param cacheName Cache name to clear.
          * @param debug Debug flag.
          */
-        private VisorCacheNodesJob(String cacheName, boolean debug) {
+        private VisorCacheNodesJob(VisorCacheNodesTaskArg cacheName, boolean debug) {
             super(cacheName, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Collection<UUID> run(String cacheName) {
-            Collection<ClusterNode> nodes = ignite.cluster().forDataNodes(cacheName).nodes();
+        @Override protected Collection<UUID> run(VisorCacheNodesTaskArg arg) {
+            Collection<ClusterNode> nodes = ignite.cluster().forDataNodes(arg.getCacheName()).nodes();
 
             Collection<UUID> res = new ArrayList<>(nodes.size());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTaskArg.java
new file mode 100644
index 0000000..29e00e5
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheNodesTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheNodesTask}.
+ */
+public class VisorCacheNodesTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheNodesTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorCacheNodesTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheNodesTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceConfiguration.java
index 618fa97..8a3acaa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceConfiguration.java
@@ -48,6 +48,12 @@ public class VisorCacheRebalanceConfiguration extends VisorDataTransferObject {
     /** Rebalance timeout. */
     private long timeout;
 
+    /** Rebalance batches prefetch count. */
+    private long batchesPrefetchCnt;
+
+    /** Cache rebalance order. */
+    private int rebalanceOrder;
+
     /**
      * Default constructor.
      */
@@ -65,6 +71,8 @@ public class VisorCacheRebalanceConfiguration extends VisorDataTransferObject {
         partitionedDelay = ccfg.getRebalanceDelay();
         throttle = ccfg.getRebalanceThrottle();
         timeout = ccfg.getRebalanceTimeout();
+        batchesPrefetchCnt = ccfg.getRebalanceBatchesPrefetchCount();
+        rebalanceOrder = ccfg.getRebalanceOrder();
     }
 
     /**
@@ -102,6 +110,20 @@ public class VisorCacheRebalanceConfiguration extends VisorDataTransferObject {
         return timeout;
     }
 
+    /**
+     * @return Batches count
+     */
+    public long getBatchesPrefetchCnt() {
+        return batchesPrefetchCnt;
+    }
+
+    /**
+     * @return Cache rebalance order.
+     */
+    public int getRebalanceOrder() {
+        return rebalanceOrder;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeEnum(out, mode);
@@ -109,6 +131,8 @@ public class VisorCacheRebalanceConfiguration extends VisorDataTransferObject {
         out.writeLong(partitionedDelay);
         out.writeLong(throttle);
         out.writeLong(timeout);
+        out.writeLong(batchesPrefetchCnt);
+        out.writeInt(rebalanceOrder);
     }
 
     /** {@inheritDoc} */
@@ -118,6 +142,8 @@ public class VisorCacheRebalanceConfiguration extends VisorDataTransferObject {
         partitionedDelay = in.readLong();
         throttle = in.readLong();
         timeout = in.readLong();
+        batchesPrefetchCnt = in.readLong();
+        rebalanceOrder = in.readInt();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 e0c94bf..87a2ce6 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
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.visor.cache;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Set;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
@@ -33,19 +32,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Pre-loads caches. Made callable just to conform common pattern.
  */
 @GridInternal
-public class VisorCacheRebalanceTask extends VisorOneNodeTask<Set<String>, Void> {
+public class VisorCacheRebalanceTask extends VisorOneNodeTask<VisorCacheRebalanceTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCachesRebalanceJob job(Set<String> arg) {
+    @Override protected VisorCachesRebalanceJob job(VisorCacheRebalanceTaskArg arg) {
         return new VisorCachesRebalanceJob(arg, debug);
     }
 
     /**
      * Job that rebalance caches.
      */
-    private static class VisorCachesRebalanceJob extends VisorJob<Set<String>, Void> {
+    private static class VisorCachesRebalanceJob extends VisorJob<VisorCacheRebalanceTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -53,17 +52,17 @@ public class VisorCacheRebalanceTask extends VisorOneNodeTask<Set<String>, Void>
          * @param arg Caches names.
          * @param debug Debug flag.
          */
-        private VisorCachesRebalanceJob(Set<String> arg, boolean debug) {
+        private VisorCachesRebalanceJob(VisorCacheRebalanceTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(Set<String> cacheNames) {
+        @Override protected Void run(VisorCacheRebalanceTaskArg arg) {
             try {
                 Collection<IgniteInternalFuture<?>> futs = new ArrayList<>();
 
                 for (IgniteInternalCache c : ignite.cachesx()) {
-                    if (cacheNames.contains(c.name()))
+                    if (arg.getCacheNames().contains(c.name()))
                         futs.add(c.rebalance());
                 }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTaskArg.java
new file mode 100644
index 0000000..0bf420c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheRebalanceTaskArg.java
@@ -0,0 +1,73 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Set;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheRebalanceTask}.
+ */
+public class VisorCacheRebalanceTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache names. */
+    private Set<String> cacheNames;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheRebalanceTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheNames Cache names.
+     */
+    public VisorCacheRebalanceTaskArg(Set<String> cacheNames) {
+        this.cacheNames = cacheNames;
+    }
+
+    /**
+     * @return Cache names.
+     */
+    public Set<String> getCacheNames() {
+        return cacheNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeCollection(out, cacheNames);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheNames = U.readSet(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheRebalanceTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTask.java
index ccec241..bc6698d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTask.java
@@ -27,19 +27,19 @@ import org.apache.ignite.internal.visor.VisorOneNodeTask;
  * Reset compute grid metrics.
  */
 @GridInternal
-public class VisorCacheResetMetricsTask extends VisorOneNodeTask<String, Void> {
+public class VisorCacheResetMetricsTask extends VisorOneNodeTask<VisorCacheResetMetricsTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCacheResetMetricsJob job(String arg) {
+    @Override protected VisorCacheResetMetricsJob job(VisorCacheResetMetricsTaskArg arg) {
         return new VisorCacheResetMetricsJob(arg, debug);
     }
 
     /**
      * Job that reset cache metrics.
      */
-    private static class VisorCacheResetMetricsJob extends VisorJob<String, Void> {
+    private static class VisorCacheResetMetricsJob extends VisorJob<VisorCacheResetMetricsTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -47,13 +47,13 @@ public class VisorCacheResetMetricsTask extends VisorOneNodeTask<String, Void> {
          * @param arg Cache name to reset metrics for.
          * @param debug Debug flag.
          */
-        private VisorCacheResetMetricsJob(String arg, boolean debug) {
+        private VisorCacheResetMetricsJob(VisorCacheResetMetricsTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(String cacheName) {
-            IgniteInternalCache cache = ignite.cachex(cacheName);
+        @Override protected Void run(VisorCacheResetMetricsTaskArg arg) {
+            IgniteInternalCache cache = ignite.cachex(arg.getCacheName());
 
             if (cache != null)
                 cache.localMxBean().clear();
@@ -66,4 +66,4 @@ public class VisorCacheResetMetricsTask extends VisorOneNodeTask<String, Void> {
             return S.toString(VisorCacheResetMetricsJob.class, this);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTaskArg.java
new file mode 100644
index 0000000..3a9d8ae
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheResetMetricsTaskArg.java
@@ -0,0 +1,72 @@
+/*
+ * 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.visor.cache;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorCacheResetMetricsTask}.
+ */
+public class VisorCacheResetMetricsTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheResetMetricsTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param cacheName Cache name.
+     */
+    public VisorCacheResetMetricsTaskArg(String cacheName) {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return Cache name.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, cacheName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        cacheName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheResetMetricsTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartArg.java
deleted file mode 100644
index a2fd518..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheStartArg.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.visor.cache;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.internal.visor.VisorDataTransferObject;
-
-/**
- * Cache start arguments.
- */
-public class VisorCacheStartArg extends VisorDataTransferObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private boolean near;
-
-    /** */
-    private String name;
-
-    /** */
-    private String cfg;
-
-    /**
-     * Default constructor.
-     */
-    public VisorCacheStartArg() {
-        // No-op.
-    }
-
-    /**
-     * @param near {@code true} if near cache should be started.
-     * @param name Name for near cache.
-     * @param cfg Cache XML configuration.
-     */
-    public VisorCacheStartArg(boolean near, String name, String cfg) {
-        this.near = near;
-        this.name = name;
-        this.cfg = cfg;
-    }
-
-    /**
-     * @return {@code true} if near cache should be started.
-     */
-    public boolean isNear() {
-        return near;
-    }
-
-    /**
-     * @return Name for near cache.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @return Cache XML configuration.
-     */
-    public String getConfiguration() {
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        out.writeBoolean(near);
-        U.writeString(out, name);
-        U.writeString(out, cfg);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        near = in.readBoolean();
-        name = U.readString(in);
-        cfg = U.readString(in);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(VisorCacheStartArg.class, this);
-    }
-}


[2/4] ignite git commit: IGNITE-4988 Rework Visor task arguments. Code cleanup for ignite-2.0.

Posted by ak...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryConfiguration.java
new file mode 100644
index 0000000..f69caf1
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryConfiguration.java
@@ -0,0 +1,131 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.List;
+import org.apache.ignite.configuration.BinaryConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
+
+/**
+ * Data transfer object for configuration of binary data structures.
+ */
+public class VisorBinaryConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** ID mapper. */
+    private String idMapper;
+
+    /** Name mapper. */
+    private String nameMapper;
+
+    /** Serializer. */
+    private String serializer;
+
+    /** Types. */
+    private List<VisorBinaryTypeConfiguration> typeCfgs;
+
+    /** Compact footer flag. */
+    private boolean compactFooter;
+
+    /**
+     * Default constructor.
+     */
+    public VisorBinaryConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for binary configuration.
+     *
+     * @param src Binary configuration.
+     */
+    public VisorBinaryConfiguration(BinaryConfiguration src) {
+        idMapper = compactClass(src.getIdMapper());
+        nameMapper = compactClass(src.getNameMapper());
+        serializer = compactClass(src.getSerializer());
+        compactFooter = src.isCompactFooter();
+
+        typeCfgs = VisorBinaryTypeConfiguration.list(src.getTypeConfigurations());
+    }
+
+    /**
+     * @return ID mapper.
+     */
+    public String getIdMapper() {
+        return idMapper;
+    }
+
+    /**
+     * @return Name mapper.
+     */
+    public String getNameMapper() {
+        return nameMapper;
+    }
+
+    /**
+     * @return Serializer.
+     */
+    public String getSerializer() {
+        return serializer;
+    }
+
+    /**
+     * @return Types.
+     */
+    public List<VisorBinaryTypeConfiguration> getTypeConfigurations() {
+        return typeCfgs;
+    }
+
+    /**
+     * @return Compact footer flag.
+     */
+    public boolean isCompactFooter() {
+        return compactFooter;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, idMapper);
+        U.writeString(out, nameMapper);
+        U.writeString(out, serializer);
+        U.writeCollection(out, typeCfgs);
+        out.writeBoolean(compactFooter);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        idMapper = U.readString(in);
+        nameMapper = U.readString(in);
+        serializer = U.readString(in);
+        typeCfgs = U.readList(in);
+        compactFooter = in.readBoolean();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorBinaryConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryTypeConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryTypeConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryTypeConfiguration.java
new file mode 100644
index 0000000..3b575ee
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorBinaryTypeConfiguration.java
@@ -0,0 +1,150 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.apache.ignite.binary.BinaryTypeConfiguration;
+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;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
+
+/**
+ * Data transfer object for configuration of binary type structures.
+ */
+public class VisorBinaryTypeConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Class name. */
+    private String typeName;
+
+    /** ID mapper. */
+    private String idMapper;
+
+    /** Name mapper. */
+    private String nameMapper;
+
+    /** Serializer. */
+    private String serializer;
+
+    /** Enum flag. */
+    private boolean isEnum;
+
+    /**
+     * Construct data transfer object for Executor configurations properties.
+     *
+     * @param cfgs Executor configurations.
+     * @return Executor configurations properties.
+     */
+    public static List<VisorBinaryTypeConfiguration> list(Collection<BinaryTypeConfiguration> cfgs) {
+        List<VisorBinaryTypeConfiguration> res = new ArrayList<>();
+
+        if (!F.isEmpty(cfgs)) {
+            for (BinaryTypeConfiguration cfg : cfgs)
+                res.add(new VisorBinaryTypeConfiguration(cfg));
+        }
+
+        return res;
+    }
+
+    /**
+     * Default constructor.
+     */
+    public VisorBinaryTypeConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for binary type configuration.
+     *
+     * @param src Binary type configuration.
+     */
+    public VisorBinaryTypeConfiguration(BinaryTypeConfiguration src) {
+        typeName = src.getTypeName();
+        idMapper = compactClass(src.getIdMapper());
+        nameMapper = compactClass(src.getNameMapper());
+        serializer = compactClass(src.getSerializer());
+        isEnum = src.isEnum();
+    }
+
+    /**
+     * @return Class name.
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    /**
+     * @return ID mapper.
+     */
+    public String getIdMapper() {
+        return idMapper;
+    }
+
+    /**
+     * @return Name mapper.
+     */
+    public String getNameMapper() {
+        return nameMapper;
+    }
+
+    /**
+     * @return Serializer.
+     */
+    public String getSerializer() {
+        return serializer;
+    }
+
+    /**
+     * @return Enum flag.
+     */
+    public boolean isEnum() {
+        return isEnum;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, typeName);
+        U.writeString(out, idMapper);
+        U.writeString(out, nameMapper);
+        U.writeString(out, serializer);
+        out.writeBoolean(isEnum);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        typeName = U.readString(in);
+        idMapper = U.readString(in);
+        nameMapper = U.readString(in);
+        serializer = U.readString(in);
+        isEnum = in.readBoolean();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorBinaryTypeConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorCacheKeyConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorCacheKeyConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorCacheKeyConfiguration.java
new file mode 100644
index 0000000..cbd7b55
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorCacheKeyConfiguration.java
@@ -0,0 +1,108 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.ignite.cache.CacheKeyConfiguration;
+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;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Data transfer object for configuration of cache key data structures.
+ */
+public class VisorCacheKeyConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Type name. */
+    private String typeName;
+
+    /** Affinity key field name. */
+    private String affKeyFieldName;
+
+    /**
+     * Construct data transfer object for cache key configurations properties.
+     *
+     * @param cfgs Cache key configurations.
+     * @return Cache key configurations properties.
+     */
+    public static List<VisorCacheKeyConfiguration> list(CacheKeyConfiguration[] cfgs) {
+        List<VisorCacheKeyConfiguration> res = new ArrayList<>();
+
+        if (!F.isEmpty(cfgs)) {
+            for (CacheKeyConfiguration cfg : cfgs)
+                res.add(new VisorCacheKeyConfiguration(cfg));
+        }
+
+        return res;
+    }
+
+    /**
+     * Default constructor.
+     */
+    public VisorCacheKeyConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for cache key configuration.
+     *
+     * @param src Cache key configuration.
+     */
+    public VisorCacheKeyConfiguration(CacheKeyConfiguration src) {
+        typeName = src.getTypeName();
+        affKeyFieldName = src.getAffinityKeyFieldName();
+    }
+
+    /**
+     * @return Type name.
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    /**
+     * @return Affinity key field name.
+     */
+    public String getAffinityKeyFieldName() {
+        return affKeyFieldName;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, typeName);
+        U.writeString(out, affKeyFieldName);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        typeName = U.readString(in);
+        affKeyFieldName = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorCacheKeyConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorConfiguration.java
new file mode 100644
index 0000000..82eaf0b
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorConfiguration.java
@@ -0,0 +1,108 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.ignite.configuration.ExecutorConfiguration;
+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;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Data transfer object for configuration of executor data structures.
+ */
+public class VisorExecutorConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Thread pool name. */
+    private String name;
+
+    /** Thread pool size. */
+    private int size;
+
+    /**
+     * Construct data transfer object for Executor configurations properties.
+     *
+     * @param cfgs Executor configurations.
+     * @return Executor configurations properties.
+     */
+    public static List<VisorExecutorConfiguration> list(ExecutorConfiguration[] cfgs) {
+        List<VisorExecutorConfiguration> res = new ArrayList<>();
+
+        if (!F.isEmpty(cfgs)) {
+            for (ExecutorConfiguration cfg : cfgs)
+                res.add(new VisorExecutorConfiguration(cfg));
+        }
+
+        return res;
+    }
+
+    /**
+     * Default constructor.
+     */
+    public VisorExecutorConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for executor configuration.
+     *
+     * @param src Executor configuration.
+     */
+    public VisorExecutorConfiguration(ExecutorConfiguration src) {
+        name = src.getName();
+        size = src.getSize();
+    }
+
+    /**
+     * @return Executor name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * @return Thread pool size.
+     */
+    public int getSize() {
+        return size;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, name);
+        out.writeInt(size);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        name = U.readString(in);
+        size = in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorExecutorConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorServiceConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorServiceConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorServiceConfiguration.java
index 0ad9288..6929190 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorServiceConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorExecutorServiceConfiguration.java
@@ -20,9 +20,12 @@ package org.apache.ignite.internal.visor.node;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.List;
 import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.OdbcConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorDataTransferObject;
 
 /**
@@ -53,6 +56,30 @@ public class VisorExecutorServiceConfiguration extends VisorDataTransferObject {
     /** REST requests pool size. */
     private int restPoolSz;
 
+    /** Async Callback pool size. */
+    private int cbPoolSize;
+
+    /** Data stream pool size. */
+    private int dataStreamerPoolSize;
+
+    /** Query pool size. */
+    private int qryPoolSize;
+
+    /** Use striped pool for internal requests processing when possible */
+    private int stripedPoolSize;
+
+    /** Service pool size. */
+    private int svcPoolSize;
+
+    /** Utility cache pool size. */
+    private int utilityCachePoolSize;
+
+    /** ODBC pool size. */
+    private int odbcPoolSize;
+
+    /** List of executor configurations. */
+    private List<VisorExecutorConfiguration> executors;
+
     /**
      * Default constructor.
      */
@@ -77,6 +104,20 @@ public class VisorExecutorServiceConfiguration extends VisorDataTransferObject {
 
         if (cc != null)
             restPoolSz = cc.getThreadPoolSize();
+
+        cbPoolSize = c.getAsyncCallbackPoolSize();
+        dataStreamerPoolSize = c.getDataStreamerThreadPoolSize();
+        qryPoolSize = c.getQueryThreadPoolSize();
+        stripedPoolSize = c.getStripedPoolSize();
+        svcPoolSize = c.getServiceThreadPoolSize();
+        utilityCachePoolSize = c.getUtilityCacheThreadPoolSize();
+
+        OdbcConfiguration oc = c.getOdbcConfiguration();
+
+        if (oc != null)
+            odbcPoolSize = oc.getThreadPoolSize();
+
+        executors = VisorExecutorConfiguration.list(c.getExecutorConfiguration());
     }
 
     /**
@@ -128,6 +169,64 @@ public class VisorExecutorServiceConfiguration extends VisorDataTransferObject {
         return restPoolSz;
     }
 
+    /**
+     * @return Thread pool size to be used for processing of asynchronous callbacks.
+     */
+    public int getCallbackPoolSize() {
+        return cbPoolSize;
+    }
+
+    /**
+     * @return Thread pool size to be used for data stream messages.
+     */
+    public int getDataStreamerPoolSize() {
+        return dataStreamerPoolSize;
+    }
+
+    /**
+     * @return Thread pool size to be used in grid for query messages.
+     */
+    public int getQueryThreadPoolSize() {
+        return qryPoolSize;
+    }
+
+    /**
+     * @return Positive value if striped pool should be initialized
+     *      with configured number of threads (stripes) and used for requests processing
+     *      or non-positive value to process requests in system pool.
+     */
+    public int getStripedPoolSize() {
+        return stripedPoolSize;
+    }
+
+    /**
+     * @return Thread pool size to be used in grid to process service proxy invocations.
+     */
+    public int getServiceThreadPoolSize() {
+        return svcPoolSize;
+    }
+
+    /**
+     * @return Thread pool size to be used in grid for utility cache messages.
+     */
+    public int getUtilityCacheThreadPoolSize() {
+        return utilityCachePoolSize;
+    }
+
+    /**
+     * @return Thread pool that is in charge of processing ODBC tasks.
+     */
+    public int getOdbcThreadPoolSize() {
+        return odbcPoolSize;
+    }
+
+    /**
+     * @return List of executor configurations.
+     */
+    public List<VisorExecutorConfiguration> getExecutors() {
+        return executors;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeInt(pubPoolSize);
@@ -137,6 +236,14 @@ public class VisorExecutorServiceConfiguration extends VisorDataTransferObject {
         out.writeInt(p2pPoolSz);
         out.writeInt(rebalanceThreadPoolSize);
         out.writeInt(restPoolSz);
+        out.writeInt(cbPoolSize);
+        out.writeInt(dataStreamerPoolSize);
+        out.writeInt(qryPoolSize);
+        out.writeInt(stripedPoolSize);
+        out.writeInt(svcPoolSize);
+        out.writeInt(utilityCachePoolSize);
+        out.writeInt(odbcPoolSize);
+        U.writeCollection(out, executors);
     }
 
     /** {@inheritDoc} */
@@ -148,6 +255,14 @@ public class VisorExecutorServiceConfiguration extends VisorDataTransferObject {
         p2pPoolSz = in.readInt();
         rebalanceThreadPoolSize = in.readInt();
         restPoolSz = in.readInt();
+        cbPoolSize = in.readInt();
+        dataStreamerPoolSize = in.readInt();
+        qryPoolSize = in.readInt();
+        stripedPoolSize = in.readInt();
+        svcPoolSize = in.readInt();
+        utilityCachePoolSize = in.readInt();
+        odbcPoolSize = in.readInt();
+        executors = U.readList(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
index 23a74e7..ea5ce9e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
@@ -25,13 +25,17 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.configuration.BinaryConfiguration;
+import org.apache.ignite.configuration.HadoopConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.OdbcConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorDataTransferObject;
 
 import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactArray;
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
 
 /**
  * Data transfer object for node configuration data.
@@ -91,6 +95,27 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
     /** Database configuration. */
     private VisorMemoryConfiguration memCfg;
 
+    /** Cache store session listeners. */
+    private String storeSesLsnrs;
+
+    /** Warmup closure. Will be invoked before actual grid start. */
+    private String warmupClos;
+
+    /** Binary configuration. */
+    private VisorBinaryConfiguration binaryCfg;
+
+    /** List of cache key configurations. */
+    private List<VisorCacheKeyConfiguration> cacheKeyCfgs;
+
+    /** Hadoop configuration. */
+    private VisorHadoopConfiguration hadoopCfg;
+
+    /** ODBC configuration. */
+    private VisorOdbcConfiguration odbcCfg;
+
+    /** List of service configurations. */
+    private List<VisorServiceConfiguration> srvcCfgs;
+
     /**
      * Default constructor.
      */
@@ -127,6 +152,28 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
 
         if (c.getMemoryConfiguration() != null)
             memCfg = new VisorMemoryConfiguration(c.getMemoryConfiguration());
+
+        storeSesLsnrs = compactArray(c.getCacheStoreSessionListenerFactories());
+        warmupClos = compactClass(c.getWarmupClosure());
+
+        BinaryConfiguration bc = c.getBinaryConfiguration();
+
+        if (bc != null)
+            binaryCfg = new VisorBinaryConfiguration();
+
+        cacheKeyCfgs = VisorCacheKeyConfiguration.list(c.getCacheKeyConfiguration());
+
+        HadoopConfiguration hc = c.getHadoopConfiguration();
+
+        if (hc != null)
+            hadoopCfg = new VisorHadoopConfiguration(hc);
+
+        OdbcConfiguration oc = c.getOdbcConfiguration();
+
+        if (oc != null)
+            odbcCfg = new VisorOdbcConfiguration(c.getOdbcConfiguration());
+
+        srvcCfgs = VisorServiceConfiguration.list(c.getServiceConfiguration());
     }
 
     /**
@@ -248,6 +295,55 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         return memCfg;
     }
 
+    /**
+     * @return Cache store session listener factories.
+     */
+    public String getCacheStoreSessionListenerFactories() {
+        return storeSesLsnrs;
+    }
+
+    /**
+     * @return Warmup closure to execute.
+     */
+    public String getWarmupClosure() {
+        return warmupClos;
+    }
+
+    /**
+     * @return Binary configuration.
+     */
+    public VisorBinaryConfiguration getBinaryConfiguration() {
+        return binaryCfg;
+    }
+
+    /**
+     * @return List of cache key configurations.
+     */
+    public List<VisorCacheKeyConfiguration> getCacheKeyConfigurations() {
+        return cacheKeyCfgs;
+    }
+
+    /**
+     * @return Hadoop configuration.
+     */
+    public VisorHadoopConfiguration getHadoopConfiguration() {
+        return hadoopCfg;
+    }
+
+    /**
+     * @return ODBC configuration.
+     */
+    public VisorOdbcConfiguration getOdbcConfiguration() {
+        return odbcCfg;
+    }
+
+    /**
+     * @return List of service configurations
+     */
+    public List<VisorServiceConfiguration> getServiceConfigurations() {
+        return srvcCfgs;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeObject(basic);
@@ -267,6 +363,13 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         out.writeObject(atomic);
         out.writeObject(txCfg);
         out.writeObject(memCfg);
+        U.writeString(out, storeSesLsnrs);
+        U.writeString(out, warmupClos);
+        out.writeObject(binaryCfg);
+        U.writeCollection(out, cacheKeyCfgs);
+        out.writeObject(hadoopCfg);
+        out.writeObject(odbcCfg);
+        U.writeCollection(out, srvcCfgs);
     }
 
     /** {@inheritDoc} */
@@ -288,6 +391,13 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         atomic = (VisorAtomicConfiguration)in.readObject();
         txCfg = (VisorTransactionConfiguration)in.readObject();
         memCfg = (VisorMemoryConfiguration)in.readObject();
+        storeSesLsnrs = U.readString(in);
+        warmupClos = U.readString(in);
+        binaryCfg = (VisorBinaryConfiguration)in.readObject();
+        cacheKeyCfgs = U.readList(in);
+        hadoopCfg = (VisorHadoopConfiguration)in.readObject();
+        odbcCfg = (VisorOdbcConfiguration)in.readObject();
+        srvcCfgs = U.readList(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorHadoopConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorHadoopConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorHadoopConfiguration.java
new file mode 100644
index 0000000..de41def
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorHadoopConfiguration.java
@@ -0,0 +1,145 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.List;
+import org.apache.ignite.configuration.HadoopConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+import org.jetbrains.annotations.Nullable;
+
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
+
+/**
+ * Data transfer object for configuration of hadoop data structures.
+ */
+public class VisorHadoopConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Map reduce planner. */
+    private String planner;
+
+    /** */
+    private boolean extExecution;
+
+    /** Finished job info TTL. */
+    private long finishedJobInfoTtl;
+
+    /** */
+    private int maxParallelTasks;
+
+    /** */
+    private int maxTaskQueueSize;
+
+    /** Library names. */
+    private List<String> libNames;
+
+    /**
+     * Default constructor.
+     */
+    public VisorHadoopConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for hadoop configuration.
+     *
+     * @param src Hadoop configuration.
+     */
+    public VisorHadoopConfiguration(HadoopConfiguration src) {
+        planner = compactClass(src.getMapReducePlanner());
+        // TODO: IGNITE-404: Uncomment when fixed.
+        //extExecution = cfg.isExternalExecution();
+        finishedJobInfoTtl = src.getFinishedJobInfoTtl();
+        maxParallelTasks = src.getMaxParallelTasks();
+        maxTaskQueueSize = src.getMaxTaskQueueSize();
+        libNames = U.sealList(src.getNativeLibraryNames());
+    }
+
+    /**
+     * @return Max number of local tasks that may be executed in parallel.
+     */
+    public int getMaxParallelTasks() {
+        return maxParallelTasks;
+    }
+
+    /**
+     * @return Max task queue size.
+     */
+    public int getMaxTaskQueueSize() {
+        return maxTaskQueueSize;
+    }
+
+    /**
+     * @return Finished job info time-to-live.
+     */
+    public long getFinishedJobInfoTtl() {
+        return finishedJobInfoTtl;
+    }
+
+    /**
+     * @return {@code True} if external execution.
+     */
+    public boolean isExternalExecution() {
+        return extExecution;
+    }
+
+    /**
+     * @return Map-reduce planner.
+     */
+    public String getMapReducePlanner() {
+        return planner;
+    }
+
+    /**
+     * @return Native library names.
+     */
+    @Nullable public List<String> getNativeLibraryNames() {
+        return libNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, planner);
+        out.writeBoolean(extExecution);
+        out.writeLong(finishedJobInfoTtl);
+        out.writeInt(maxParallelTasks);
+        out.writeInt(maxTaskQueueSize);
+        U.writeCollection(out, libNames);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        planner = U.readString(in);
+        extExecution = in.readBoolean();
+        finishedJobInfoTtl = in.readLong();
+        maxParallelTasks = in.readInt();
+        maxTaskQueueSize = in.readInt();
+        libNames = U.readList(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorHadoopConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java
index db91982..3075b26 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorIgfsConfiguration.java
@@ -32,8 +32,6 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorDataTransferObject;
 import org.jetbrains.annotations.Nullable;
 
-import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
-
 /**
  * Data transfer object for IGFS configuration properties.
  */
@@ -98,6 +96,15 @@ public class VisorIgfsConfiguration extends VisorDataTransferObject {
     /** Amount of sequential block reads before prefetch is triggered. */
     private int seqReadsBeforePrefetch;
 
+    /** Metadata co-location flag. */
+    private boolean colocateMeta;
+
+    /** Relaxed consistency flag. */
+    private boolean relaxedConsistency;
+
+    /** Update file length on flush flag. */
+    private boolean updateFileLenOnFlush;
+
     /**
      * Default constructor.
      */
@@ -134,6 +141,10 @@ public class VisorIgfsConfiguration extends VisorDataTransferObject {
         ipcEndpointEnabled = igfs.isIpcEndpointEnabled();
         mgmtPort = igfs.getManagementPort();
         seqReadsBeforePrefetch = igfs.getSequentialReadsBeforePrefetch();
+
+        colocateMeta = igfs.isColocateMetadata();
+        relaxedConsistency = igfs.isRelaxedConsistency();
+        updateFileLenOnFlush = igfs.isUpdateFileLengthOnFlush();
     }
 
     /**
@@ -286,6 +297,27 @@ public class VisorIgfsConfiguration extends VisorDataTransferObject {
         return seqReadsBeforePrefetch;
     }
 
+    /**
+     * @return {@code True} if metadata co-location is enabled.
+     */
+    public boolean isColocateMetadata() {
+        return colocateMeta;
+    }
+
+    /**
+     * @return {@code True} if relaxed consistency is enabled.
+     */
+    public boolean isRelaxedConsistency() {
+        return relaxedConsistency;
+    }
+
+    /**
+     * @return Whether to update file length on flush.
+     */
+    public boolean isUpdateFileLengthOnFlush() {
+        return updateFileLenOnFlush;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
@@ -307,6 +339,9 @@ public class VisorIgfsConfiguration extends VisorDataTransferObject {
         out.writeBoolean(ipcEndpointEnabled);
         out.writeInt(mgmtPort);
         out.writeInt(seqReadsBeforePrefetch);
+        out.writeBoolean(colocateMeta);
+        out.writeBoolean(relaxedConsistency);
+        out.writeBoolean(updateFileLenOnFlush);
     }
 
     /** {@inheritDoc} */
@@ -330,6 +365,9 @@ public class VisorIgfsConfiguration extends VisorDataTransferObject {
         ipcEndpointEnabled = in.readBoolean();
         mgmtPort = in.readInt();
         seqReadsBeforePrefetch = in.readInt();
+        colocateMeta = in.readBoolean();
+        relaxedConsistency = in.readBoolean();
+        updateFileLenOnFlush = in.readBoolean();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java
index 509aa48..d117e5f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorMemoryPolicyConfiguration.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.visor.node;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import org.apache.ignite.configuration.DataPageEvictionMode;
 import org.apache.ignite.configuration.MemoryPolicyConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -41,6 +42,17 @@ public class VisorMemoryPolicyConfiguration extends VisorDataTransferObject {
     /** Path for memory mapped file. */
     private String swapFilePath;
 
+    /** An algorithm for memory pages eviction. */
+    private DataPageEvictionMode pageEvictionMode;
+
+    /**
+     * A threshold for memory pages eviction initiation. For instance, if the threshold is 0.9 it means that the page
+     * memory will start the eviction only after 90% memory region (defined by this policy) is occupied.
+     */
+    private double evictionThreshold;
+
+    /** Minimum number of empty pages in reuse lists. */
+    private int emptyPagesPoolSize;
 
     /**
      * Default constructor.
@@ -60,6 +72,9 @@ public class VisorMemoryPolicyConfiguration extends VisorDataTransferObject {
         name = plc.getName();
         size = plc.getSize();
         swapFilePath = plc.getSwapFilePath();
+        pageEvictionMode = plc.getPageEvictionMode();
+        evictionThreshold = plc.getEvictionThreshold();
+        emptyPagesPoolSize = plc.getEmptyPagesPoolSize();
     }
 
     /**
@@ -83,12 +98,35 @@ public class VisorMemoryPolicyConfiguration extends VisorDataTransferObject {
         return swapFilePath;
     }
 
+    /**
+     * @return Memory pages eviction algorithm. {@link DataPageEvictionMode#DISABLED} used by default.
+     */
+    public DataPageEvictionMode getPageEvictionMode() {
+        return pageEvictionMode;
+    }
+
+    /**
+     * @return Memory pages eviction threshold.
+     */
+    public double getEvictionThreshold() {
+        return evictionThreshold;
+    }
+
+    /**
+     * @return Minimum number of empty pages in reuse list.
+     */
+    public int getEmptyPagesPoolSize() {
+        return emptyPagesPoolSize;
+    }
 
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
         out.writeLong(size);
         U.writeString(out, swapFilePath);
+        U.writeEnum(out, pageEvictionMode);
+        out.writeDouble(evictionThreshold);
+        out.writeInt(emptyPagesPoolSize);
     }
 
     /** {@inheritDoc} */
@@ -96,6 +134,9 @@ public class VisorMemoryPolicyConfiguration extends VisorDataTransferObject {
         name = U.readString(in);
         size = in.readLong();
         swapFilePath = U.readString(in);
+        pageEvictionMode = DataPageEvictionMode.fromOrdinal(in.readByte());
+        evictionThreshold = in.readDouble();
+        emptyPagesPoolSize = in.readInt();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 6169dcb..ee2e968 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
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.visor.node;
 
 import java.util.List;
-import java.util.UUID;
 import org.apache.ignite.cluster.ClusterTopologyException;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.processors.task.GridInternal;
@@ -31,12 +30,12 @@ import org.jetbrains.annotations.Nullable;
  * Ping other node.
  */
 @GridInternal
-public class VisorNodePingTask extends VisorOneNodeTask<UUID, VisorNodePingTaskResult> {
+public class VisorNodePingTask extends VisorOneNodeTask<VisorNodePingTaskArg, VisorNodePingTaskResult> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorNodePingJob job(UUID arg) {
+    @Override protected VisorNodePingJob job(VisorNodePingTaskArg arg) {
         return new VisorNodePingJob(arg, debug);
     }
 
@@ -53,7 +52,7 @@ public class VisorNodePingTask extends VisorOneNodeTask<UUID, VisorNodePingTaskR
     /**
      * Job that ping node.
      */
-    private static class VisorNodePingJob extends VisorJob<UUID, VisorNodePingTaskResult> {
+    private static class VisorNodePingJob extends VisorJob<VisorNodePingTaskArg, VisorNodePingTaskResult> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -61,15 +60,15 @@ public class VisorNodePingTask extends VisorOneNodeTask<UUID, VisorNodePingTaskR
          * @param arg Node ID to ping.
          * @param debug Debug flag.
          */
-        protected VisorNodePingJob(UUID arg, boolean debug) {
+        protected VisorNodePingJob(VisorNodePingTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorNodePingTaskResult run(UUID nodeToPing) {
+        @Override protected VisorNodePingTaskResult run(VisorNodePingTaskArg arg) {
             long start = System.currentTimeMillis();
 
-            return new VisorNodePingTaskResult(ignite.cluster().pingNode(nodeToPing), start, System.currentTimeMillis());
+            return new VisorNodePingTaskResult(ignite.cluster().pingNode(arg.getNodeId()), start, System.currentTimeMillis());
         }
 
         /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTaskArg.java
new file mode 100644
index 0000000..bd5a826
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodePingTaskArg.java
@@ -0,0 +1,73 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Argument for {@link VisorNodePingTask}.
+ */
+public class VisorNodePingTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Node ID to ping. */
+    private UUID nodeId;
+
+    /**
+     * Default constructor.
+     */
+    public VisorNodePingTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param nodeId Node ID to ping.
+     */
+    public VisorNodePingTaskArg(UUID nodeId) {
+        this.nodeId = nodeId;
+    }
+
+    /**
+     * @return Node ID to ping.
+     */
+    public UUID getNodeId() {
+        return nodeId;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeUuid(out, nodeId);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        nodeId = U.readUuid(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorNodePingTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrors.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrors.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrors.java
index 482adce..fa599ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrors.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrors.java
@@ -33,7 +33,7 @@ public class VisorNodeSuppressedErrors extends VisorDataTransferObject {
     private static final long serialVersionUID = 0L;
 
     /** Order number of last suppressed error. */
-    private Long order;
+    private long order;
 
     /** List of suppressed errors. */
     private List<VisorSuppressedError> errors;
@@ -51,7 +51,7 @@ public class VisorNodeSuppressedErrors extends VisorDataTransferObject {
      * @param order Order number of last suppressed error.
      * @param errors List of suppressed errors.
      */
-    public VisorNodeSuppressedErrors(Long order, List<VisorSuppressedError> errors) {
+    public VisorNodeSuppressedErrors(long order, List<VisorSuppressedError> errors) {
         this.order = order;
         this.errors = errors;
     }
@@ -59,7 +59,7 @@ public class VisorNodeSuppressedErrors extends VisorDataTransferObject {
     /**
      * @return Order number of last suppressed error.
      */
-    public Long getOrder() {
+    public long getOrder() {
         return order;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTask.java
index c7b9cf7..263d3e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTask.java
@@ -35,13 +35,13 @@ import org.jetbrains.annotations.Nullable;
  * Task to collect last errors on nodes.
  */
 @GridInternal
-public class VisorNodeSuppressedErrorsTask extends VisorMultiNodeTask<Map<UUID, Long>,
+public class VisorNodeSuppressedErrorsTask extends VisorMultiNodeTask<VisorNodeSuppressedErrorsTaskArg,
     Map<UUID, VisorNodeSuppressedErrors>, VisorNodeSuppressedErrors> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorNodeSuppressedErrorsJob job(Map<UUID, Long> arg) {
+    @Override protected VisorNodeSuppressedErrorsJob job(VisorNodeSuppressedErrorsTaskArg arg) {
         return new VisorNodeSuppressedErrorsJob(arg, debug);
     }
 
@@ -63,7 +63,7 @@ public class VisorNodeSuppressedErrorsTask extends VisorMultiNodeTask<Map<UUID,
     /**
      * Job to collect last errors on nodes.
      */
-    private static class VisorNodeSuppressedErrorsJob extends VisorJob<Map<UUID, Long>, VisorNodeSuppressedErrors> {
+    private static class VisorNodeSuppressedErrorsJob extends VisorJob<VisorNodeSuppressedErrorsTaskArg, VisorNodeSuppressedErrors> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -73,13 +73,13 @@ public class VisorNodeSuppressedErrorsTask extends VisorMultiNodeTask<Map<UUID,
          * @param arg Map with last error counter.
          * @param debug Debug flag.
          */
-        private VisorNodeSuppressedErrorsJob(Map<UUID, Long> arg, boolean debug) {
+        private VisorNodeSuppressedErrorsJob(VisorNodeSuppressedErrorsTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected VisorNodeSuppressedErrors run(Map<UUID, Long> arg) {
-            Long lastOrder = arg.get(ignite.localNode().id());
+        @Override protected VisorNodeSuppressedErrors run(VisorNodeSuppressedErrorsTaskArg arg) {
+            Long lastOrder = arg.getOrders().get(ignite.localNode().id());
 
             long order = lastOrder != null ? lastOrder : 0;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTaskArg.java
new file mode 100644
index 0000000..17f7a9c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorNodeSuppressedErrorsTaskArg.java
@@ -0,0 +1,74 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for task {@link VisorNodeSuppressedErrorsTask}
+ */
+public class VisorNodeSuppressedErrorsTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Last laded error orders. */
+    private Map<UUID, Long> orders;
+
+    /**
+     * Default constructor.
+     */
+    public VisorNodeSuppressedErrorsTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param orders Last laded error orders.
+     */
+    public VisorNodeSuppressedErrorsTaskArg(Map<UUID, Long> orders) {
+        this.orders = orders;
+    }
+
+    /**
+     * @return Last laded error orders.
+     */
+    public Map<UUID, Long> getOrders() {
+        return orders;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeMap(out, orders);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        orders = U.readMap(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorNodeSuppressedErrorsTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorOdbcConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorOdbcConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorOdbcConfiguration.java
new file mode 100644
index 0000000..e29376b
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorOdbcConfiguration.java
@@ -0,0 +1,114 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.configuration.OdbcConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Data transfer object for configuration of ODBC data structures.
+ */
+public class VisorOdbcConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Endpoint address. */
+    private String endpointAddr;
+
+    /** Socket send buffer size. */
+    private int sockSndBufSize;
+
+    /** Socket receive buffer size. */
+    private int sockRcvBufSize;
+
+    /** Max number of opened cursors per connection. */
+    private int maxOpenCursors;
+
+    /**
+     * Default constructor.
+     */
+    public VisorOdbcConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for ODBC configuration.
+     *
+     * @param src ODBC configuration.
+     */
+    public VisorOdbcConfiguration(OdbcConfiguration src) {
+        endpointAddr = src.getEndpointAddress();
+        sockSndBufSize = src.getSocketSendBufferSize();
+        sockRcvBufSize = src.getSocketReceiveBufferSize();
+        maxOpenCursors = src.getMaxOpenCursors();
+    }
+
+    /**
+     * @return ODBC endpoint address.
+     */
+    public String getEndpointAddress() {
+        return endpointAddr;
+    }
+
+    /**
+     * @return Maximum number of opened cursors.
+     */
+    public int getMaxOpenCursors() {
+        return maxOpenCursors;
+    }
+
+    /**
+     * @return Socket send buffer size in bytes.
+     */
+    public int getSocketSendBufferSize() {
+        return sockSndBufSize;
+    }
+
+    /**
+     * @return Socket receive buffer size in bytes.
+     */
+    public int getSocketReceiveBufferSize() {
+        return sockRcvBufSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, endpointAddr);
+        out.writeInt(sockSndBufSize);
+        out.writeInt(sockRcvBufSize);
+        out.writeInt(maxOpenCursors);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        endpointAddr = U.readString(in);
+        sockSndBufSize = in.readInt();
+        sockRcvBufSize = in.readInt();
+        maxOpenCursors = in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorOdbcConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorRestConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorRestConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorRestConfiguration.java
index 1f1e2b7..baf0ea6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorRestConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorRestConfiguration.java
@@ -59,11 +59,53 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
     private String tcpHost;
 
     /** REST TCP binary port. */
-    private Integer tcpPort;
+    private int tcpPort;
 
     /** Context factory for SSL. */
     private String tcpSslCtxFactory;
 
+    /** REST secret key. */
+    private String secretKey;
+
+    /** TCP no delay flag. */
+    private boolean noDelay;
+
+    /** REST TCP direct buffer flag. */
+    private boolean directBuf;
+
+    /** REST TCP send buffer size. */
+    private int sndBufSize;
+
+    /** REST TCP receive buffer size. */
+    private int rcvBufSize;
+
+    /** REST idle timeout for query cursor. */
+    private long idleQryCurTimeout;
+
+    /** REST idle check frequency for query cursor. */
+    private long idleQryCurCheckFreq;
+
+    /** REST TCP send queue limit. */
+    private int sndQueueLimit;
+
+    /** REST TCP selector count. */
+    private int selectorCnt;
+
+    /** Idle timeout. */
+    private long idleTimeout;
+
+    /** SSL need client auth flag. */
+    private boolean sslClientAuth;
+
+    /** SSL context factory for rest binary server. */
+    private String sslFactory;
+
+    /** Port range */
+    private int portRange;
+
+    /** Client message interceptor. */
+    private String msgInterceptor;
+
     /**
      * Default constructor.
      */
@@ -79,18 +121,32 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
     public VisorRestConfiguration(IgniteConfiguration c) {
         assert c != null;
 
-        ConnectorConfiguration clnCfg = c.getConnectorConfiguration();
+        ConnectorConfiguration conCfg = c.getConnectorConfiguration();
 
-        restEnabled = clnCfg != null;
+        restEnabled = conCfg != null;
 
         if (restEnabled) {
-            tcpSslEnabled = clnCfg.isSslEnabled();
-            jettyPath = clnCfg.getJettyPath();
+            tcpSslEnabled = conCfg.isSslEnabled();
+            jettyPath = conCfg.getJettyPath();
             jettyHost = getProperty(IGNITE_JETTY_HOST);
             jettyPort = intValue(IGNITE_JETTY_PORT, null);
-            tcpHost = clnCfg.getHost();
-            tcpPort = clnCfg.getPort();
-            tcpSslCtxFactory = compactClass(clnCfg.getSslContextFactory());
+            tcpHost = conCfg.getHost();
+            tcpPort = conCfg.getPort();
+            tcpSslCtxFactory = compactClass(conCfg.getSslContextFactory());
+            secretKey = conCfg.getSecretKey();
+            noDelay = conCfg.isNoDelay();
+            directBuf = conCfg.isDirectBuffer();
+            sndBufSize = conCfg.getSendBufferSize();
+            rcvBufSize = conCfg.getReceiveBufferSize();
+            idleQryCurTimeout = conCfg.getIdleQueryCursorTimeout();
+            idleQryCurCheckFreq = conCfg.getIdleQueryCursorCheckFrequency();
+            sndQueueLimit = conCfg.getSendQueueLimit();
+            selectorCnt = conCfg.getSelectorCount();
+            idleTimeout = conCfg.getIdleTimeout();
+            sslClientAuth = conCfg.isSslClientAuth();
+            sslFactory = compactClass(conCfg.getSslFactory());
+            portRange = conCfg.getPortRange();
+            msgInterceptor = compactClass(conCfg.getMessageInterceptor());
         }
     }
 
@@ -139,7 +195,7 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
     /**
      * @return REST TCP binary port.
      */
-    @Nullable public Integer getTcpPort() {
+    public int getTcpPort() {
         return tcpPort;
     }
 
@@ -150,6 +206,107 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
         return tcpSslCtxFactory;
     }
 
+    /**
+     * @return Secret key.
+     */
+    @Nullable public String getSecretKey() {
+        return secretKey;
+    }
+
+    /**
+     * @return Whether {@code TCP_NODELAY} option should be enabled.
+     */
+    public boolean isNoDelay() {
+        return noDelay;
+    }
+
+    /**
+     * @return Whether direct buffer should be used.
+     */
+    public boolean isDirectBuffer() {
+        return directBuf;
+    }
+
+    /**
+     * @return REST TCP server send buffer size (0 for default).
+     */
+    public int getSendBufferSize() {
+        return sndBufSize;
+    }
+
+    /**
+     * @return REST TCP server receive buffer size (0 for default).
+     */
+    public int getReceiveBufferSize() {
+        return rcvBufSize;
+    }
+
+    /**
+     * @return Idle query cursors timeout in milliseconds
+     */
+    public long getIdleQueryCursorTimeout() {
+        return idleQryCurTimeout;
+    }
+
+    /**
+     * @return Idle query cursor check frequency in milliseconds.
+     */
+    public long getIdleQueryCursorCheckFrequency() {
+        return idleQryCurCheckFreq;
+    }
+
+    /**
+     * @return REST TCP server send queue limit (0 for unlimited).
+     */
+    public int getSendQueueLimit() {
+        return sndQueueLimit;
+    }
+
+    /**
+     * @return Number of selector threads for REST TCP server.
+     */
+    public int getSelectorCount() {
+        return selectorCnt;
+    }
+
+    /**
+     * @return Idle timeout in milliseconds.
+     */
+    public long getIdleTimeout() {
+        return idleTimeout;
+    }
+
+    /**
+     * Gets a flag indicating whether or not remote clients will be required to have a valid SSL certificate which
+     * validity will be verified with trust manager.
+     *
+     * @return Whether or not client authentication is required.
+     */
+    public boolean isSslClientAuth() {
+        return sslClientAuth;
+    }
+
+    /**
+     *  @return SslContextFactory instance.
+     */
+    public String getSslFactory() {
+        return sslFactory;
+    }
+
+    /**
+     * @return Number of ports to try.
+     */
+    public int getPortRange() {
+        return portRange;
+    }
+
+    /**
+     * @return Interceptor.
+     */
+    @Nullable public String getMessageInterceptor() {
+        return msgInterceptor;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeBoolean(restEnabled);
@@ -158,8 +315,22 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
         U.writeString(out, jettyHost);
         out.writeObject(jettyPort);
         U.writeString(out, tcpHost);
-        out.writeObject(tcpPort);
+        out.writeInt(tcpPort);
         U.writeString(out, tcpSslCtxFactory);
+        U.writeString(out, secretKey);
+        out.writeBoolean(noDelay);
+        out.writeBoolean(directBuf);
+        out.writeInt(sndBufSize);
+        out.writeInt(rcvBufSize);
+        out.writeLong(idleQryCurTimeout);
+        out.writeLong(idleQryCurCheckFreq);
+        out.writeInt(sndQueueLimit);
+        out.writeInt(selectorCnt);
+        out.writeLong(idleTimeout);
+        out.writeBoolean(sslClientAuth);
+        U.writeString(out, sslFactory);
+        out.writeInt(portRange);
+        U.writeString(out, msgInterceptor);
     }
 
     /** {@inheritDoc} */
@@ -170,8 +341,22 @@ public class VisorRestConfiguration extends VisorDataTransferObject {
         jettyHost = U.readString(in);
         jettyPort = (Integer)in.readObject();
         tcpHost = U.readString(in);
-        tcpPort = (Integer)in.readObject();
+        tcpPort = in.readInt();
         tcpSslCtxFactory = U.readString(in);
+        secretKey = U.readString(in);
+        noDelay = in.readBoolean();
+        directBuf = in.readBoolean();
+        sndBufSize = in.readInt();
+        rcvBufSize = in.readInt();
+        idleQryCurTimeout = in.readLong();
+        idleQryCurCheckFreq = in.readLong();
+        sndQueueLimit = in.readInt();
+        selectorCnt = in.readInt();
+        idleTimeout = in.readLong();
+        sslClientAuth = in.readBoolean();
+        sslFactory = U.readString(in);
+        portRange = in.readInt();
+        msgInterceptor = U.readString(in);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSegmentationConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSegmentationConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSegmentationConfiguration.java
index 6516141..5e4dd40 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSegmentationConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSegmentationConfiguration.java
@@ -51,6 +51,9 @@ public class VisorSegmentationConfiguration extends VisorDataTransferObject {
     /** Whether or not all resolvers should succeed for node to be in correct segment. */
     private boolean allResolversPassReq;
 
+    /** Segmentation resolve attempts count. */
+    private int segResolveAttempts;
+
     /**
      * Default constructor.
      */
@@ -69,6 +72,7 @@ public class VisorSegmentationConfiguration extends VisorDataTransferObject {
         checkFreq = c.getSegmentCheckFrequency();
         waitOnStart = c.isWaitForSegmentOnStart();
         allResolversPassReq = c.isAllSegmentationResolversPassRequired();
+        segResolveAttempts = c.getSegmentationResolveAttempts();
     }
 
     /**
@@ -106,6 +110,13 @@ public class VisorSegmentationConfiguration extends VisorDataTransferObject {
         return allResolversPassReq;
     }
 
+    /**
+     * @return Segmentation resolve attempts.
+     */
+    public int getSegmentationResolveAttempts() {
+        return segResolveAttempts;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeEnum(out, plc);
@@ -113,6 +124,7 @@ public class VisorSegmentationConfiguration extends VisorDataTransferObject {
         out.writeLong(checkFreq);
         out.writeBoolean(waitOnStart);
         out.writeBoolean(allResolversPassReq);
+        out.writeInt(segResolveAttempts);
     }
 
     /** {@inheritDoc} */
@@ -122,6 +134,7 @@ public class VisorSegmentationConfiguration extends VisorDataTransferObject {
         checkFreq = in.readLong();
         waitOnStart = in.readBoolean();
         allResolversPassReq = in.readBoolean();
+        segResolveAttempts = in.readInt();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorServiceConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorServiceConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorServiceConfiguration.java
new file mode 100644
index 0000000..1cd883e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorServiceConfiguration.java
@@ -0,0 +1,176 @@
+/*
+ * 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.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+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;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+import org.apache.ignite.services.ServiceConfiguration;
+
+import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
+
+/**
+ * Data transfer object for configuration of service data structures.
+ */
+public class VisorServiceConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Service name. */
+    private String name;
+
+    /** Service instance. */
+    private String svc;
+
+    /** Total count. */
+    private int totalCnt;
+
+    /** Max per-node count. */
+    private int maxPerNodeCnt;
+
+    /** Cache name. */
+    private String cacheName;
+
+    /** Affinity key. */
+    private String affKey;
+
+    /** Node filter. */
+    private String nodeFilter;
+
+    /**
+     * Construct data transfer object for service configurations properties.
+     *
+     * @param cfgs Service configurations.
+     * @return Service configurations properties.
+     */
+    public static List<VisorServiceConfiguration> list(ServiceConfiguration[] cfgs) {
+        List<VisorServiceConfiguration> res = new ArrayList<>();
+
+        if (!F.isEmpty(cfgs)) {
+            for (ServiceConfiguration cfg : cfgs)
+                res.add(new VisorServiceConfiguration(cfg));
+        }
+
+        return res;
+    }
+
+    /**
+     * Default constructor.
+     */
+    public VisorServiceConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for service configuration.
+     *
+     * @param src Service configuration.
+     */
+    public VisorServiceConfiguration(ServiceConfiguration src) {
+        name = src.getName();
+        svc = compactClass(src.getService());
+        totalCnt = src.getTotalCount();
+        maxPerNodeCnt = src.getMaxPerNodeCount();
+        cacheName = src.getCacheName();
+        affKey = compactClass(src.getAffinityKey());
+        nodeFilter = compactClass(src.getNodeFilter());
+    }
+
+    /**
+     * @return Service name.
+     */
+    public String getName() {
+        return name;
+    }
+
+
+    /**
+     * @return Service instance.
+     */
+    public String getService() {
+        return svc;
+    }
+
+    /**
+     * @return Total number of deployed service instances in the cluster, {@code 0} for unlimited.
+     */
+    public int getTotalCount() {
+        return totalCnt;
+    }
+
+    /**
+     * @return Maximum number of deployed service instances on each node, {@code 0} for unlimited.
+     */
+    public int getMaxPerNodeCount() {
+        return maxPerNodeCnt;
+    }
+
+    /**
+     * @return Cache name, possibly {@code null}.
+     */
+    public String getCacheName() {
+        return cacheName;
+    }
+
+    /**
+     * @return Affinity key, possibly {@code null}.
+     */
+    public String getAffinityKey() {
+        return affKey;
+    }
+
+    /**
+     * @return Node filter used to filter nodes on which the service will be deployed, possibly {@code null}.
+     */
+    public String getNodeFilter() {
+        return nodeFilter;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, name);
+        U.writeString(out, svc);
+        out.writeInt(totalCnt);
+        out.writeInt(maxPerNodeCnt);
+        U.writeString(out, cacheName);
+        U.writeString(out, affKey);
+        U.writeString(out, nodeFilter);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        name = U.readString(in);
+        svc = U.readString(in);
+        totalCnt = in.readInt();
+        maxPerNodeCnt = in.readInt();
+        cacheName = U.readString(in);
+        affKey = U.readString(in);
+        nodeFilter = U.readString(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorServiceConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryArg.java
deleted file mode 100644
index d4eb65a..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryArg.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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.visor.query;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.internal.visor.VisorDataTransferObject;
-
-/**
- * Arguments for {@link VisorQueryTask}.
- */
-public class VisorQueryArg extends VisorDataTransferObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Cache name for query. */
-    private String cacheName;
-
-    /** Query text. */
-    private String qryTxt;
-
-    /** Distributed joins enabled flag. */
-    private boolean distributedJoins;
-
-    /** Enforce join order flag. */
-    private boolean enforceJoinOrder;
-
-    /** Query contains only replicated tables flag.*/
-    private boolean replicatedOnly;
-
-    /** Flag whether to execute query locally. */
-    private boolean loc;
-
-    /** Result batch size. */
-    private int pageSize;
-
-    /**
-     * Default constructor.
-     */
-    public VisorQueryArg() {
-        // No-op.
-    }
-
-    /**
-     * @param cacheName Cache name for query.
-     * @param qryTxt Query text.
-     * @param distributedJoins If {@code true} then distributed joins enabled.
-     * @param enforceJoinOrder If {@code true} then enforce join order.
-     * @param replicatedOnly {@code true} then query contains only replicated tables.
-     * @param loc Flag whether to execute query locally.
-     * @param pageSize Result batch size.
-     */
-    public VisorQueryArg(String cacheName, String qryTxt,
-        boolean distributedJoins, boolean enforceJoinOrder, boolean replicatedOnly, boolean loc, int pageSize) {
-        this.cacheName = cacheName;
-        this.qryTxt = qryTxt;
-        this.distributedJoins = distributedJoins;
-        this.enforceJoinOrder = enforceJoinOrder;
-        this.replicatedOnly = replicatedOnly;
-        this.loc = loc;
-        this.pageSize = pageSize;
-    }
-
-    /**
-     * @return Cache name.
-     */
-    public String getCacheName() {
-        return cacheName;
-    }
-
-    /**
-     * @return Query txt.
-     */
-    public String getQueryText() {
-        return qryTxt;
-    }
-
-    /**
-     * @return Distributed joins enabled flag.
-     */
-    public boolean isDistributedJoins() {
-        return distributedJoins;
-    }
-
-    /**
-     * @return Enforce join order flag.
-     */
-    public boolean isEnforceJoinOrder() {
-        return enforceJoinOrder;
-    }
-
-    /**
-     * @return {@code true} If the query contains only replicated tables.
-     */
-    public boolean isReplicatedOnly() {
-        return replicatedOnly;
-    }
-
-    /**
-     * @return {@code true} If query should be executed locally.
-     */
-    public boolean isLocal() {
-        return loc;
-    }
-
-    /**
-     * @return Page size.
-     */
-    public int getPageSize() {
-        return pageSize;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
-        U.writeString(out, cacheName);
-        U.writeString(out, qryTxt);
-        out.writeBoolean(distributedJoins);
-        out.writeBoolean(enforceJoinOrder);
-        out.writeBoolean(loc);
-        out.writeInt(pageSize);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
-        cacheName = U.readString(in);
-        qryTxt = U.readString(in);
-        distributedJoins = in.readBoolean();
-        enforceJoinOrder = in.readBoolean();
-        loc = in.readBoolean();
-        pageSize = in.readInt();
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(VisorQueryArg.class, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/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 6b81dc4..207b690 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
@@ -30,12 +30,12 @@ import org.jetbrains.annotations.Nullable;
  * Task to cancel queries.
  */
 @GridInternal
-public class VisorQueryCancelTask extends VisorOneNodeTask<Long, Void> {
+public class VisorQueryCancelTask extends VisorOneNodeTask<VisorQueryCancelTaskArg, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorCancelQueriesJob job(Long arg) {
+    @Override protected VisorCancelQueriesJob job(VisorQueryCancelTaskArg arg) {
         return new VisorCancelQueriesJob(arg, debug);
     }
 
@@ -47,7 +47,7 @@ public class VisorQueryCancelTask extends VisorOneNodeTask<Long, Void> {
     /**
      * Job to cancel queries on node.
      */
-    private static class VisorCancelQueriesJob extends VisorJob<Long, Void> {
+    private static class VisorCancelQueriesJob extends VisorJob<VisorQueryCancelTaskArg, Void> {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -57,13 +57,13 @@ public class VisorQueryCancelTask extends VisorOneNodeTask<Long, Void> {
          * @param arg Job argument.
          * @param debug Flag indicating whether debug information should be printed into node log.
          */
-        protected VisorCancelQueriesJob(@Nullable Long arg, boolean debug) {
+        protected VisorCancelQueriesJob(@Nullable VisorQueryCancelTaskArg arg, boolean debug) {
             super(arg, debug);
         }
 
         /** {@inheritDoc} */
-        @Override protected Void run(@Nullable Long queries) throws IgniteException {
-            ignite.context().query().cancelQueries(Collections.singleton(queries));
+        @Override protected Void run(@Nullable VisorQueryCancelTaskArg arg) throws IgniteException {
+            ignite.context().query().cancelQueries(Collections.singleton(arg.getQueryId()));
 
             return null;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTaskArg.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTaskArg.java
new file mode 100644
index 0000000..887a11e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCancelTaskArg.java
@@ -0,0 +1,71 @@
+/*
+ * 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.visor.query;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+
+/**
+ * Arguments for task {@link VisorQueryCancelTask}
+ */
+public class VisorQueryCancelTaskArg extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Query ID to cancel. */
+    private long qryId;
+
+    /**
+     * Default constructor.
+     */
+    public VisorQueryCancelTaskArg() {
+        // No-op.
+    }
+
+    /**
+     * @param qryId Query ID to cancel.
+     */
+    public VisorQueryCancelTaskArg(long qryId) {
+        this.qryId = qryId;
+    }
+
+    /**
+     * @return Query ID to cancel.
+     */
+    public long getQueryId() {
+        return qryId;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        out.writeLong(qryId);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        qryId = in.readLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorQueryCancelTaskArg.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6a435b17/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTask.java
index 572cf3b..9dfa0cf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryCleanupTask.java
@@ -40,19 +40,19 @@ import static org.apache.ignite.internal.visor.util.VisorTaskUtils.logMapped;
  * Task for cleanup not needed SCAN or SQL queries result futures from node local.
  */
 @GridInternal
-public class VisorQueryCleanupTask extends VisorMultiNodeTask<Map<UUID, Collection<String>>, Void, Void> {
+public class VisorQueryCleanupTask extends VisorMultiNodeTask<VisorQueryCleanupTaskArg, Void, Void> {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @Override protected VisorJob<Map<UUID, Collection<String>>, Void> job(Map<UUID, Collection<String>> arg) {
+    @Override protected VisorJob<VisorQueryCleanupTaskArg, Void> job(VisorQueryCleanupTaskArg arg) {
         return null;
     }
 
     /** {@inheritDoc} */
     @Override protected Map<? extends ComputeJob, ClusterNode> map0(List<ClusterNode> subgrid,
-        @Nullable VisorTaskArgument<Map<UUID, Collection<String>>> arg) {
-        Set<UUID> nodeIds = taskArg.keySet();
+        @Nullable VisorTaskArgument<VisorQueryCleanupTaskArg> arg) {
+        Set<UUID> nodeIds = taskArg.getQueryIds().keySet();
 
         if (nodeIds.isEmpty())
             throw new VisorClusterGroupEmptyException("Nothing to clear. List with node IDs is empty!");
@@ -62,7 +62,7 @@ public class VisorQueryCleanupTask extends VisorMultiNodeTask<Map<UUID, Collecti
         try {
             for (ClusterNode node : subgrid)
                 if (nodeIds.contains(node.id()))
-                    map.put(new VisorQueryCleanupJob(taskArg.get(node.id()), debug), node);
+                    map.put(new VisorQueryCleanupJob(taskArg.getQueryIds().get(node.id()), debug), node);
 
             if (map.isEmpty()) {
                 StringBuilder notFoundNodes = new StringBuilder();