view src/main/java/christie/topology/manager/SearchHostName.java @ 83:2314c55534ef

add TreeTopology
author akahori
date Sat, 15 Sep 2018 09:24:36 +0900
parents f884c1bd0d36
children 7abfe041b75c
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.msgpack.type.ValueFactory;

import java.util.HashMap;
import java.util.LinkedList;

public class SearchHostName extends CodeGear {

    @Take // reconnect NodeInfo
    HostMessage reconnectHost;

    @Peek
    HashMap<String, LinkedList<HostMessage>> topology;

    @Peek
    boolean running;


    public SearchHostName(){

    }

    @Override
    protected void run(CodeGearManager cgm) {


        // Question: remove処理 どうしようか. いらない気もする.
        // DataSegment.remove(hostInfo.absName);

        cgm.createRemoteDGM(reconnectHost.nodeName, reconnectHost.hostName, reconnectHost.port);
        getDGM(reconnectHost.nodeName).put("host", reconnectHost.nodeName);

        // put Host dataSegment on reconnect node
        if (topology.containsKey(reconnectHost.nodeName)) {

            // Question: これはバグ...?
            // ods.put(reconnectHost.absName, "dummy"); // this is bug

            if (running){
                getLocalDGM().put(reconnectHost.nodeName, ValueFactory.createNilValue());
            }


            LinkedList<HostMessage> hostList = topology.get(reconnectHost.nodeName);
            for (HostMessage host : hostList){
                getLocalDGM().put(reconnectHost.nodeName, host);
                System.out.println("put data in "+ reconnectHost.nodeName);
            }
        }

        // update topology information
        for (LinkedList<HostMessage> list :topology.values()){
            for (HostMessage host : list){

                // find and update old info
                if (!reconnectHost.nodeName.equals(host.nodeName)) continue;

                if (!reconnectHost.hostName.equals(host.hostName) || reconnectHost.port != host.port){
                    host.hostName = reconnectHost.hostName;
                    host.port = reconnectHost.port;

                    getLocalDGM().put(host.remoteNodeName, host);

                } else {
                    // nothing to do ?
                }
            }
        }

        for (LinkedList<HostMessage> list :topology.values()){
            System.out.print(list.get(0).remoteNodeName+" : ");
            for (HostMessage host : list){
                System.out.print("[ "+host.nodeName+" "+host.hostName+" "+host.port+" "+host.connectionName+" "+host.reverseName+" "+host.remoteNodeName+" ]");
            }
            System.out.println();
        }
    }

}