diff src/main/java/christie/topology/manager/IncomingHosts.java @ 41:cf5a75bc3e55

add
author akahori
date Tue, 31 Jul 2018 17:46:32 +0900
parents
children 6664efac18ee
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/topology/manager/IncomingHosts.java	Tue Jul 31 17:46:32 2018 +0900
@@ -0,0 +1,84 @@
+package christie.topology.manager;
+
+
+import christie.annotation.Peek;
+import christie.annotation.Take;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.topology.HostMessage;
+import org.apache.log4j.Logger;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+
+public class IncomingHosts extends CodeGear {
+
+    @Peek // Topology from parse file
+    HashMap<String, LinkedList<NodeInfo>> topology;
+
+    @Peek // nodeName list
+    LinkedList<String> nodeNames;
+
+    @Take // new coming host info
+    HostMessage host;
+
+
+    //private Receiver absCookieTable = ids.create(CommandType.TAKE); // cookie, AbsName HashMap
+    //private Receiver cookie = ids.create(CommandType.TAKE);    // MD5
+    private Logger log = Logger.getLogger(IncomingHosts.class);
+
+    public IncomingHosts() {
+
+    }
+
+    @Override
+    public void run(CodeGearManager cgm) {
+
+        // not have or match cookie
+        String nodeName = nodeNames.poll();
+        // Manager connect to Node
+
+        cgm.createRemoteDGM(nodeName, host.name, host.port);
+        getDGM(nodeName).put( "host", nodeName);
+
+
+        /* cookie
+        String cookie = this.cookie.asString();
+        absCookieTable.put(cookie, nodeName);
+        ods.put(this.absCookieTable.key, absCookieTable);
+
+        ods.put(nodeName, "cookie", cookie);
+        */
+        log.info( "toplology manager connected from " + nodeName);
+
+        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;
+
+            getLocalDGM().put("nodeInfo", newHost);
+            getLocalDGM().put(nodeInfo.sourceNodeName, newHost);
+            log.info(" write to " + nodeInfo.sourceNodeName + " config message =" + newHost.toString() + " remain "
+                    + Integer.toString((nodeNames.size())));
+            new RecordTopology();
+        }
+
+        log.info(" remaining configure host = " + Integer.toString(nodeNames.size()));
+        if (nodeNames.isEmpty()) {
+            // configuration finish
+            for (String key : topology.keySet()) {
+                log.info(" write to " + key + " end message =" + (new HostMessage("",0,"","")).toString());
+                getLocalDGM().put(key, new HostMessage("",0,"","")); // end mark
+            }
+        }
+
+        // idsのときはkeyメソッドが使えたけど, 今はlistなのでエラーが出る.
+        // これが何をする処理か読めていないので, 今はコメントアウト.
+        //getLocalDGM().put(this.nodeNames.key, nodeNames);
+        //getLocalDGM().put(this.topology.key, topology);
+
+        cgm.setup(new IncomingHosts());
+    }
+}