changeset 343:21ad256c25c2

*** empty log message ***
author kono
date Mon, 13 Oct 2008 13:16:31 +0900
parents 4b056e46ba83
children d07414ff79d3
files Todo rep/SessionManager.java rep/SessionManagerList.java test/sematest/TestInterManagerSession.java
diffstat 4 files changed, 35 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/Todo	Mon Oct 13 03:33:16 2008 +0900
+++ b/Todo	Mon Oct 13 13:16:31 2008 +0900
@@ -1,9 +1,32 @@
+Mon Oct 13 12:34:39 JST 2008
+
+Note: (kono)
+Session間の通信は、木を作って、自分の親に送り、親がACKをmulti castすれば良い。
+sm_join した時に、どちらが親になるかはどうやって決める? 繋げた先が親ってのが
+簡単。親がいないのがmasterとなる。親が死んだら自分が親。親が死んで、
+sessionがmasterを失った時は? loop の検出も必要。updateにunique idを
+付けて二度目が来たらloop、または重複。closeして良い。ch_masterは必要ない。
+再接続は可能? 可能だが、再put/join/selectする必要がある。
+put は、親まで上がってsidを決定しなければならない、その後、put_ackを出せる。
+joinは、localでの処理で問題ないが、join_ackはselectが終わってから出る必要がある。
+selectは session owner に行き着く必要がある。session がconnectionを
+持っているとは限らない。親がselectする方が自然か?
+put_ack/join_ack/select_ackは、updateを見てでの処理で良い?
+(前の資料があれば良いのに...)
+
 Mon Oct 13 02:57:45 JST 2008
 Todo: (kono)
 InterManagerのquit中のsessionへのjoinの扱い。(putは来ないがjoinはありえる)。
 UPDATEで、sessionをlockしてからquitするか?
 TestGUIで、selectする前にEditor0がquitしちゃう場合もある。
 
+Todo: (kono)
+SessionManager間のプロトコルの図が、どこにもない。あんなに苦労して考えたのに。
+また、自分で書けってか。
+ SessionManager SM_JOINと、masterの決定
+ put/selectの生成、masterによるsession id の決定
+ updateによるsessionの共有
+
 Sun Oct 12 19:12:20 JST 2008
 
 Todo: (kono)
--- a/rep/SessionManager.java	Mon Oct 13 03:33:16 2008 +0900
+++ b/rep/SessionManager.java	Mon Oct 13 13:16:31 2008 +0900
@@ -516,7 +516,6 @@
 			sm_join(sessionchannel);
 			
 		}catch (IOException e) {
-			e.printStackTrace();
 		}
 	}
 	
--- a/rep/SessionManagerList.java	Mon Oct 13 03:33:16 2008 +0900
+++ b/rep/SessionManagerList.java	Mon Oct 13 13:16:31 2008 +0900
@@ -41,10 +41,6 @@
 		}
 	}
 
-	public void send(REPSocketChannel<REPCommand> channel, REPCommand repCmd) {
-		
-	}
-
 	public void sendToMaster(REPCommand repCmd) {
 		master.write(repCmd);
 	}
--- a/test/sematest/TestInterManagerSession.java	Mon Oct 13 03:33:16 2008 +0900
+++ b/test/sematest/TestInterManagerSession.java	Mon Oct 13 13:16:31 2008 +0900
@@ -28,13 +28,11 @@
 
 	private SessionManagerEvent ev2[] = {
 			new SessionManagerEvent() {
-				// event for master
-				// executed before first select();
 				public void exec(SessionManager manager) {	
 					for(TestEditor editor:editors) {
 						if(editor.getPort()==manager.getPort()) {
 							logger.writeLog("Start client "+editor);
-								editor.start();
+							editor.start();
 						}
 					}
 					int i = sessionManagers.length;
@@ -47,8 +45,6 @@
 				}
 			},
 			new SessionManagerEvent() {
-				// executed before first select();
-				// event for slave
 				public void exec(SessionManager manager) {	
 					manager.connectSession(host);
 					for(TestEditor editor:editors) {
@@ -60,8 +56,6 @@
 				}
 			},
 			new SessionManagerEvent() {
-				// executed before first select();
-				// event for slave
 				public void exec(SessionManager manager) {	
 					manager.connectSession(host);
 					for(TestEditor editor:editors) {
@@ -73,16 +67,16 @@
 					}
 				}
 			}
-		};
+	};
 
 	/*
 	 * Create all editors, master session managers and slave session 
 	 * managers with specified port. All instances are not started yet.
 	 */
-	
+
 	public TestInterManagerSession(int sm, int ss, int e) {
 		super(sm,ss,e);
-		
+
 		sessionManagers = new SessionManager[sm];
 		slaveSessionManagers = new SessionManager[ss];
 		editors = new TestEditor[e];
@@ -100,6 +94,14 @@
 			// TestEditor extends Thread
 			editors[i] = new TestEditor("Editor"+i,host,port,master);
 		}
+		setupEditor0();
+	}
+
+	private void setupEditor0() {
+		/*
+		 * do not startup Editor0 until SessionManagers are ready.
+		 * Define pending command and set null command for now.
+		 */
 		LinkedList<REPCommand>cmds = new LinkedList<REPCommand>();
 		cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,"Editor0-file"));
 		cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0"));