view src/main/java/christie/topology/manager/SearchHostName.java @ 121:8949d0ecf1f6

refactor Topology
author akahori
date Tue, 11 Dec 2018 15:46:09 +0900
parents 87a203c99177
children f172c4540461
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);

        String nodeName = reconnectHost.getNodeName();
        String hostName = reconnectHost.getHostName();
        int port = reconnectHost.getPort();

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

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

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

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


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

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

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

                if (!hostName.equals(host.getHostName()) || port != host.getPort()){
                    host.setHostAndPort(hostName, port);

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

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

        for (LinkedList<HostMessage> list :topology.values()){
            System.out.print(list.get(0).getRemoteNodeName()+" : ");
            for (HostMessage host : list){
                System.out.print("[ "+host.getNodeName()      +" "
                                     +host.getHostName()      +" "
                                     +host.getPort()          +" "
                                     +host.getConnectionName()+" "
                                     +host.getRemoteNodeName()+" ]");
            }
            System.out.println();
        }
    }

}