Mercurial > hg > Database > Christie
view src/main/java/christie/topology/manager/CreateTreeTopology.java @ 121:8949d0ecf1f6
refactor Topology
author | akahori |
---|---|
date | Tue, 11 Dec 2018 15:46:09 +0900 |
parents | ce96f375f369 |
children | 2e2d761ea806 |
line wrap: on
line source
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 java.util.HashMap; public class CreateTreeTopology extends CodeGear{ @Take HostMessage newHost; @Take int hostCount; @Peek HashMap<String, HostMessage> nameTable; @Take String MD5; @Peek HashMap<String, String> absCookieTable; @Peek ParentManager parentManager; public CreateTreeTopology(){ } @Override protected void run(CodeGearManager cgm) { String nodeName = "node" + hostCount; String newHostName = newHost.getHostName(); int newHostPort = newHost.getPort(); cgm.createRemoteDGM(nodeName, newHostName, newHostPort); getDGM(nodeName).put("nodeName", nodeName); getDGM(nodeName).put("cookie", MD5); absCookieTable.put(MD5, nodeName); getLocalDGM().put("hostCount", hostCount + 1); newHost.setAlive(true); nameTable.put(nodeName, newHost); parentManager.register(nodeName); if (hostCount == 0) { // どこにも繋がれるところがないので, ルートのとき. // ルートなので, connectNodeNumもreverseCountも0でいい. getDGM(nodeName).put("connectNodeNum", 0); getDGM(nodeName).put("reverseCount", 0); } else { // 親のみにつながればいいので1 getDGM(nodeName).put("connectNodeNum", 1); // put parent information own String parentNodeName = parentManager.getMyParent(); HostMessage parentHost = nameTable.get(parentNodeName); // 相手からhostNameとportはもらっているので, nodeの情報だけ与えれば良い. parentHost.setNodeInfo(nodeName, "parent", parentNodeName); getLocalDGM().put("nodeInfo", parentHost); cgm.setup(new RecordTopology()); // newChildHost, newHostも同じ newHost.setNodeInfo(parentNodeName, "child" + parentManager.getMyNumber(), nodeName); getLocalDGM().put("nodeInfo", newHost); cgm.setup(new RecordTopology()); } getDGM(nodeName).put("start", "start"); getLocalDGM().put("startTime", System.currentTimeMillis()); cgm.setup(new CreateTreeTopology()); } }