changeset 583:ded89ea8861f dispose

add managerName to HostMessage, change connect to manager and put host
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Fri, 18 Dec 2015 20:25:26 +0900
parents 2aac0644f92d
children c2d9fe72d9b0
files src/main/java/alice/topology/HostMessage.java src/main/java/alice/topology/manager/CreateTreeTopology.java src/main/java/alice/topology/manager/IncomingHosts.java src/main/java/alice/topology/manager/SearchHostName.java src/main/java/alice/topology/node/ConfigurationFinish.java src/main/java/alice/topology/node/IncomingAbstractHostName.java src/main/java/alice/topology/node/IncomingConnectionInfo.java src/main/java/alice/topology/node/StartTopologyNode.java src/main/java/alice/topology/node/TopologyNode.java
diffstat 9 files changed, 86 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/topology/HostMessage.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/HostMessage.java	Fri Dec 18 20:25:26 2015 +0900
@@ -6,7 +6,7 @@
 public class HostMessage {
     public String name;
     public int port;
-    public int topMNum = 0;//複数のTopMに接続する際、どのTopMのノードかを識別する
+    public String managerName;//複数のTopMに接続する際、どのTopMのノードかを識別する
 
     public String connectionName;
     public String absName; // this is absName which have these IP and port.
@@ -18,15 +18,16 @@
     public boolean alive;
 
     public HostMessage() { }
-    public HostMessage(String name, int port, int topMNum) {
+    public HostMessage(String name, int port, String managerName) {
         this.name = name;
         this.port = port;
-        this.topMNum = topMNum;
+        this.managerName = managerName;
     }
 
-    public HostMessage(String name, int port, String connectionName, String reverseName) {
+    public HostMessage(String name, int port, String managerName, String connectionName, String reverseName) {
         this.name = name;
         this.port = port;
+        this.managerName = managerName;
         this.connectionName = connectionName;
         this.reverseName = reverseName;
     }
--- a/src/main/java/alice/topology/manager/CreateTreeTopology.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/manager/CreateTreeTopology.java	Fri Dec 18 20:25:26 2015 +0900
@@ -17,6 +17,7 @@
     private Receiver info3 = ids.create(CommandType.TAKE); // MD5
     private Receiver info4 = ids.create(CommandType.TAKE);
     private Receiver info6 = ids.create(CommandType.TAKE);
+    private Receiver hostName = ids.create(CommandType.PEEK);
 
     public CreateTreeTopology(){
         info.setKey("newHost");
@@ -42,8 +43,10 @@
         String nodeName = "node"+comingHostCount;
         // Manager connect to Node
         DataSegment.connect(nodeName, nodeName, host.name, host.port);
-        //ods.put(nodeName, "host", new HashMap<Integer, String>().put(host.topMNum, nodeName));
-        ods.put(nodeName, "host", nodeName);
+
+        this.hostName.setKey(nodeName, "host");
+        HashMap<String, String> managerName = hostName.asClass(HashMap.class);
+        ods.put(nodeName, "host", managerName.put(host.managerName, nodeName));
         ods.put(nodeName, "cookie", cookie);
 
         absCookieTable.put(cookie, nodeName);
@@ -59,7 +62,7 @@
             HostMessage parent = nameTable.get(parentAbsName);
             int num = manager.getMyNumber();
 
-            HostMessage newHost = new HostMessage(parent.name, parent.port, "parent", "child"+num);
+            HostMessage newHost = new HostMessage(parent.name, parent.port, parent.managerName, "parent", "child"+num);
             newHost.absName = parentAbsName;
             newHost.remoteAbsName = nodeName; // address
             ods.put(newHost.remoteAbsName, newHost);
@@ -68,7 +71,7 @@
             new RecodeTopology();
 
             // put own information parent
-            newHost = new HostMessage(host.name, host.port, "child"+num, "parent");
+            newHost = new HostMessage(host.name, host.port, host.managerName, "child"+num, "parent");
             newHost.absName = nodeName;
             newHost.remoteAbsName = parentAbsName;
 
--- a/src/main/java/alice/topology/manager/IncomingHosts.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/manager/IncomingHosts.java	Fri Dec 18 20:25:26 2015 +0900
@@ -18,6 +18,7 @@
     private Receiver host = ids.create(CommandType.TAKE);      // new coming host info
     private Receiver absCookieTable = ids.create(CommandType.TAKE); // cookie, AbsName HashMap
     private Receiver cookie = ids.create(CommandType.TAKE);    // MD5
+    private Receiver hostName = ids.create(CommandType.PEEK);
 
     public IncomingHosts() {
         this.topology.setKey("resultParse");
@@ -41,8 +42,11 @@
         String nodeName = nodeNames.poll();
         // Manager connect to Node
         DataSegment.connect(nodeName, "", host.name, host.port);
-        //ods.put(nodeName, "host", new HashMap<Integer, String>() .put(host.topMNum, nodeName));
-        ods.put(nodeName, "host", nodeName);
+
+        this.hostName.setKey(nodeName, "host");
+        HashMap<String, String> managerName = hostName.asClass(HashMap.class);
+
+        ods.put(nodeName, "host", managerName.put(host.managerName, nodeName));
 
         String cookie = this.cookie.asString();
         absCookieTable.put(cookie, nodeName);
@@ -52,7 +56,7 @@
 
         LinkedList<NodeInfo> nodes = topology.get(nodeName);
         for (NodeInfo nodeInfo : nodes) {
-            HostMessage newHost = new HostMessage(host.name, host.port,
+            HostMessage newHost = new HostMessage(host.name, host.port, host.managerName,
                     nodeInfo.connectionName, nodeInfo.reverseName);
             newHost.absName = nodeName;
             newHost.remoteAbsName = nodeInfo.sourceNodeName;
--- a/src/main/java/alice/topology/manager/SearchHostName.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/manager/SearchHostName.java	Fri Dec 18 20:25:26 2015 +0900
@@ -16,6 +16,7 @@
     private Receiver info = ids.create(CommandType.TAKE);  // reconnect NodeInfo
     private Receiver info1 = ids.create(CommandType.TAKE); // topology recode (HashMap)
     private Receiver info2 = ids.create(CommandType.PEEK); // check App running
+    private Receiver hostName = ids.create(CommandType.PEEK);
 
     public SearchHostName(){
         info.setKey("reconnectHost");
@@ -32,8 +33,11 @@
 
         DataSegment.remove(hostInfo.absName);
         DataSegment.connect(hostInfo.absName, "", hostInfo.name, hostInfo.port);
-        //ods.put(hostInfo.absName, "host", new HashMap<Integer, String>() .put(hostInfo.topMNum, hostInfo.absName));
-        ods.put(hostInfo.absName, "host", hostInfo.absName);
+
+
+        this.hostName.setKey(hostInfo.absName, "host");
+        HashMap<String, String> managerName = hostName.asClass(HashMap.class);
+        ods.put(hostInfo.absName, "host", managerName.put(hostInfo.managerName, hostInfo.absName));
 
         // put Host dataSegment on reconnect node
         if (topology.containsKey(hostInfo.absName)) {
--- a/src/main/java/alice/topology/node/ConfigurationFinish.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/node/ConfigurationFinish.java	Fri Dec 18 20:25:26 2015 +0900
@@ -7,24 +7,31 @@
 import alice.datasegment.Receiver;
 import alice.topology.manager.keeparive.StartKeepAlive;
 
+import java.util.ArrayList;
+
 public class ConfigurationFinish extends CodeSegment {
 
     public Receiver reverseCount = ids.create(CommandType.PEEK);
     public Receiver configNodeNum = ids.create(CommandType.PEEK);
+    public Receiver managers = ids.create(CommandType.PEEK);
     private CodeSegment startCS;
+    private int topMNum;
 
-    public ConfigurationFinish(CodeSegment startCS) {
+    public ConfigurationFinish(CodeSegment startCS, int topMNum) {
         this.startCS = startCS;
+        this.topMNum = topMNum;
     }
 
     @Override
     public void run() {
         int rcount = reverseCount.asInteger();
         int ncount = configNodeNum.asInteger();
+        ArrayList<TopologyNodeConfig> managers = this.managers.asClass(ArrayList.class);
+
         if (rcount == ncount) {
-            ods.put("manager", "done", ValueFactory.createNilValue());
+            ods.put("manager"+managers.get(topMNum).getManagerHostName(), "done", ValueFactory.createNilValue());
             Start cs = new Start(startCS);
-            cs.done.setKey("manager", "start");
+            cs.done.setKey("manager"+managers.get(topMNum).getManagerHostName(), "start");
 
             new StartKeepAlive().execute();
             new ReceiveCloseMessage(CommandType.PEEK);
@@ -33,7 +40,7 @@
             return;
         }
 
-        ConfigurationFinish cs3 = new ConfigurationFinish(startCS);
+        ConfigurationFinish cs3 = new ConfigurationFinish(startCS, topMNum);
         cs3.reverseCount.setKey("local", "reverseCount", this.reverseCount.index);
         cs3.configNodeNum.setKey("local", "configNodeNum");
     }
--- a/src/main/java/alice/topology/node/IncomingAbstractHostName.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/node/IncomingAbstractHostName.java	Fri Dec 18 20:25:26 2015 +0900
@@ -4,15 +4,27 @@
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.HashMap;
+
 public class IncomingAbstractHostName extends CodeSegment {
 
     public Receiver absName = ids.create(CommandType.PEEK);
+    public Receiver managers = ids.create(CommandType.PEEK);
+    private int topMNum;
+
+    public IncomingAbstractHostName(int topNum){
+        this.topMNum = topNum;
+    }
 
     @Override
     public void run() {
         String absName = this.absName.asString();
-        IncomingConnectionInfo cs = new IncomingConnectionInfo(absName, 0);
-        cs.hostInfo.setKey("manager", absName);
+        ArrayList<TopologyNodeConfig> managers = this.managers.asClass(ArrayList.class);
+        IncomingConnectionInfo cs = new IncomingConnectionInfo(absName, 0, topMNum);
+        cs.managers.setKey("managers");
+        cs.hostInfo.setKey("manager:"+managers.get(topMNum).getManagerHostName(), absName);
     }
 
 }
--- a/src/main/java/alice/topology/node/IncomingConnectionInfo.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/node/IncomingConnectionInfo.java	Fri Dec 18 20:25:26 2015 +0900
@@ -6,27 +6,34 @@
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
+import java.util.ArrayList;
+
 public class IncomingConnectionInfo extends CodeSegment {
 
     public Receiver hostInfo = ids.create(CommandType.TAKE);
+    public Receiver managers = ids.create(CommandType.PEEK);
     private String absName;
     private int count;
+    private int topMNum;
 
-    public IncomingConnectionInfo(String absName, int count) {
+    public IncomingConnectionInfo(String absName, int count, int topMNum) {
         this.absName = absName;
         this.count = count;
+        this.topMNum = topMNum;
     }
 
 
     @Override
     public void run() {
+        ArrayList<TopologyNodeConfig> managers = this.managers.asClass(ArrayList.class);
+
         if (this.hostInfo.getVal() == null) {
             ods.put("local", "configNodeNum", count);
         } else {
             HostMessage hostInfo = this.hostInfo.asClass(HostMessage.class);
             if (DataSegment.contains(hostInfo.connectionName)) {
                 // need to wait remove by DeleteConnection
-                ods.put("manager", absName, hostInfo);
+                ods.put("manager"+managers.get(topMNum).getManagerHostName(), absName, hostInfo);
             } else {
                 DataSegment.connect(hostInfo.connectionName, hostInfo.reverseName, hostInfo.name, hostInfo.port);
                 ods.put(hostInfo.connectionName, "reverseKey", hostInfo.reverseName);
@@ -38,8 +45,8 @@
 
         }
 
-        IncomingConnectionInfo cs = new IncomingConnectionInfo(absName, count);
-        cs.hostInfo.setKey("manager", absName);
+        IncomingConnectionInfo cs = new IncomingConnectionInfo(absName, count, topMNum);
+        cs.hostInfo.setKey("manager"+managers.get(topMNum).getManagerHostName(), absName);
     }
 
 }
--- a/src/main/java/alice/topology/node/StartTopologyNode.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/node/StartTopologyNode.java	Fri Dec 18 20:25:26 2015 +0900
@@ -3,9 +3,12 @@
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
+import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
 public class StartTopologyNode extends CodeSegment {
@@ -13,16 +16,21 @@
     private TopologyNodeConfig conf;
     private CodeSegment startCS;
     private int topMNumber;
+    public Receiver info = ids.create(CommandType.TAKE);
 
     public StartTopologyNode(TopologyNodeConfig conf, CodeSegment startCS, int topMNum) {
         this.conf = conf;
         this.startCS = startCS;
         this.topMNumber = topMNum;
+        this.info.setKey("managers");
     }
 
     @Override
     public void run() {
-        DataSegment.connect("manager", "manager", conf.getManagerHostName(), conf.getManagerPort());
+        ArrayList<TopologyNodeConfig> managers = info.asClass(ArrayList.class);
+        ods.put("managers", managers.add(conf));
+        DataSegment.connect("manager"+conf.getManagerHostName(), "manager"+conf.getManagerHostName(), conf.getManagerHostName(), conf.getManagerPort());
+
         String localHostName = null;
         try {
             localHostName = InetAddress.getLocalHost().getHostAddress();
@@ -31,14 +39,15 @@
         }
         new SaveCookie();
 
-        HostMessage host = new HostMessage(localHostName, conf.localPort, topMNumber);
+        HostMessage host = new HostMessage(localHostName, conf.localPort, conf.getManagerHostName());
         host.cookie = conf.cookie;
-        ods.put("manager", "host", host);
+        ods.put("manager"+conf.getManagerHostName(), "host", host);
 
         ods.put("_CLIST", new ArrayList<String>());
 
-        IncomingAbstractHostName cs = new IncomingAbstractHostName();
-        cs.absName.setKey("local", "host");
+        IncomingAbstractHostName cs = new IncomingAbstractHostName(topMNumber);
+        cs.absName.setKey("local", "host"+conf.getManagerHostName());
+        cs.managers.setKey("managers");
 
         IncomingReverseKey cs2 = new IncomingReverseKey();
         cs2.reverseKey.setKey("local", "reverseKey");
@@ -46,9 +55,10 @@
 
         ods.put("local", "reverseCount", 0);
 
-        ConfigurationFinish cs3 = new ConfigurationFinish(startCS);
+        ConfigurationFinish cs3 = new ConfigurationFinish(startCS, topMNumber);
         cs3.reverseCount.setKey("local", "reverseCount");
         cs3.configNodeNum.setKey("local", "configNodeNum");
+        cs3.managers.setKey("managers");
 
     }
 
--- a/src/main/java/alice/topology/node/TopologyNode.java	Fri Dec 18 01:34:12 2015 +0900
+++ b/src/main/java/alice/topology/node/TopologyNode.java	Fri Dec 18 20:25:26 2015 +0900
@@ -3,6 +3,9 @@
 import alice.codesegment.CodeSegment;
 import alice.daemon.AliceDaemon;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+
 public class TopologyNode {
 
     public TopologyNode(TopologyNodeConfig conf, CodeSegment startCS) {
@@ -12,7 +15,12 @@
 
     public TopologyNode(TopologyNodeConfig conf, CodeSegment startCS, int TopMNumber) {
         new AliceDaemon(conf).listen();
-        new StartTopologyNode(conf, startCS, TopMNumber).execute();
+        CodeSegment cs = new StartTopologyNode(conf, startCS, TopMNumber);
+        if (TopMNumber == 0){
+            cs.ods.put("managers", new ArrayList<TopologyNodeConfig>());
+            cs.ods.put("host", new HashMap<String, String>());
+        }
+        cs.execute();
     }
 
     public static void main(String[] args) {