changeset 64:f884c1bd0d36

fix IncomingHosts and RecordTopology. and refactor.
author akahori
date Thu, 30 Aug 2018 10:55:37 +0900
parents c73bb6a17034
children 5deea416f980
files src/main/java/christie/topology/HostMessage.java src/main/java/christie/topology/manager/CheckComingHost.java src/main/java/christie/topology/manager/ConfigWaiter.java src/main/java/christie/topology/manager/IncomingHosts.java src/main/java/christie/topology/manager/NodeInfo.java src/main/java/christie/topology/manager/RecordTopology.java src/main/java/christie/topology/manager/SearchHostName.java src/main/java/christie/topology/manager/StartTopologyManager.java src/main/java/christie/topology/manager/TopologyFinish.java src/main/java/christie/topology/manager/TopologyManager.java
diffstat 10 files changed, 64 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/christie/topology/HostMessage.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/HostMessage.java	Thu Aug 30 10:55:37 2018 +0900
@@ -9,10 +9,10 @@
     public int port;
 
     public String connectionName;
-    public String absName; // this is absName which have these IP and port.
+    public String nodeName; // this is nodeName which have these IP and port.
 
     public String reverseName;
-    public String remoteAbsName;
+    public String remoteNodeName;
     public String cookie; // MD5
 
     public boolean alive;
@@ -36,7 +36,7 @@
 
     public String toString() {
         return "HostMessage : name = " + hostName + ", port = " + Integer.toString(port) + " connectionName = " +
-                connectionName + " absName = " + absName + "reverseName = " + reverseName + " remoteAbsName = " + remoteAbsName
+                connectionName + " absName = " + nodeName + "reverseName = " + reverseName + " remoteAbsName = " + remoteNodeName
                 + " cokkie = " + cookie ;
     }
 }
