view 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 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 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());
    }
}