This is an automated email from the ASF dual-hosted git repository.
mpetrov 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 cc6888d176d IGNITE-25438 Added offline commands support (#12083)
cc6888d176d is described below
commit cc6888d176d0a2d6cd4bd90b50757c9e6daa20a0
Author: oleg-vlsk <[email protected]>
AuthorDate: Mon Jun 16 20:11:50 2025 +1000
IGNITE-25438 Added offline commands support (#12083)
---
.../apache/ignite/util/GridCommandHandlerTest.java | 76 ++++++++++++++++++++++
.../util/GridCommandHandlerWithSslFactoryTest.java | 7 ++
.../apache/ignite/util/TestCommandsProvider.java | 51 +++++++++++++++
...ignite.internal.management.api.CommandsProvider | 1 +
.../internal/management/ActivateCommand.java | 4 +-
.../internal/management/DeactivateCommand.java | 4 +-
.../internal/management/SetStateCommand.java | 4 +-
.../ignite/internal/management/StateCommand.java | 4 +-
.../internal/management/api/CommandInvoker.java | 6 +-
.../internal/management/api/CommandUtils.java | 5 +-
.../api/{LocalCommand.java => NativeCommand.java} | 2 +-
.../api/{LocalCommand.java => OfflineCommand.java} | 25 ++-----
.../management/cache/CacheListCommand.java | 4 +-
.../consistency/ConsistencyRepairCommand.java | 4 +-
.../internal/management/tx/TxInfoCommand.java | 4 +-
.../commandline/CommandsProviderExtImpl.java | 4 +-
16 files changed, 165 insertions(+), 40 deletions(-)
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 b7d1c3a0fdb..827c15161a0 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
@@ -19,6 +19,8 @@ package org.apache.ignite.util;
import java.io.File;
import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.lang.reflect.Field;
@@ -49,6 +51,7 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;
import java.util.function.BiConsumer;
import java.util.function.BooleanSupplier;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.UnaryOperator;
import java.util.regex.Matcher;
@@ -80,6 +83,9 @@ 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.dto.IgniteDataTransferObject;
+import org.apache.ignite.internal.management.api.Argument;
+import org.apache.ignite.internal.management.api.OfflineCommand;
import
org.apache.ignite.internal.management.cache.FindAndDeleteGarbageInPersistenceTaskResult;
import org.apache.ignite.internal.management.cache.IdleVerifyDumpTask;
import org.apache.ignite.internal.management.cache.VerifyBackupPartitionsTask;
@@ -187,6 +193,8 @@ import static
org.apache.ignite.testframework.GridTestUtils.waitForCondition;
import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
import static
org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
import static
org.apache.ignite.transactions.TransactionIsolation.READ_COMMITTED;
+import static org.apache.ignite.util.TestCommandsProvider.registerCommands;
+import static org.apache.ignite.util.TestCommandsProvider.unregisterAll;
import static org.apache.ignite.util.TestStorageUtils.corruptDataEntry;
/**
@@ -3911,6 +3919,27 @@ public class GridCommandHandlerTest extends
GridCommandHandlerClusterPerMethodAb
}
}
+ /** */
+ @Test
+ public void testOfflineCommand() throws Exception {
+ try {
+ registerCommands(new OfflineTestCommand());
+
+ startGrid(0);
+
+ injectTestSystemOut();
+
+ String input = "Test Offline Command";
+
+ assertEquals(EXIT_CODE_OK, execute("--offline-test", "--input",
input));
+
+ assertTrue(testOut.toString().contains(input));
+ }
+ finally {
+ unregisterAll();
+ }
+ }
+
/**
* @param ignite Ignite to execute task on.
* @param delFoundGarbage If clearing mode should be used.
@@ -4007,4 +4036,51 @@ public class GridCommandHandlerTest extends
GridCommandHandlerClusterPerMethodAb
public static void assertClusterState(ClusterState state, String
logOutput) {
assertTrue(Pattern.compile("Cluster state: " + state +
"\\s+").matcher(logOutput).find());
}
+
+ /** */
+ public static class OfflineTestCommand implements
OfflineCommand<OfflineTestCommandArg, Void> {
+ /** {@inheritDoc} */
+ @Override public String description() {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Class<OfflineTestCommandArg> argClass() {
+ return OfflineTestCommandArg.class;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Void execute(OfflineTestCommandArg arg,
Consumer<String> printer) {
+ printer.accept(arg.input());
+
+ return null;
+ }
+ }
+
+ /** */
+ public static class OfflineTestCommandArg extends IgniteDataTransferObject
{
+ /** */
+ @Argument
+ private String input;
+
+ /** */
+ public String input() {
+ return input;
+ }
+
+ /** */
+ public void input(String input) {
+ this.input = input;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void writeExternalData(ObjectOutput out) throws
IOException {
+ U.writeString(out, input);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void readExternalData(ObjectInput in) throws
IOException {
+ input = U.readString(in);
+ }
+ }
}
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
index 0ffc6aae3fd..ed2828b8af1 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerWithSslFactoryTest.java
@@ -105,4 +105,11 @@ public class GridCommandHandlerWithSslFactoryTest extends
GridCommandHandlerWith
factoryUsed = true; // It's an SSL free test. Setting to `true` to
avoid fail on check.
}
+
+ /** {@inheritDoc} */
+ @Override public void testOfflineCommand() throws Exception {
+ super.testOfflineCommand();
+
+ factoryUsed = true;
+ }
}
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/TestCommandsProvider.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/TestCommandsProvider.java
new file mode 100644
index 00000000000..0e73241f558
--- /dev/null
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/TestCommandsProvider.java
@@ -0,0 +1,51 @@
+/*
+ * 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.Collection;
+import java.util.Collections;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import org.apache.ignite.internal.management.api.Command;
+import org.apache.ignite.internal.management.api.CommandsProvider;
+import org.apache.ignite.internal.util.typedef.F;
+
+/** Enables registration of additional commands for testing purposes. */
+public class TestCommandsProvider implements CommandsProvider {
+ /** Commands. */
+ private static final Set<Command<?, ?>> COMMANDS =
ConcurrentHashMap.newKeySet();
+
+ /**
+ * Registers new commands.
+ *
+ * @param cmds Commands to register.
+ */
+ public static void registerCommands(Command<?, ?>... cmds) {
+ COMMANDS.addAll(F.asList(cmds));
+ }
+
+ /** Unregisters all registered commands. */
+ public static void unregisterAll() {
+ COMMANDS.clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public Collection<Command<?, ?>> commands() {
+ return Collections.unmodifiableSet(COMMANDS);
+ }
+}
diff --git
a/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.internal.management.api.CommandsProvider
b/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.internal.management.api.CommandsProvider
new file mode 100644
index 00000000000..d2641b2c6dc
--- /dev/null
+++
b/modules/control-utility/src/test/resources/META-INF/services/org.apache.ignite.internal.management.api.CommandsProvider
@@ -0,0 +1 @@
+org.apache.ignite.util.TestCommandsProvider
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 fc80456cdb5..8b718132f2f 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,7 +20,7 @@ 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.management.api.LocalCommand;
+import org.apache.ignite.internal.management.api.NativeCommand;
import org.apache.ignite.internal.management.api.NoArg;
import org.jetbrains.annotations.Nullable;
@@ -28,7 +28,7 @@ import static org.apache.ignite.cluster.ClusterState.ACTIVE;
/** */
@Deprecated
-public class ActivateCommand implements LocalCommand<NoArg, NoArg> {
+public class ActivateCommand implements NativeCommand<NoArg, NoArg> {
/** {@inheritDoc} */
@Override public String description() {
return "Activate cluster (deprecated. Use --set-state instead)";
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 7ab7eb25193..ccd60139e39 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
@@ -26,7 +26,7 @@ import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.client.thin.ClientClusterImpl;
import org.apache.ignite.internal.cluster.IgniteClusterEx;
import org.apache.ignite.internal.management.api.CommandUtils;
-import org.apache.ignite.internal.management.api.LocalCommand;
+import org.apache.ignite.internal.management.api.NativeCommand;
import org.apache.ignite.internal.management.api.NoArg;
import org.apache.ignite.internal.management.api.PreparableCommand;
import org.apache.ignite.internal.util.typedef.F;
@@ -38,7 +38,7 @@ import static org.apache.ignite.cluster.ClusterState.INACTIVE;
/** */
@Deprecated
-public class DeactivateCommand implements LocalCommand<DeactivateCommandArg,
NoArg>, PreparableCommand<DeactivateCommandArg, NoArg> {
+public class DeactivateCommand implements NativeCommand<DeactivateCommandArg,
NoArg>, PreparableCommand<DeactivateCommandArg, NoArg> {
/** {@inheritDoc} */
@Override public String description() {
return "Deactivate cluster (deprecated. Use --set-state instead)";
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 07ab1c36e6a..ce27f63f074 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
@@ -23,11 +23,11 @@ import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.internal.client.thin.ClientClusterImpl;
import org.apache.ignite.internal.cluster.IgniteClusterEx;
-import org.apache.ignite.internal.management.api.LocalCommand;
+import org.apache.ignite.internal.management.api.NativeCommand;
import org.jetbrains.annotations.Nullable;
/** */
-public class SetStateCommand implements LocalCommand<SetStateCommandArg,
Boolean> {
+public class SetStateCommand implements NativeCommand<SetStateCommandArg,
Boolean> {
/** {@inheritDoc} */
@Override public String description() {
return "Change cluster state";
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 45c3b8fe70a..04110ba3ce9 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
@@ -23,7 +23,7 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.internal.management.api.CommandUtils;
-import org.apache.ignite.internal.management.api.LocalCommand;
+import org.apache.ignite.internal.management.api.NativeCommand;
import org.apache.ignite.internal.management.api.NoArg;
import org.apache.ignite.internal.util.lang.GridTuple3;
import org.apache.ignite.internal.util.typedef.F;
@@ -35,7 +35,7 @@ import static java.util.Collections.singleton;
import static org.apache.ignite.internal.util.typedef.internal.U.DELIM;
/** */
-public class StateCommand implements LocalCommand<NoArg, GridTuple3<UUID,
String, ClusterState>> {
+public class StateCommand implements NativeCommand<NoArg, GridTuple3<UUID,
String, ClusterState>> {
/** {@inheritDoc} */
@Override public String description() {
return "Print current cluster state";
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 bc6f25d1440..7698d165557 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
@@ -72,8 +72,10 @@ public class CommandInvoker<A extends
IgniteDataTransferObject> {
public <R> R invoke(Consumer<String> printer) throws Exception {
R res;
- if (cmd instanceof LocalCommand)
- res = ((LocalCommand<A, R>)cmd).execute(igniteClient(), ignite,
arg, printer);
+ if (cmd instanceof OfflineCommand)
+ res = ((OfflineCommand<A, R>)cmd).execute(arg, printer);
+ else if (cmd instanceof NativeCommand)
+ res = ((NativeCommand<A, R>)cmd).execute(igniteClient(), ignite,
arg, printer);
else if (cmd instanceof ComputeCommand) {
ComputeCommand<A, R> cmd = (ComputeCommand<A, R>)this.cmd;
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 8489bcfe574..87573157a93 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
@@ -533,10 +533,11 @@ public class CommandUtils {
* @return {@code True} if command can be executed, {@code false}
otherwise.
*/
public static boolean executable(Command<?, ?> cmd) {
- return cmd instanceof LocalCommand
+ return cmd instanceof NativeCommand
|| cmd instanceof ComputeCommand
|| cmd instanceof HelpCommand
- || cmd instanceof BeforeNodeStartCommand;
+ || cmd instanceof BeforeNodeStartCommand
+ || cmd instanceof OfflineCommand;
}
/**
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/NativeCommand.java
similarity index 95%
copy from
modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java
copy to
modules/core/src/main/java/org/apache/ignite/internal/management/api/NativeCommand.java
index 4d3bca08168..b71c37f053b 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/NativeCommand.java
@@ -26,7 +26,7 @@ import org.jetbrains.annotations.Nullable;
/**
* Command that must be executed directly using {@link IgniteClient} or {@link
Ignite} instance.
*/
-public interface LocalCommand<A extends IgniteDataTransferObject, R> extends
Command<A, R> {
+public interface NativeCommand<A extends IgniteDataTransferObject, R> extends
Command<A, R> {
/**
* Executes command logic.
* Commands invoked in two different environments:
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/OfflineCommand.java
similarity index 56%
rename from
modules/core/src/main/java/org/apache/ignite/internal/management/api/LocalCommand.java
rename to
modules/core/src/main/java/org/apache/ignite/internal/management/api/OfflineCommand.java
index 4d3bca08168..dc479c5f06f 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/OfflineCommand.java
@@ -18,32 +18,19 @@
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.dto.IgniteDataTransferObject;
-import org.jetbrains.annotations.Nullable;
-/**
- * Command that must be executed directly using {@link IgniteClient} or {@link
Ignite} instance.
- */
-public interface LocalCommand<A extends IgniteDataTransferObject, R> extends
Command<A, R> {
+/** Represents commands that can be executed without connecting to the
cluster. */
+public interface OfflineCommand<A extends IgniteDataTransferObject, R> extends
Command<A, R> {
/**
- * Executes command logic.
- * Commands invoked in two different environments:
- * <ul>
- * <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>
+ * Executes the command in offline mode without cluster connection.
*
- * @param ignite Optional ignite node.
* @param arg Command argument.
- * @param printer Results printer.
- * @return Command result.
+ * @param printer Consumer for command output printing.
+ * @return Command execution result.
*/
public R execute(
- @Nullable IgniteClient client,
- @Nullable Ignite ignite,
A arg,
Consumer<String> printer
- ) throws Exception;
+ );
}
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 9d15ed04b6e..eb626991900 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
@@ -30,7 +30,7 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
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.management.api.NativeCommand;
import org.apache.ignite.internal.util.typedef.internal.SB;
import org.jetbrains.annotations.Nullable;
@@ -41,7 +41,7 @@ import static
org.apache.ignite.internal.management.cache.ViewCacheCmd.GROUPS;
import static org.apache.ignite.internal.management.cache.ViewCacheCmd.SEQ;
/** Prints info regarding caches, groups or sequences. */
-public class CacheListCommand implements LocalCommand<CacheListCommandArg,
ViewCacheTaskResult> {
+public class CacheListCommand implements NativeCommand<CacheListCommandArg,
ViewCacheTaskResult> {
/** */
Function<CacheListCommandArg, Predicate<ClusterNode>> FILTER = arg -> node
->
arg.nodeId() == null || Objects.equals(node.id(), arg.nodeId());
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 354e8ac08ec..9df81022c8c 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
@@ -26,7 +26,7 @@ import org.apache.ignite.IgniteException;
import org.apache.ignite.client.IgniteClient;
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.management.api.NativeCommand;
import org.apache.ignite.lang.IgniteExperimental;
import org.jetbrains.annotations.Nullable;
@@ -35,7 +35,7 @@ import static
org.apache.ignite.internal.management.api.CommandUtils.nodes;
/** */
@IgniteExperimental
-public class ConsistencyRepairCommand implements
LocalCommand<ConsistencyRepairCommandArg, String> {
+public class ConsistencyRepairCommand implements
NativeCommand<ConsistencyRepairCommandArg, String> {
/** {@inheritDoc} */
@Override public String description() {
return "Check/Repair cache consistency using Read Repair approach";
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 29c74b9645e..3b163f70276 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
@@ -28,7 +28,7 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.client.IgniteClient;
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.management.api.NativeCommand;
import org.apache.ignite.internal.management.tx.TxCommand.AbstractTxCommandArg;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.util.typedef.F;
@@ -39,7 +39,7 @@ import static
org.apache.ignite.internal.management.api.CommandUtils.DOUBLE_INDE
import static
org.apache.ignite.internal.management.tx.TxCommand.nodeDescription;
/** */
-public class TxInfoCommand implements LocalCommand<AbstractTxCommandArg,
Map<ClusterNode, TxTaskResult>> {
+public class TxInfoCommand implements NativeCommand<AbstractTxCommandArg,
Map<ClusterNode, TxTaskResult>> {
/** {@inheritDoc} */
@Override public String description() {
return "Print detailed information (topology and key lock ownership)
about specific transaction";
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 bb926e7e67d..72b10d898bd 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
@@ -29,7 +29,7 @@ import org.apache.ignite.internal.management.api.Argument;
import org.apache.ignite.internal.management.api.Command;
import org.apache.ignite.internal.management.api.CommandsProvider;
import org.apache.ignite.internal.management.api.ComputeCommand;
-import org.apache.ignite.internal.management.api.LocalCommand;
+import org.apache.ignite.internal.management.api.NativeCommand;
import org.apache.ignite.internal.processors.task.GridInternal;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
@@ -63,7 +63,7 @@ public class CommandsProviderExtImpl implements
CommandsProvider {
}
/** */
- public static class TestCommandCommand implements
LocalCommand<TestCommandCommandArg, Void> {
+ public static class TestCommandCommand implements
NativeCommand<TestCommandCommandArg, Void> {
/** {@inheritDoc} */
@Override public String description() {
return TEST_COMMAND_USAGE;