# HG changeset patch # User Nozomi Teruya # Date 1450437926 -32400 # Node ID ded89ea8861fc7fcf401b10eb24f45420cfaea43 # Parent 2aac0644f92d536424055895d4a1daa821ae2ccd add managerName to HostMessage, change connect to manager and put host diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/HostMessage.java --- 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; } diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/manager/CreateTreeTopology.java --- 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().put(host.topMNum, nodeName)); - ods.put(nodeName, "host", nodeName); + + this.hostName.setKey(nodeName, "host"); + HashMap 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; diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/manager/IncomingHosts.java --- 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() .put(host.topMNum, nodeName)); - ods.put(nodeName, "host", nodeName); + + this.hostName.setKey(nodeName, "host"); + HashMap 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 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; diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/manager/SearchHostName.java --- 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() .put(hostInfo.topMNum, hostInfo.absName)); - ods.put(hostInfo.absName, "host", hostInfo.absName); + + + this.hostName.setKey(hostInfo.absName, "host"); + HashMap 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)) { diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/node/ConfigurationFinish.java --- 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 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"); } diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/node/IncomingAbstractHostName.java --- 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 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); } } diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/node/IncomingConnectionInfo.java --- 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 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); } } diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/node/StartTopologyNode.java --- 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 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()); - 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"); } diff -r 2aac0644f92d -r ded89ea8861f src/main/java/alice/topology/node/TopologyNode.java --- 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()); + cs.ods.put("host", new HashMap()); + } + cs.execute(); } public static void main(String[] args) {