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 2019/02/04 12:56:00 UTC

[ignite] branch master updated: IGNITE-8894 Provide coordinator information in control.sh output - Fixes #5933.

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

agoncharuk 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 be9079d  IGNITE-8894 Provide coordinator information in control.sh output - Fixes #5933.
be9079d is described below

commit be9079d222da53da8ba6d0f8d1817eaf7ebddc77
Author: Sergey Kosarev <ma...@gmail.com>
AuthorDate: Mon Feb 4 15:36:29 2019 +0300

    IGNITE-8894 Provide coordinator information in control.sh output - Fixes #5933.
    
    Signed-off-by: Alexey Goncharuk <al...@gmail.com>
---
 .../internal/commandline/CommandHandler.java       | 23 +++++--
 .../internal/commandline/GridConsoleAdapter.java   |  4 +-
 .../internal/visor/baseline/VisorBaselineNode.java | 25 ++++++++
 .../apache/ignite/util/GridCommandHandlerTest.java | 72 ++++++++++++++++++++++
 4 files changed, 117 insertions(+), 7 deletions(-)

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 2a02daa..5f844a0 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
@@ -30,6 +30,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Scanner;
 import java.util.Set;
 import java.util.UUID;
@@ -1296,22 +1297,34 @@ public class CommandHandler {
      */
     private void baselinePrint0(VisorBaselineTaskResult res) {
         log("Cluster state: " + (res.isActive() ? "active" : "inactive"));
-        log("Current topology version: " + res.getTopologyVersion());
-        nl();
 
         Map<String, VisorBaselineNode> baseline = res.getBaseline();
 
         Map<String, VisorBaselineNode> srvs = res.getServers();
 
+        Optional<VisorBaselineNode> crdOpt = srvs.values().stream()
+            .min(Comparator.comparing(VisorBaselineNode::getOrder));
+
+        String crdStr = crdOpt.map(
+            crd -> "ConsistentId=" + crd.getConsistentId() + ", Order=" + crd.getOrder())
+            .orElse("");
+
+        log("Current topology version: " + res.getTopologyVersion() + " (Coordinator: " + crdStr + ")");
+        nl();
+
         if (F.isEmpty(baseline))
             log("Baseline nodes not found.");
         else {
             log("Baseline nodes:");
 
             for (VisorBaselineNode node : baseline.values()) {
-                boolean online = srvs.containsKey(node.getConsistentId());
+                VisorBaselineNode srvNode = srvs.get(node.getConsistentId());
+
+                String state = ", State=" + (srvNode != null ? "ONLINE" : "OFFLINE");
+
+                String order = srvNode != null ? ", Order=" + srvNode.getOrder() : "";
 
-                log(i("ConsistentID=" + node.getConsistentId() + ", STATE=" + (online ? "ONLINE" : "OFFLINE"), 2));
+                log(i("ConsistentId=" + node.getConsistentId() + state + order, 2));
             }
 
             log(DELIM);
@@ -1332,7 +1345,7 @@ public class CommandHandler {
                 log("Other nodes:");
 
                 for (VisorBaselineNode node : others)
-                    log(i("ConsistentID=" + node.getConsistentId(), 2));
+                    log(i("ConsistentId=" + node.getConsistentId() + ", Order=" + node.getOrder(), 2));
 
                 log("Number of other nodes: " + others.size());
             }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/GridConsoleAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/GridConsoleAdapter.java
index 010fbe5..b66e958 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/GridConsoleAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/GridConsoleAdapter.java
@@ -38,10 +38,10 @@ public class GridConsoleAdapter implements GridConsole {
 
     /** Constructor. */
     private GridConsoleAdapter(Console delegate) {
-        this.delegate = System.console();
-
         if (delegate == null)
             throw new NullPointerException("Console is not available.");
+
+        this.delegate = delegate;
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineNode.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineNode.java
index b37a364..9f4b39f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/baseline/VisorBaselineNode.java
@@ -22,9 +22,11 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Map;
 import org.apache.ignite.cluster.BaselineNode;
+import org.apache.ignite.internal.managers.discovery.IgniteClusterNode;
 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;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Data transfer object for {@link BaselineNode}.
@@ -39,6 +41,9 @@ public class VisorBaselineNode extends VisorDataTransferObject {
     /** */
     private Map<String, Object> attrs;
 
+    /** */
+    private @Nullable Long order;
+
     /**
      * Default constructor.
      */
@@ -54,6 +59,15 @@ public class VisorBaselineNode extends VisorDataTransferObject {
     public VisorBaselineNode(BaselineNode node) {
         consistentId = String.valueOf(node.consistentId());
         attrs = node.attributes();
+
+        //Baseline topology returns instances of DetachedClusternode
+        if (node instanceof IgniteClusterNode)
+            order = ((IgniteClusterNode)node).order();
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte getProtocolVersion() {
+        return V2;
     }
 
     /**
@@ -70,16 +84,27 @@ public class VisorBaselineNode extends VisorDataTransferObject {
         return attrs;
     }
 
+    /**
+     * @return Node order.
+     */
+    public @Nullable Long getOrder() {
+        return order;
+    }
+
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, consistentId);
         U.writeMap(out, attrs);
+        out.writeObject(order);
     }
 
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         consistentId = U.readString(in);
         attrs = U.readMap(in);
+
+        if (protoVer >= V2)
+            order = (Long)in.readObject();
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index bce3c06..304bdae 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -359,6 +359,78 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
     }
 
     /**
+     * Test baseline collect works via control.sh
+     *
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testBaselineCollectCrd() throws Exception {
+        Ignite ignite = startGrids(2);
+
+        assertFalse(ignite.cluster().active());
+
+        ignite.cluster().active(true);
+
+        injectTestSystemOut();
+
+        assertEquals(EXIT_CODE_OK, execute("--baseline", "--port", "11212"));
+
+        String crdStr = findCrdInfo();
+
+        assertEquals("(Coordinator: ConsistentId=" +
+            grid(0).cluster().localNode().consistentId() + ", Order=1)", crdStr);
+
+        stopGrid(0);
+
+        testOut.reset();
+
+        assertEquals(EXIT_CODE_OK, execute("--baseline", "--port", "11212"));
+
+        crdStr = findCrdInfo();
+
+        assertEquals("(Coordinator: ConsistentId=" +
+            grid(1).cluster().localNode().consistentId() + ", Order=2)", crdStr);
+
+        startGrid(0);
+
+        testOut.reset();
+
+        assertEquals(EXIT_CODE_OK, execute("--baseline", "--port", "11212"));
+
+        crdStr = findCrdInfo();
+
+        assertEquals("(Coordinator: ConsistentId=" +
+            grid(1).cluster().localNode().consistentId() + ", Order=2)", crdStr);
+
+        stopGrid(1);
+
+        testOut.reset();
+
+        assertEquals(EXIT_CODE_OK, execute("--baseline", "--port", "11211"));
+
+        crdStr = findCrdInfo();
+
+        assertEquals("(Coordinator: ConsistentId=" +
+            grid(0).cluster().localNode().consistentId() + ", Order=4)", crdStr);
+
+    }
+
+    /**
+     * @return utility information about coordinator
+     */
+    private String findCrdInfo() {
+        String outStr = testOut.toString();
+
+        int i = outStr.indexOf("(Coordinator: ConsistentId=");
+
+        assertTrue(i != -1);
+
+        String crdStr = outStr.substring(i);
+
+        return crdStr.substring(0, crdStr.indexOf('\n'));
+    }
+
+    /**
      * @param ignites Ignites.
      * @return Local node consistent ID.
      */