Mercurial > hg > RemoteEditor > REPSessionManager
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"));