43
|
1 package christie.topology.manager;
|
|
2
|
|
3
|
|
4 import christie.annotation.Peek;
|
|
5 import christie.annotation.Take;
|
|
6 import christie.codegear.CodeGear;
|
|
7 import christie.codegear.CodeGearManager;
|
|
8 import christie.topology.HostMessage;
|
|
9 import org.msgpack.type.ValueFactory;
|
|
10
|
|
11 import java.util.HashMap;
|
|
12 import java.util.LinkedList;
|
|
13
|
|
14 public class SearchHostName extends CodeGear {
|
|
15
|
|
16 @Take // reconnect NodeInfo
|
|
17 HostMessage reconnectHost;
|
|
18
|
60
|
19 @Peek
|
43
|
20 HashMap<String, LinkedList<HostMessage>> topology;
|
|
21
|
|
22 @Peek
|
|
23 boolean running;
|
|
24
|
|
25
|
|
26 public SearchHostName(){
|
|
27
|
|
28 }
|
|
29
|
|
30 @Override
|
|
31 protected void run(CodeGearManager cgm) {
|
|
32
|
|
33
|
|
34 // Question: remove処理 どうしようか. いらない気もする.
|
|
35 // DataSegment.remove(hostInfo.absName);
|
|
36
|
94
|
37 String nodeName = reconnectHost.getNodeName();
|
|
38 String hostName = reconnectHost.getHostName();
|
|
39 int port = reconnectHost.getPort();
|
|
40
|
|
41 cgm.createRemoteDGM(nodeName, hostName, port);
|
|
42 getDGM(nodeName).put("nodeName", nodeName);
|
43
|
43
|
|
44 // put Host dataSegment on reconnect node
|
94
|
45 if (topology.containsKey(nodeName)) {
|
43
|
46
|
|
47 // Question: これはバグ...?
|
|
48 // ods.put(reconnectHost.absName, "dummy"); // this is bug
|
|
49
|
|
50 if (running){
|
94
|
51 getLocalDGM().put(nodeName, ValueFactory.createNilValue());
|
43
|
52 }
|
|
53
|
|
54
|
94
|
55 LinkedList<HostMessage> hostList = topology.get(nodeName);
|
43
|
56 for (HostMessage host : hostList){
|
94
|
57 getLocalDGM().put(nodeName, host);
|
|
58 System.out.println("put data in "+ nodeName);
|
43
|
59 }
|
|
60 }
|
|
61
|
|
62 // update topology information
|
|
63 for (LinkedList<HostMessage> list :topology.values()){
|
|
64 for (HostMessage host : list){
|
|
65
|
|
66 // find and update old info
|
94
|
67 if (!nodeName.equals(host.getNodeName())) continue;
|
43
|
68
|
94
|
69 if (!hostName.equals(host.getHostName()) || port != host.getPort()){
|
|
70 host.setHostAndPort(hostName, port);
|
43
|
71
|
94
|
72 getLocalDGM().put(host.getNodeName(), host);
|
43
|
73
|
|
74 } else {
|
|
75 // nothing to do ?
|
|
76 }
|
|
77 }
|
|
78 }
|
|
79
|
|
80 for (LinkedList<HostMessage> list :topology.values()){
|
94
|
81 System.out.print(list.get(0).getRemoteNodeName()+" : ");
|
43
|
82 for (HostMessage host : list){
|
94
|
83 System.out.print("[ "+host.getNodeName() +" "
|
|
84 +host.getHostName() +" "
|
|
85 +host.getPort() +" "
|
|
86 +host.getConnectionName()+" "
|
|
87 +host.getRemoteNodeName()+" ]");
|
43
|
88 }
|
|
89 System.out.println();
|
|
90 }
|
|
91 }
|
|
92
|
|
93 }
|