Mercurial > hg > Database > Alice
view src/main/java/alice/topology/manager/CreateTreeTopology.java @ 602:8a9fd716c335 dispose
change topology class extends CodeSegment from MetaCodeSegment, Chat minor fix
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 03 May 2016 20:09:45 +0900 |
parents | 3284428f525e |
children |
line wrap: on
line source
package alice.topology.manager; import java.util.HashMap; import alice.codesegment.MetaCodeSegment; import org.msgpack.type.ValueFactory; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.DataSegment; import alice.datasegment.Receiver; import alice.topology.HostMessage; public class CreateTreeTopology extends CodeSegment { private Receiver info = ids.create(CommandType.TAKE); private Receiver info1 = ids.create(CommandType.TAKE); private Receiver info2 = ids.create(CommandType.TAKE); private Receiver info3 = ids.create(CommandType.TAKE); private Receiver info4 = ids.create(CommandType.TAKE); private Receiver info6 = ids.create(CommandType.TAKE); public CreateTreeTopology(){ info.setKey("newHost"); //HostMessage info1.setKey("hostCount"); //incoming host count number for put node name like node0, node1, node2 info2.setKey("nameTable"); //HashMap.<String:nodeName, HostMessage> info3.setKey("MD5"); //String:node's cookie that created by CreateHash info4.setKey("absCookieTable"); //HashMap<String:cookie, String:nodeName> info6.setKey("parentManager"); //ParentManager } @SuppressWarnings("unchecked") @Override public void run() { String cookie = info3.asString(); System.out.println("cookie:" + cookie); HostMessage host = info.asClass(HostMessage.class); int comingHostCount = info1.asInteger(); ParentManager manager = info6.asClass(ParentManager.class); HashMap<String, HostMessage> nameTable = info2.asClass(HashMap.class); HashMap<String, String> absCookieTable = info4.asClass(HashMap.class); String nodeName = "node"+comingHostCount; // Manager connect to Node DataSegment.connect(nodeName, nodeName, host.name, host.port); ods.put(nodeName, "host"+host.topMNum, nodeName); ods.put(nodeName, "cookie"+host.topMNum, cookie); absCookieTable.put(cookie, nodeName); ods.put(info4.key, absCookieTable); ods.put(info1.key, comingHostCount+1); host.alive = true; nameTable.put(nodeName, host); manager.register(nodeName); if (comingHostCount!=0) {///ルートでなければ親情報を持つ // put parent information own String parentAbsName = manager.getMyParent(); HostMessage parent = nameTable.get(parentAbsName); int num = manager.getMyNumber(); HostMessage newHost = new HostMessage(parent.name, parent.port, "parent", "child"+num); newHost.absName = parentAbsName; newHost.remoteAbsName = nodeName; // address ods.put(newHost.remoteAbsName, newHost); ods.put("nodeInfo", newHost); new RecodeTopology(); // put own information parent newHost = new HostMessage(host.name, host.port, "child"+num, "parent"); newHost.absName = nodeName; newHost.remoteAbsName = parentAbsName; ods.put(newHost.remoteAbsName, newHost); ods.put("nodeInfo", newHost); new RecodeTopology(); } ods.put(info2.key, nameTable); ods.put(info6.key, manager); ods.put(nodeName, ValueFactory.createNilValue()); if (comingHostCount==0) ods.put("start", ValueFactory.createNilValue()); } }