view src/main/java/alice/topology/manager/IncomingHosts.java @ 552:767d93626b88 dispose

add compressed to DSM name
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 16 Nov 2015 18:33:23 +0900
parents 268b1280dc18
children
line wrap: on
line source

package alice.topology.manager;

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 {

    private Receiver topology = ids.create(CommandType.TAKE);  // Topology from parse file
    private Receiver nodeNames = ids.create(CommandType.TAKE); // nodeName list
    private Receiver host = ids.create(CommandType.TAKE);      // new coming host info
    private Receiver absCookieTable = ids.create(CommandType.TAKE); // cookie, AbsName HashMap
    private Receiver cookie = ids.create(CommandType.TAKE);    // MD5

    public IncomingHosts() {
        this.topology.setKey("compressedlocal", "resultParse");
        this.nodeNames.setKey("compressedlocal", "nodeNames");
        this.host.setKey("compressedlocal", "newHost");
        this.absCookieTable.setKey("compressedlocal", "absCookieTable");
        this.cookie.setKey("compressedlocal", "MD5");
    }

    @Override
    public void run() {
        HostMessage host = this.host.asClass(HostMessage.class);
        @SuppressWarnings("unchecked")
        HashMap<String, String> absCookieTable = this.absCookieTable.asClass(HashMap.class);
        @SuppressWarnings("unchecked")
        HashMap<String, LinkedList<NodeInfo>> topology = this.topology.asClass(HashMap.class);
        @SuppressWarnings("unchecked")
        LinkedList<String> nodeNames = this.nodeNames.asClass(LinkedList.class);

        // not have or match cookie
        String nodeName = nodeNames.poll();
        // Manager connect to Node
        DataSegment.connect(nodeName, "", host.name, host.port);
        ods.put("compressed" + nodeName, "host", nodeName);

        String cookie = this.cookie.asString();
        absCookieTable.put(cookie, nodeName);
        ods.put("compressedlocal",this.absCookieTable.key, absCookieTable);

        ods.put("compressed" + 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("compressedlocal","nodeInfo", newHost);
            ods.put("compressedlocal",nodeInfo.sourceNodeName, newHost);
            new RecodeTopology();
        }

        if (nodeNames.isEmpty()) {
            // configuration finish
            for (String key : topology.keySet()) {
                ods.put("compressedlocal", key, ValueFactory.createNilValue());
            }
        }

        ods.put("compressedlocal",this.nodeNames.key, nodeNames);
        ods.put("compressedlocal",this.topology.key, topology);

        new IncomingHosts();
    }
}