# HG changeset patch # User one # Date 1227082024 -32400 # Node ID dc616339b00a6cbae902c4eb319d175bb467cd19 # Parent a2efdec5cbfc3f2b43dfcafbfe44c0846379e30d half done. returned command conflict. diff -r a2efdec5cbfc -r dc616339b00a rep/handler/Editor.java --- a/rep/handler/Editor.java Wed Nov 19 16:41:09 2008 +0900 +++ b/rep/handler/Editor.java Wed Nov 19 17:07:04 2008 +0900 @@ -121,10 +121,7 @@ preMergeCommand = command; // merge は必須だが、EditorのCommand実装をテストするには邪魔なので、off に出来るようにする。 if (noMergeMode) { - REPCommand ack = new REPCommand(REP.SMCMD_END_MERGE,command.sid,REP.SM_EID.id,seq(),0,""); - send(ack); - // END_MERGE_ACK が返って来てから、送る方が正しいような気もするが... - next.send(preMergeCommand); + endMerge(); return; } // START_MERGE を送る @@ -166,15 +163,20 @@ void checkEndMerge() { if (merging) { if(translator.isMerging()) return; - REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,""); - send(mergeEnd); - // send INSERT_ACK/DELETE_ACK as next editor's merge trigger - next.send(preMergeCommand); + endMerge(); merging = false; } if (quit2!=null) checkQuit(); } + private void endMerge() { + REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,""); + send(mergeEnd); + // send INSERT_ACK/DELETE_ACK as next editor's merge trigger + sentList.add(new REPCommand(preMergeCommand)); + next.send(preMergeCommand); + } + private boolean checkQuit() { if (sentList.size()==0&&!isMerging()) { send(quit2); @@ -190,9 +192,11 @@ switch(command.cmd){ // Editor Command - + case REPCMD_DELETE: case REPCMD_INSERT: + case REPCMD_DELETE_ACK: + case REPCMD_INSERT_ACK: case REPCMD_NOP: { translate(command); @@ -244,6 +248,7 @@ break; } default: + assert false; return false; } return true; diff -r a2efdec5cbfc -r dc616339b00a test/sematest/TestEditor.java --- a/test/sematest/TestEditor.java Wed Nov 19 16:41:09 2008 +0900 +++ b/test/sematest/TestEditor.java Wed Nov 19 17:07:04 2008 +0900 @@ -43,6 +43,7 @@ private boolean hasInputLock=false; private int port; private REPSelector selector; + private boolean syncEnable=false; public TestEditor(String name, String _host,int _port, boolean master){ @@ -293,7 +294,7 @@ cmd.cmd = REP.SMCMD_SYNC_ACK; forwardCommand(cmd); //if (cmd.eid==eid) { - if (master) { + if (master && syncEnable ) { syncCounter = 1; timeout = 1; }