view src/main/java/christie/topology/manager/SearchHostName.java.orig @ 143:443bf8351933

add FizzBuzz
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Fri, 04 Jan 2019 04:18:36 +0900
parents
children
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, "");
            }



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

}