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 32f7a7ea531 IGNITE-20592 Added the multiple nodes argument to the
'schedule_indexes_rebuild' command (#10982)
32f7a7ea531 is described below
commit 32f7a7ea53126afd2db830f767ebe16b87f49d0b
Author: Vladimir Steshin <[email protected]>
AuthorDate: Thu Oct 19 16:24:38 2023 +0300
IGNITE-20592 Added the multiple nodes argument to the
'schedule_indexes_rebuild' command (#10982)
---
docs/_docs/tools/control-script.adoc | 2 +-
.../commandline/CommandHandlerParsingTest.java | 77 ++++++++
.../GridCommandHandlerIndexForceRebuildTest.java | 37 +---
...GridCommandHandlerScheduleIndexRebuildTest.java | 216 ++++++++++++++++-----
.../internal/management/api/CommandUtils.java | 2 +-
.../cache/CacheIndexesForceRebuildCommand.java | 31 +--
.../cache/CacheIndexesForceRebuildCommandArg.java | 3 +-
.../cache/CacheScheduleIndexesRebuildCommand.java | 132 +++++++++++--
.../CacheScheduleIndexesRebuildCommandArg.java | 42 +++-
...mandHandlerClusterByClassTest_cache_help.output | 8 +-
...dlerClusterByClassWithSSLTest_cache_help.output | 8 +-
11 files changed, 443 insertions(+), 115 deletions(-)
diff --git a/docs/_docs/tools/control-script.adoc
b/docs/_docs/tools/control-script.adoc
index 843878b6a5f..808cbdff438 100644
--- a/docs/_docs/tools/control-script.adoc
+++ b/docs/_docs/tools/control-script.adoc
@@ -1278,7 +1278,7 @@ The `schedule_indexes_rebuild` commands Apache Ignite to
rebuild indexes for spe
[source, shell]
----
- control.sh|bat --cache schedule_indexes_rebuild --node-id nodeId
--cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1]
--group-names groupName1,groupName2,...groupNameN
+ control.sh|bat --cache schedule_indexes_rebuild --node-ids
nodeId1,...nodeIdN|--all-nodes --cache-names
cacheName[index1,...indexN],cacheName2,cacheName3[index1] --group-names
groupName1,groupName2,...groupNameN
----
Parameters:
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 d150f9e75ab..bbb68b62e93 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
@@ -980,6 +980,52 @@ public class CommandHandlerParsingTest {
IllegalArgumentException.class,
"Unexpected value: --some-other-arg"
);
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(
+ CACHE, "indexes_force_rebuild",
+ "--node-id", nodeId,
+ "--node-ids", nodeId + ',' + nodeId,
+ "--cache-names", "someNames"
+ )),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id] allowed"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(
+ CACHE, "indexes_force_rebuild",
+ "--node-id", nodeId,
+ "--all-nodes"
+ )),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id] allowed"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(
+ CACHE, "indexes_force_rebuild",
+ "--node-ids", nodeId + ',' + nodeId,
+ "--all-nodes"
+ )),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id] allowed"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(
+ CACHE, "indexes_force_rebuild",
+ "--node-id", nodeId,
+ "--node-ids", nodeId + ',' + nodeId,
+ "--all-nodes"
+ )),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id] allowed"
+ );
}
/** */
@@ -1037,6 +1083,37 @@ public class CommandHandlerParsingTest {
IllegalArgumentException.class,
"Square brackets must contain comma-separated indexes or not be
used at all."
);
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(CACHE, "schedule_indexes_rebuild",
"--node-id", nodeId, "--all-nodes", "--group-names", "a")),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id]"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(CACHE, "schedule_indexes_rebuild",
"--node-id", nodeId, "--node-ids", nodeId + ',' + nodeId,
+ "--group-names", "a")),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id]"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(CACHE, "schedule_indexes_rebuild",
"--all-nodes", "--node-ids", nodeId + ',' + nodeId,
+ "--group-names", "a")),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id]"
+ );
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> parseArgs(asList(CACHE, "schedule_indexes_rebuild",
"--node-id", nodeId, "--all-nodes",
+ "--node-ids", nodeId + ',' + nodeId, "--group-names", "a")),
+ IllegalArgumentException.class,
+ "Only one of [--node-ids, --all-nodes, --node-id]"
+ );
}
/** */
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexForceRebuildTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexForceRebuildTest.java
index 806794d73f1..ee269d7c4e7 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexForceRebuildTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexForceRebuildTest.java
@@ -285,37 +285,6 @@ public class GridCommandHandlerIndexForceRebuildTest
extends GridCommandHandlerA
removeLogListener(grid(LAST_NODE_NUM), lsnr);
}
- /**
- * Checks two arguments in the group are not allowed.
- */
- @Test
- public void testInvalidArgumentGroups() {
- injectTestSystemOut();
-
- assertContains(log, executeCommand(EXIT_CODE_INVALID_ARGUMENTS,
"--cache", "indexes_force_rebuild",
- "--node-ids", grid(LAST_NODE_NUM).localNode().id().toString()
+ ',' + grid(0).localNode().id().toString(),
- "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
- "--cache-names", CACHE_NAME_NO_GRP),
- "Only one of [--node-ids, --all-nodes, --node-id] allowed");
-
- assertContains(log, executeCommand(EXIT_CODE_INVALID_ARGUMENTS,
"--cache", "indexes_force_rebuild",
- "--node-ids", grid(LAST_NODE_NUM).localNode().id().toString()
+ ',' + grid(0).localNode().id().toString(),
- "--all-nodes",
- "--cache-names", CACHE_NAME_NO_GRP),
- "Only one of [--node-ids, --all-nodes, --node-id] allowed");
-
- assertContains(log, executeCommand(EXIT_CODE_INVALID_ARGUMENTS,
"--cache", "indexes_force_rebuild",
- "--all-nodes",
- "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
- "--cache-names", CACHE_NAME_NO_GRP),
- "Only one of [--node-ids, --all-nodes, --node-id] allowed");
-
- assertContains(log, executeCommand(EXIT_CODE_INVALID_ARGUMENTS,
"--cache", "indexes_force_rebuild",
- "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
- "--cache-names", CACHE_NAME_NO_GRP, "--group-names",
CACHE_NAME_NO_GRP),
- "Only one of [--group-names, --cache-names] allowed");
- }
-
/**
* Checks --node-id and --cache-names options,
* correctness of utility output and the fact that indexes were actually
rebuilt.
@@ -730,7 +699,7 @@ public class GridCommandHandlerIndexForceRebuildTest
extends GridCommandHandlerA
assertContains(
log,
outputStr,
- "WARNING: These caches were not found:" + U.nl() +
makeStringListWithIndent(cacheNames)
+ CacheIndexesForceRebuildCommand.PREF_CACHES_NOT_FOUND + U.nl() +
makeStringListWithIndent(cacheNames)
);
}
@@ -744,7 +713,7 @@ public class GridCommandHandlerIndexForceRebuildTest
extends GridCommandHandlerA
assertContains(
log,
outputStr,
- "WARNING: These cache groups were not found:" + U.nl() +
makeStringListWithIndent(cacheGrps)
+ CacheIndexesForceRebuildCommand.PREF_GROUPS_NOT_FOUND + U.nl() +
makeStringListWithIndent(cacheGrps)
);
}
@@ -815,7 +784,7 @@ public class GridCommandHandlerIndexForceRebuildTest
extends GridCommandHandlerA
* @param prefix Prefix or header to search.
* @param targetStr Target string to search after {@code prefix}.
*/
- private static void validateMultiNodeOutput(String outputStr, String
prefix, String targetStr) {
+ static void validateMultiNodeOutput(String outputStr, String prefix,
String targetStr) {
String[] lines = outputStr.split(U.nl());
for (int i = 0, heraderIdx = -1; i < lines.length; ++i) {
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerScheduleIndexRebuildTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerScheduleIndexRebuildTest.java
index 8275a5b4bc5..92bd213836c 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerScheduleIndexRebuildTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerScheduleIndexRebuildTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.util;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -26,17 +27,21 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import org.apache.ignite.Ignite;
import org.apache.ignite.cluster.ClusterState;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.cache.query.index.Index;
import
org.apache.ignite.internal.cache.query.index.sorted.maintenance.MaintenanceRebuildIndexTarget;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.G;
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.maintenance.MaintenanceTask;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.ListeningTestLogger;
+import org.jetbrains.annotations.Nullable;
import org.junit.Test;
import static java.util.Collections.singletonMap;
@@ -46,8 +51,15 @@ import static java.util.stream.Collectors.toSet;
import static
org.apache.ignite.internal.cache.query.index.sorted.maintenance.MaintenanceRebuildIndexUtils.parseMaintenanceTaskParameters;
import static
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
import static org.apache.ignite.internal.management.api.CommandUtils.INDENT;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_CACHES_NOT_FOUND;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_GROUPS_NOT_FOUND;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_SCHEDULED;
+import static
org.apache.ignite.internal.management.cache.CacheScheduleIndexesRebuildCommand.PREF_INDEXES_NOT_FOUND;
+import static
org.apache.ignite.internal.management.cache.CacheScheduleIndexesRebuildCommand.PREF_REBUILD_NOT_SCHEDULED;
+import static
org.apache.ignite.internal.management.cache.CacheScheduleIndexesRebuildCommand.PREF_REBUILD_NOT_SCHEDULED_MULTI;
import static org.apache.ignite.internal.util.IgniteUtils.max;
import static org.apache.ignite.testframework.GridTestUtils.assertContains;
+import static
org.apache.ignite.util.GridCommandHandlerIndexForceRebuildTest.validateMultiNodeOutput;
import static
org.apache.ignite.util.GridCommandHandlerIndexingUtils.breakSqlIndex;
import static
org.apache.ignite.util.GridCommandHandlerIndexingUtils.complexIndexEntity;
import static
org.apache.ignite.util.GridCommandHandlerIndexingUtils.createAndFillCache;
@@ -153,57 +165,102 @@ public class GridCommandHandlerScheduleIndexRebuildTest
extends GridCommandHandl
}
/**
- * Checks error messages when trying to rebuild indexes for non-existent
cache, when trying
- * to rebuild non-existent indexes or when not specifying any indexes
inside the square brackets.
+ * Checks error messages on single node.
*/
@Test
public void testErrors() {
- injectTestSystemOut();
+ doTestErrors(false);
+ }
- IgniteEx lastNode = grid(LAST_NODE_NUM);
+ /**
+ * Checks error messages on all nodes.
+ */
+ @Test
+ public void testErrorsAllNodes() {
+ doTestErrors(true);
+ }
+
+ /**
+ * Checks error messages when trying to rebuild indexes for non-existent
cache, when trying
+ * to rebuild non-existent indexes or when not specifying any indexes
inside the square brackets.
+ *
+ * @param allNodes If {@code True}, runs on all nodes using '--all-nodes'.
+ */
+ private void doTestErrors(boolean allNodes) {
+ injectTestSystemOut();
// Tests non-existing cache name.
- assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
- "--node-id", lastNode.localNode().id().toString(),
- "--cache-names", CACHE_NAME_NON_EXISTING));
+ if (allNodes) {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--all-nodes", "--cache-names", CACHE_NAME_NON_EXISTING));
+ }
+ else {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
"--cache-names", CACHE_NAME_NON_EXISTING));
+ }
String notExistingCacheOutputStr = testOut.toString();
- assertTrue(notExistingCacheOutputStr.contains("WARNING: Indexes
rebuild was not scheduled for any cache. Check command input."));
+ assertTrue(notExistingCacheOutputStr.contains(allNodes ?
PREF_REBUILD_NOT_SCHEDULED_MULTI : PREF_REBUILD_NOT_SCHEDULED));
assertTrue(notExistingCacheOutputStr.contains(
- "WARNING: These caches were not found:" + System.lineSeparator()
- + INDENT + CACHE_NAME_NON_EXISTING
+ PREF_CACHES_NOT_FOUND + System.lineSeparator()
+ + INDENT + CACHE_NAME_NON_EXISTING
));
// Test non-existing cache group name.
- assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
- "--node-id", lastNode.localNode().id().toString(),
- "--group-names", GROUP_NAME_NON_EXISTING));
+ if (allNodes) {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--all-nodes", "--group-names", GROUP_NAME_NON_EXISTING));
+ }
+ else {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
+ "--group-names", GROUP_NAME_NON_EXISTING));
+ }
String notExistingGroupOutputStr = testOut.toString();
- assertTrue(notExistingGroupOutputStr.contains("WARNING: Indexes
rebuild was not scheduled for any cache. Check command input."));
+ assertTrue(notExistingGroupOutputStr.contains(allNodes ?
PREF_REBUILD_NOT_SCHEDULED_MULTI : PREF_REBUILD_NOT_SCHEDULED));
assertTrue(notExistingGroupOutputStr.contains(
- "WARNING: These cache groups were not found:" +
System.lineSeparator()
- + INDENT + GROUP_NAME_NON_EXISTING
+ PREF_GROUPS_NOT_FOUND + System.lineSeparator()
+ + INDENT + GROUP_NAME_NON_EXISTING
));
testOut.reset();
// Tests non-existing index name.
- assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
- "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
- "--cache-names", CACHE_NAME_1_1 + "[non-existing-index]"));
+ if (allNodes) {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--all-nodes", "--cache-names", CACHE_NAME_1_1 +
"[non-existing-index]"));
+ }
+ else {
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ "--node-id", grid(LAST_NODE_NUM).localNode().id().toString(),
+ "--cache-names", CACHE_NAME_1_1 + "[non-existing-index]"));
+ }
String notExistingIndexOutputStr = testOut.toString();
- assertTrue(notExistingIndexOutputStr.contains("WARNING: Indexes
rebuild was not scheduled for any cache. Check command input."));
+ if (allNodes) {
+ for (Ignite ig : G.allGrids()) {
+ validateMultiNodeOutput(notExistingIndexOutputStr,
PREF_REBUILD_NOT_SCHEDULED_MULTI,
+ ig.cluster().localNode().id().toString());
+
+ validateMultiNodeOutput(notExistingIndexOutputStr,
PREF_INDEXES_NOT_FOUND,
+ ig.cluster().localNode().id().toString());
+ }
- assertTrue(notExistingIndexOutputStr.contains(
- "WARNING: These indexes were not found:" + System.lineSeparator()
- + INDENT + CACHE_NAME_1_1 + ":" + System.lineSeparator()
- + INDENT + INDENT + "non-existing-index")
- );
+ validateMultiNodeOutput(notExistingIndexOutputStr,
PREF_INDEXES_NOT_FOUND, "non-existing-index");
+ }
+ else {
+
assertTrue(notExistingIndexOutputStr.contains(PREF_REBUILD_NOT_SCHEDULED));
+
+ assertTrue(notExistingIndexOutputStr.contains(
+ PREF_INDEXES_NOT_FOUND + System.lineSeparator()
+ + INDENT + CACHE_NAME_1_1 + ":" + System.lineSeparator()
+ + INDENT + INDENT + "non-existing-index")
+ );
+ }
}
/**
@@ -211,29 +268,75 @@ public class GridCommandHandlerScheduleIndexRebuildTest
extends GridCommandHandl
*/
@Test
public void testRebuild() throws Exception {
- IgniteEx node = grid(LAST_NODE_NUM);
+
doTestRebuildOnSpecifiedNodes(Collections.singletonList(LAST_NODE_NUM));
+ }
- assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
- "--node-id", node.localNode().id().toString(),
- "--cache-names", CACHE_NAME_NO_GRP));
+ /**
+ * Checks that index is rebuilt correctly using --node-ids.
+ */
+ @Test
+ public void testRebuildOnSpecifiedNodes() throws Exception {
+ doTestRebuildOnSpecifiedNodes(Arrays.asList(0, 1, LAST_NODE_NUM));
+ }
- checkIndexesRebuildScheduled(node,
singletonMap(CU.cacheId(CACHE_NAME_NO_GRP), indexes(node, CACHE_NAME_NO_GRP)));
+ /**
+ * Checks that index is rebuilt correctly using --all-nodes.
+ */
+ @Test
+ public void testRebuildOnAllNodes() throws Exception {
+ doTestRebuildOnSpecifiedNodes(Collections.emptyList());
+ }
- node.close();
+ /** */
+ private void doTestRebuildOnSpecifiedNodes(Collection<Integer> gridIdxs)
throws Exception {
+ Collection<IgniteEx> grids =
gridIdxs.stream().map(this::grid).collect(Collectors.toList());
- node = startGrid(LAST_NODE_NUM);
+ if (gridIdxs.isEmpty()) {
+ injectTestSystemOut();
- assertTrue(node.context().maintenanceRegistry().isMaintenanceMode());
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild", "--all-nodes",
+ "--cache-names", CACHE_NAME_NO_GRP));
- assertTrue(waitForIndexesRebuild(grid(LAST_NODE_NUM)));
+ String notExistingCacheOutputStr = testOut.toString();
- node.close();
+ assertTrue(notExistingCacheOutputStr.contains(PREF_SCHEDULED));
+ assertTrue(notExistingCacheOutputStr.contains("of cache '" +
CACHE_NAME_NO_GRP + "'"));
- node = startGrid(LAST_NODE_NUM);
+ for (Ignite ig : grids)
+
assertTrue(notExistingCacheOutputStr.contains(ig.cluster().localNode().id().toString()));
- assertFalse(node.context().maintenanceRegistry().isMaintenanceMode());
+ gridIdxs = IntStream.range(0,
GRIDS_NUM).boxed().collect(Collectors.toList());
+ }
+ else {
+ String nids = grids.size() == 1
+ ? grids.iterator().next().localNode().id().toString()
+ : grids.stream().map(g ->
g.localNode().id().toString()).collect(Collectors.joining(","));
- checkIndexes(CACHE_NAME_NO_GRP);
+ assertEquals(EXIT_CODE_OK, execute("--cache",
"schedule_indexes_rebuild",
+ grids.size() == 1 ? "--node-id" : "--node-ids", nids,
"--cache-names", CACHE_NAME_NO_GRP));
+ }
+
+ for (Integer gridIdx : gridIdxs) {
+ IgniteEx node = grid(gridIdx);
+
+ checkIndexesRebuildScheduled(node,
singletonMap(CU.cacheId(CACHE_NAME_NO_GRP), indexes(node, CACHE_NAME_NO_GRP)));
+
+ node.close();
+
+ node = startGrid(gridIdx);
+
+
assertTrue(node.context().maintenanceRegistry().isMaintenanceMode());
+
+ assertTrue(waitForIndexesRebuild(node));
+
+ node.close();
+
+ node = startGrid(gridIdx);
+
+
assertFalse(node.context().maintenanceRegistry().isMaintenanceMode());
+
+ checkIndexes(CACHE_NAME_NO_GRP);
+ }
}
/**
@@ -275,14 +378,25 @@ public class GridCommandHandlerScheduleIndexRebuildTest
extends GridCommandHandl
* @param specifyNodeId If {@code true} then execute rebuild only on one
node.
*/
private void testCorruptedIndexRebuild(boolean withCacheGroup, boolean
specifyNodeId) throws Exception {
- IgniteEx firstNode = grid(0);
+ testCorruptedIndexRebuild(withCacheGroup, specifyNodeId ?
Collections.singletonList(0) : null);
+ }
+
+ /**
+ * Checks that corrupted index is successfully rebuilt by the command.
+ *
+ * @param withCacheGroup If {@code true} creates a cache with a cache
group.
+ * @param nodeIdxs Nodes indexes of the nodes to launch on. If {@code
Null}, no node ids is passed. If empty,
+ * '--all-nodes' passed. Otherwise, '--node-id' or
'--node-ids' is used.
+ */
+ private void testCorruptedIndexRebuild(boolean withCacheGroup, @Nullable
List<Integer> nodeIdxs) throws Exception {
+ IgniteEx ig = grid(0);
String cacheName = "tmpCache";
try {
- createAndFillCache(firstNode, cacheName, withCacheGroup ? "tmpGrp"
: null);
+ createAndFillCache(ig, cacheName, withCacheGroup ? "tmpGrp" :
null);
- breakSqlIndex(firstNode.cachex(cacheName), 1, null);
+ breakSqlIndex(ig.cachex(cacheName), 1, null);
injectTestSystemOut();
@@ -295,18 +409,28 @@ public class GridCommandHandlerScheduleIndexRebuildTest
extends GridCommandHandl
List<String> args = new ArrayList<>();
args.add("--cache");
args.add("schedule_indexes_rebuild");
- if (specifyNodeId) {
+
+ if (F.isEmpty(nodeIdxs)) {
+ if (nodeIdxs != null)
+ args.add("--all-nodes");
+
+ nodeIdxs = IntStream.range(0,
GRIDS_NUM).boxed().collect(Collectors.toList());
+ }
+ else if (nodeIdxs.size() == 1) {
args.add("--node-id");
- args.add(firstNode.localNode().id().toString());
+ args.add(grid(nodeIdxs.get(0)).localNode().id().toString());
+ }
+ else {
+ args.add("--node-ids");
+ args.add(nodeIdxs.stream().map(idx ->
grid(idx).localNode().id().toString()).collect(Collectors.joining(",")));
}
+
args.add("--cache-names");
args.add(cacheName);
assertEquals(EXIT_CODE_OK, execute(args.toArray(new String[0])));
- int nodeCount = specifyNodeId ? 1 : GRIDS_NUM;
-
- for (int i = 0; i < nodeCount; i++) {
+ for (int i : nodeIdxs) {
IgniteEx grid = grid(i);
checkIndexesRebuildScheduled(grid,
singletonMap(CU.cacheId(cacheName), indexes(grid, cacheName)));
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 76e37070e52..93a8890d570 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
@@ -497,7 +497,7 @@ public class CommandUtils {
}
/** */
- public static Collection<GridClientNode> nodeOrNull(@Nullable UUID nodeId,
Collection<GridClientNode> nodes) {
+ public static @Nullable Collection<GridClientNode> nodeOrNull(@Nullable
UUID nodeId, Collection<GridClientNode> nodes) {
return nodeId == null ? null : node(nodeId, 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 224c957159f..56abe7c175d 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
@@ -23,6 +23,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
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;
@@ -44,7 +45,7 @@ public class CacheIndexesForceRebuildCommand
public static final String PREF_CACHES_NOT_FOUND = "WARNING: These caches
were not found:";
/** */
- private static final String PREF_GROUPS_NOT_FOUND = "WARNING: These cache
groups were not found:";
+ public static final String PREF_GROUPS_NOT_FOUND = "WARNING: These cache
groups were not found:";
/** */
public static final String PREF_REBUILD_STARTED = "Indexes rebuild was
started for these caches:";
@@ -57,6 +58,9 @@ public class CacheIndexesForceRebuildCommand
public static final String PREF_REBUILD_NOT_STARTED = "WARNING: Indexes
rebuild was not started for " +
"any cache on the following nodes. Check the command input:";
+ /** */
+ public static final String PREF_SCHEDULED = "Indexes rebuild was scheduled
for these caches:";
+
/** {@inheritDoc} */
@Override public String description() {
return "Triggers rebuild of all indexes for specified caches or cache
groups";
@@ -92,7 +96,7 @@ public class CacheIndexesForceRebuildCommand
}
if (F.isEmpty(res))
- throw new IllegalArgumentException("Please, specify oat least one
server node");
+ throw new IllegalArgumentException("Please, specify at least one
server node");
return res;
}
@@ -115,12 +119,12 @@ public class CacheIndexesForceRebuildCommand
Set<UUID> notStarted = new HashSet<>();
results.forEach((nodeId, res) -> {
- storeCacheResults(notFound, res.notFoundCacheNames(), nodeId);
+ storeEntryToNodesResults(notFound, res.notFoundCacheNames(),
nodeId);
- storeCacheResults(rebuilding, res.cachesWithRebuildInProgress(),
nodeId);
+ storeEntryToNodesResults(rebuilding,
res.cachesWithRebuildInProgress(), nodeId);
if (!F.isEmpty(res.cachesWithStartedRebuild()))
- storeCacheResults(started, res.cachesWithStartedRebuild(),
nodeId);
+ storeEntryToNodesResults(started,
res.cachesWithStartedRebuild(), nodeId);
else
notStarted.add(nodeId);
});
@@ -188,7 +192,7 @@ public class CacheIndexesForceRebuildCommand
}
/** */
- private static <T> void storeCacheResults(Map<T, Set<UUID>> to,
Collection<T> keys, UUID nodeId) {
+ static <T> void storeEntryToNodesResults(Map<T, Set<UUID>> to,
Collection<T> keys, UUID nodeId) {
if (F.isEmpty(keys))
return;
@@ -212,30 +216,35 @@ public class CacheIndexesForceRebuildCommand
}
/** */
- private static void printBlock(SB b, String header, Map<?, ? extends
Collection<UUID>> data) {
+ static void printBlock(SB b, String header, Map<?, ? extends
Collection<UUID>> data, BiConsumer<SB, Object> cacheInfoPrinter) {
printHeader(b, header);
data.forEach((cacheInfo, nodes) -> {
printEntryNewLine(b);
- printCacheInfo(b, cacheInfo);
+ cacheInfoPrinter.accept(b, cacheInfo);
b.a(" on nodes ").a(nodeIdsString(nodes)).a('.');
});
}
/** */
- private static void printEntryNewLine(SB b) {
+ static void printBlock(SB b, String header, Map<?, ? extends
Collection<UUID>> data) {
+ printBlock(b, header, data,
CacheIndexesForceRebuildCommand::printCacheInfo);
+ }
+
+ /** */
+ static void printEntryNewLine(SB b) {
b.a(U.nl()).a(INDENT);
}
/** */
- private static String nodeIdsString(Collection<UUID> nodes) {
+ static String nodeIdsString(Collection<UUID> nodes) {
return nodes.stream().map(uuid -> '\'' + uuid.toString() +
'\'').collect(Collectors.joining(", "));
}
/** */
- private static void printHeader(SB b, String header) {
+ static void printHeader(SB b, String header) {
b.a(U.nl()).a(U.nl()).a(header);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommandArg.java
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommandArg.java
index 111e9f24d22..3eb8a0c837f 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommandArg.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheIndexesForceRebuildCommandArg.java
@@ -34,7 +34,8 @@ public class CacheIndexesForceRebuildCommandArg extends
IgniteDataTransferObject
private static final long serialVersionUID = 0;
/** */
- @Argument(description = "Specify node for indexes rebuild (deprecated. Use
--node-ids instead)", example = "nodeId")
+ @Argument(description = "Specify node for indexes rebuild (deprecated. Use
--node-ids or --all-nodes instead)",
+ example = "nodeId")
private UUID nodeId;
/** */
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 ccf845786f8..0b9fe5ffc6d 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
@@ -18,19 +18,46 @@
package org.apache.ignite.internal.management.cache;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
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.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;
import static org.apache.ignite.internal.management.api.CommandUtils.INDENT;
import static org.apache.ignite.internal.management.api.CommandUtils.nodeOrAll;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_CACHES_NOT_FOUND;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_GROUPS_NOT_FOUND;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.PREF_SCHEDULED;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.nodeIdsString;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.printBlock;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.printEntryNewLine;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.printHeader;
+import static
org.apache.ignite.internal.management.cache.CacheIndexesForceRebuildCommand.storeEntryToNodesResults;
/** Index rebuild via the maintenance mode. */
public class CacheScheduleIndexesRebuildCommand
implements ComputeCommand<CacheScheduleIndexesRebuildCommandArg,
ScheduleIndexRebuildTaskRes> {
+ /** */
+ public static final String PREF_INDEXES_NOT_FOUND = "WARNING: These
indexes were not found:";
+
+ /** */
+ public static final String PREF_REBUILD_NOT_SCHEDULED = "WARNING: Indexes
rebuild was not scheduled for any cache. " +
+ "Check command input.";
+
+ /** */
+ public static final String PREF_REBUILD_NOT_SCHEDULED_MULTI = "WARNING:
Indexes rebuild was not scheduled for " +
+ "any cache on the following nodes. Check command input:";
+
/** {@inheritDoc} */
@Override public String description() {
return "Schedules rebuild of the indexes for specified caches via the
Maintenance Mode. " +
@@ -49,34 +76,100 @@ public class CacheScheduleIndexesRebuildCommand
/** {@inheritDoc} */
@Override public Collection<GridClientNode>
nodes(Collection<GridClientNode> nodes, CacheScheduleIndexesRebuildCommandArg
arg) {
- return nodeOrAll(arg.nodeId(), nodes);
+ if (arg.allNodes() || F.isEmpty(arg.nodeIds()) && arg.nodeId() == null)
+ return nodes;
+
+ nodeOrAll(arg.nodeId(), nodes);
+
+ return CommandUtils.nodes(arg.nodeId() == null ? arg.nodeIds() : new
UUID[] {arg.nodeId()}, nodes);
}
/** {@inheritDoc} */
@Override public void printResult(
CacheScheduleIndexesRebuildCommandArg arg,
- ScheduleIndexRebuildTaskRes res0,
+ ScheduleIndexRebuildTaskRes results,
Consumer<String> printer
) {
- res0.results().forEach((nodeId, res) -> {
- printMissed(printer, "WARNING: These caches were not found:",
res.notFoundCacheNames());
- printMissed(printer, "WARNING: These cache groups were not
found:", res.notFoundGroupNames());
+ if (arg.nodeId() != null) {
+ printSingleResult(results, printer);
+
+ return;
+ }
+
+ Map<String, Set<UUID>> missedCaches = new HashMap<>();
+ Map<String, Set<UUID>> missedGroups = new HashMap<>();
+ Map<String, Set<UUID>> notFoundIndexes = new HashMap<>();
+ Map<String, Set<UUID>> scheduled = new HashMap<>();
+ Set<UUID> notScheduled = new HashSet<>();
+
+ results.results().forEach((nodeId, res) -> {
+ storeEntryToNodesResults(missedCaches, res.notFoundCacheNames(),
nodeId);
+
+ storeEntryToNodesResults(missedGroups, res.notFoundGroupNames(),
nodeId);
+
+ storeEntryToNodesResults(notFoundIndexes,
extractCacheIndexNames(res.notFoundIndexes()), nodeId);
+
+ if (hasAtLeastOneIndex(res.cacheToIndexes()))
+ storeEntryToNodesResults(scheduled,
extractCacheIndexNames(res.cacheToIndexes()), nodeId);
+ else
+ notScheduled.add(nodeId);
+ });
+
+ SB b = new SB();
+
+ if (!F.isEmpty(missedCaches))
+ printBlock(b, PREF_CACHES_NOT_FOUND, missedCaches,
GridStringBuilder::a);
+
+ if (!F.isEmpty(missedGroups))
+ printBlock(b, PREF_GROUPS_NOT_FOUND, missedGroups,
GridStringBuilder::a);
- if (!F.isEmpty(res.notFoundIndexes()) &&
hasAtLeastOneIndex(res.notFoundIndexes())) {
- String warning = "WARNING: These indexes were not found:";
+ if (!F.isEmpty(notFoundIndexes))
+ printBlock(b, PREF_INDEXES_NOT_FOUND, notFoundIndexes,
GridStringBuilder::a);
- printer.accept(warning);
+ if (!F.isEmpty(notScheduled)) {
+ printHeader(b, PREF_REBUILD_NOT_SCHEDULED_MULTI);
+
+ printEntryNewLine(b);
+
+ b.a(nodeIdsString(notScheduled));
+ }
+
+ if (!F.isEmpty(scheduled))
+ printBlock(b, PREF_SCHEDULED, scheduled, GridStringBuilder::a);
+
+ printer.accept(b.toString().trim());
+ }
+
+ /** */
+ private static Collection<String> extractCacheIndexNames(Map<String,
Set<String>> cacheIndexes) {
+ return F.flatCollections(cacheIndexes.entrySet().stream().map(cIdxs ->
cIdxs.getValue().stream()
+ .map(idx -> indexAndCacheInfo(cIdxs.getKey(),
idx)).collect(Collectors.toList())).collect(Collectors.toList()));
+ }
+
+ /** */
+ private static String indexAndCacheInfo(String cache, String index) {
+ return '\'' + index + "' (of cache '" + cache + "')";
+ }
+
+ /** */
+ private static void printSingleResult(ScheduleIndexRebuildTaskRes result,
Consumer<String> printer) {
+ result.results().forEach((nodeId, res) -> {
+ printMissed(printer, PREF_CACHES_NOT_FOUND,
res.notFoundCacheNames());
+ printMissed(printer, PREF_GROUPS_NOT_FOUND,
res.notFoundGroupNames());
+
+ if (hasAtLeastOneIndex(res.notFoundIndexes())) {
+ printer.accept(PREF_INDEXES_NOT_FOUND);
printCachesAndIndexes(res.notFoundIndexes(), printer);
}
if (!F.isEmpty(res.cacheToIndexes()) &&
hasAtLeastOneIndex(res.cacheToIndexes())) {
- printer.accept("Indexes rebuild was scheduled for these
caches:");
+ printer.accept(PREF_SCHEDULED);
printCachesAndIndexes(res.cacheToIndexes(), printer);
}
else
- printer.accept("WARNING: Indexes rebuild was not scheduled for
any cache. Check command input.");
+ printer.accept(PREF_REBUILD_NOT_SCHEDULED);
printer.accept("");
});
@@ -89,7 +182,7 @@ public class CacheScheduleIndexesRebuildCommand
* @param message Message.
* @param missed Missed caches or cache groups' names.
*/
- private void printMissed(Consumer<String> printer, String message,
Set<String> missed) {
+ private static void printMissed(Consumer<String> printer, String message,
Set<String> missed) {
if (F.isEmpty(missed))
return;
@@ -120,8 +213,23 @@ public class CacheScheduleIndexesRebuildCommand
* @return {@code true} if has at least one index in the map, {@code
false} otherwise.
*/
private static boolean hasAtLeastOneIndex(Map<String, Set<String>>
cacheToIndexes) {
- return cacheToIndexes.values().stream()
+ 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/CacheScheduleIndexesRebuildCommandArg.java
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommandArg.java
index 1c609ec27c0..94894a5bb3d 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommandArg.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/CacheScheduleIndexesRebuildCommandArg.java
@@ -36,6 +36,7 @@ import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.internal.U;
/** */
+@ArgumentGroup(value = {"nodeIds", "allNodes", "nodeId"}, onlyOneOf = true,
optional = true)
@ArgumentGroup(value = {"cacheNames", "groupNames"}, optional = false)
public class CacheScheduleIndexesRebuildCommandArg extends
IgniteDataTransferObject {
/** */
@@ -46,11 +47,22 @@ public class CacheScheduleIndexesRebuildCommandArg extends
IgniteDataTransferObj
/** */
@Argument(
- description = "(Optional) Specify node for indexes rebuild. If not
specified, schedules rebuild on all nodes",
- example = "nodeId",
- optional = true)
+ description = "(Optional) Specify node for indexes rebuild. If not
specified, schedules rebuild on all nodes " +
+ "(deprecated. Use --node-ids or --all-nodes instead)",
+ example = "nodeId")
private UUID nodeId;
+ /** */
+ @Argument(
+ description = "Comma-separated list of nodes ids to schedule index
rebuild on",
+ example = "nodeId1,...nodeIdN"
+ )
+ private UUID[] nodeIds;
+
+ /** Flag to launch index rebuild on all nodes. */
+ @Argument(description = "Rebuild index on all nodes")
+ private boolean allNodes;
+
/** */
@Argument(description = "Comma-separated list of cache names with
optionally specified indexes. " +
"If indexes are not specified then all indexes of the cache will be
scheduled for the rebuild operation. " +
@@ -73,6 +85,8 @@ public class CacheScheduleIndexesRebuildCommandArg extends
IgniteDataTransferObj
U.writeString(out, cacheNames);
U.writeArray(out, groupNames);
U.writeMap(out, cacheToIndexes);
+ U.writeArray(out, nodeIds);
+ out.writeBoolean(allNodes);
}
/** {@inheritDoc} */
@@ -81,6 +95,8 @@ public class CacheScheduleIndexesRebuildCommandArg extends
IgniteDataTransferObj
cacheNames = U.readString(in);
groupNames = U.readArray(in, String.class);
cacheToIndexes = U.readMap(in);
+ nodeIds = U.readArray(in, UUID.class);
+ allNodes = in.readBoolean();
}
/** */
@@ -128,6 +144,26 @@ public class CacheScheduleIndexesRebuildCommandArg extends
IgniteDataTransferObj
this.nodeId = nodeId;
}
+ /** */
+ public UUID[] nodeIds() {
+ return nodeIds;
+ }
+
+ /** */
+ public void allNodes(boolean allNodes) {
+ this.allNodes = allNodes;
+ }
+
+ /** */
+ public boolean allNodes() {
+ return allNodes;
+ }
+
+ /** */
+ public void nodeIds(UUID[] nodeIds) {
+ this.nodeIds = nodeIds;
+ }
+
/** */
public String cacheNames() {
return cacheNames;
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 3b7b9111815..2fc51183618 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
@@ -100,7 +100,7 @@ Arguments: --cache help --yes
control.(sh|bat) --cache indexes_force_rebuild --node-id nodeId|--node-ids
nodeId1,...nodeIdN|--all-nodes --cache-names
cacheName1,...cacheNameN|--group-names groupName1,...groupNameN
Parameters:
- --node-id nodeId - Specify node for indexes
rebuild (deprecated. Use --node-ids instead).
+ --node-id nodeId - Specify node for indexes
rebuild (deprecated. Use --node-ids or --all-nodes instead).
--node-ids nodeId1,...nodeIdN - Comma-separated list of nodes
ids to run index rebuild on.
--all-nodes - Rebuild index on all nodes.
--cache-names cacheName1,...cacheNameN - Comma-separated list of cache
names for which indexes should be rebuilt.
@@ -114,10 +114,12 @@ Arguments: --cache help --yes
--all-caches - applies operation to all user caches.
Schedules rebuild of the indexes for specified caches via the Maintenance
Mode. Schedules rebuild of specified caches and cache-groups:
- control.(sh|bat) --cache schedule_indexes_rebuild [--node-id nodeId]
--cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1]
--group-names groupName1,groupName2,...groupNameN
+ control.(sh|bat) --cache schedule_indexes_rebuild [--node-id
nodeId|--node-ids nodeId1,...nodeIdN|--all-nodes] --cache-names
cacheName[index1,...indexN],cacheName2,cacheName3[index1] --group-names
groupName1,groupName2,...groupNameN
Parameters:
- --node-id nodeId
- (Optional) Specify node for indexes rebuild. If not specified, schedules
rebuild on all nodes.
+ --node-id nodeId
- (Optional) Specify node for indexes rebuild. If not specified, schedules
rebuild on all nodes (deprecated. Use --node-ids or --all-nodes instead).
+ --node-ids nodeId1,...nodeIdN
- Comma-separated list of nodes ids to schedule index rebuild on.
+ --all-nodes
- Rebuild index on all nodes.
--cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1]
- Comma-separated list of cache names with optionally specified indexes. If
indexes are not specified then all indexes of the cache will be scheduled for
the rebuild operation. Can be used simultaneously with cache group names.
--group-names groupName1,groupName2,...groupNameN
- Comma-separated list of cache group names for which indexes should be
scheduled for the rebuild. Can be used simultaneously with cache names.
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 3b7b9111815..2fc51183618 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
@@ -100,7 +100,7 @@ Arguments: --cache help --yes
control.(sh|bat) --cache indexes_force_rebuild --node-id nodeId|--node-ids
nodeId1,...nodeIdN|--all-nodes --cache-names
cacheName1,...cacheNameN|--group-names groupName1,...groupNameN
Parameters:
- --node-id nodeId - Specify node for indexes
rebuild (deprecated. Use --node-ids instead).
+ --node-id nodeId - Specify node for indexes
rebuild (deprecated. Use --node-ids or --all-nodes instead).
--node-ids nodeId1,...nodeIdN - Comma-separated list of nodes
ids to run index rebuild on.
--all-nodes - Rebuild index on all nodes.
--cache-names cacheName1,...cacheNameN - Comma-separated list of cache
names for which indexes should be rebuilt.
@@ -114,10 +114,12 @@ Arguments: --cache help --yes
--all-caches - applies operation to all user caches.
Schedules rebuild of the indexes for specified caches via the Maintenance
Mode. Schedules rebuild of specified caches and cache-groups:
- control.(sh|bat) --cache schedule_indexes_rebuild [--node-id nodeId]
--cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1]
--group-names groupName1,groupName2,...groupNameN
+ control.(sh|bat) --cache schedule_indexes_rebuild [--node-id
nodeId|--node-ids nodeId1,...nodeIdN|--all-nodes] --cache-names
cacheName[index1,...indexN],cacheName2,cacheName3[index1] --group-names
groupName1,groupName2,...groupNameN
Parameters:
- --node-id nodeId
- (Optional) Specify node for indexes rebuild. If not specified, schedules
rebuild on all nodes.
+ --node-id nodeId
- (Optional) Specify node for indexes rebuild. If not specified, schedules
rebuild on all nodes (deprecated. Use --node-ids or --all-nodes instead).
+ --node-ids nodeId1,...nodeIdN
- Comma-separated list of nodes ids to schedule index rebuild on.
+ --all-nodes
- Rebuild index on all nodes.
--cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1]
- Comma-separated list of cache names with optionally specified indexes. If
indexes are not specified then all indexes of the cache will be scheduled for
the rebuild operation. Can be used simultaneously with cache group names.
--group-names groupName1,groupName2,...groupNameN
- Comma-separated list of cache group names for which indexes should be
scheduled for the rebuild. Can be used simultaneously with cache names.