You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by na...@apache.org on 2025/01/23 15:37:46 UTC

(ignite) branch master updated: IGNITE-24201 Remove GridClient from control.sh (#11804)

This is an automated email from the ASF dual-hosted git repository.

namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new fce02b4773d IGNITE-24201 Remove GridClient from control.sh (#11804)
fce02b4773d is described below

commit fce02b4773d52ea1071b0f5957f77ee7e6a41b5a
Author: Nikita Amelchev <ns...@gmail.com>
AuthorDate: Thu Jan 23 18:37:39 2025 +0300

    IGNITE-24201 Remove GridClient from control.sh (#11804)
---
 docs/_docs/tools/control-script.adoc               |   2 -
 .../internal/commandline/ArgumentParser.java       |  21 +-
 .../internal/commandline/CliCommandInvoker.java    | 225 -------------
 .../commandline/CliIgniteClientInvoker.java        |  28 +-
 .../commandline/CloseableCliCommandInvoker.java    |  38 ---
 .../internal/commandline/CommandHandler.java       | 155 +--------
 .../commandline/ConnectionAndSslParameters.java    |  21 --
 .../commandline/CommandHandlerParsingTest.java     |   7 +-
 .../SecurityCommandHandlerPermissionsTest.java     |   2 +-
 .../indexreader/IgniteIndexReaderTest.java         |   2 +-
 .../GridCommandHandlerSslWithSecurityTest.java     |   8 -
 .../testsuites/IgniteControlUtilityTestSuite.java  |   2 -
 .../util/GridCommandHandlerAbstractTest.java       |  10 +-
 .../GridCommandHandlerFactoryAbstractTest.java     |  40 +--
 .../GridCommandHandlerInterruptCommandTest.java    | 347 ---------------------
 .../util/GridCommandHandlerLegacyClientTest.java   |  35 ---
 .../ignite/util/GridCommandHandlerSslTest.java     |   6 -
 .../apache/ignite/util/GridCommandHandlerTest.java |  36 +--
 ...ndHandlerFactoryAbstractTest$TestCommandHandler |   3 +-
 .../internal/management/ActivateCommand.java       |  13 +-
 .../internal/management/DeactivateCommand.java     |  24 +-
 .../internal/management/SetStateCommand.java       |  17 +-
 .../ignite/internal/management/StateCommand.java   |  16 +-
 .../internal/management/SystemViewCommand.java     |   4 +-
 .../internal/management/WarmUpStopCommand.java     |   6 +-
 .../management/api/BeforeNodeStartCommand.java     |  10 +-
 .../internal/management/api/CommandInvoker.java    |  28 +-
 .../internal/management/api/CommandMBean.java      |   2 +-
 .../internal/management/api/CommandUtils.java      | 122 +-------
 .../internal/management/api/ComputeCommand.java    |   4 +-
 .../internal/management/api/LocalCommand.java      |   9 +-
 .../internal/management/api/PreparableCommand.java |   5 +-
 .../baseline/AbstractBaselineCommand.java          |   4 +-
 .../management/baseline/BaselineCommand.java       |   4 +-
 .../cache/CacheCheckIndexInlineSizesCommand.java   |   4 +-
 .../management/cache/CacheContentionCommand.java   |   4 +-
 .../management/cache/CacheDestroyCommand.java      |  12 +-
 .../management/cache/CacheDistributionCommand.java |   4 +-
 .../cache/CacheIdleVerifyCancelCommand.java        |   5 +-
 .../cache/CacheIndexesForceRebuildCommand.java     |   8 +-
 .../management/cache/CacheIndexesListCommand.java  |   4 +-
 .../cache/CacheIndexesRebuildStatusCommand.java    |   4 +-
 .../management/cache/CacheListCommand.java         |  20 +-
 .../cache/CacheScheduleIndexesRebuildCommand.java  |  21 +-
 .../cache/CacheValidateIndexesCommand.java         |   4 +-
 .../cdc/CdcDeleteLostSegmentLinksCommand.java      |   4 +-
 .../consistency/ConsistencyRepairCommand.java      |  16 +-
 .../consistency/ConsistencyStatusCommand.java      |   4 +-
 .../DefragmentationScheduleCommand.java            |   4 +-
 .../diagnostic/DiagnosticConnectivityCommand.java  |   6 +-
 .../diagnostic/DiagnosticPagelocksCommand.java     |   5 +-
 .../encryption/CacheGroupEncryptionCommand.java    |   4 +-
 .../EncryptionReencryptionRateLimitCommand.java    |   4 +-
 .../management/kill/KillClientCommand.java         |   4 +-
 .../management/kill/KillConsistencyCommand.java    |   4 +-
 .../management/kill/KillTransactionCommand.java    |   3 +-
 .../internal/management/metric/MetricCommand.java  |   4 +-
 .../metric/MetricConfigureHistogramCommand.java    |   4 +-
 .../metric/MetricConfigureHitrateCommand.java      |   4 +-
 .../AbstractTracingConfigurationCommand.java       |   4 +-
 .../tracing/TracingConfigurationCommand.java       |   4 +-
 .../internal/management/tx/TxInfoCommand.java      |   8 +-
 ...mandHandlerClusterByClassTest_cache_help.output |   2 +-
 ...ridCommandHandlerClusterByClassTest_help.output |   2 +-
 ...dlerClusterByClassWithSSLTest_cache_help.output |   2 +-
 ...andHandlerClusterByClassWithSSLTest_help.output |   2 +-
 .../commandline/CommandsProviderExtImpl.java       |   3 +-
 67 files changed, 164 insertions(+), 1279 deletions(-)

diff --git a/docs/_docs/tools/control-script.adoc b/docs/_docs/tools/control-script.adoc
index ff2ad0988bc..4da3b9fdb2e 100644
--- a/docs/_docs/tools/control-script.adoc
+++ b/docs/_docs/tools/control-script.adoc
@@ -49,8 +49,6 @@ If you want to connect to a node that is running on a remove machine, specify th
 
 | --user USER | The user name. |
 | --password PASSWORD |The user password. |
-| --ping-interval PING_INTERVAL | The ping interval. | 5000
-| --ping-timeout PING_TIMEOUT | Ping response timeout. | 30000
 | --ssl-protocol PROTOCOL1, PROTOCOL2... | A list of SSL protocols to try when connecting to the cluster. link:https://docs.oracle.com/en/java/javase/11/security/java-security-overview1.html#GUID-FCF419A7-B856-46DD-A36F-C6F88F9AF37F[Supported protocols,window=_blank]. | `TLS`
 | --ssl-cipher-suites CIPHER1,CIPHER2...  | A list of SSL ciphers. link:https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#jsse-cipher-suite-names[Supported ciphers,window=_blank]. |
 | --ssl-key-algorithm ALG | The SSL key algorithm. | `SunX509`
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ArgumentParser.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ArgumentParser.java
index e6d7c8517b8..5392ae5db51 100644
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ArgumentParser.java
+++ b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ArgumentParser.java
@@ -31,7 +31,6 @@ import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.internal.client.GridClientConfiguration;
 import org.apache.ignite.internal.commandline.argument.parser.CLIArgument;
 import org.apache.ignite.internal.commandline.argument.parser.CLIArgumentParser;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
@@ -48,13 +47,9 @@ import org.apache.ignite.lang.IgniteExperimental;
 import org.apache.ignite.ssl.SslContextFactory;
 
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
-import static org.apache.ignite.configuration.ConnectorConfiguration.DFLT_TCP_PORT;
-import static org.apache.ignite.internal.client.GridClientConfiguration.DFLT_PING_INTERVAL;
-import static org.apache.ignite.internal.client.GridClientConfiguration.DFLT_PING_TIMEOUT;
 import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_HOST;
 import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_PORT;
 import static org.apache.ignite.internal.commandline.CommandHandler.UTILITY_NAME;
-import static org.apache.ignite.internal.commandline.CommandHandler.useConnectorConnection;
 import static org.apache.ignite.internal.commandline.argument.parser.CLIArgument.optionalArg;
 import static org.apache.ignite.internal.management.api.CommandUtils.CMD_WORDS_DELIM;
 import static org.apache.ignite.internal.management.api.CommandUtils.NAME_PREFIX;
@@ -98,12 +93,6 @@ public class ArgumentParser {
     /** Option is used for auto confirmation. */
     public static final String CMD_AUTO_CONFIRMATION = "--yes";
 
-    /** Ping interval for grid client. See {@link GridClientConfiguration#getPingInterval()}. */
-    static final String CMD_PING_INTERVAL = "--ping-interval";
-
-    /** Ping timeout for grid client. See {@link GridClientConfiguration#getPingTimeout()}. */
-    static final String CMD_PING_TIMEOUT = "--ping-timeout";
-
     /** Verbose mode. */
     public static final String CMD_VERBOSE = "--verbose";
 
@@ -151,12 +140,6 @@ public class ArgumentParser {
             throw new IllegalArgumentException("Invalid value for " + name + ": " + val);
     };
 
-    /** */
-    private static final BiConsumer<String, Long> POSITIVE_LONG = (name, val) -> {
-        if (val <= 0)
-            throw new IllegalArgumentException("Invalid value for " + name + ": " + val);
-    };
-
     /** */
     private final List<CLIArgument<?>> common = new ArrayList<>();
 
@@ -186,11 +169,9 @@ public class ArgumentParser {
                 "Whenever possible, use interactive prompt for password (just discard %s option).", name, name));
 
         arg(CMD_HOST, "HOST_OR_IP", String.class, DFLT_HOST);
-        arg(CMD_PORT, "PORT", Integer.class, useConnectorConnection() ? DFLT_TCP_PORT : DFLT_PORT, PORT_VALIDATOR);
+        arg(CMD_PORT, "PORT", Integer.class, DFLT_PORT, PORT_VALIDATOR);
         arg(CMD_USER, "USER", String.class, null);
         arg(CMD_PASSWORD, "PASSWORD", String.class, null, (BiConsumer<String, String>)securityWarn);
-        arg(CMD_PING_INTERVAL, "PING_INTERVAL", Long.class, DFLT_PING_INTERVAL, POSITIVE_LONG);
-        arg(CMD_PING_TIMEOUT, "PING_TIMEOUT", Long.class, DFLT_PING_TIMEOUT, POSITIVE_LONG);
         arg(CMD_VERBOSE, CMD_VERBOSE, boolean.class, false);
         arg(CMD_SSL_PROTOCOL, "SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]", String[].class, new String[] {DFLT_SSL_PROTOCOL});
         arg(CMD_SSL_CIPHER_SUITES, "SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]", String[].class, null);
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliCommandInvoker.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliCommandInvoker.java
deleted file mode 100644
index 5d13e20c958..00000000000
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliCommandInvoker.java
+++ /dev/null
@@ -1,225 +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.commandline;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Collection;
-import java.util.List;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientBeforeNodeStart;
-import org.apache.ignite.internal.client.GridClientCompute;
-import org.apache.ignite.internal.client.GridClientConfiguration;
-import org.apache.ignite.internal.client.GridClientDisconnectedException;
-import org.apache.ignite.internal.client.GridClientException;
-import org.apache.ignite.internal.client.GridClientFactory;
-import org.apache.ignite.internal.client.GridClientNode;
-import org.apache.ignite.internal.dto.IgniteDataTransferObject;
-import org.apache.ignite.internal.management.api.BeforeNodeStartCommand;
-import org.apache.ignite.internal.management.api.Command;
-import org.apache.ignite.internal.management.api.CommandInvoker;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.lang.IgniteBiTuple;
-
-import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_HOST;
-
-/**
- * Adapter of new management API command for legacy {@code control.sh} execution flow.
- *
- * @deprecated Use {@link CliIgniteClientInvoker} instead. Will be removed in the next releases.
- */
-@Deprecated
-public class CliCommandInvoker<A extends IgniteDataTransferObject> extends CommandInvoker<A> implements CloseableCliCommandInvoker {
-    /** Client configuration. */
-    private final GridClientConfiguration clientCfg;
-
-    /** Client. */
-    private GridClient client;
-
-    /** @param cmd Command to execute. */
-    public CliCommandInvoker(Command<A, ?> cmd, A arg, GridClientConfiguration clientCfg) {
-        super(cmd, arg, null);
-        this.clientCfg = clientCfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String confirmationPrompt() {
-        return cmd.confirmationPrompt(arg);
-    }
-
-    /** {@inheritDoc} */
-    @Override public <R> R invokeBeforeNodeStart(Consumer<String> printer) throws Exception {
-        try (GridClientBeforeNodeStart client = startClientBeforeNodeStart(clientCfg)) {
-            return ((BeforeNodeStartCommand<A, R>)cmd).execute(client.beforeStartState(), arg, printer);
-        }
-        catch (GridClientDisconnectedException e) {
-            throw new GridClientException(e.getCause());
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override protected GridClientNode defaultNode() throws GridClientException {
-        GridClientNode node;
-
-        // Prefer node from connect string.
-        final String cfgAddr = clientCfg.getServers().iterator().next();
-
-        String[] parts = cfgAddr.split(":");
-
-        if (DFLT_HOST.equals(parts[0])) {
-            InetAddress addr;
-
-            try {
-                addr = IgniteUtils.getLocalHost();
-            }
-            catch (IOException e) {
-                throw new GridClientException("Can't get localhost name.", e);
-            }
-
-            if (addr.isLoopbackAddress())
-                throw new GridClientException("Can't find localhost name.");
-
-            String origAddr = addr.getHostName() + ":" + parts[1];
-
-            node = listHosts(client()).filter(tuple -> origAddr.equals(tuple.get2())).findFirst().map(IgniteBiTuple::get1).orElse(null);
-
-            if (node == null)
-                node = listHostsByClientNode(client()).filter(tuple -> tuple.get2().size() == 1 && cfgAddr.equals(tuple.get2().get(0))).
-                    findFirst().map(IgniteBiTuple::get1).orElse(null);
-        }
-        else
-            node = listHosts(client()).filter(tuple -> cfgAddr.equals(tuple.get2())).findFirst().map(IgniteBiTuple::get1).orElse(null);
-
-        // Otherwise choose random node.
-        if (node == null)
-            node = balancedNode(client().compute());
-
-        return node;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected GridClient client() throws GridClientException {
-        if (client != null && client.connected())
-            return client;
-
-        client = GridClientFactory.start(clientCfg);
-
-        // If connection is unsuccessful, fail before doing any operations:
-        if (!client.connected()) {
-            GridClientException lastErr = client.checkLastError();
-
-            try {
-                client.close();
-            }
-            catch (Throwable e) {
-                lastErr.addSuppressed(e);
-            }
-
-            throw lastErr;
-        }
-
-        return client;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void close() {
-        if (client != null)
-            client.close();
-    }
-
-    /**
-     * Method to create thin client for communication with node before it starts.
-     * If node has already started, there will be an error.
-     *
-     * @param clientCfg Thin client configuration.
-     * @return Grid thin client instance which is already connected to node before it starts.
-     * @throws Exception If error occur.
-     */
-    private static GridClientBeforeNodeStart startClientBeforeNodeStart(
-        GridClientConfiguration clientCfg
-    ) throws Exception {
-        GridClientBeforeNodeStart client = GridClientFactory.startBeforeNodeStart(clientCfg);
-
-        // If connection is unsuccessful, fail before doing any operations:
-        if (!client.connected()) {
-            GridClientException lastErr = client.checkLastError();
-
-            try {
-                client.close();
-            }
-            catch (Throwable e) {
-                lastErr.addSuppressed(e);
-            }
-
-            throw lastErr;
-        }
-
-        return client;
-    }
-
-    /**
-     * @param client Client.
-     * @return List of hosts.
-     */
-    private static Stream<IgniteBiTuple<GridClientNode, String>> listHosts(GridClient client) throws GridClientException {
-        return client.compute()
-            .nodes(GridClientNode::connectable)
-            .stream()
-            .flatMap(node -> Stream.concat(
-                node.tcpAddresses() == null ? Stream.empty() : node.tcpAddresses().stream(),
-                node.tcpHostNames() == null ? Stream.empty() : node.tcpHostNames().stream()
-            ).map(addr -> new IgniteBiTuple<>(node, addr + ":" + node.tcpPort())));
-    }
-
-    /**
-     * @param client Client.
-     * @return List of hosts.
-     */
-    private static Stream<IgniteBiTuple<GridClientNode, List<String>>> listHostsByClientNode(
-        GridClient client
-    ) throws GridClientException {
-        return client.compute().nodes(GridClientNode::connectable).stream()
-            .map(
-                node -> new IgniteBiTuple<>(
-                    node,
-                    Stream.concat(
-                            node.tcpAddresses() == null ? Stream.empty() : node.tcpAddresses().stream(),
-                            node.tcpHostNames() == null ? Stream.empty() : node.tcpHostNames().stream()
-                        )
-                        .map(addr -> addr + ":" + node.tcpPort()).collect(Collectors.toList())
-                )
-            );
-    }
-
-    /**
-     * @param compute instance
-     * @return balanced node
-     */
-    private static GridClientNode balancedNode(GridClientCompute compute) throws GridClientException {
-        Collection<GridClientNode> nodes = compute.nodes(GridClientNode::connectable);
-
-        if (F.isEmpty(nodes))
-            throw new GridClientDisconnectedException("Connectable node not found", null);
-
-        return compute.balancer().balancedNode(nodes);
-    }
-}
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliIgniteClientInvoker.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliIgniteClientInvoker.java
index 19e56ec50cb..391f9d4bbe3 100644
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliIgniteClientInvoker.java
+++ b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CliIgniteClientInvoker.java
@@ -23,17 +23,13 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.ClientConfiguration;
-import org.apache.ignite.internal.client.GridClientNode;
-import org.apache.ignite.internal.client.GridClientNodeStateBeforeStart;
 import org.apache.ignite.internal.client.thin.TcpIgniteClient;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.management.api.BeforeNodeStartCommand;
 import org.apache.ignite.internal.management.api.Command;
 import org.apache.ignite.internal.management.api.CommandInvoker;
-import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.MANAGEMENT_CLIENT_ATTR;
 import static org.apache.ignite.internal.processors.odbc.ClientListenerProcessor.CLIENT_LISTENER_PORT;
@@ -41,7 +37,7 @@ import static org.apache.ignite.internal.processors.odbc.ClientListenerProcessor
 /**
  * Adapter of new management API command for {@code control.sh} execution flow.
  */
-public class CliIgniteClientInvoker<A extends IgniteDataTransferObject> extends CommandInvoker<A> implements CloseableCliCommandInvoker {
+public class CliIgniteClientInvoker<A extends IgniteDataTransferObject> extends CommandInvoker<A> implements AutoCloseable {
     /** Client configuration. */
     private final ClientConfiguration cfg;
 
@@ -56,7 +52,7 @@ public class CliIgniteClientInvoker<A extends IgniteDataTransferObject> extends
     }
 
     /** {@inheritDoc} */
-    @Override protected GridClientNode defaultNode() {
+    @Override protected ClusterNode defaultNode() {
         String[] addr = cfg.getAddresses()[0].split(":");
 
         String host = addr[0];
@@ -64,13 +60,13 @@ public class CliIgniteClientInvoker<A extends IgniteDataTransferObject> extends
 
         Collection<ClusterNode> nodes = igniteClient().cluster().nodes();
 
-        return CommandUtils.clusterToClientNode(F.find(nodes, U.oldest(nodes, null), node ->
+        return F.find(nodes, U.oldest(nodes, null), node ->
             (node.hostNames().contains(host) || node.addresses().contains(host))
-                && port.equals(node.attribute(CLIENT_LISTENER_PORT).toString())));
+                && port.equals(node.attribute(CLIENT_LISTENER_PORT).toString()));
     }
 
     /** {@inheritDoc} */
-    @Override protected @Nullable IgniteClient igniteClient() {
+    @Override protected IgniteClient igniteClient() {
         if (client == null) {
             if (cmd instanceof BeforeNodeStartCommand) {
                 cfg.setUserAttributes(F.asMap(MANAGEMENT_CLIENT_ATTR, Boolean.TRUE.toString()));
@@ -83,18 +79,14 @@ public class CliIgniteClientInvoker<A extends IgniteDataTransferObject> extends
         return client;
     }
 
-    /** {@inheritDoc} */
-    @Override public String confirmationPrompt() {
+    /** @return Message text to show user for. {@code null} means that confirmantion is not required. */
+    public String confirmationPrompt() {
         return cmd.confirmationPrompt(arg);
     }
 
-    /** {@inheritDoc} */
-    @Override public <R> R invokeBeforeNodeStart(Consumer<String> printer) throws Exception {
-        return ((BeforeNodeStartCommand<A, R>)cmd).execute(new GridClientNodeStateBeforeStart() {
-            @Override public void stopWarmUp() {
-                ((TcpIgniteClient)igniteClient()).stopWarmUp();
-            }
-        }, arg, printer);
+    /** */
+    public <R> R invokeBeforeNodeStart(Consumer<String> printer) throws Exception {
+        return ((BeforeNodeStartCommand<A, R>)cmd).execute((TcpIgniteClient)igniteClient(), arg, printer);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CloseableCliCommandInvoker.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CloseableCliCommandInvoker.java
deleted file mode 100644
index f739c0a91c8..00000000000
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CloseableCliCommandInvoker.java
+++ /dev/null
@@ -1,38 +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.commandline;
-
-import java.util.function.Consumer;
-import org.apache.ignite.internal.management.api.CommandInvoker;
-
-/**
- * CLI command invoker.
- */
-public interface CloseableCliCommandInvoker extends AutoCloseable {
-    /** @return Message text to show user for. {@code null} means that confirmantion is not required. */
-    String confirmationPrompt();
-
-    /** @see CommandInvoker#prepare(Consumer) */
-    boolean prepare(Consumer<String> printer) throws Exception;
-
-    /** @see CommandInvoker#invoke(Consumer, boolean) */
-    <R> R invoke(Consumer<String> printer, boolean verbose) throws Exception;
-
-    /** */
-    <R> R invokeBeforeNodeStart(Consumer<String> printer) throws Exception;
-}
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index 4446ab51ce6..4c733407f62 100644
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++ b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -33,6 +33,7 @@ import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import javax.cache.configuration.Factory;
 import javax.net.ssl.SSLContext;
+import org.apache.ignite.IgniteAuthenticationException;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -41,14 +42,6 @@ import org.apache.ignite.client.ClientConnectionException;
 import org.apache.ignite.client.SslMode;
 import org.apache.ignite.configuration.ClientConfiguration;
 import org.apache.ignite.configuration.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.ConnectorConfiguration;
-import org.apache.ignite.internal.client.GridClientAuthenticationException;
-import org.apache.ignite.internal.client.GridClientClosedException;
-import org.apache.ignite.internal.client.GridClientConfiguration;
-import org.apache.ignite.internal.client.GridClientDisconnectedException;
-import org.apache.ignite.internal.client.GridClientHandshakeException;
-import org.apache.ignite.internal.client.GridServerUnreachableException;
-import org.apache.ignite.internal.client.impl.connection.GridClientConnectionResetException;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.logger.IgniteLoggerEx;
 import org.apache.ignite.internal.management.IgniteCommandRegistry;
@@ -70,9 +63,6 @@ import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteExperimental;
-import org.apache.ignite.plugin.security.SecurityCredentials;
-import org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider;
-import org.apache.ignite.plugin.security.SecurityCredentialsProvider;
 import org.apache.ignite.ssl.SslContextFactory;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.context.ApplicationContext;
@@ -139,12 +129,6 @@ public class CommandHandler {
     /** */
     public static final int DFLT_PORT = 10800;
 
-    /**
-     * System property for backward compatibility. Will be removed in future releases.
-     * Enables connection to {@link ConnectorConfiguration REST connector} and forcefully sets default port to 11211.
-     */
-    public static final String IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION = "IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION";
-
     /** */
     private final Scanner in = new Scanner(System.in);
 
@@ -267,13 +251,6 @@ public class CommandHandler {
 
             cmdName = toFormattedCommandName(args.cmdPath().peekLast().getClass()).toUpperCase();
 
-            if (useConnectorConnection() && !(args.command() instanceof HelpCommand)) {
-                logger.warning("WARNING: Deprecated protocol (ConnectorConfiguration) used to connect to cluster. " +
-                    "It will be removed in the next releases. Please update the control utility connection arguments " +
-                    "to use a thin client protocol: set up a port and/or SSL configuration " +
-                    "releated to the ClientConnectorConfiguration on nodes.");
-            }
-
             int tryConnectMaxCnt = 3;
 
             boolean suppliedAuth = !F.isEmpty(args.userName()) && !F.isEmpty(args.password());
@@ -282,19 +259,16 @@ public class CommandHandler {
 
             while (true) {
                 try (
-                    CloseableCliCommandInvoker invoker = useConnectorConnection()
-                        ? new CliCommandInvoker<>(args.command(), args.commandArg(), getClientConfiguration(args))
-                        : new CliIgniteClientInvoker<>(args.command(), args.commandArg(), clientConfiguration(args))
+                    CliIgniteClientInvoker<A> invoker =
+                         new CliIgniteClientInvoker<>(args.command(), args.commandArg(), clientConfiguration(args))
                 ) {
                     if (!invoker.prepare(logger::info))
                         return EXIT_CODE_OK;
 
-                    if (!args.autoConfirmation()) {
-                        if (!confirm(invoker.confirmationPrompt())) {
-                            logger.info("Operation cancelled.");
+                    if (!args.autoConfirmation() && !confirm(invoker.confirmationPrompt())) {
+                        logger.info("Operation cancelled.");
 
-                            return EXIT_CODE_OK;
-                        }
+                        return EXIT_CODE_OK;
                     }
 
                     logger.info("Command [" + cmdName + "] started");
@@ -311,7 +285,7 @@ public class CommandHandler {
                     else if (args.command() instanceof BeforeNodeStartCommand)
                         lastOperationRes = invoker.invokeBeforeNodeStart(logger::info);
                     else
-                        lastOperationRes = invoker.invoke(logger::info, args.verbose());
+                        lastOperationRes = invoker.invoke(logger::info);
 
                     break;
                 }
@@ -320,10 +294,10 @@ public class CommandHandler {
                         throw e;
 
                     if (suppliedAuth)
-                        throw new GridClientAuthenticationException("Wrong credentials.");
+                        throw new IgniteAuthenticationException("Wrong credentials.");
 
                     if (tryConnectMaxCnt == 0)
-                        throw new GridClientAuthenticationException("Maximum number of retries exceeded");
+                        throw new IgniteAuthenticationException("Maximum number of retries exceeded");
 
                     logger.info(credentialsRequested ?
                         "Authentication error, please try again." :
@@ -372,11 +346,7 @@ public class CommandHandler {
                 }
 
                 logger.error("Make sure you are connecting to the client connector (configured on a node via '" +
-                    ClientConnectorConfiguration.class.getName() + "'). Connection to the REST connector was " +
-                    "deprecated and will be removed for the control utility in future releases. Set up the '" +
-                    IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION + "' system property to the 'true' to " +
-                    "forcefully connect to the REST connector (configured on a node via '" +
-                    ConnectorConfiguration.class.getName() + "'). ");
+                    ClientConnectorConfiguration.class.getName() + "')");
 
                 logger.info("Command [" + cmdName + "] finished with code: " + EXIT_CODE_CONNECTION_FAILED);
 
@@ -472,26 +442,7 @@ public class CommandHandler {
      * to secured cluster.
      */
     private boolean isConnectionClosedSilentlyException(Throwable e) {
-        if (e instanceof ClientConnectionException && e.getMessage().startsWith("Channel is closed"))
-            return true;
-
-        if (!(e instanceof GridClientDisconnectedException))
-            return false;
-
-        Throwable cause = e.getCause();
-
-        if (cause == null)
-            return false;
-
-        cause = cause.getCause();
-
-        if (cause instanceof GridClientConnectionResetException &&
-            cause.getMessage() != null &&
-            cause.getMessage().contains("Failed to perform handshake")
-        )
-            return true;
-
-        return false;
+        return e instanceof ClientConnectionException && e.getMessage().startsWith("Channel is closed");
     }
 
     /**
@@ -554,75 +505,6 @@ public class CommandHandler {
         return clientCfg;
     }
 
-    /**
-     * @param args Common arguments.
-     * @return Thin client configuration to connect to cluster.
-     * @throws IgniteCheckedException If error occur.
-     */
-    @NotNull private GridClientConfiguration getClientConfiguration(
-        ConnectionAndSslParameters args
-    ) throws IgniteCheckedException {
-        return getClientConfiguration(args.userName(), args.password(), args);
-    }
-
-    /**
-     * @param userName User name for authorization.
-     * @param password Password for authorization.
-     * @param args Common arguments.
-     * @return Thin client configuration to connect to cluster.
-     * @throws IgniteCheckedException If error occur.
-     */
-    @NotNull private GridClientConfiguration getClientConfiguration(
-        String userName,
-        String password,
-        ConnectionAndSslParameters args
-    ) throws IgniteCheckedException {
-        GridClientConfiguration clientCfg = new GridClientConfiguration();
-
-        clientCfg.setPingInterval(args.pingInterval());
-
-        clientCfg.setPingTimeout(args.pingTimeout());
-
-        clientCfg.setServers(Collections.singletonList(args.host() + ":" + args.port()));
-
-        if (!F.isEmpty(userName))
-            clientCfg.setSecurityCredentialsProvider(getSecurityCredentialsProvider(userName, password, clientCfg));
-
-        if (!F.isEmpty(args.sslKeyStorePath()) || !F.isEmpty(args.sslFactoryConfigPath())) {
-            if (!F.isEmpty(args.sslKeyStorePath()) && !F.isEmpty(args.sslFactoryConfigPath()))
-                throw new IllegalArgumentException("Incorrect SSL configuration. " +
-                    "SSL factory config path should not be specified simultaneously with other SSL options like keystore path.");
-
-            clientCfg.setSslContextFactory(createSslSupportFactory(args));
-        }
-
-        return clientCfg;
-    }
-
-    /**
-     * @param userName User name for authorization.
-     * @param password Password for authorization.
-     * @param clientCfg Thin client configuration to connect to cluster.
-     * @return Security credentials provider with usage of given user name and password.
-     * @throws IgniteCheckedException If error occur.
-     */
-    @NotNull private SecurityCredentialsProvider getSecurityCredentialsProvider(
-        String userName,
-        String password,
-        GridClientConfiguration clientCfg
-    ) throws IgniteCheckedException {
-        SecurityCredentialsProvider securityCredential = clientCfg.getSecurityCredentialsProvider();
-
-        if (securityCredential == null)
-            return new SecurityCredentialsBasicProvider(new SecurityCredentials(userName, password));
-
-        final SecurityCredentials credential = securityCredential.credentials();
-        credential.setLogin(userName);
-        credential.setPassword(password);
-
-        return securityCredential;
-    }
-
     /**
      * @param args Commond args.
      * @return Ssl support factory.
@@ -718,8 +600,7 @@ public class CommandHandler {
      * @return {@code true} if specified exception is an authentication exception.
      */
     public static boolean isAuthError(Throwable e) {
-        return X.hasCause(e, GridClientAuthenticationException.class)
-            || X.hasCause(e, ClientAuthenticationException.class);
+        return X.hasCause(e, ClientAuthenticationException.class);
     }
 
     /**
@@ -727,12 +608,7 @@ public class CommandHandler {
      * @return {@code true} if specified exception is a connection error.
      */
     private static boolean isConnectionError(Throwable e) {
-        return e instanceof GridClientClosedException ||
-            e instanceof GridClientConnectionResetException ||
-            e instanceof GridClientDisconnectedException ||
-            e instanceof GridClientHandshakeException ||
-            e instanceof GridServerUnreachableException ||
-            X.hasCause(e, ClientConnectionException.class);
+        return X.hasCause(e, ClientConnectionException.class);
     }
 
     /**
@@ -1010,11 +886,6 @@ public class CommandHandler {
         }
     }
 
-    /** */
-    public static boolean useConnectorConnection() {
-        return getBoolean(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION);
-    }
-
     /** */
     public static class CommandName implements Consumer<Object> {
         /** */
diff --git a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
index f9a9397d8b6..1d001a4c19e 100644
--- a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
+++ b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/ConnectionAndSslParameters.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.commandline;
 
 import java.util.Deque;
-import org.apache.ignite.internal.client.GridClientConfiguration;
 import org.apache.ignite.internal.commandline.argument.parser.CLIArgumentParser;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.management.api.Command;
@@ -30,8 +29,6 @@ import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_KEYSTORE
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_KEYSTORE_PASSWORD;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_KEYSTORE_TYPE;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_PASSWORD;
-import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_PING_INTERVAL;
-import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_PING_TIMEOUT;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_PORT;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_SSL_CIPHER_SUITES;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_SSL_FACTORY;
@@ -149,24 +146,6 @@ public class ConnectionAndSslParameters<A extends IgniteDataTransferObject> {
         this.pwd = pwd;
     }
 
-    /**
-     * See {@link GridClientConfiguration#getPingInterval()}.
-     *
-     * @return Ping timeout.
-     */
-    public long pingTimeout() {
-        return parser.get(CMD_PING_TIMEOUT);
-    }
-
-    /**
-     * See {@link GridClientConfiguration#getPingInterval()}.
-     *
-     * @return Ping interval.
-     */
-    public long pingInterval() {
-        return parser.get(CMD_PING_INTERVAL);
-    }
-
     /**
      * @return Auto confirmation option.
      */
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
index 0a0519512da..8a816611c24 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
@@ -586,18 +586,13 @@ public class CommandHandlerParsingTest {
             assertEquals(DFLT_HOST, args.host());
             assertEquals(DFLT_PORT, args.port());
 
-            args = parseArgs(asList("--port", "12345", "--host", "test-host", "--ping-interval", "5000",
-                "--ping-timeout", "40000", name));
+            args = parseArgs(asList("--port", "12345", "--host", "test-host", name));
 
             assertEquals(cmd.getClass(), args.command().getClass());
             assertEquals("test-host", args.host());
             assertEquals(12345, args.port());
-            assertEquals(5000, args.pingInterval());
-            assertEquals(40000, args.pingTimeout());
 
             assertParseArgsThrows("Can't parse number 'wrong-port'", "--port", "wrong-port", name);
-            assertParseArgsThrows("Invalid value for --ping-interval: -10", "--ping-interval", "-10", name);
-            assertParseArgsThrows("Invalid value for --ping-timeout: -20", "--ping-timeout", "-20", name);
         });
     }
 
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/SecurityCommandHandlerPermissionsTest.java b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/SecurityCommandHandlerPermissionsTest.java
index c56d8e21990..9587f2a1b22 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/SecurityCommandHandlerPermissionsTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/SecurityCommandHandlerPermissionsTest.java
@@ -65,7 +65,7 @@ public class SecurityCommandHandlerPermissionsTest extends GridCommandHandlerAbs
     /** */
     @Parameterized.Parameters(name = "cmdHnd={0}")
     public static List<String> commandHandlers() {
-        return F.asList(CLI_CMD_HND, CLI_GRID_CLIENT_CMD_HND);
+        return F.asList(CLI_CMD_HND);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
index aeb0a57c96e..81b15f0bd10 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
@@ -156,7 +156,7 @@ public class IgniteIndexReaderTest extends GridCommandHandlerAbstractTest {
     /** */
     @Parameterized.Parameters(name = "cmdHnd={0}")
     public static List<String> commandHandlers() {
-        return F.asList(CLI_CMD_HND, CLI_GRID_CLIENT_CMD_HND);
+        return F.asList(CLI_CMD_HND);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/internal/processors/security/GridCommandHandlerSslWithSecurityTest.java b/modules/control-utility/src/test/java/org/apache/ignite/internal/processors/security/GridCommandHandlerSslWithSecurityTest.java
index 37797d9f4e2..b3fe7c8e38a 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/internal/processors/security/GridCommandHandlerSslWithSecurityTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/internal/processors/security/GridCommandHandlerSslWithSecurityTest.java
@@ -24,7 +24,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.configuration.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.commandline.CommandHandler;
@@ -102,13 +101,6 @@ public class GridCommandHandlerSslWithSecurityTest extends GridCommandHandlerFac
             .setPluginProviders(new TestSecurityPluginProvider(login, pwd, ALL_PERMISSIONS, null, false))
             .setSslContextFactory(sslTrustedFactory("node01", "trustone"));
 
-        if (commandHandler.equals(CLI_GRID_CLIENT_CMD_HND)) {
-            cfg.setConnectorConfiguration(new ConnectorConfiguration()
-                .setSslEnabled(true)
-                .setSslFactory(sslTrustedFactory("connectorServer", "trustthree"))
-            );
-        }
-
         if (commandHandler.equals(CLI_CMD_HND)) {
             cfg.setClientConnectorConfiguration(new ClientConnectorConfiguration()
                 .setSslEnabled(true)
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java b/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
index 83146274ef5..968ac614a08 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/testsuites/IgniteControlUtilityTestSuite.java
@@ -33,7 +33,6 @@ import org.apache.ignite.util.GridCommandHandlerIndexingClusterByClassTest;
 import org.apache.ignite.util.GridCommandHandlerIndexingClusterByClassWithSSLTest;
 import org.apache.ignite.util.GridCommandHandlerIndexingTest;
 import org.apache.ignite.util.GridCommandHandlerIndexingWithSSLTest;
-import org.apache.ignite.util.GridCommandHandlerInterruptCommandTest;
 import org.apache.ignite.util.GridCommandHandlerLegacyClientTest;
 import org.apache.ignite.util.GridCommandHandlerMetadataTest;
 import org.apache.ignite.util.GridCommandHandlerSslTest;
@@ -68,7 +67,6 @@ import org.junit.runners.Suite;
     GridCommandHandlerIndexingClusterByClassWithSSLTest.class,
     GridCommandHandlerIndexingCheckSizeTest.class,
     GridCommandHandlerCheckIndexesInlineSizeTest.class,
-    GridCommandHandlerInterruptCommandTest.class,
     GridCommandHandlerMetadataTest.class,
     GridCommandHandlerCheckIncrementalSnapshotTest.class,
     GridCommandHandlerLegacyClientTest.class,
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
index cc4054a3ed2..621c4264614 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerAbstractTest.java
@@ -49,7 +49,6 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.WALMode;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
-import org.apache.ignite.internal.client.GridClientFactory;
 import org.apache.ignite.internal.commandline.CommandHandler;
 import org.apache.ignite.internal.management.cache.CacheIdleVerifyCommand;
 import org.apache.ignite.internal.processors.cache.GridCacheFuture;
@@ -78,7 +77,6 @@ import static org.apache.ignite.configuration.DataStorageConfiguration.DFLT_CHEC
 import static org.apache.ignite.configuration.EncryptionConfiguration.DFLT_REENCRYPTION_BATCH_SIZE;
 import static org.apache.ignite.configuration.EncryptionConfiguration.DFLT_REENCRYPTION_RATE_MBPS;
 import static org.apache.ignite.events.EventType.EVT_CONSISTENCY_VIOLATION;
-import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_REST_TCP_PORT;
 import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_AUTO_CONFIRMATION;
 import static org.apache.ignite.internal.encryption.AbstractEncryptionTest.KEYSTORE_PASSWORD;
 import static org.apache.ignite.internal.encryption.AbstractEncryptionTest.KEYSTORE_PATH;
@@ -184,8 +182,6 @@ public abstract class GridCommandHandlerAbstractTest extends GridCommandHandlerF
         for (File f : logDir.listFiles(n -> n.getName().startsWith(CacheIdleVerifyCommand.IDLE_VERIFY_FILE_PREFIX)))
             U.delete(f);
 
-        GridClientFactory.stopAll(false);
-
         stopAllGrids(true);
 
         cleanPersistenceDir();
@@ -206,8 +202,6 @@ public abstract class GridCommandHandlerAbstractTest extends GridCommandHandlerF
         testOut.reset();
 
         encryptionEnabled = false;
-
-        GridClientFactory.stopAll(false);
     }
 
     /** {@inheritDoc} */
@@ -536,8 +530,6 @@ public abstract class GridCommandHandlerAbstractTest extends GridCommandHandlerF
 
     /** */
     protected String connectorPort(IgniteEx srv) {
-        return srv.localNode().attribute(commandHandler.equals(CLI_GRID_CLIENT_CMD_HND)
-            ? ATTR_REST_TCP_PORT
-            : CLIENT_LISTENER_PORT).toString();
+        return srv.localNode().attribute(CLIENT_LISTENER_PORT).toString();
     }
 }
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerFactoryAbstractTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerFactoryAbstractTest.java
index cedce0e4d78..5c84a7030e9 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerFactoryAbstractTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerFactoryAbstractTest.java
@@ -59,7 +59,6 @@ import org.junit.runners.Parameterized;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_INVALID_ARGUMENTS;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
-import static org.apache.ignite.internal.commandline.CommandHandler.IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION;
 import static org.apache.ignite.internal.commandline.CommandHandler.setupJavaLogger;
 import static org.apache.ignite.internal.commandline.CommandLogger.errorMessage;
 import static org.apache.ignite.internal.management.api.CommandMBean.INVOKE;
@@ -76,9 +75,6 @@ public class GridCommandHandlerFactoryAbstractTest extends GridCommonAbstractTes
     /** @see JmxCommandHandler */
     public static final String JMX_CMD_HND = "jmx";
 
-    /** @see CliCommandHandler */
-    public static final String CLI_GRID_CLIENT_CMD_HND = "cli_GridClient";
-
     /** @see CliCommandHandler */
     public static final String CLI_CMD_HND = "cli";
 
@@ -126,7 +122,7 @@ public class GridCommandHandlerFactoryAbstractTest extends GridCommonAbstractTes
 
     /** */
     protected boolean cliCommandHandler() {
-        return commandHandler.equals(CLI_CMD_HND) || commandHandler.equals(CLI_GRID_CLIENT_CMD_HND);
+        return commandHandler.equals(CLI_CMD_HND);
     }
 
     /** */
@@ -144,36 +140,6 @@ public class GridCommandHandlerFactoryAbstractTest extends GridCommonAbstractTes
         public String name();
     }
 
-    /** */
-    public static class CliGridClientCommandHandler extends CliCommandHandler {
-        /** */
-        public CliGridClientCommandHandler() {
-            super();
-        }
-
-        /** */
-        public CliGridClientCommandHandler(@Nullable IgniteLogger log) {
-            super(log);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int execute(List<String> rawArgs) {
-            System.setProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION, "true");
-
-            try {
-                return super.execute(rawArgs);
-            }
-            finally {
-                System.clearProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION);
-            }
-        }
-
-        /** {@inheritDoc} */
-        @Override public String name() {
-            return CLI_GRID_CLIENT_CMD_HND;
-        }
-    }
-
     /** */
     public static class CliCommandHandler implements TestCommandHandler {
         /** */
@@ -374,8 +340,6 @@ public class GridCommandHandlerFactoryAbstractTest extends GridCommonAbstractTes
     protected int commandHandlerExtraLines() {
         return CLI_CMD_HND.equals(commandHandler)
             ? 11
-            : CLI_GRID_CLIENT_CMD_HND.equals(commandHandler)
-                ? 12 // Deprecation message.
-                : 0;
+            : 0;
     }
 }
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerInterruptCommandTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerInterruptCommandTest.java
deleted file mode 100644
index 929468dbcc7..00000000000
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerInterruptCommandTest.java
+++ /dev/null
@@ -1,347 +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.util;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.ignite.IgniteDataStreamer;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.QueryEntity;
-import org.apache.ignite.cache.QueryIndex;
-import org.apache.ignite.cache.QueryIndexType;
-import org.apache.ignite.cluster.ClusterState;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.DataRegionConfiguration;
-import org.apache.ignite.configuration.DataStorageConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.events.DeploymentEvent;
-import org.apache.ignite.events.EventType;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.management.cache.IdleVerifyTask;
-import org.apache.ignite.internal.management.cache.ValidateIndexesClosure;
-import org.apache.ignite.internal.management.cache.ValidateIndexesTask;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.ListeningTestLogger;
-import org.apache.ignite.testframework.LogListener;
-import org.junit.Assume;
-import org.junit.Test;
-
-import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
-import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
-
-/**
- * Checks cancel of execution validate_indexes command.
- */
-public class GridCommandHandlerInterruptCommandTest extends GridCommandHandlerAbstractTest {
-    /** Load loop cycles. */
-    private static final int LOAD_LOOP = 500_000;
-
-    /** Idle verify task name. */
-    private static final String IDLE_VERIFY_TASK = IdleVerifyTask.class.getName();
-
-    /** Validate index task name. */
-    private static final String VALIDATE_INDEX_TASK = ValidateIndexesTask.class.getName();
-
-    /** Log listener. */
-    private ListeningTestLogger lnsrLog;
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        Assume.assumeTrue(commandHandler.equals(CLI_GRID_CLIENT_CMD_HND));
-
-        super.beforeTest();
-
-        cleanPersistenceDir();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        stopAllGrids();
-
-        cleanPersistenceDir();
-
-        super.afterTest();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        return super.getConfiguration(igniteInstanceName)
-            .setGridLogger(lnsrLog)
-            .setDataStorageConfiguration(new DataStorageConfiguration()
-                .setDefaultDataRegionConfiguration(new DataRegionConfiguration()
-                    .setPersistenceEnabled(true)
-                    .setInitialSize(200L * 1024 * 1024)
-                    .setMaxSize(200L * 1024 * 1024)
-                )
-            )
-            .setIncludeEventTypes(EventType.EVT_TASK_DEPLOYED)
-            .setCacheConfiguration(new CacheConfiguration<Integer, UserValue>(DEFAULT_CACHE_NAME)
-                .setName(DEFAULT_CACHE_NAME)
-                .setQueryEntities(Collections.singleton(createQueryEntity())));
-    }
-
-    /**
-     * Creates predifened query entity.
-     *
-     * @return Query entity.
-     */
-    private QueryEntity createQueryEntity() {
-        QueryEntity qryEntity = new QueryEntity();
-        qryEntity.setKeyType(Integer.class.getTypeName());
-        qryEntity.setValueType(UserValue.class.getName());
-        qryEntity.setTableName("USER_TEST_TABLE");
-
-        LinkedHashMap<String, String> fields = new LinkedHashMap<>();
-        fields.put("x", "java.lang.Integer");
-        fields.put("y", "java.lang.Integer");
-        fields.put("z", "java.lang.Integer");
-        qryEntity.setFields(fields);
-
-        LinkedHashMap<String, Boolean> idxFields = new LinkedHashMap<>();
-
-        QueryIndex idx2 = new QueryIndex();
-        idx2.setName("IDX_2");
-        idx2.setIndexType(QueryIndexType.SORTED);
-        idxFields = new LinkedHashMap<>();
-        idxFields.put("x", false);
-        idx2.setFields(idxFields);
-
-        QueryIndex idx3 = new QueryIndex();
-        idx3.setName("IDX_3");
-        idx3.setIndexType(QueryIndexType.SORTED);
-        idxFields = new LinkedHashMap<>();
-        idxFields.put("y", false);
-        idx3.setFields(idxFields);
-
-        QueryIndex idx4 = new QueryIndex();
-        idx4.setName("IDX_4");
-        idx4.setIndexType(QueryIndexType.SORTED);
-        idxFields = new LinkedHashMap<>();
-        idxFields.put("z", false);
-        idx4.setFields(idxFields);
-
-        qryEntity.setIndexes(Arrays.asList(idx2, idx3, idx4));
-        return qryEntity;
-    }
-
-    /**
-     * User value.
-     */
-    private static class UserValue {
-        /** X. */
-        private int x;
-
-        /** Y. */
-        private int y;
-
-        /** Z. */
-        private int z;
-
-        /**
-         * @param x X.
-         * @param y Y.
-         * @param z Z.
-         */
-        public UserValue(int x, int y, int z) {
-            this.x = x;
-            this.y = y;
-            this.z = z;
-        }
-
-        /**
-         * @param seed Seed.
-         */
-        public UserValue(long seed) {
-            x = (int)(seed % 6991);
-            y = (int)(seed % 18679);
-            z = (int)(seed % 31721);
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return S.toString(UserValue.class, this);
-        }
-    }
-
-    /**
-     * Checks that validate_indexes command will cancel after it interrupted.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testValidateIndexesCommand() throws Exception {
-        lnsrLog = new ListeningTestLogger(log);
-
-        IgniteEx ignite = startGrid(0);
-
-        ignite.cluster().state(ClusterState.ACTIVE);
-
-        preloadeData(ignite);
-
-        CountDownLatch startTaskLatch = waitForTaskEvent(ignite, VALIDATE_INDEX_TASK);
-
-        LogListener lnsrValidationCancelled = LogListener.matches("Index validation was cancelled.").build();
-
-        lnsrLog.registerListener(lnsrValidationCancelled);
-
-        IgniteInternalFuture fut = GridTestUtils.runAsync(() ->
-            assertSame(EXIT_CODE_UNEXPECTED_ERROR, execute("--cache", "validate_indexes")));
-
-        startTaskLatch.await();
-
-        fut.cancel();
-
-        fut.get();
-
-        assertTrue(GridTestUtils.waitForCondition(() ->
-            ignite.compute().activeTaskFutures().isEmpty(), 10_000));
-
-        assertTrue(GridTestUtils.waitForCondition(lnsrValidationCancelled::check, 10_000));
-    }
-
-    /**
-     * Checks that idle verify command will not cancel if initiator client interrupted.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testIdleVerifyCommand() throws Exception {
-        lnsrLog = new ListeningTestLogger(log);
-
-        IgniteEx ignite = startGrid(0);
-
-        ignite.cluster().state(ClusterState.ACTIVE);
-
-        preloadeData(ignite);
-
-        CountDownLatch startTaskLatch = waitForTaskEvent(ignite, IDLE_VERIFY_TASK);
-
-        LogListener lnsrValidationCancelled = LogListener.matches("The check procedure was cancelled.").build();
-        LogListener lnsrIdleVerifyStart = LogListener.matches("Idle verify procedure has started").build();
-        LogListener lnsrIdleVerifyFinish = LogListener.matches("Idle verify procedure has finished").build();
-
-        lnsrLog.registerListener(lnsrValidationCancelled);
-        lnsrLog.registerListener(lnsrIdleVerifyStart);
-        lnsrLog.registerListener(lnsrIdleVerifyFinish);
-
-        assertEquals(EXIT_CODE_OK, execute("--cache", "idle_verify", "--dump"));
-
-        assertTrue(lnsrIdleVerifyStart.check());
-        assertTrue(lnsrIdleVerifyFinish.check());
-
-        lnsrIdleVerifyStart.reset();
-        lnsrIdleVerifyFinish.reset();
-
-        IgniteInternalFuture fut = GridTestUtils.runAsync(() ->
-            assertSame(EXIT_CODE_UNEXPECTED_ERROR, execute("--cache", "idle_verify")));
-
-        startTaskLatch.await();
-
-        fut.cancel();
-
-        fut.get();
-
-        assertTrue(GridTestUtils.waitForCondition(() ->
-            ignite.compute().activeTaskFutures().isEmpty(), 30_000));
-
-        assertTrue(lnsrIdleVerifyStart.check());
-        assertTrue(lnsrIdleVerifyFinish.check());
-        assertFalse(lnsrValidationCancelled.check());
-    }
-
-    /**
-     * Method subscribe on task event and return a latch for waiting.
-     *
-     * @param ignite Ignite.
-     * @param taskName Task name.
-     * @return Latch which will open after event received.
-     */
-
-    private CountDownLatch waitForTaskEvent(IgniteEx ignite, String taskName) {
-        CountDownLatch startTaskLatch = new CountDownLatch(1);
-
-        ignite.events().localListen((evt) -> {
-            assertTrue(evt instanceof DeploymentEvent);
-
-            if (taskName.equals(((DeploymentEvent)evt).alias())) {
-                startTaskLatch.countDown();
-
-                return false;
-            }
-
-            return true;
-        }, EventType.EVT_TASK_DEPLOYED);
-        return startTaskLatch;
-    }
-
-    /**
-     * Preload data to default cache.
-     *
-     * @param ignite Ignite.
-     */
-    private void preloadeData(IgniteEx ignite) {
-        try (IgniteDataStreamer streamr = ignite.dataStreamer(DEFAULT_CACHE_NAME)) {
-            for (int i = 0; i < LOAD_LOOP; i++)
-                streamr.addData(i, new UserValue(i));
-        }
-    }
-
-    /**
-     * Test invokes index validation closure and canceling it after started.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCancelValidateIndexesClosure() throws Exception {
-        IgniteEx ignite0 = startGrid(0);
-
-        ignite0.cluster().state(ClusterState.ACTIVE);
-
-        preloadeData(ignite0);
-
-        AtomicBoolean cancelled = new AtomicBoolean(false);
-
-        ValidateIndexesClosure clo = new ValidateIndexesClosure(cancelled::get, Collections.singleton(DEFAULT_CACHE_NAME),
-            0, 0, false, true);
-
-        ListeningTestLogger listeningLog = new ListeningTestLogger(log);
-
-        GridTestUtils.setFieldValue(clo, "ignite", ignite0);
-        GridTestUtils.setFieldValue(clo, "log", listeningLog);
-
-        LogListener lnsrValidationStarted = LogListener.matches("Current progress of ValidateIndexesClosure").build();
-
-        listeningLog.registerListener(lnsrValidationStarted);
-
-        IgniteInternalFuture fut = GridTestUtils.runAsync(() ->
-            GridTestUtils.assertThrows(log, clo::call, IgniteException.class, ValidateIndexesClosure.CANCELLED_MSG));
-
-        assertTrue(GridTestUtils.waitForCondition(lnsrValidationStarted::check, 10_000));
-
-        assertFalse(fut.isDone());
-
-        cancelled.set(true);
-
-        fut.get(10_000);
-    }
-}
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerLegacyClientTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerLegacyClientTest.java
index 9e95efdaee3..6bcb78870f7 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerLegacyClientTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerLegacyClientTest.java
@@ -28,7 +28,6 @@ import org.apache.ignite.testframework.junits.GridAbstractTest;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
-import static org.apache.ignite.internal.commandline.CommandHandler.IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION;
 import static org.apache.ignite.testframework.GridTestUtils.keyStorePassword;
 import static org.apache.ignite.testframework.GridTestUtils.keyStorePath;
 import static org.apache.ignite.testframework.GridTestUtils.sslTrustedFactory;
@@ -60,17 +59,6 @@ public class GridCommandHandlerLegacyClientTest extends GridCommonAbstractTest {
                 .setPort(port)));
 
         checkExecute("Make sure you are connecting to the client connector", "--port", String.valueOf(port), "--state");
-
-        System.setProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION, "true");
-
-        try {
-            checkExecute("Cluster state: ACTIVE", "--port", String.valueOf(port), "--state");
-        }
-        finally {
-            System.clearProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION);
-        }
-
-        checkExecute("Cluster state: ACTIVE", "--state");
     }
 
     /** */
@@ -92,20 +80,6 @@ public class GridCommandHandlerLegacyClientTest extends GridCommonAbstractTest {
             "--truststore-password", keyStorePassword(),
             "--state");
 
-        System.setProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION, "true");
-
-        try {
-            checkExecute("Cluster state: ACTIVE",
-                "--keystore", GridTestUtils.keyStorePath("connectorClient"),
-                "--keystore-password", GridTestUtils.keyStorePassword(),
-                "--truststore", keyStorePath("trustthree"),
-                "--truststore-password", keyStorePassword(),
-                "--state");
-        }
-        finally {
-            System.clearProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION);
-        }
-
         checkExecute("Cluster state: ACTIVE",
             "--keystore", GridTestUtils.keyStorePath("thinClient"),
             "--keystore-password", GridTestUtils.keyStorePassword(),
@@ -122,15 +96,6 @@ public class GridCommandHandlerLegacyClientTest extends GridCommonAbstractTest {
             .setConnectorConfiguration(new ConnectorConfiguration()));
 
         checkExecute("Make sure you are connecting to the client connector", "--state");
-
-        System.setProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION, "true");
-
-        try {
-            checkExecute("Cluster state: ACTIVE", "--state");
-        }
-        finally {
-            System.clearProperty(IGNITE_CONTROL_UTILITY_USE_CONNECTOR_CONNECTION);
-        }
     }
 
     /** */
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
index c393f3bc81d..0514bcaf416 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerSslTest.java
@@ -22,7 +22,6 @@ import java.util.Arrays;
 import java.util.List;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.configuration.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.util.typedef.F;
@@ -71,11 +70,6 @@ public class GridCommandHandlerSslTest extends GridCommandHandlerClusterPerMetho
 
         cfg.setSslContextFactory(createSslFactory());
 
-        if (commandHandler.equals(CLI_GRID_CLIENT_CMD_HND)) {
-            cfg.setConnectorConfiguration(new ConnectorConfiguration()
-                .setSslEnabled(true));
-        }
-
         if (commandHandler.equals(CLI_CMD_HND)) {
             cfg.setClientConnectorConfiguration(new ClientConnectorConfiguration()
                 .setSslEnabled(true));
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index a7eb5163cd1..7cb8d582ba7 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -31,7 +31,6 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -83,9 +82,6 @@ import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
-import org.apache.ignite.internal.client.GridClientFactory;
-import org.apache.ignite.internal.client.impl.GridClientImpl;
-import org.apache.ignite.internal.client.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceTaskResult;
 import org.apache.ignite.internal.management.cache.IdleVerifyDumpTask;
 import org.apache.ignite.internal.management.cache.VerifyBackupPartitionsTask;
@@ -121,6 +117,7 @@ import org.apache.ignite.internal.processors.cluster.GridClusterStateProcessor;
 import org.apache.ignite.internal.processors.datastreamer.DataStreamerRequest;
 import org.apache.ignite.internal.processors.metric.MetricRegistryImpl;
 import org.apache.ignite.internal.util.BasicRateLimiter;
+import org.apache.ignite.internal.util.GridConcurrentHashSet;
 import org.apache.ignite.internal.util.distributed.SingleNodeMessage;
 import org.apache.ignite.internal.util.future.IgniteFinishedFutureImpl;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
@@ -166,7 +163,6 @@ import static org.apache.ignite.cluster.ClusterState.INACTIVE;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static org.apache.ignite.internal.commandline.CommandHandler.CONFIRM_MSG;
-import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_CONNECTION_FAILED;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_INVALID_ARGUMENTS;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
 import static org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
@@ -309,36 +305,6 @@ public class GridCommandHandlerTest extends GridCommandHandlerClusterPerMethodAb
             assertContains(log, testOut.toString(), "Command deprecated. Use --set-state instead.");
     }
 
-    /**
-     * Test clients leakage.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testClientsLeakage() throws Exception {
-        Assume.assumeTrue(cliCommandHandler());
-
-        startGrids(1);
-
-        Map<UUID, GridClientImpl> clnts = U.field(GridClientFactory.class, "openClients");
-
-        Map<UUID, GridClientImpl> clntsBefore = new HashMap<>(clnts);
-
-        assertEquals(EXIT_CODE_OK, execute("--set-state", "ACTIVE"));
-
-        Map<UUID, GridClientImpl> clntsAfter1 = new HashMap<>(clnts);
-
-        assertTrue("Still opened clients: " + new ArrayList<>(clnts.values()), clntsBefore.equals(clntsAfter1));
-
-        stopAllGrids();
-
-        assertEquals(EXIT_CODE_CONNECTION_FAILED, execute("--set-state", "ACTIVE"));
-
-        Map<UUID, GridClientImpl> clntsAfter2 = new HashMap<>(clnts);
-
-        assertTrue("Still opened clients: " + new ArrayList<>(clnts.values()), clntsBefore.equals(clntsAfter2));
-    }
-
     /** */
     private CacheConfiguration cacheConfiguration(String cacheName) {
         CacheConfiguration ccfg = new CacheConfiguration(cacheName)
diff --git a/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$TestCommandHandler b/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$TestCommandHandler
index e9dc47698fe..adfad811015 100644
--- a/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$TestCommandHandler
+++ b/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$TestCommandHandler
@@ -1,3 +1,2 @@
 org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$JmxCommandHandler
-org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$CliCommandHandler
-org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$CliGridClientCommandHandler
\ No newline at end of file
+org.apache.ignite.util.GridCommandHandlerFactoryAbstractTest$CliCommandHandler
\ No newline at end of file
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/ActivateCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/ActivateCommand.java
index 8442afcd8ce..fc80456cdb5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/ActivateCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/ActivateCommand.java
@@ -20,9 +20,6 @@ package org.apache.ignite.internal.management;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientClusterState;
-import org.apache.ignite.internal.client.GridClientException;
 import org.apache.ignite.internal.management.api.LocalCommand;
 import org.apache.ignite.internal.management.api.NoArg;
 import org.jetbrains.annotations.Nullable;
@@ -44,18 +41,12 @@ public class ActivateCommand implements LocalCommand<NoArg, NoArg> {
 
     /** {@inheritDoc} */
     @Override public NoArg execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         NoArg arg,
         Consumer<String> printer
-    ) throws GridClientException {
-        if (cli != null) {
-            GridClientClusterState state = cli.state();
-
-            state.state(ACTIVE, false);
-        }
-        else if (client != null)
+    ) {
+        if (client != null)
             client.cluster().state(ACTIVE);
         else
             ignite.cluster().state(ACTIVE);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/DeactivateCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/DeactivateCommand.java
index 11b98852a77..7ab7eb25193 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/DeactivateCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/DeactivateCommand.java
@@ -21,11 +21,8 @@ import java.util.Collections;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientClusterState;
-import org.apache.ignite.internal.client.GridClientException;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.client.thin.ClientClusterImpl;
 import org.apache.ignite.internal.cluster.IgniteClusterEx;
 import org.apache.ignite.internal.management.api.CommandUtils;
@@ -59,18 +56,12 @@ public class DeactivateCommand implements LocalCommand<DeactivateCommandArg, NoA
 
     /** {@inheritDoc} */
     @Override public NoArg execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         DeactivateCommandArg arg,
         Consumer<String> printer
-    ) throws GridClientException {
-        if (cli != null) {
-            GridClientClusterState state = cli.state();
-
-            state.state(INACTIVE, arg.force());
-        }
-        else if (client != null)
+    ) {
+        if (client != null)
             ((ClientClusterImpl)client.cluster()).state(INACTIVE, arg.force());
         else
             ((IgniteClusterEx)ignite.cluster()).state(INACTIVE, arg.force());
@@ -87,7 +78,6 @@ public class DeactivateCommand implements LocalCommand<DeactivateCommandArg, NoA
 
     /** {@inheritDoc} */
     @Override public boolean prepare(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         DeactivateCommandArg arg,
@@ -95,14 +85,12 @@ public class DeactivateCommand implements LocalCommand<DeactivateCommandArg, NoA
     ) throws Exception {
         String clusterName;
 
-        if (cli != null)
-            clusterName = cli.state().clusterName();
-        else if (ignite != null)
+        if (ignite != null)
             clusterName = ((IgniteEx)ignite).context().cluster().clusterName();
         else {
-            GridClientNode node = F.first(CommandUtils.nodes(cli, client, ignite));
+            ClusterNode node = F.first(CommandUtils.nodes(client, ignite));
 
-            VisorIdAndTagViewTaskResult idAndTag = CommandUtils.execute(cli, client, ignite,
+            VisorIdAndTagViewTaskResult idAndTag = CommandUtils.execute(client, ignite,
                 VisorIdAndTagViewTask.class, null, Collections.singleton(node));
 
             clusterName = idAndTag.clusterName();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/SetStateCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/SetStateCommand.java
index fde589fd405..07ab1c36e6a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/SetStateCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/SetStateCommand.java
@@ -21,8 +21,6 @@ import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.cluster.ClusterState;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientException;
 import org.apache.ignite.internal.client.thin.ClientClusterImpl;
 import org.apache.ignite.internal.cluster.IgniteClusterEx;
 import org.apache.ignite.internal.management.api.LocalCommand;
@@ -42,17 +40,14 @@ public class SetStateCommand implements LocalCommand<SetStateCommandArg, Boolean
 
     /** {@inheritDoc} */
     @Override public Boolean execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         SetStateCommandArg arg,
         Consumer<String> printer
-    ) throws GridClientException {
-        ClusterState clusterState = cli != null
-            ? cli.state().state()
-            : client != null
-                ? client.cluster().state()
-                : ignite.cluster().state();
+    ) {
+        ClusterState clusterState = client != null
+            ? client.cluster().state()
+            : ignite.cluster().state();
 
         if (clusterState == arg.state()) {
             printer.accept("Cluster state is already " + arg.state() + '.');
@@ -60,9 +55,7 @@ public class SetStateCommand implements LocalCommand<SetStateCommandArg, Boolean
             return false;
         }
 
-        if (cli != null)
-            cli.state().state(arg.state(), arg.force());
-        else if (ignite != null)
+        if (ignite != null)
             ((IgniteClusterEx)ignite.cluster()).state(arg.state(), arg.force());
         else
             ((ClientClusterImpl)client.cluster()).state(arg.state(), arg.force());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/StateCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/StateCommand.java
index 4a05e85cbc7..2c7d5875a27 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/StateCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/StateCommand.java
@@ -22,8 +22,6 @@ import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.cluster.ClusterState;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientClusterState;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.LocalCommand;
 import org.apache.ignite.internal.management.api.NoArg;
@@ -50,7 +48,6 @@ public class StateCommand implements LocalCommand<NoArg, GridTuple3<UUID, String
 
     /** {@inheritDoc} */
     @Override public GridTuple3<UUID, String, ClusterState> execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         NoArg arg,
@@ -60,16 +57,9 @@ public class StateCommand implements LocalCommand<NoArg, GridTuple3<UUID, String
         UUID id;
         String tag;
 
-        if (cli != null) {
-            GridClientClusterState state0 = cli.state();
-
-            state = state0.state();
-            id = state0.id();
-            tag = state0.tag();
-        }
-        else if (client != null) {
-            VisorIdAndTagViewTaskResult idAndTag = CommandUtils.execute(null, client, null,
-                VisorIdAndTagViewTask.class, null, nodes(cli, client, ignite));
+        if (client != null) {
+            VisorIdAndTagViewTaskResult idAndTag = CommandUtils.execute(client, null,
+                VisorIdAndTagViewTask.class, null, nodes(client, ignite));
 
             state = client.cluster().state();
             id = idAndTag.id();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/SystemViewCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/SystemViewCommand.java
index 8f03ba7e8cc..57eb421f7d0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/SystemViewCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/SystemViewCommand.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -55,7 +55,7 @@ public class SystemViewCommand implements ComputeCommand<SystemViewCommandArg, S
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, SystemViewCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, SystemViewCommandArg arg) {
         if (arg.allNodes())
             return nodes;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/WarmUpStopCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/WarmUpStopCommand.java
index a141ef2b05e..843c010f834 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/WarmUpStopCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/WarmUpStopCommand.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.management;
 
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNodeStateBeforeStart;
+import org.apache.ignite.internal.client.thin.TcpIgniteClient;
 import org.apache.ignite.internal.management.api.BeforeNodeStartCommand;
 import org.apache.ignite.internal.management.api.NoArg;
 
@@ -40,8 +40,8 @@ public class WarmUpStopCommand implements BeforeNodeStartCommand<NoArg, Boolean>
     }
 
     /** {@inheritDoc} */
-    @Override public Boolean execute(GridClientNodeStateBeforeStart beforeStart, NoArg arg, Consumer<String> printer) throws Exception {
-        beforeStart.stopWarmUp();
+    @Override public Boolean execute(TcpIgniteClient client, NoArg arg, Consumer<String> printer) throws Exception {
+        client.stopWarmUp();
 
         return true;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/BeforeNodeStartCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/BeforeNodeStartCommand.java
index 1018ad06d0e..115905899b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/BeforeNodeStartCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/BeforeNodeStartCommand.java
@@ -18,19 +18,19 @@
 package org.apache.ignite.internal.management.api;
 
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientBeforeNodeStart;
-import org.apache.ignite.internal.client.GridClientNodeStateBeforeStart;
+import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.internal.client.thin.TcpIgniteClient;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 
 /**
- * Command that must be executed directly using {@link GridClientBeforeNodeStart} instance.
+ * Command that must be executed directly using {@link IgniteClient} internal instance before node start.
  */
 public interface BeforeNodeStartCommand<A extends IgniteDataTransferObject, R> extends Command<A, R> {
     /**
-     * @param beforeStart {@link GridClientBeforeNodeStart} client instance.
+     * @param client {@link IgniteClient} internal instance.
      * @param arg Command argument.
      * @param printer Results printer.
      * @return Command result.
      */
-    public R execute(GridClientNodeStateBeforeStart beforeStart, A arg, Consumer<String> printer) throws Exception;
+    R execute(TcpIgniteClient client, A arg, Consumer<String> printer) throws Exception;
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandInvoker.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandInvoker.java
index 01a77a0530c..bc6f25d1440 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandInvoker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandInvoker.java
@@ -20,10 +20,8 @@ package org.apache.ignite.internal.management.api;
 import java.util.Collection;
 import java.util.function.Consumer;
 import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientException;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.jetbrains.annotations.Nullable;
 
@@ -56,38 +54,36 @@ public class CommandInvoker<A extends IgniteDataTransferObject> {
     /**
      * @param printer Result printer.
      * @return {@code True} of command successfully prepared and can be invoked, {@code false} otherwise.
-     * @throws GridClientException If failed.
      */
     public boolean prepare(Consumer<String> printer) throws Exception {
         if (!(cmd instanceof PreparableCommand))
             return true;
 
-        return ((PreparableCommand<A, ?>)cmd).prepare(client(), igniteClient(), ignite, arg, printer);
+        return ((PreparableCommand<A, ?>)cmd).prepare(igniteClient(), ignite, arg, printer);
     }
 
     /**
      * Actual command execution with verbose mode if required.
      *
      * @param printer Result printer.
-     * @param verbose Use verbose mode or not
      * @return Result of operation (mostly usable for tests).
      * @throws Exception If failed.
      */
-    public <R> R invoke(Consumer<String> printer, boolean verbose) throws Exception {
+    public <R> R invoke(Consumer<String> printer) throws Exception {
         R res;
 
         if (cmd instanceof LocalCommand)
-            res = ((LocalCommand<A, R>)cmd).execute(client(), igniteClient(), ignite, arg, printer);
+            res = ((LocalCommand<A, R>)cmd).execute(igniteClient(), ignite, arg, printer);
         else if (cmd instanceof ComputeCommand) {
             ComputeCommand<A, R> cmd = (ComputeCommand<A, R>)this.cmd;
 
-            Collection<GridClientNode> cmdNodes = cmd.nodes(CommandUtils.nodes(client(), igniteClient(), ignite), arg);
+            Collection<ClusterNode> cmdNodes = cmd.nodes(CommandUtils.nodes(igniteClient(), ignite), arg);
 
             if (cmdNodes == null)
                 cmdNodes = singletonList(defaultNode());
 
             try {
-                res = CommandUtils.execute(client(), igniteClient(), ignite, cmd.taskClass(), arg, cmdNodes);
+                res = CommandUtils.execute(igniteClient(), ignite, cmd.taskClass(), arg, cmdNodes);
             }
             catch (Exception e) {
                 res = cmd.handleException(e, printer);
@@ -102,16 +98,8 @@ public class CommandInvoker<A extends IgniteDataTransferObject> {
     }
 
     /** @return Default node to execute commands. */
-    protected GridClientNode defaultNode() throws GridClientException {
-        return CommandUtils.clusterToClientNode(ignite.localNode());
-    }
-
-    /**
-     * @return Grid thin client instance which is already connected to cluster.
-     * @throws GridClientException If failed.
-     */
-    protected @Nullable GridClient client() throws GridClientException {
-        return null;
+    protected ClusterNode defaultNode() {
+        return ignite.localNode();
     }
 
     /** @return Ignite client instance. */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandMBean.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandMBean.java
index caa66e36853..7c88dc591ba 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandMBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandMBean.java
@@ -124,7 +124,7 @@ public class CommandMBean<A extends IgniteDataTransferObject, R> implements Dyna
             CommandInvoker<A> invoker = new CommandInvoker<>(cmd, new ParamsToArgument(params).argument(), ignite);
 
             if (invoker.prepare(printer))
-                res = invoker.invoke(printer, false);
+                res = invoker.invoke(printer);
 
             return resStr.toString();
         }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandUtils.java
index c0af3646e14..837b0f8ea80 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/CommandUtils.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.management.api;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
-import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -43,13 +42,6 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientCacheMode;
-import org.apache.ignite.internal.client.GridClientCompute;
-import org.apache.ignite.internal.client.GridClientException;
-import org.apache.ignite.internal.client.GridClientNode;
-import org.apache.ignite.internal.client.GridClientNodeMetrics;
-import org.apache.ignite.internal.client.GridClientProtocol;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.SB;
@@ -487,27 +479,27 @@ public class CommandUtils {
      * @param nodes Nodes.
      * @return Coordinator ID or null is {@code nodes} are empty.
      */
-    public static @Nullable Collection<GridClientNode> coordinatorOrNull(Collection<GridClientNode> nodes) {
+    public static @Nullable Collection<ClusterNode> coordinatorOrNull(Collection<ClusterNode> nodes) {
         return nodes.stream()
             .filter(n -> !n.isClient())
-            .min(Comparator.comparingLong(GridClientNode::order))
+            .min(Comparator.comparingLong(ClusterNode::order))
             .map(Collections::singleton)
             .orElse(null);
     }
 
     /** */
-    public static @Nullable Collection<GridClientNode> nodeOrNull(@Nullable UUID nodeId, Collection<GridClientNode> nodes) {
+    public static @Nullable Collection<ClusterNode> nodeOrNull(@Nullable UUID nodeId, Collection<ClusterNode> nodes) {
         return nodeId == null ? null : node(nodeId, nodes);
     }
 
     /** */
-    public static Collection<GridClientNode> nodeOrAll(@Nullable UUID nodeId, Collection<GridClientNode> nodes) {
+    public static Collection<ClusterNode> nodeOrAll(@Nullable UUID nodeId, Collection<ClusterNode> nodes) {
         return nodeId == null ? nodes : node(nodeId, nodes);
     }
 
     /** */
-    public static Collection<GridClientNode> nodes(UUID[] nodeIds, Collection<GridClientNode> nodes) {
-        List<GridClientNode> res = new ArrayList<>();
+    public static Collection<ClusterNode> nodes(UUID[] nodeIds, Collection<ClusterNode> nodes) {
+        List<ClusterNode> res = new ArrayList<>();
 
         for (UUID nodeId : nodeIds)
             res.addAll(node(nodeId, nodes));
@@ -516,9 +508,9 @@ public class CommandUtils {
     }
 
     /** */
-    public static List<GridClientNode> node(UUID nodeId, Collection<GridClientNode> nodes) {
-        for (GridClientNode node : nodes) {
-            if (node.nodeId().equals(nodeId))
+    public static List<ClusterNode> node(UUID nodeId, Collection<ClusterNode> nodes) {
+        for (ClusterNode node : nodes) {
+            if (node.id().equals(nodeId))
                 return Collections.singletonList(node);
         }
 
@@ -529,7 +521,7 @@ public class CommandUtils {
      * @param nodes Nodes.
      * @return Server nodes.
      */
-    public static Collection<GridClientNode> servers(Collection<GridClientNode> nodes) {
+    public static Collection<ClusterNode> servers(Collection<ClusterNode> nodes) {
         return nodes.stream()
             .filter(e -> !e.isClient())
             .collect(Collectors.toList());
@@ -547,22 +539,17 @@ public class CommandUtils {
     }
 
     /**
-     * @param cli Grid client.
      * @param ignite Ignite node.
      * @return Collection of cluster nodes.
      */
-    public static Collection<GridClientNode> nodes(
-        @Nullable GridClient cli,
+    public static Collection<ClusterNode> nodes(
         @Nullable IgniteClient client,
         @Nullable Ignite ignite
-    ) throws GridClientException {
-        if (cli != null)
-            return cli.compute().nodes();
-
+    ) {
         if (client != null)
-            return F.viewReadOnly(client.cluster().nodes(), CommandUtils::clusterToClientNode);
+            return client.cluster().nodes();
 
-        return F.viewReadOnly(ignite.cluster().nodes(), CommandUtils::clusterToClientNode);
+        return ignite.cluster().nodes();
     }
 
     /**
@@ -769,33 +756,13 @@ public class CommandUtils {
 
     /** */
     public static <A, R> R execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         Class<? extends VisorMultiNodeTask<A, R, ?>> taskCls,
         A arg,
-        Collection<GridClientNode> nodes
+        Collection<ClusterNode> nodes
     ) throws Exception {
-        Collection<UUID> nodesIds = nodes.stream()
-            .map(GridClientNode::nodeId)
-            .collect(Collectors.toList());
-
-        if (cli != null) {
-            GridClientCompute compute = cli.compute();
-
-            Collection<GridClientNode> connectable = compute.nodes().stream()
-                .filter(nodes::contains)
-                .filter(GridClientNode::connectable)
-                .collect(Collectors.toList());
-
-            if (!connectable.isEmpty())
-                compute = compute.projection(connectable);
-
-            return ((VisorTaskResult<R>)compute.execute(
-                taskCls.getName(),
-                new VisorTaskArgument<>(nodesIds, arg, false)
-            )).result();
-        }
+        Collection<UUID> nodesIds = F.nodeIds(nodes);
 
         if (client != null) {
             try {
@@ -922,61 +889,4 @@ public class CommandUtils {
             }
         }
     }
-
-    /** */
-    public static GridClientNode clusterToClientNode(ClusterNode n) {
-        return new GridClientNode() {
-            @Override public UUID nodeId() {
-                return n.id();
-            }
-
-            @Override public Object consistentId() {
-                return n.consistentId();
-            }
-
-            @Override public boolean connectable() {
-                return true;
-            }
-
-            @Override public long order() {
-                return n.order();
-            }
-
-            @Override public boolean isClient() {
-                return n.isClient();
-            }
-
-            @Override public List<String> tcpAddresses() {
-                return U.arrayList(n.addresses());
-            }
-
-            @Override public List<String> tcpHostNames() {
-                return U.arrayList(n.hostNames());
-            }
-
-            @Override public int tcpPort() {
-                return -1;
-            }
-
-            @Override public Map<String, Object> attributes() {
-                return n.attributes();
-            }
-
-            @Override public <T> @Nullable T attribute(String name) {
-                return n.attribute(name);
-            }
-
-            @Override public GridClientNodeMetrics metrics() {
-                throw new UnsupportedOperationException();
-            }
-
-            @Override public Map<String, GridClientCacheMode> caches() {
-                throw new UnsupportedOperationException();
-            }
-
-            @Override public Collection<InetSocketAddress> availableAddresses(GridClientProtocol proto, boolean filterResolved) {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/ComputeCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/ComputeCommand.java
index 25b6fa0b491..10cdcf343c5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/ComputeCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/ComputeCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.api;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.visor.VisorMultiNodeTask;
 import org.jetbrains.annotations.Nullable;
@@ -46,7 +46,7 @@ public interface ComputeCommand<A extends IgniteDataTransferObject, R> extends C
      * @param arg Argument.
      * @return nodes to execute command on, {@code null} means default node must be used.
      */
-    public default @Nullable Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, A arg) {
+    public default @Nullable Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, A arg) {
         return null;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java
index 42dca47fde0..4d3bca08168 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java
@@ -20,32 +20,27 @@ package org.apache.ignite.internal.management.api;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.jetbrains.annotations.Nullable;
 
 /**
- * Command that must be executed directly using {@link GridClient} or {@link Ignite} instance.
+ * Command that must be executed directly using {@link IgniteClient} or {@link Ignite} instance.
  */
 public interface LocalCommand<A extends IgniteDataTransferObject, R> extends Command<A, R> {
     /**
      * Executes command logic.
      * Commands invoked in two different environments:
      * <ul>
-     *     <li>CLI utility using {@link GridClient} connection to interact with cluster.</li>
+     *     <li>CLI utility using {@link IgniteClient} connection to interact with cluster.</li>
      *     <li>Inside {@link Ignite} node therefore local node can be used to interact with cluster.</li>
      * </ul>
      *
-     * Please, keep in mind that {@link GridClient} protocol is obsolete and can be removed in future releases.
-     *
-     * @param cli Optional grid client instance.
      * @param ignite Optional ignite node.
      * @param arg Command argument.
      * @param printer Results printer.
      * @return Command result.
      */
     public R execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         A arg,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/api/PreparableCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/api/PreparableCommand.java
index 9fc7855782f..a355f50148d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/api/PreparableCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/api/PreparableCommand.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.management.api;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.jetbrains.annotations.Nullable;
 
@@ -29,13 +28,11 @@ public interface PreparableCommand<A extends IgniteDataTransferObject, R> extend
     /**
      * Enriches argument with cluster information if required.
      *
-     * @param cli Grid client to get required information from cluster.
      * @param arg Command argument.
      * @param printer Implementation specific printer.
      * @return {@code True} if command must be executed, {@code false} otherwise.
      */
-    public boolean prepare(
-        @Nullable GridClient cli,
+    boolean prepare(
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         A arg,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/AbstractBaselineCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/AbstractBaselineCommand.java
index 8b98457ba60..7bbfd2732b3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/AbstractBaselineCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/AbstractBaselineCommand.java
@@ -28,7 +28,7 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.baseline.BaselineCommand.BaselineTaskArg;
 import org.apache.ignite.internal.util.typedef.F;
@@ -47,7 +47,7 @@ public abstract class AbstractBaselineCommand implements ComputeCommand<Baseline
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, BaselineTaskArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, BaselineTaskArg arg) {
         return coordinatorOrNull(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineCommand.java
index b7144500109..e7957448de6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/baseline/BaselineCommand.java
@@ -22,7 +22,7 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.management.api.Argument;
 import org.apache.ignite.internal.management.api.CommandRegistryImpl;
@@ -61,7 +61,7 @@ public class BaselineCommand extends CommandRegistryImpl<BaselineTaskArg, Baseli
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, BaselineTaskArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, BaselineTaskArg arg) {
         return coordinatorOrNull(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheCheckIndexInlineSizesCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheCheckIndexInlineSizesCommand.java
index 45855b716e5..09da927b37f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheCheckIndexInlineSizesCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheCheckIndexInlineSizesCommand.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesResult;
 import org.apache.ignite.internal.commandline.cache.check_indexes_inline_size.CheckIndexInlineSizesTask;
 import org.apache.ignite.internal.management.api.ComputeCommand;
@@ -60,7 +60,7 @@ public class CacheCheckIndexInlineSizesCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, NoArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, NoArg arg) {
         return servers(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheContentionCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheContentionCommand.java
index a25bc4830ac..19840f517be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheContentionCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheContentionCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.cache;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
@@ -41,7 +41,7 @@ public class CacheContentionCommand implements ComputeCommand<CacheContentionCom
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheContentionCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheContentionCommandArg arg) {
         return CommandUtils.nodeOrAll(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDestroyCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDestroyCommand.java
index 55ac4dacda0..6023957e19a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDestroyCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDestroyCommand.java
@@ -23,9 +23,6 @@ import java.util.TreeSet;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientException;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.api.PreparableCommand;
 import org.apache.ignite.internal.util.typedef.F;
@@ -53,20 +50,15 @@ public class CacheDestroyCommand
 
     /** {@inheritDoc} */
     @Override public boolean prepare(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         CacheDestroyCommandArg arg,
         Consumer<String> printer
-    ) throws GridClientException {
+    ) {
         if (arg.destroyAllCaches()) {
             Set<String> caches = new TreeSet<>();
 
-            if (cli != null) {
-                for (GridClientNode node : cli.compute().nodes(GridClientNode::connectable))
-                    caches.addAll(node.caches().keySet());
-            }
-            else if (client != null)
+            if (client != null)
                 caches.addAll(client.cacheNames());
             else
                 caches.addAll(ignite.cacheNames());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDistributionCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDistributionCommand.java
index c64ce00ecab..d536a7245ef 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDistributionCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheDistributionCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.cache;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTask;
 import org.apache.ignite.internal.commandline.cache.distribution.CacheDistributionTaskResult;
 import org.apache.ignite.internal.management.api.CommandUtils;
@@ -44,7 +44,7 @@ public class CacheDistributionCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheDistributionCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheDistributionCommandArg arg) {
         return CommandUtils.nodeOrAll(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIdleVerifyCancelCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIdleVerifyCancelCommand.java
index a23bb92cf1d..b6df1668ded 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIdleVerifyCancelCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIdleVerifyCancelCommand.java
@@ -18,8 +18,7 @@
 package org.apache.ignite.internal.management.cache;
 
 import java.util.Collection;
-
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.api.NoArg;
 
@@ -45,7 +44,7 @@ public class CacheIdleVerifyCancelCommand implements ComputeCommand<NoArg, Void>
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, NoArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, NoArg arg) {
         return nodes;
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommand.java
index 56abe7c175d..767bf5716db 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommand.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.F;
@@ -77,8 +77,8 @@ public class CacheIndexesForceRebuildCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheIndexesForceRebuildCommandArg arg) {
-        Collection<GridClientNode> res;
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheIndexesForceRebuildCommandArg arg) {
+        Collection<ClusterNode> res;
 
         if (arg.allNodes())
             res = nodes.stream().filter(n -> !n.isClient()).collect(Collectors.toList());
@@ -88,7 +88,7 @@ public class CacheIndexesForceRebuildCommand
                 : CommandUtils.node(arg.nodeId(), nodes);
 
             if (!F.isEmpty(res)) {
-                for (GridClientNode n : res) {
+                for (ClusterNode n : res) {
                     if (n != null && n.isClient())
                         throw new IllegalArgumentException("Please, specify only server node ids");
                 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesListCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesListCommand.java
index 097b5c914e5..4e7c82e0c66 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesListCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesListCommand.java
@@ -22,7 +22,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
@@ -44,7 +44,7 @@ public class CacheIndexesListCommand implements ComputeCommand<CacheIndexesListC
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheIndexesListCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheIndexesListCommandArg arg) {
         return CommandUtils.nodeOrNull(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesRebuildStatusCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesRebuildStatusCommand.java
index a130fa5e660..486ecbbea22 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesRebuildStatusCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesRebuildStatusCommand.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
@@ -45,7 +45,7 @@ public class CacheIndexesRebuildStatusCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheIndexesRebuildStatusCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheIndexesRebuildStatusCommandArg arg) {
         return CommandUtils.nodeOrAll(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheListCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheListCommand.java
index ef537435c87..9d15ed04b6e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheListCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheListCommand.java
@@ -28,8 +28,7 @@ import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.LocalCommand;
 import org.apache.ignite.internal.util.typedef.internal.SB;
@@ -44,8 +43,8 @@ import static org.apache.ignite.internal.management.cache.ViewCacheCmd.SEQ;
 /** Prints info regarding caches, groups or sequences. */
 public class CacheListCommand implements LocalCommand<CacheListCommandArg, ViewCacheTaskResult> {
     /** */
-    Function<CacheListCommandArg, Predicate<GridClientNode>> FILTER = arg -> node ->
-        node.connectable() && (arg.nodeId() == null || Objects.equals(node.nodeId(), arg.nodeId()));
+    Function<CacheListCommandArg, Predicate<ClusterNode>> FILTER = arg -> node ->
+        arg.nodeId() == null || Objects.equals(node.id(), arg.nodeId());
 
     /** {@inheritDoc} */
     @Override public String description() {
@@ -60,7 +59,6 @@ public class CacheListCommand implements LocalCommand<CacheListCommandArg, ViewC
 
     /** {@inheritDoc} */
     @Override public ViewCacheTaskResult execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         CacheListCommandArg arg,
@@ -70,7 +68,7 @@ public class CacheListCommand implements LocalCommand<CacheListCommandArg, ViewC
             ? GROUPS
             : (arg.seq() ? SEQ : CACHES);
 
-        Optional<GridClientNode> node = nodes(cli, client, ignite)
+        Optional<ClusterNode> node = nodes(client, ignite)
             .stream()
             .filter(FILTER.apply(arg))
             .findFirst();
@@ -78,11 +76,11 @@ public class CacheListCommand implements LocalCommand<CacheListCommandArg, ViewC
         if (!node.isPresent())
             throw new IllegalArgumentException("Node not found: id=" + arg.nodeId());
 
-        ViewCacheTaskResult res = CommandUtils.execute(cli, client, ignite,
+        ViewCacheTaskResult res = CommandUtils.execute(client, ignite,
             ViewCacheTask.class, arg, singletonList(node.get()));
 
         if (arg.config() && cmd == CACHES)
-            cachesConfig(cli, client, ignite, arg, res, printer);
+            cachesConfig(client, ignite, arg, res, printer);
         else
             printCacheInfos(res.cacheInfos(), cmd, printer);
 
@@ -90,25 +88,23 @@ public class CacheListCommand implements LocalCommand<CacheListCommandArg, ViewC
     }
 
     /**
-     * @param cli Client.
+     * @param client Client.
      * @param arg Cache argument.
      * @param viewRes Cache view task result.
      */
     private void cachesConfig(
-        GridClient cli,
         IgniteClient client,
         Ignite ignite,
         CacheListCommandArg arg,
         ViewCacheTaskResult viewRes,
         Consumer<String> printer
     ) throws Exception {
-        Collection<GridClientNode> nodes = nodes(cli, client, ignite)
+        Collection<ClusterNode> nodes = nodes(client, ignite)
             .stream()
             .filter(FILTER.apply(arg))
             .collect(Collectors.toSet());
 
         Map<String, CacheConfiguration> res = CommandUtils.execute(
-            cli,
             client,
             ignite,
             CacheConfigurationCollectorTask.class,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommand.java
index d8d20f345e0..afcbec11197 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommand.java
@@ -25,11 +25,10 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.GridStringBuilder;
-import org.apache.ignite.internal.util.lang.IgnitePair;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 
@@ -75,7 +74,7 @@ public class CacheScheduleIndexesRebuildCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheScheduleIndexesRebuildCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheScheduleIndexesRebuildCommandArg arg) {
         if (arg.allNodes() || F.isEmpty(arg.nodeIds()) && arg.nodeId() == null)
             return nodes;
 
@@ -216,20 +215,4 @@ public class CacheScheduleIndexesRebuildCommand
         return !F.isEmpty(cacheToIndexes) && cacheToIndexes.values().stream()
             .anyMatch(indexes -> !indexes.isEmpty());
     }
-
-    /** */
-    static <T> void storeCacheAndIndexResults(Map<IgnitePair<T>, Set<UUID>> to, Map<T, Set<T>> values, UUID nodeId) {
-        if (F.isEmpty(values))
-            return;
-
-        values.forEach((cache, indexes) -> indexes.forEach(idx ->
-            to.compute(new IgnitePair<>(cache, idx), (c0, idxs0) -> {
-                if (idxs0 == null)
-                    idxs0 = new HashSet<>();
-
-                idxs0.add(nodeId);
-
-                return idxs0;
-            })));
-    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheValidateIndexesCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheValidateIndexesCommand.java
index 9941797519e..c97a03d5272 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheValidateIndexesCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheValidateIndexesCommand.java
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.management.cache;
 import java.util.Collection;
 import java.util.Map;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.F;
@@ -50,7 +50,7 @@ public class CacheValidateIndexesCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CacheValidateIndexesCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CacheValidateIndexesCommandArg arg) {
         if (F.isEmpty(arg.nodeIds()))
             return null;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java
index 247a4418632..ac5ca91adee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentLinksCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.cdc;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteExperimental;
@@ -48,7 +48,7 @@ public class CdcDeleteLostSegmentLinksCommand implements ComputeCommand<CdcDelet
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, CdcDeleteLostSegmentLinksCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, CdcDeleteLostSegmentLinksCommandArg arg) {
         return arg.nodeId() != null
             ? node(arg.nodeId(), nodes)
             : servers(nodes);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyRepairCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyRepairCommand.java
index 51c51c7ee8c..354e8ac08ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyRepairCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyRepairCommand.java
@@ -24,8 +24,7 @@ import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.LocalCommand;
 import org.apache.ignite.lang.IgniteExperimental;
@@ -49,7 +48,6 @@ public class ConsistencyRepairCommand implements LocalCommand<ConsistencyRepairC
 
     /** {@inheritDoc} */
     @Override public String execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         ConsistencyRepairCommandArg arg,
@@ -59,14 +57,14 @@ public class ConsistencyRepairCommand implements LocalCommand<ConsistencyRepairC
         boolean failed = false;
 
         if (arg.parallel())
-            failed = execute(cli, client, ignite, arg, nodes(cli, client, ignite), sb);
+            failed = execute(client, ignite, arg, nodes(client, ignite), sb);
         else {
-            Set<GridClientNode> nodes = nodes(cli, client, ignite).stream()
+            Set<ClusterNode> nodes = nodes(client, ignite).stream()
                 .filter(node -> !node.isClient())
                 .collect(toSet());
 
-            for (GridClientNode node : nodes) {
-                failed = execute(cli, client, ignite, arg, Collections.singleton(node), sb);
+            for (ClusterNode node : nodes) {
+                failed = execute(client, ignite, arg, Collections.singleton(node), sb);
 
                 if (failed)
                     break;
@@ -85,17 +83,15 @@ public class ConsistencyRepairCommand implements LocalCommand<ConsistencyRepairC
 
     /** */
     private boolean execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         ConsistencyRepairCommandArg arg,
-        Collection<GridClientNode> nodes,
+        Collection<ClusterNode> nodes,
         StringBuilder sb
     ) throws Exception {
         boolean failed = false;
 
         ConsistencyTaskResult res = CommandUtils.execute(
-            cli,
             client,
             ignite,
             ConsistencyRepairTask.class,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyStatusCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyStatusCommand.java
index d205335c126..272fd006624 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyStatusCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/consistency/ConsistencyStatusCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.consistency;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.api.NoArg;
 import org.apache.ignite.lang.IgniteExperimental;
@@ -45,7 +45,7 @@ public class ConsistencyStatusCommand implements ComputeCommand<NoArg, Consisten
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, NoArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, NoArg arg) {
         return servers(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/defragmentation/DefragmentationScheduleCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/defragmentation/DefragmentationScheduleCommand.java
index a587e5e42b5..2101a01a7f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/defragmentation/DefragmentationScheduleCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/defragmentation/DefragmentationScheduleCommand.java
@@ -24,7 +24,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.defragmentation.DefragmentationCommand.DefragmentationStatusCommandArg;
 import org.apache.ignite.internal.util.typedef.F;
@@ -57,7 +57,7 @@ public class DefragmentationScheduleCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, DefragmentationStatusCommandArg arg0) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, DefragmentationStatusCommandArg arg0) {
         DefragmentationScheduleCommandArg arg = (DefragmentationScheduleCommandArg)arg0;
 
         if (F.isEmpty(arg.nodes()))
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticConnectivityCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticConnectivityCommand.java
index 62426423baa..5179436eb15 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticConnectivityCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticConnectivityCommand.java
@@ -26,8 +26,8 @@ import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
+import org.apache.ignite.internal.util.typedef.F;
 
 import static org.apache.ignite.internal.util.IgniteUtils.EMPTY_UUIDS;
 
@@ -73,9 +73,9 @@ public class DiagnosticConnectivityCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, DiagnosticConnectivityCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, DiagnosticConnectivityCommandArg arg) {
         // Task runs on default node but maps to all nodes in cluster.
-        arg.nodes(nodes.stream().map(GridClientNode::nodeId).collect(Collectors.toList()).toArray(EMPTY_UUIDS));
+        arg.nodes(F.nodeIds(nodes).toArray(EMPTY_UUIDS));
 
         return null;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticPagelocksCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticPagelocksCommand.java
index c580ac74f8f..366b618ecf7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticPagelocksCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/diagnostic/DiagnosticPagelocksCommand.java
@@ -25,7 +25,6 @@ import java.util.Set;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.F;
 
@@ -47,7 +46,7 @@ public class DiagnosticPagelocksCommand implements ComputeCommand<DiagnosticPage
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, DiagnosticPagelocksCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, DiagnosticPagelocksCommandArg arg) {
         if (arg.all())
             return nodes;
 
@@ -57,7 +56,7 @@ public class DiagnosticPagelocksCommand implements ComputeCommand<DiagnosticPage
         Set<String> argNodes = new HashSet<>(Arrays.asList(arg.nodes()));
 
         return nodes.stream()
-            .filter(entry -> argNodes.contains(entry.nodeId().toString())
+            .filter(entry -> argNodes.contains(entry.id().toString())
                 || argNodes.contains(String.valueOf(entry.consistentId())))
             .collect(Collectors.toList());
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/CacheGroupEncryptionCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/CacheGroupEncryptionCommand.java
index fa7de2686eb..c5312b0556d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/CacheGroupEncryptionCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/CacheGroupEncryptionCommand.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.function.Consumer;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
 import static org.apache.ignite.internal.management.api.CommandUtils.DOUBLE_INDENT;
@@ -56,7 +56,7 @@ abstract class CacheGroupEncryptionCommand<T>
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, EncryptionCacheGroupArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, EncryptionCacheGroupArg arg) {
         return nodes;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/EncryptionReencryptionRateLimitCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/EncryptionReencryptionRateLimitCommand.java
index 924686303c1..3515b1c4430 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/EncryptionReencryptionRateLimitCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/encryption/EncryptionReencryptionRateLimitCommand.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.function.Consumer;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
 import static org.apache.ignite.internal.management.api.CommandUtils.DOUBLE_INDENT;
@@ -47,7 +47,7 @@ public class EncryptionReencryptionRateLimitCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, EncryptionReencryptionRateLimitCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, EncryptionReencryptionRateLimitCommandArg arg) {
         return nodes;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillClientCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillClientCommand.java
index cfbb88055c0..43d819518a4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillClientCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillClientCommand.java
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.management.kill;
 import java.util.Collection;
 import java.util.function.Consumer;
 import org.apache.ignite.client.ClientConnectionException;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.util.typedef.X;
@@ -43,7 +43,7 @@ public class KillClientCommand implements ComputeCommand<KillClientCommandArg, V
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, KillClientCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, KillClientCommandArg arg) {
         return CommandUtils.nodeOrAll(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillConsistencyCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillConsistencyCommand.java
index f8c84c78597..d347e9c2587 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillConsistencyCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillConsistencyCommand.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.management.kill;
 
 import java.util.Collection;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.api.NoArg;
 
@@ -40,7 +40,7 @@ public class KillConsistencyCommand implements ComputeCommand<NoArg, Void> {
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, NoArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, NoArg arg) {
         return nodes;
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillTransactionCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillTransactionCommand.java
index 474f6820289..90cdf2f8463 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillTransactionCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/kill/KillTransactionCommand.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.management.kill;
 import java.util.Collection;
 import java.util.Map;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.tx.TxTaskResult;
 
@@ -43,7 +42,7 @@ public class KillTransactionCommand
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, KillTransactionCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, KillTransactionCommandArg arg) {
         return nodes;
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricCommand.java
index bbdebca900c..f9ddc76eeee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricCommand.java
@@ -23,7 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.CliSubcommandsWithPrefix;
 import org.apache.ignite.internal.management.api.CommandRegistryImpl;
 import org.apache.ignite.internal.management.api.ComputeCommand;
@@ -61,7 +61,7 @@ public class MetricCommand extends CommandRegistryImpl<MetricCommandArg, Map<Str
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, MetricCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, MetricCommandArg arg) {
         return nodeOrNull(arg.nodeId(), nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHistogramCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHistogramCommand.java
index 64edd68ea9a..5ef0d34cbbc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHistogramCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHistogramCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.metric;
 
 import java.util.Collection;
 import java.util.Map;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
 import static org.apache.ignite.internal.management.api.CommandUtils.nodeOrNull;
@@ -42,7 +42,7 @@ public class MetricConfigureHistogramCommand implements ComputeCommand<MetricCom
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, MetricCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, MetricCommandArg arg) {
         return nodeOrNull(arg.nodeId(), nodes);
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHitrateCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHitrateCommand.java
index cd1e717a9db..56550734a02 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHitrateCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/metric/MetricConfigureHitrateCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.metric;
 
 import java.util.Collection;
 import java.util.Map;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 
 import static org.apache.ignite.internal.management.api.CommandUtils.nodeOrNull;
@@ -42,7 +42,7 @@ public class MetricConfigureHitrateCommand implements ComputeCommand<MetricComma
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, MetricCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, MetricCommandArg arg) {
         return nodeOrNull(arg.nodeId(), nodes);
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/AbstractTracingConfigurationCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/AbstractTracingConfigurationCommand.java
index a3af482cfd9..e833a78582d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/AbstractTracingConfigurationCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/AbstractTracingConfigurationCommand.java
@@ -19,7 +19,7 @@ package org.apache.ignite.internal.management.tracing;
 
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.management.api.ComputeCommand;
 import org.apache.ignite.internal.management.tracing.TracingConfigurationCommand.TracingConfigurationCommandArg;
 
@@ -29,7 +29,7 @@ import static org.apache.ignite.internal.management.api.CommandUtils.coordinator
 public abstract class AbstractTracingConfigurationCommand implements
     ComputeCommand<TracingConfigurationCommandArg, TracingConfigurationTaskResult> {
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, TracingConfigurationCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, TracingConfigurationCommandArg arg) {
         return coordinatorOrNull(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/TracingConfigurationCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/TracingConfigurationCommand.java
index b4ddc688482..31b838ee4eb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/TracingConfigurationCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/tracing/TracingConfigurationCommand.java
@@ -22,7 +22,7 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Collection;
 import java.util.function.Consumer;
-import org.apache.ignite.internal.client.GridClientNode;
+import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.management.api.CommandRegistryImpl;
 import org.apache.ignite.internal.management.api.ComputeCommand;
@@ -62,7 +62,7 @@ public class TracingConfigurationCommand extends CommandRegistryImpl<TracingConf
     }
 
     /** {@inheritDoc} */
-    @Override public Collection<GridClientNode> nodes(Collection<GridClientNode> nodes, TracingConfigurationCommandArg arg) {
+    @Override public Collection<ClusterNode> nodes(Collection<ClusterNode> nodes, TracingConfigurationCommandArg arg) {
         return coordinatorOrNull(nodes);
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxInfoCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxInfoCommand.java
index 46b1a00df09..29c74b9645e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxInfoCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxInfoCommand.java
@@ -27,8 +27,6 @@ import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.client.GridClient;
-import org.apache.ignite.internal.client.GridClientNode;
 import org.apache.ignite.internal.management.api.CommandUtils;
 import org.apache.ignite.internal.management.api.LocalCommand;
 import org.apache.ignite.internal.management.tx.TxCommand.AbstractTxCommandArg;
@@ -54,7 +52,6 @@ public class TxInfoCommand implements LocalCommand<AbstractTxCommandArg, Map<Clu
 
     /** {@inheritDoc} */
     @Override public Map<ClusterNode, TxTaskResult> execute(
-        @Nullable GridClient cli,
         @Nullable IgniteClient client,
         @Nullable Ignite ignite,
         AbstractTxCommandArg arg0,
@@ -62,16 +59,14 @@ public class TxInfoCommand implements LocalCommand<AbstractTxCommandArg, Map<Clu
     ) throws Exception {
         TxInfoCommandArg arg = (TxInfoCommandArg)arg0;
 
-        Optional<GridClientNode> node = CommandUtils.nodes(cli, client, ignite).stream()
+        Optional<ClusterNode> node = CommandUtils.nodes(client, ignite).stream()
             .filter(n -> !n.isClient())
-            .filter(GridClientNode::connectable)
             .findFirst();
 
         if (!node.isPresent())
             throw new IllegalStateException("No nodes to connect");
 
         GridCacheVersion nearXidVer = CommandUtils.execute(
-            cli,
             client,
             ignite,
             FetchNearXidVersionTask.class,
@@ -105,7 +100,6 @@ public class TxInfoCommand implements LocalCommand<AbstractTxCommandArg, Map<Clu
         }
 
         Map<ClusterNode, TxTaskResult> res = CommandUtils.execute(
-            cli,
             client,
             ignite,
             TxTask.class,
diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
index 12b87cae35e..dc1fc55f1cb 100644
--- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
+++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_cache_help.output
@@ -7,7 +7,7 @@ Arguments: --cache help --yes
 --------------------------------------------------------------------------------
   The '--cache subcommand' is used to get information about and perform actions with caches. The command has the following syntax:
 
-  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
+  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore TRUSTSTORE_PATH] [--truststore [...]
 
   The subcommands that take [nodeId] as an argument ('list', 'find_garbage', 'contention' and 'validate_indexes') will be executed on the given node or on all server nodes if the option is not specified. Other commands will run on a random server node.
 
diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
index 3533fd4d95b..7a8ca293c8c 100644
--- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
+++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassTest_help.output
@@ -4,7 +4,7 @@ User: <!any!>
 Time: <!any!>
 Control utility script is used to execute admin commands on cluster or get common cluster info. The command has the following syntax:
 
-  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
+  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore TRUSTSTORE_PATH] [--truststore [...]
 
 
 This utility can do the following commands:
diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
index 12b87cae35e..dc1fc55f1cb 100644
--- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
+++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_cache_help.output
@@ -7,7 +7,7 @@ Arguments: --cache help --yes
 --------------------------------------------------------------------------------
   The '--cache subcommand' is used to get information about and perform actions with caches. The command has the following syntax:
 
-  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
+  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore TRUSTSTORE_PATH] [--truststore [...]
 
   The subcommands that take [nodeId] as an argument ('list', 'find_garbage', 'contention' and 'validate_indexes') will be executed on the given node or on all server nodes if the option is not specified. Other commands will run on a random server node.
 
diff --git a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
index 3a0c4a683e6..445f8127435 100644
--- a/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
+++ b/modules/core/src/test/resources/org.apache.ignite.util/GridCommandHandlerClusterByClassWithSSLTest_help.output
@@ -4,7 +4,7 @@ User: <!any!>
 Time: <!any!>
 Control utility script is used to execute admin commands on cluster or get common cluster info. The command has the following syntax:
 
-  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--ping-interval PING_INTERVAL] [--ping-timeout PING_TIMEOUT] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type [...]
+  control.(sh|bat) [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] [--verbose] [--ssl-protocol SSL_PROTOCOL[, SSL_PROTOCOL_2, ..., SSL_PROTOCOL_N]] [--ssl-cipher-suites SSL_CIPHER_1[, SSL_CIPHER_2, ..., SSL_CIPHER_N]] [--ssl-key-algorithm SSL_KEY_ALGORITHM] [--ssl-factory SSL_FACTORY_PATH] [--keystore-type KEYSTORE_TYPE] [--keystore KEYSTORE_PATH] [--keystore-password KEYSTORE_PASSWORD] [--truststore-type TRUSTSTORE_TYPE] [--truststore TRUSTSTORE_PATH] [--truststore [...]
 
 
 This utility can do the following commands:
diff --git a/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/commandline/CommandsProviderExtImpl.java b/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/commandline/CommandsProviderExtImpl.java
index bc40018e984..8ac4676af66 100644
--- a/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/commandline/CommandsProviderExtImpl.java
+++ b/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/commandline/CommandsProviderExtImpl.java
@@ -24,7 +24,6 @@ import java.util.Collection;
 import java.util.function.Consumer;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.client.IgniteClient;
-import org.apache.ignite.internal.client.GridClient;
 import org.apache.ignite.internal.dto.IgniteDataTransferObject;
 import org.apache.ignite.internal.management.api.Argument;
 import org.apache.ignite.internal.management.api.Command;
@@ -75,7 +74,7 @@ public class CommandsProviderExtImpl implements CommandsProvider {
         }
 
         /** {@inheritDoc} */
-        @Override public Void execute(@Nullable GridClient cli, @Nullable IgniteClient client, @Nullable Ignite ignite,
+        @Override public Void execute(@Nullable IgniteClient client, @Nullable Ignite ignite,
             TestCommandCommandArg arg, Consumer<String> printer) {
             printer.accept(TEST_COMMAND_OUTPUT + ": " + arg.testPrint);