Mercurial > hg > Database > Christie
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()); + } +}