Mercurial > hg > Database > Alice
diff src/main/java/alice/topology/manager/IncomingHosts.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | ffaacab84d1a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/alice/topology/manager/IncomingHosts.java Wed Apr 16 18:26:07 2014 +0900 @@ -0,0 +1,67 @@ +package alice.topology.manager; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; + +import org.msgpack.type.ValueFactory; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.DataSegment; +import alice.datasegment.Receiver; +import alice.topology.HostMessage; + +public class IncomingHosts extends CodeSegment { + + HashMap<String, LinkedList<NodeInfo>> topology; + LinkedList<String> nodeNames; + Receiver host = ids.create(CommandType.TAKE); + Receiver connection = ids.create(CommandType.TAKE); + + public IncomingHosts(HashMap<String, LinkedList<NodeInfo>> topology, LinkedList<String> nodeNames) { + this.topology = topology; + this.nodeNames = nodeNames; + } + + @Override + public void run() { + HostMessage host = this.host.asClass(HostMessage.class); + @SuppressWarnings("unchecked") + HashMap<String, ArrayList<HostMessage>> connectionList = this.connection.asClass(HashMap.class); + + String nodeName = nodeNames.poll(); + // Manager connect to Node + + DataSegment.connect(nodeName, "", host.name, host.port, host.reconnectFlag); + ods.put(nodeName, "host", nodeName); + LinkedList<NodeInfo> nodes = topology.get(nodeName); + ArrayList<HostMessage> list; + for (NodeInfo nodeInfo : nodes) { + HostMessage newHost = new HostMessage(host.name, host.port, nodeInfo.connectionName, nodeInfo.reverseName); + ods.put("local", nodeInfo.sourceNodeName, newHost); + + if (connectionList.containsKey(nodeInfo.sourceNodeName)){ + list = connectionList.get(nodeInfo.sourceNodeName); + } else { + list = new ArrayList<HostMessage>(); + connectionList.put(nodeInfo.sourceNodeName, list); + + } + list.add(newHost); + } + ods.update("local", "connection", connectionList); + + if (nodeNames.isEmpty()) { + // configuration finish + for (String key : topology.keySet()) { + ods.put("local", key, ValueFactory.createNilValue()); + } + } else { + IncomingHosts cs = new IncomingHosts(topology, nodeNames); + cs.host.setKey("local", "host"); + cs.connection.setKey("local", "connection"); + } + } + +}