# HG changeset patch # User kono # Date 1223871391 -32400 # Node ID 21ad256c25c2089f7be0930e12d20fef2b2a00ae # Parent 4b056e46ba83df2549a450416095221de9e268d9 *** empty log message *** diff -r 4b056e46ba83 -r 21ad256c25c2 Todo --- 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) diff -r 4b056e46ba83 -r 21ad256c25c2 rep/SessionManager.java --- 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(); } } diff -r 4b056e46ba83 -r 21ad256c25c2 rep/SessionManagerList.java --- 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 channel, REPCommand repCmd) { - - } - public void sendToMaster(REPCommand repCmd) { master.write(repCmd); } diff -r 4b056e46ba83 -r 21ad256c25c2 test/sematest/TestInterManagerSession.java --- 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. + */ LinkedListcmds = new LinkedList(); 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"));