# HG changeset patch # User sugi # Date 1406022258 -32400 # Node ID 1b32ea1263f39b6ff0419ac159c587086f561811 # Parent 93995b7a9a05686532012e0f2b31cf87d760e18e work but have bug diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/datasegment/DataSegment.java --- a/src/main/java/alice/datasegment/DataSegment.java Tue Jul 22 12:56:25 2014 +0900 +++ b/src/main/java/alice/datasegment/DataSegment.java Tue Jul 22 18:44:18 2014 +0900 @@ -51,4 +51,7 @@ dataSegment.dataSegmentManagers.remove(key); } + public static boolean contains(String key){ + return dataSegment.dataSegmentManagers.containsKey(key); + } } diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/manager/IncomingHosts.java --- a/src/main/java/alice/topology/manager/IncomingHosts.java Tue Jul 22 12:56:25 2014 +0900 +++ b/src/main/java/alice/topology/manager/IncomingHosts.java Tue Jul 22 18:44:18 2014 +0900 @@ -30,51 +30,55 @@ @Override public void run() { HostMessage host = this.host.asClass(HostMessage.class); - + boolean match = false; // check cookie if (host.cookie != null) { + ; @SuppressWarnings("unchecked") LinkedList nodes = this.nodes.asClass(LinkedList.class); for (HostMessage node : nodes) { if (host.cookie.equals(node.cookie)) { + match = true; + System.out.println("cookie is match"); host.absName = node.absName; ods.put("reconnect", host); ods.put(this.nodes.key, nodes); new SearchHostName(); } } - } else { - System.out.println("cookie is null"); } - // not have or match cookie - String nodeName = nodeNames.poll(); - // Manager connect to Node - DataSegment.connect(nodeName, "", host.name, host.port); - ods.put(nodeName, "host", nodeName); - - String cookie = createCookie(nodeName); - ods.put(nodeName, "cookie", cookie); + if (!match) { + System.out.println("new node come"); + // not have or match cookie + String nodeName = nodeNames.poll(); + // Manager connect to Node + DataSegment.connect(nodeName, "", host.name, host.port); + ods.put(nodeName, "host", nodeName); + + String cookie = createCookie(nodeName); + ods.put(nodeName, "cookie", cookie); + + LinkedList nodes = topology.get(nodeName); + for (NodeInfo nodeInfo : nodes) { + HostMessage newHost = new HostMessage(host.name, host.port, + nodeInfo.connectionName, nodeInfo.reverseName); + newHost.absName = nodeName; + newHost.remoteAbsName = nodeInfo.sourceNodeName; + ods.put("nodeInfo", newHost); + ods.put(nodeInfo.sourceNodeName, newHost); + new RecodeTopology(); + } + + if (nodeNames.isEmpty()) { + // configuration finish + for (String key : topology.keySet()) { + ods.put("local", key, ValueFactory.createNilValue()); + } + } + } - LinkedList nodes = topology.get(nodeName); - for (NodeInfo nodeInfo : nodes) { - HostMessage newHost = new HostMessage(host.name, host.port, - nodeInfo.connectionName, nodeInfo.reverseName); - newHost.absName = nodeName; - newHost.remoteAbsName = nodeInfo.sourceNodeName; - ods.put("nodeInfo", newHost); - ods.put(nodeInfo.sourceNodeName, newHost); - new RecodeTopology(); - } - - if (nodeNames.isEmpty()) { - // configuration finish - for (String key : topology.keySet()) { - ods.put("local", key, ValueFactory.createNilValue()); - } - } else { - new IncomingHosts(topology, nodeNames); - } + new IncomingHosts(topology, nodeNames); } private String createCookie(String hostName) { diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/manager/RecodeTopology.java --- a/src/main/java/alice/topology/manager/RecodeTopology.java Tue Jul 22 12:56:25 2014 +0900 +++ b/src/main/java/alice/topology/manager/RecodeTopology.java Tue Jul 22 18:44:18 2014 +0900 @@ -36,7 +36,7 @@ for (LinkedList 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+" ]"); + System.out.print("[ "+host.absName+" "+host.name+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]"); } System.out.println(); } diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/manager/SearchHostName.java --- /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> 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 clist = topology.get(hostInfo.absName); + for (HostMessage node : clist) + ods.put(hostInfo.absName, node); + + } + + // update topology information + for (LinkedList 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 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); + } + +} diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/node/ConfigurationFinish.java --- a/src/main/java/alice/topology/node/ConfigurationFinish.java Tue Jul 22 12:56:25 2014 +0900 +++ b/src/main/java/alice/topology/node/ConfigurationFinish.java Tue Jul 22 18:44:18 2014 +0900 @@ -18,7 +18,9 @@ @Override public void run() { - if (reverseCount.getVal().equals(configNodeNum.getVal())) { + int rcount = reverseCount.asInteger(); + int ncount = configNodeNum.asInteger(); + if (rcount == ncount) { ods.put("manager", "done", ValueFactory.createNilValue()); Start cs = new Start(startCS); diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/node/IncomingConnectionInfo.java --- a/src/main/java/alice/topology/node/IncomingConnectionInfo.java Tue Jul 22 12:56:25 2014 +0900 +++ b/src/main/java/alice/topology/node/IncomingConnectionInfo.java Tue Jul 22 18:44:18 2014 +0900 @@ -29,13 +29,19 @@ ods.put("_CLIST", new ArrayList()); HostMessage hostInfo = this.hostInfo.asClass(HostMessage.class); + if (DataSegment.contains(hostInfo.connectionName)) { + System.out.println("reconnection"); + DataSegment.remove(hostInfo.connectionName); + } else { + ods.put("cMember", hostInfo.connectionName); + new CreateConnectionList(); + count++; + } DataSegment.connect(hostInfo.connectionName, hostInfo.reverseName, hostInfo.name, hostInfo.port); ods.put(hostInfo.connectionName, "reverseKey", hostInfo.reverseName); - ods.put("cMember", hostInfo.connectionName); - count++; - - new CreateConnectionList(); + } + IncomingConnectionInfo cs = new IncomingConnectionInfo(absName, count); cs.hostInfo.setKey("manager", absName); } diff -r 93995b7a9a05 -r 1b32ea1263f3 src/main/java/alice/topology/node/SaveCookie.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/alice/topology/node/SaveCookie.java Tue Jul 22 18:44:18 2014 +0900 @@ -0,0 +1,22 @@ +package alice.topology.node; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; + +public class SaveCookie extends CodeSegment{ + + private Receiver info = ids.create(CommandType.PEEK); + + public SaveCookie(){ + info.setKey("cookie"); + } + + @Override + public void run() { + System.out.println(info.asString()); + + } + + +}