--- a/src/main/java/christie/topology/manager/CheckComingHost.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/CheckComingHost.java	Thu Aug 30 10:55:37 2018 +0900
@@ -25,7 +25,7 @@
         // check cookie
         if (hostMessage.cookie != null) {
             if (absCookieTable.containsKey(hostMessage.cookie)) {
-                hostMessage.absName = absCookieTable.get(hostMessage.cookie);
+                hostMessage.nodeName = absCookieTable.get(hostMessage.cookie);
                 System.out.println("match");
                 // coming host has ever joined this App
                 getLocalDGM().put("reconnectHost", hostMessage);
--- a/src/main/java/christie/topology/manager/ConfigWaiter.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/ConfigWaiter.java	Thu Aug 30 10:55:37 2018 +0900
@@ -4,16 +4,11 @@
 import christie.annotation.Take;
 import christie.codegear.CodeGear;
 import christie.codegear.CodeGearManager;
-import org.msgpack.type.NilValue;
-import org.msgpack.type.ValueFactory;
 
 public class ConfigWaiter extends CodeGear {
 
-
-    // Question: done 変数がわからない...何やっているんだろう.
-    // public Receiver done = ids.create(CommandType.TAKE);
     @Take
-    String done;
+    String nodePrepareDone;
 
     @Take
     int nodeNum;
--- a/src/main/java/christie/topology/manager/IncomingHosts.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/IncomingHosts.java	Thu Aug 30 10:55:37 2018 +0900
@@ -20,7 +20,6 @@
     @Peek
     HashMap<String, String> absCookieTable;
 
-
     @Take // new coming host info
     HostMessage newHost;
     @Take
@@ -43,19 +42,21 @@
 
         absCookieTable.put(MD5, nodeName);
 
-        getDGM(nodeName).put( "host", nodeName);
+        getDGM(nodeName).put( "nodeName", nodeName);
         getDGM(nodeName).put("cookie", MD5);
         log.info( "toplology manager connected from " + nodeName);
 
+
+
         LinkedList<NodeInfo> nodeInfoList = resultParse.get(nodeName);
         for (NodeInfo nodeInfo : nodeInfoList) {
             HostMessage hostMessage = new HostMessage(newHost.hostName, newHost.port,
-                    nodeInfo.connectionName, nodeInfo.reverseName);
-            hostMessage.absName = nodeName;
-            hostMessage.remoteAbsName = nodeInfo.sourceNodeName;
+                    nodeInfo.connectionName, "");
+            hostMessage.nodeName = nodeName;
+            hostMessage.remoteNodeName = nodeInfo.targetNodeName;
 
             getLocalDGM().put("nodeInfo", hostMessage);
-            getLocalDGM().put("hostInfo", hostMessage);
+
             log.info(" write to " + nodeInfo.sourceNodeName + " config message =" + hostMessage.toString() + " remain "
                     + Integer.toString((nodeNames.size())));
 
--- a/src/main/java/christie/topology/manager/NodeInfo.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/NodeInfo.java	Thu Aug 30 10:55:37 2018 +0900
@@ -1,15 +1,17 @@
 package christie.topology.manager;
 
+// edgeの情報入れてるだけだからクラス名変えたい.
 public class NodeInfo {
 
     public String sourceNodeName;
     public String connectionName;
-    public String reverseName;
+    public String targetNodeName;
 
 
-    public NodeInfo(String source, String connection) {
+    public NodeInfo(String source, String connection, String target) {
         this.sourceNodeName = source;
         this.connectionName = connection;
+        this.targetNodeName = target;
     }
 
 }
--- a/src/main/java/christie/topology/manager/RecordTopology.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/RecordTopology.java	Thu Aug 30 10:55:37 2018 +0900
@@ -16,28 +16,35 @@
     HostMessage nodeInfo;
 
     @Peek
-    HashMap<String, LinkedList<HostMessage>> topology;
+    HashMap<String, HashMap<String, HostMessage>> topology; // ノード数nの全結合のデータ数 (n-1)*n + n
+
+    //@Peek
+    //HashMap<String, LinkedList<HostMessage>> topology; // ノード数nの全結合のデータ数 (n-1)*n
 
     @Override
     protected void run(CodeGearManager cgm) {
-        LinkedList<HostMessage> connections;
-        if (!topology.containsKey(nodeInfo.remoteAbsName)) {
-            connections = new LinkedList<HostMessage>();
+        String nodeName = nodeInfo.nodeName;
+        String remoteNodeName = nodeInfo.remoteNodeName;
+
+        // topologyにつながりを保存する.
+        if (topology.containsKey(nodeName)) {
+            topology.get(nodeName).put(remoteNodeName, nodeInfo);
+
         } else {
-            connections = topology.get(nodeInfo.remoteAbsName);
+            HashMap<String, HostMessage> connections = new HashMap<String, HostMessage>();
+            connections.put(nodeInfo.remoteNodeName, nodeInfo);
+            topology.put(nodeInfo.nodeName, connections);
         }
-        connections.add(nodeInfo);
-        topology.put(nodeInfo.remoteAbsName, connections);
-// need debug option
-//        for (LinkedList<HostMessage> list :topology.values()){
-//            System.out.print(list.get(0).remoteAbsName+" : ");
-//            for (HostMessage host : list){
-//                System.out.print("[ "+host.absName+" "+host.name+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]");
-//            }
-//            System.out.println();
-//        }
 
-        //getLocalDGM().put("topology", topology);
+        // topologyNodeにつながる相手の情報を送る
+        if(topology.containsKey(remoteNodeName)){
+            getDGM(nodeName).put("remoteNodeInfo", topology.get(remoteNodeName).get(nodeName));
+            if(topology.get(remoteNodeName).containsKey(nodeName)){
+                getDGM(remoteNodeName).put("remoteNodeInfo", nodeInfo);
+            }
+
+        }
+
     }
 
 }
--- a/src/main/java/christie/topology/manager/SearchHostName.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/SearchHostName.java	Thu Aug 30 10:55:37 2018 +0900
@@ -34,24 +34,24 @@
         // Question: remove処理 どうしようか. いらない気もする.
         // DataSegment.remove(hostInfo.absName);
 
-        cgm.createRemoteDGM(reconnectHost.absName, reconnectHost.hostName, reconnectHost.port);
-        getDGM(reconnectHost.absName).put("host", reconnectHost.absName);
+        cgm.createRemoteDGM(reconnectHost.nodeName, reconnectHost.hostName, reconnectHost.port);
+        getDGM(reconnectHost.nodeName).put("host", reconnectHost.nodeName);
 
         // put Host dataSegment on reconnect node
-        if (topology.containsKey(reconnectHost.absName)) {
+        if (topology.containsKey(reconnectHost.nodeName)) {
 
             // Question: これはバグ...?
             // ods.put(reconnectHost.absName, "dummy"); // this is bug
 
             if (running){
-                getLocalDGM().put(reconnectHost.absName, ValueFactory.createNilValue());
+                getLocalDGM().put(reconnectHost.nodeName, ValueFactory.createNilValue());
             }
 
 
-            LinkedList<HostMessage> hostList = topology.get(reconnectHost.absName);
+            LinkedList<HostMessage> hostList = topology.get(reconnectHost.nodeName);
             for (HostMessage host : hostList){
-                getLocalDGM().put(reconnectHost.absName, host);
-                System.out.println("put data in "+ reconnectHost.absName);
+                getLocalDGM().put(reconnectHost.nodeName, host);
+                System.out.println("put data in "+ reconnectHost.nodeName);
             }
         }
 
@@ -60,13 +60,13 @@
             for (HostMessage host : list){
 
                 // find and update old info
-                if (!reconnectHost.absName.equals(host.absName)) continue;
+                if (!reconnectHost.nodeName.equals(host.nodeName)) continue;
 
                 if (!reconnectHost.hostName.equals(host.hostName) || reconnectHost.port != host.port){
                     host.hostName = reconnectHost.hostName;
                     host.port = reconnectHost.port;
 
-                    getLocalDGM().put(host.remoteAbsName, host);
+                    getLocalDGM().put(host.remoteNodeName, host);
 
                 } else {
                     // nothing to do ?
@@ -75,9 +75,9 @@
         }
 
         for (LinkedList<HostMessage> list :topology.values()){
-            System.out.print(list.get(0).remoteAbsName+" : ");
+            System.out.print(list.get(0).remoteNodeName+" : ");
             for (HostMessage host : list){
-                System.out.print("[ "+host.absName+" "+host.hostName+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]");
+                System.out.print("[ "+host.nodeName+" "+host.hostName+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteNodeName+" ]");
             }
             System.out.println();
         }
--- a/src/main/java/christie/topology/manager/StartTopologyManager.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/StartTopologyManager.java	Thu Aug 30 10:55:37 2018 +0900
@@ -10,11 +10,4 @@
         cgm.getLocalDGM().put("topologyManagerConfig", topologyManagerConfig);
         cgm.setup(new TopologyManager());
     }
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-    }
-
-
 }
--- a/src/main/java/christie/topology/manager/TopologyFinish.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/TopologyFinish.java	Thu Aug 30 10:55:37 2018 +0900
@@ -13,6 +13,9 @@
     //public Receiver finish = ids.create(CommandType.TAKE);
     //cs2.finish.setKey("local", "finish");
 
+    @Take
+    String finish;
+
     @Peek
     TopologyManagerConfig topologyManagerConfig;
 
--- a/src/main/java/christie/topology/manager/TopologyManager.java	Wed Aug 29 10:40:39 2018 +0900
+++ b/src/main/java/christie/topology/manager/TopologyManager.java	Thu Aug 30 10:55:37 2018 +0900
@@ -1,7 +1,6 @@
 package christie.topology.manager;
 
 import christie.annotation.Peek;
-import christie.annotation.Take;
 import christie.codegear.CodeGear;
 import christie.codegear.CodeGearManager;
 
@@ -38,7 +37,7 @@
         // if (!conf.dynamic) は, conf.dynamic = trueの動作がわからないので,  省いた.
 
         LinkedList<String> nodeNames = new LinkedList<>();
-        HashMap<String, LinkedList<NodeInfo>> topology = new HashMap<>();
+        HashMap<String, LinkedList<NodeInfo>> resultParse = new HashMap<>();
         int nodeNum = 0;
 
         try {
@@ -57,7 +56,7 @@
                 for (Node node : nodes) {
                     String nodeName = node.getId().getId();
                     nodeNames.add(nodeName);
-                    topology.put(nodeName, new LinkedList<>());
+                    resultParse.put(nodeName, new LinkedList<>());
                 }
 
                 ArrayList<Edge> edges = digraph.getEdges();
@@ -74,14 +73,15 @@
                     connection = edge.getAttribute("label");
                     source = edge.getSource().getNode().getId().getId();
                     target = edge.getTarget().getNode().getId().getId();
-                    nodeInfo = new NodeInfo(source, connection);
+                    nodeInfo = new NodeInfo(source, connection, target);
 
-                    topology.get(target).add(nodeInfo);
+                    resultParse.get(source).add(nodeInfo);
 
-                    hash.put(source + "," + target, nodeInfo);
+                    //hash.put(source + "," + target, nodeInfo);
                 }
 
                 // hash.get(target + "," + source); をして, グラフを逆にたどって, reverseNameにlabelを入れてる.
+                /*
                 for (Edge edge : edges) {
                     connection = edge.getAttribute("label");
                     source = edge.getSource().getNode().getId().getId();
@@ -92,7 +92,7 @@
                         nodeInfo.reverseName = connection;
                     }
 
-                }
+                }*/
             }
 
         } catch (FileNotFoundException e) {
@@ -106,25 +106,16 @@
         // for recode topology information
         // cookie List
         getLocalDGM().put("running", false);
-        getLocalDGM().put("resultParse", topology);
+        getLocalDGM().put("resultParse", resultParse);
         getLocalDGM().put("nodeNames", nodeNames);
         getLocalDGM().put("hostInfoMap", new HashMap<String, HostMessage>());
-        getLocalDGM().put("topology", new HashMap<String, LinkedList<HostMessage>>());
+        getLocalDGM().put("topology", new HashMap<String, HashMap<String, HostMessage>>());
+        getLocalDGM().put("nodeNum", nodeNum);
+        getLocalDGM().put("createdList", new LinkedList<String>());
 
         cgm.setup(new IncomingHosts());
-
-        // Question: この処理何をやっているのかわからない. 一応, その下にそれっぽいコードを書いた.
-        // ConfigWaiter cs3 = new ConfigWaiter(nodeNum);
-        // cs3.done.setKey("local", "done");
-
         cgm.setup(new ConfigWaiter());
-        getLocalDGM().put("nodeNum", nodeNum);
-
-
-
-        getLocalDGM().put("createdList", new LinkedList<String>());
         cgm.setup(new CreateHash());
-
         cgm.setup(new TopologyFinish());
 
     }