annotate src/fdl/test/topology/NodeManager.java @ 81:c001797f3fdb

connect bug fix
author one
date Mon, 23 Nov 2009 20:39:39 +0900
parents 805645cf5ec0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
1 package fdl.test.topology;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
2
e8b757d7d0af (no commit message)
one
parents:
diff changeset
3 import java.io.IOException;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
4 import java.nio.ByteBuffer;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
5 import java.util.ArrayList;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
6
e8b757d7d0af (no commit message)
one
parents:
diff changeset
7 import fdl.PSXLinda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
8 import fdl.MetaLinda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
9
e8b757d7d0af (no commit message)
one
parents:
diff changeset
10 public class NodeManager {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
11 public String hostName;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
12 public PSXLinda linda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
13 private MetaLinda mLinda;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
14 private int port;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
15 private int manageId;
77
5336bafaaf48 added test.topology
one
parents: 76
diff changeset
16 private ArrayList<NodeManager> waitingNodes;
5336bafaaf48 added test.topology
one
parents: 76
diff changeset
17 private ArrayList<NodeManager> waitedNodes;
79
805645cf5ec0 topology modifired
one
parents: 77
diff changeset
18 // private ArrayList<NodeManager> sendNodes;
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
19
e8b757d7d0af (no commit message)
one
parents:
diff changeset
20 public NodeManager(MetaLinda ml, int port, int manageId) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
21 this.port = port;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
22 this.manageId = manageId;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
23 this.mLinda = ml;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
24 hostName = null;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
25 waitingNodes = new ArrayList<NodeManager>();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
26 waitedNodes = new ArrayList<NodeManager>();
79
805645cf5ec0 topology modifired
one
parents: 77
diff changeset
27 // sendNodes = new ArrayList<NodeManager>();
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
28 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
29
e8b757d7d0af (no commit message)
one
parents:
diff changeset
30 public void addConnection(NodeManager node) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
31 waitingNodes.add(node);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
32 node.waitedNodes.add(this);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
33 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
34
e8b757d7d0af (no commit message)
one
parents:
diff changeset
35 public void finishConnection(NodeManager node) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
36 waitingNodes.remove(node);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
37 node.waitedNodes.remove(this);
79
805645cf5ec0 topology modifired
one
parents: 77
diff changeset
38 // sendNodes.add(node);
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
39 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
40
e8b757d7d0af (no commit message)
one
parents:
diff changeset
41 public void startUp(String hostName) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
42 // 起動
e8b757d7d0af (no commit message)
one
parents:
diff changeset
43 this.hostName = hostName;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
44 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
45 linda = mLinda.open(hostName, port);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
46 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
47 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
48 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
49 // 起動待ちのノードに通知
e8b757d7d0af (no commit message)
one
parents:
diff changeset
50 connectWaitedNodes();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
51 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
52
e8b757d7d0af (no commit message)
one
parents:
diff changeset
53 public void connectWaitedNodes() {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
54 for (int i = 0; i < waitedNodes.size(); i++) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
55 NodeManager node = waitedNodes.get(i);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
56 if (node.isRunning()) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
57 node.connect(this);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
58 node.finishConnection(this);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
59 if (waitingNodes.contains(node)) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
60 connect(node);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
61 finishConnection(node);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
62 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
63 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
64 }
81
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
65 for (int i = 0; i < waitingNodes.size(); i++) {
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
66 NodeManager node = waitingNodes.get(i);
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
67 if (node.isRunning()) {
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
68 connect(node);
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
69 finishConnection(node);
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
70 if (node.waitingNodes.contains(this)) {
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
71 node.connect(this);
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
72 node.finishConnection(this);
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
73 }
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
74 }
c001797f3fdb connect bug fix
one
parents: 79
diff changeset
75 }
76
e8b757d7d0af (no commit message)
one
parents:
diff changeset
76 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
77
e8b757d7d0af (no commit message)
one
parents:
diff changeset
78 public void connect(NodeManager node) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
79 ByteBuffer data = ByteBuffer.wrap(node.hostName.getBytes());
e8b757d7d0af (no commit message)
one
parents:
diff changeset
80 linda.out(manageId, data);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
81 try {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
82 linda.sync(1);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
83 System.out.println("[DEBUG] SendConnectTo: " + hostName + " to " + node.hostName);
e8b757d7d0af (no commit message)
one
parents:
diff changeset
84 } catch (IOException e) {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
85 e.printStackTrace();
e8b757d7d0af (no commit message)
one
parents:
diff changeset
86 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
87 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
88
e8b757d7d0af (no commit message)
one
parents:
diff changeset
89 public boolean isRunning() {
e8b757d7d0af (no commit message)
one
parents:
diff changeset
90 return hostName != null;
e8b757d7d0af (no commit message)
one
parents:
diff changeset
91 }
e8b757d7d0af (no commit message)
one
parents:
diff changeset
92
e8b757d7d0af (no commit message)
one
parents:
diff changeset
93 }