Mercurial > hg > Database > Alice
diff src/main/java/alice/topology/manager/SearchHostName.java @ 429:1b32ea1263f3 dispose
work but have bug
author | sugi |
---|---|
date | Tue, 22 Jul 2014 18:44:18 +0900 (2014-07-22) |
parents | |
children | 59e84cd75403 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/alice/topology/manager/SearchHostName.java Tue Jul 22 18:44:18 2014 +0900 @@ -0,0 +1,71 @@ +package alice.topology.manager; + +import java.util.HashMap; +import java.util.LinkedList; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.DataSegment; +import alice.datasegment.Receiver; +import alice.topology.HostMessage; + +public class SearchHostName extends CodeSegment { + + private Receiver info = ids.create(CommandType.TAKE); // reconnect NodeInfo + private Receiver info1 = ids.create(CommandType.TAKE); // topology recode (HashMap) + + public SearchHostName(){ + info.setKey("reconnect"); + info1.setKey("topology"); + } + + @Override + public void run() { + HostMessage hostInfo = info.asClass(HostMessage.class); + @SuppressWarnings("unchecked") + HashMap<String, LinkedList<HostMessage>> topology = info1.asClass(HashMap.class); + + DataSegment.remove(hostInfo.absName); + DataSegment.connect(hostInfo.absName, "", hostInfo.name, hostInfo.port); + ods.put(hostInfo.absName, "host", hostInfo.absName); + + // put Host dataSegment on reconnect node + if (topology.containsKey(hostInfo.absName)) { + LinkedList<HostMessage> clist = topology.get(hostInfo.absName); + for (HostMessage node : clist) + ods.put(hostInfo.absName, node); + + } + + // update topology information + for (LinkedList<HostMessage> list :topology.values()){ + for (HostMessage host : list){ + + // find and update old info + if (hostInfo.absName.equals(host.absName)){ + if (!hostInfo.name.equals(host.name) || (hostInfo.port != host.port)){ + list.remove(host); + HostMessage newHost = new HostMessage(hostInfo.name, hostInfo.port, host.connectionName, host.reverseName); + newHost.absName = host.absName; + newHost.remoteAbsName = host.remoteAbsName; + + ods.put(host.remoteAbsName, newHost); + list.add(newHost); + } else { + // nothing to do ? + } + } + } + } + + 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(); + } + ods.put("topology", topology); + } + +}