annotate rep/SessionManagerList.java @ 492:d2afd4efdd2d

remove unMergedCmds, use sentList instead.
author one
date Sat, 23 Oct 2010 16:15:14 +0900
parents 795ef563f2a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
1 package rep;
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
2
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
3 import java.util.LinkedList;
356
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
4
401
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
5 import rep.channel.REPSocketChannel;
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
6 import rep.handler.REPNode;
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
7 import rep.handler.NullForwarder;
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
8
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
9 public class SessionManagerList extends LinkedList<REPNode>{
56
6ead43b2475e *** empty log message ***
pin
parents: 39
diff changeset
10
356
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
11 /**
411
795ef563f2a0 add commnets
one
parents: 401
diff changeset
12 * Session Manager List which we have a connection.
356
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
13 */
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
14 private static final long serialVersionUID = 1L;
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
15 private int mySMID=0;
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
16 private int smid_root=0;
387
6f356d160e58 IPv6 any address
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 382
diff changeset
17 private REPNode parent=new NullForwarder(null,null);
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
18 private LinkedList<REPNode> waiting= new LinkedList<REPNode>();
7
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
19
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
20
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
21 public void setMaster(REPNode f) {
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
22 this.parent = f;
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
23 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
24
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
25 public void sendToMaster(REPCommand repCmd) {
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
26 parent.send(repCmd);
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
27 }
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
28
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
29 public void sendToSlaves(REPCommand repCmd) {
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
30 for(REPNode channel : this){
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
31 channel.send(repCmd);
7
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
32 }
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
33 }
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
34
349
ef4afcae0c92 now Forwarder associates each client channel.
kono
parents: 343
diff changeset
35 public boolean isMaster() {
360
b25f832f875d *** empty log message ***
kono
parents: 356
diff changeset
36 return !parent.isForwarder();
25
2b4863af8804 *** empty log message ***
pin
parents: 21
diff changeset
37 }
21
2d4bab638a71 *** empty log message ***
pin
parents: 7
diff changeset
38
411
795ef563f2a0 add commnets
one
parents: 401
diff changeset
39 /**
795ef563f2a0 add commnets
one
parents: 401
diff changeset
40 * Add our slave session manager. Only an empty session manager can
795ef563f2a0 add commnets
one
parents: 401
diff changeset
41 * connect to the other session manager. join_sm() is forwarded to
795ef563f2a0 add commnets
one
parents: 401
diff changeset
42 * the master session manager, and in the master addNewSessionManager()
795ef563f2a0 add commnets
one
parents: 401
diff changeset
43 * is performed.
795ef563f2a0 add commnets
one
parents: 401
diff changeset
44 *
795ef563f2a0 add commnets
one
parents: 401
diff changeset
45 * @param sm
795ef563f2a0 add commnets
one
parents: 401
diff changeset
46 * @param receivedCommand
795ef563f2a0 add commnets
one
parents: 401
diff changeset
47 * @return session manager id (global)
795ef563f2a0 add commnets
one
parents: 401
diff changeset
48 */
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
49 public int addNewSessionManager(REPNode sm,REPCommand receivedCommand) {
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
50 add(sm);
356
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
51 int sid = ++smid_root;
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
52 sm.setSID(sid);
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
53 sm.setName(receivedCommand.string);
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
54 return sid;
31
593f915dd6ff for JOIN and PUT Testing
pin
parents: 25
diff changeset
55 }
593f915dd6ff for JOIN and PUT Testing
pin
parents: 25
diff changeset
56
56
6ead43b2475e *** empty log message ***
pin
parents: 39
diff changeset
57
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
58 public void setSessionManagerID(int sid) {
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
59 mySMID = sid;
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
60 }
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
61
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
62 public int sessionManagerID() {
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
63 return mySMID;
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
64 }
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
65
411
795ef563f2a0 add commnets
one
parents: 401
diff changeset
66 /**
795ef563f2a0 add commnets
one
parents: 401
diff changeset
67 * An sm_join() is accepted, but we are not the master, forward request
795ef563f2a0 add commnets
one
parents: 401
diff changeset
68 * and register as an waiting sessin manager.
795ef563f2a0 add commnets
one
parents: 401
diff changeset
69 * @param fw
795ef563f2a0 add commnets
one
parents: 401
diff changeset
70 * @param command
795ef563f2a0 add commnets
one
parents: 401
diff changeset
71 */
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
72 public void addWaitingSessionManager(REPNode fw, REPCommand command) {
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
73 // SID assign 待ちのSessionManager Channelを登録する
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
74 waiting.add(fw);
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
75
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
76 }
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
77
411
795ef563f2a0 add commnets
one
parents: 401
diff changeset
78 /**
795ef563f2a0 add commnets
one
parents: 401
diff changeset
79 * An sm_join_ack() is received. Assign session manager id to the waiter.
795ef563f2a0 add commnets
one
parents: 401
diff changeset
80 * @param sid
795ef563f2a0 add commnets
one
parents: 401
diff changeset
81 */
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
82 public void assignSessionManagerIDtoWaitingSM(int sid) {
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
83 // 待っていたSession Manager ChannelにSession IDを登録し,Session Manager List
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
84 // に登録する。この次のsm_join_ackでSIDが確定する。
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
85 REPNode waiter;
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
86 if ((waiter=waiting.poll())!=null) {
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
87 waiter.setSID(sid);
356
b18c24dcc5d2 Before chaning put/join scheme for ditributed select.
kono
parents: 355
diff changeset
88 add(waiter);
355
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
89 return;
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
90 }
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
91 assert false;
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
92 }
98607350f7d1 *** empty log message ***
kono
parents: 349
diff changeset
93
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
94 public void setParent(REPNode fw) {
365
c432755c3555 distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents: 360
diff changeset
95 parent = fw;
c432755c3555 distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents: 360
diff changeset
96 }
367
1bde894edd83 *** empty log message ***
kono
parents: 365
diff changeset
97
382
4b87f89b3afd REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 367
diff changeset
98 public REPNode parent() {
367
1bde894edd83 *** empty log message ***
kono
parents: 365
diff changeset
99 return parent;
1bde894edd83 *** empty log message ***
kono
parents: 365
diff changeset
100 }
365
c432755c3555 distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents: 360
diff changeset
101
401
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
102 public REPNode managerByChannel(REPSocketChannel<REPCommand> channel) {
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
103 for(REPNode e:this) {
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
104 if (e.channel==channel)
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
105 return e;
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
106 }
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
107 return null;
2cf5392b2a9f add INSERT_USER, DELETE_USER
one
parents: 387
diff changeset
108 }
78
8a4f92f31c58 *** empty log message ***
pin
parents: 58
diff changeset
109
7
5067a6a93d01 *** empty log message ***
pin
parents:
diff changeset
110 }