changeset 429:1b32ea1263f3 dispose

work but have bug
author sugi
date Tue, 22 Jul 2014 18:44:18 +0900
parents 93995b7a9a05
children c7c57f8d7538
files src/main/java/alice/datasegment/DataSegment.java src/main/java/alice/topology/manager/IncomingHosts.java src/main/java/alice/topology/manager/RecodeTopology.java src/main/java/alice/topology/manager/SearchHostName.java src/main/java/alice/topology/node/ConfigurationFinish.java src/main/java/alice/topology/node/IncomingConnectionInfo.java src/main/java/alice/topology/node/SaveCookie.java
diffstat 7 files changed, 144 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- 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);
+    }
 }
--- 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<HostMessage> 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<NodeInfo> 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<NodeInfo> 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) {
--- 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<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+" ]");
+                System.out.print("[ "+host.absName+" "+host.name+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteAbsName+" ]");
             }
             System.out.println();
         }
--- /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);
+    }
+
+}
--- 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);
--- 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<String>());
 
             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);
     }
--- /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());
+        
+    }
+    
+    
+}