Mercurial > hg > Database > Alice
view src/main/java/alice/topology/manager/SendNodeInfo.java @ 473:041ec04d4d45 dispose
refactor
author | sugi |
---|---|
date | Sun, 30 Nov 2014 00:00:48 +0900 |
parents | 116e0fde9233 |
children | fac27e395930 |
line wrap: on
line source
package alice.topology.manager; import java.util.HashMap; import java.util.LinkedList; 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 SendNodeInfo extends CodeSegment{ private Receiver info = ids.create(CommandType.TAKE); private Receiver info1 = ids.create(CommandType.TAKE); private Receiver info2 = ids.create(CommandType.TAKE); // HashMap private Receiver info3 = ids.create(CommandType.TAKE); // MD5 private Receiver info4 = ids.create(CommandType.TAKE); private Receiver info5 = ids.create(CommandType.TAKE); private static int BINATY_TREE = 2; public SendNodeInfo(){ info.setKey("newHost"); info1.setKey("hostCount"); info2.setKey("nodeConnectionInfo"); info3.setKey("MD5"); info4.setKey("absCookieTable"); info5.setKey("topology"); } @SuppressWarnings("unchecked") @Override public void run() { String cookie = info3.asString(); System.out.println(cookie); HostMessage host = info.asClass(HostMessage.class); int comingHostCount = info1.asInteger(); HashMap<String, HostMessage> parentInfo = info2.asClass(HashMap.class); HashMap<String, String> absCookieTable = info4.asClass(HashMap.class); HashMap<String, LinkedList<HostMessage>> topology = info5.asClass(HashMap.class); String nodeName = "node"+comingHostCount; // Manager connect to Node DataSegment.connect(nodeName, "", host.name, host.port); ods.put(nodeName, "host", nodeName); ods.put(nodeName, "cookie", cookie); absCookieTable.put(cookie, nodeName); ods.put(info4.key, absCookieTable); ods.update(info1.key, comingHostCount+1); /* * add List own NodeInfo to own child * child number is own number(comingHostCount) * 2 add one or two */ for (int i=1;i < BINATY_TREE+1; i++) { int num = BINATY_TREE * comingHostCount+i; HostMessage newHost = new HostMessage(host.name, host.port, "parent", "child"+(i-1)); newHost.absName = nodeName; newHost.remoteAbsName = "node"+num; parentInfo.put(newHost.remoteAbsName, newHost); LinkedList<HostMessage> connections; if (!topology.containsKey(newHost.remoteAbsName)) { connections = new LinkedList<HostMessage>(); } else { connections = topology.get(newHost.remoteAbsName); } connections.add(newHost); topology.put(newHost.remoteAbsName, connections); } if (comingHostCount!=0) { HostMessage parent = parentInfo.get(nodeName); HostMessage newHost = new HostMessage(host.name, host.port, parent.reverseName, parent.connectionName); newHost.absName = nodeName; newHost.remoteAbsName = parent.absName; ods.put(parent.absName, newHost); LinkedList<HostMessage> connections; if (!topology.containsKey(newHost.remoteAbsName)) { connections = new LinkedList<HostMessage>(); } else { connections = topology.get(newHost.remoteAbsName); } connections.add(newHost); topology.put(newHost.remoteAbsName, connections); } LinkedList<HostMessage> connections; if (topology.containsKey(nodeName)) { connections = topology.get(nodeName); for (HostMessage node :connections) { ods.put(nodeName, node); } } ods.put(info5.key, topology); ods.put("nodeConnectionInfo", parentInfo); ods.put(nodeName, ValueFactory.createNilValue()); if (comingHostCount==0) ods.put("start", ValueFactory.createNilValue()); } }