Mercurial > hg > Database > Alice
annotate src/main/java/alice/topology/manager/IncomingHosts.java @ 428:93995b7a9a05 dispose
change HostMessage field from parentAbsName to remoteAbsName
author | sugi |
---|---|
date | Tue, 22 Jul 2014 12:56:25 +0900 |
parents | faae3e976cc1 |
children | 1b32ea1263f3 |
rev | line source |
---|---|
401 | 1 package alice.topology.manager; |
2 | |
3 import java.util.HashMap; | |
4 import java.util.LinkedList; | |
5 | |
423 | 6 import org.apache.commons.lang3.RandomStringUtils; |
401 | 7 import org.msgpack.type.ValueFactory; |
8 | |
9 import alice.codesegment.CodeSegment; | |
10 import alice.datasegment.CommandType; | |
11 import alice.datasegment.DataSegment; | |
12 import alice.datasegment.Receiver; | |
13 import alice.topology.HostMessage; | |
14 | |
15 public class IncomingHosts extends CodeSegment { | |
410 | 16 |
17 HashMap<String, LinkedList<NodeInfo>> topology; | |
18 LinkedList<String> nodeNames; | |
422 | 19 private Receiver host = ids.create(CommandType.TAKE); |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
20 private Receiver nodes = ids.create(CommandType.TAKE); |
410 | 21 |
22 public IncomingHosts(HashMap<String, LinkedList<NodeInfo>> topology, | |
23 LinkedList<String> nodeNames) { | |
24 this.topology = topology; | |
25 this.nodeNames = nodeNames; | |
422 | 26 this.host.setKey("host"); |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
27 this.nodes.setKey("nodes"); |
410 | 28 } |
401 | 29 |
410 | 30 @Override |
31 public void run() { | |
32 HostMessage host = this.host.asClass(HostMessage.class); | |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
33 |
423 | 34 // check cookie |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
35 if (host.cookie != null) { |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
36 @SuppressWarnings("unchecked") |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
37 LinkedList<HostMessage> nodes = this.nodes.asClass(LinkedList.class); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
38 for (HostMessage node : nodes) { |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
39 if (host.cookie.equals(node.cookie)) { |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
40 host.absName = node.absName; |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
41 ods.put("reconnect", host); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
42 ods.put(this.nodes.key, nodes); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
43 new SearchHostName(); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
44 } |
428
93995b7a9a05
change HostMessage field from parentAbsName to remoteAbsName
sugi
parents:
424
diff
changeset
|
45 } |
93995b7a9a05
change HostMessage field from parentAbsName to remoteAbsName
sugi
parents:
424
diff
changeset
|
46 } else { |
93995b7a9a05
change HostMessage field from parentAbsName to remoteAbsName
sugi
parents:
424
diff
changeset
|
47 System.out.println("cookie is null"); |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
48 } |
423 | 49 |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
50 // not have or match cookie |
410 | 51 String nodeName = nodeNames.poll(); |
52 // Manager connect to Node | |
53 DataSegment.connect(nodeName, "", host.name, host.port); | |
54 ods.put(nodeName, "host", nodeName); | |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
55 |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
56 String cookie = createCookie(nodeName); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
57 ods.put(nodeName, "cookie", cookie); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
58 |
410 | 59 LinkedList<NodeInfo> nodes = topology.get(nodeName); |
60 for (NodeInfo nodeInfo : nodes) { | |
61 HostMessage newHost = new HostMessage(host.name, host.port, | |
62 nodeInfo.connectionName, nodeInfo.reverseName); | |
428
93995b7a9a05
change HostMessage field from parentAbsName to remoteAbsName
sugi
parents:
424
diff
changeset
|
63 newHost.absName = nodeName; |
93995b7a9a05
change HostMessage field from parentAbsName to remoteAbsName
sugi
parents:
424
diff
changeset
|
64 newHost.remoteAbsName = nodeInfo.sourceNodeName; |
422 | 65 ods.put("nodeInfo", newHost); |
66 ods.put(nodeInfo.sourceNodeName, newHost); | |
67 new RecodeTopology(); | |
410 | 68 } |
69 | |
70 if (nodeNames.isEmpty()) { | |
71 // configuration finish | |
72 for (String key : topology.keySet()) { | |
73 ods.put("local", key, ValueFactory.createNilValue()); | |
74 } | |
75 } else { | |
76 new IncomingHosts(topology, nodeNames); | |
77 } | |
78 } | |
401 | 79 |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
80 private String createCookie(String hostName) { |
423 | 81 @SuppressWarnings("unchecked") |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
82 LinkedList<HostMessage> nodes = this.nodes.asClass(LinkedList.class); |
423 | 83 boolean checkNewCookie = false; |
84 String str = null; | |
85 while (!checkNewCookie){ | |
86 str = RandomStringUtils.randomAscii(10); | |
87 int count = 0; | |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
88 for (HostMessage node : nodes) { |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
89 if (str.equals(node.cookie)) break; |
423 | 90 count++; |
91 } | |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
92 if (count == nodes.size()) |
423 | 93 checkNewCookie = true; |
94 } | |
424
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
95 HostMessage table = new HostMessage(); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
96 table.absName = hostName; |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
97 table.cookie = str; |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
98 nodes.add(table); |
faae3e976cc1
change cookie LinkedLIst Type from String.class to HostMessage.class
sugi
parents:
423
diff
changeset
|
99 ods.put(this.nodes.key, nodes); |
423 | 100 System.out.println(str); |
101 return str; | |
102 } | |
103 | |
401 | 104 } |