Repository: ignite Updated Branches: refs/heads/master ceba2145d -> 5fc9a3fc1
IGNITE-10339 Fixed cluster connection when using validate indexes from control.sh - Fixes #5458. Signed-off-by: Alexey Goncharuk <alexey.goncha...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5fc9a3fc Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5fc9a3fc Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5fc9a3fc Branch: refs/heads/master Commit: 5fc9a3fc1ef5c486e2656661e2e811b235b6543f Parents: ceba214 Author: Ivan Daschinskiy <ivanda...@gmail.com> Authored: Wed Nov 21 20:35:23 2018 +0300 Committer: Alexey Goncharuk <alexey.goncha...@gmail.com> Committed: Wed Nov 21 20:35:23 2018 +0300 ---------------------------------------------------------------------- .../internal/commandline/CommandHandler.java | 48 ++++++++++---------- .../verify/VisorValidateIndexesJobResult.java | 9 ++++ .../verify/VisorValidateIndexesTaskArg.java | 23 ++++++++-- .../visor/verify/VisorValidateIndexesTask.java | 29 ++++++++++++ .../util/GridCommandHandlerIndexingTest.java | 2 +- 5 files changed, 83 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/5fc9a3fc/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java index d2deb32..56fbfae 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java @@ -812,39 +812,41 @@ public class CommandHandler { private void cacheValidateIndexes(GridClient client, CacheArguments cacheArgs) throws GridClientException { VisorValidateIndexesTaskArg taskArg = new VisorValidateIndexesTaskArg( cacheArgs.caches(), + cacheArgs.nodeId() != null ? Collections.singleton(cacheArgs.nodeId()) : null, cacheArgs.checkFirst(), cacheArgs.checkThrough() ); - UUID nodeId = cacheArgs.nodeId() == null ? BROADCAST_UUID : cacheArgs.nodeId(); - VisorValidateIndexesTaskResult taskRes = executeTaskByNameOnNode( - client, VALIDATE_INDEXES_TASK, taskArg, nodeId); + client, VALIDATE_INDEXES_TASK, taskArg, null); if (!F.isEmpty(taskRes.exceptions())) { log("Index validation failed on nodes:"); for (Map.Entry<UUID, Exception> e : taskRes.exceptions().entrySet()) { - log("Node ID = " + e.getKey()); + log(i("Node ID = " + e.getKey())); - log("Exception message:"); - log(e.getValue().getMessage()); + log(i("Exception message:")); + log(i(e.getValue().getMessage(), 2)); nl(); } } + boolean errors = false; + for (Map.Entry<UUID, VisorValidateIndexesJobResult> nodeEntry : taskRes.results().entrySet()) { - boolean errors = false; + if (!nodeEntry.getValue().hasIssues()) + continue; - log("validate_indexes result on node " + nodeEntry.getKey() + ":"); + errors = true; + + log("Index issues found on node " + nodeEntry.getKey() + ":"); Collection<IndexIntegrityCheckIssue> integrityCheckFailures = nodeEntry.getValue().integrityCheckFailures(); if (!integrityCheckFailures.isEmpty()) { - errors = true; - for (IndexIntegrityCheckIssue is : integrityCheckFailures) - log("\t" + is.toString()); + log(i(is.toString())); } Map<PartitionKey, ValidateIndexesPartitionResult> partRes = nodeEntry.getValue().partitionResult(); @@ -853,12 +855,10 @@ public class CommandHandler { ValidateIndexesPartitionResult res = e.getValue(); if (!res.issues().isEmpty()) { - errors = true; - - log("\t" + e.getKey().toString() + " " + e.getValue().toString()); + log(i(e.getKey().toString() + " " + e.getValue().toString())); for (IndexValidationIssue is : res.issues()) - log("\t\t" + is.toString()); + log(i(is.toString(), 2)); } } @@ -868,20 +868,20 @@ public class CommandHandler { ValidateIndexesPartitionResult res = e.getValue(); if (!res.issues().isEmpty()) { - errors = true; - - log("\tSQL Index " + e.getKey() + " " + e.getValue().toString()); + log(i("SQL Index " + e.getKey() + " " + e.getValue().toString())); for (IndexValidationIssue is : res.issues()) - log("\t\t" + is.toString()); + log(i(is.toString(),2)); } } - - if (!errors) - log("no issues found.\n"); - else - log("issues found (listed above).\n"); } + + if (!errors) + log("no issues found."); + else + log("issues found (listed above)."); + + nl(); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/5fc9a3fc/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesJobResult.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesJobResult.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesJobResult.java index f84fc1a..6d7f765 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesJobResult.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesJobResult.java @@ -92,6 +92,15 @@ public class VisorValidateIndexesJobResult extends VisorDataTransferObject { return integrityCheckFailures == null ? Collections.emptyList() : integrityCheckFailures; } + /** + * @return {@code true} If any indexes issues found on node, otherwise returns {@code false}. + */ + public boolean hasIssues() { + return (integrityCheckFailures != null && !integrityCheckFailures.isEmpty()) || + (partRes != null && partRes.entrySet().stream().anyMatch(e -> !e.getValue().issues().isEmpty())) || + (idxRes != null && idxRes.entrySet().stream().anyMatch(e -> !e.getValue().issues().isEmpty())); + } + /** {@inheritDoc} */ @Override protected void writeExternalData(ObjectOutput out) throws IOException { U.writeMap(out, partRes); http://git-wip-us.apache.org/repos/asf/ignite/blob/5fc9a3fc/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTaskArg.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTaskArg.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTaskArg.java index aa49977..6dbd961 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTaskArg.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTaskArg.java @@ -21,12 +21,14 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.Set; +import java.util.UUID; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.internal.visor.VisorDataTransferObject; + /** - * Arguments for task {@link VisorIdleVerifyTask} + * */ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { /** */ @@ -41,6 +43,9 @@ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { /** Check through K element (skip K-1, check Kth). */ private int checkThrough; + /** Nodes on which task will run. */ + private Set<UUID> nodes; + /** * Default constructor. */ @@ -51,10 +56,11 @@ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { /** * @param caches Caches. */ - public VisorValidateIndexesTaskArg(Set<String> caches, int checkFirst, int checkThrough) { + public VisorValidateIndexesTaskArg(Set<String> caches, Set<UUID> nodes, int checkFirst, int checkThrough) { this.caches = caches; this.checkFirst = checkFirst; this.checkThrough = checkThrough; + this.nodes = nodes; } @@ -66,6 +72,13 @@ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { } /** + * @return Nodes on which task will run. If {@code null}, task will run on all server nodes. + */ + public Set<UUID> getNodes() { + return nodes; + } + + /** * @return checkFirst. */ public int getCheckFirst() { @@ -84,6 +97,7 @@ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { U.writeCollection(out, caches); out.writeInt(checkFirst); out.writeInt(checkThrough); + U.writeCollection(out, nodes); } /** {@inheritDoc} */ @@ -98,11 +112,14 @@ public class VisorValidateIndexesTaskArg extends VisorDataTransferObject { checkFirst = -1; checkThrough = -1; } + + if (protoVer > V2) + nodes = U.readSet(in); } /** {@inheritDoc} */ @Override public byte getProtocolVersion() { - return V2; + return V3; } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/5fc9a3fc/modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTask.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTask.java b/modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTask.java index abb7f7e..922c53e 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTask.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/VisorValidateIndexesTask.java @@ -17,16 +17,22 @@ package org.apache.ignite.internal.visor.verify; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import org.apache.ignite.IgniteException; +import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.compute.ComputeJobResult; import org.apache.ignite.internal.processors.task.GridInternal; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.visor.VisorJob; import org.apache.ignite.internal.visor.VisorMultiNodeTask; +import org.apache.ignite.internal.visor.VisorTaskArgument; import org.jetbrains.annotations.Nullable; /** @@ -58,6 +64,29 @@ public class VisorValidateIndexesTask extends VisorMultiNodeTask<VisorValidateIn return new VisorValidateIndexesJob(arg, debug); } + /** {@inheritDoc} */ + @Override protected Collection<UUID> jobNodes(VisorTaskArgument<VisorValidateIndexesTaskArg> arg) { + Collection<ClusterNode> srvNodes = ignite.cluster().forServers().nodes(); + Collection<UUID> ret = new ArrayList<>(srvNodes.size()); + + VisorValidateIndexesTaskArg taskArg = arg.getArgument(); + + Set<UUID> nodeIds = taskArg.getNodes() != null ? new HashSet<>(taskArg.getNodes()) : null; + + if (nodeIds == null) { + for (ClusterNode node : srvNodes) + ret.add(node.id()); + } + else { + for (ClusterNode node : srvNodes) { + if (nodeIds.contains(node.id())) + ret.add(node.id()); + } + } + + return ret; + } + /** * */ http://git-wip-us.apache.org/repos/asf/ignite/blob/5fc9a3fc/modules/indexing/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java b/modules/indexing/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java index c7693d2..dc5011f 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java @@ -113,7 +113,7 @@ public class GridCommandHandlerIndexingTest extends GridCommandHandlerTest { } /** - * Tests that missing rows in H2 indexes are detected. + * Tests that corrupted pages in the index partition are detected. */ public void testCorruptedIndexPartitionShouldFailValidation() throws Exception { Ignite ignite = prepareGridForTest();