You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/11/21 17:37:24 UTC

ignite git commit: IGNITE-10339 Fixed cluster connection when using validate indexes from control.sh - Fixes #5458.

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 <al...@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 <iv...@gmail.com>
Authored: Wed Nov 21 20:35:23 2018 +0300
Committer: Alexey Goncharuk <al...@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();