comparison rep/handler/Editor.java @ 445:22a741c1fa2d

fix unMergedCmds in endMerge
author one
date Sat, 18 Sep 2010 00:10:57 +0900
parents 97593c486db6
children ed97273477a0
comparison
equal deleted inserted replaced
444:97593c486db6 445:22a741c1fa2d
21 protected LinkedList<PacketSet> waitingCommandInMerge= new LinkedList<PacketSet>(); 21 protected LinkedList<PacketSet> waitingCommandInMerge= new LinkedList<PacketSet>();
22 private REPCommand quit2=null; 22 private REPCommand quit2=null;
23 private REPCommand preMergeCommand; 23 private REPCommand preMergeCommand;
24 private boolean merging; 24 private boolean merging;
25 public static boolean noMergeMode=false; 25 public static boolean noMergeMode=false;
26 static final boolean doOptimize = true; 26 static final boolean doOptimize = false;
27 27
28 public Editor(SessionManager manager,int editorNo){ 28 public Editor(SessionManager manager,int editorNo){
29 // no translator case 29 // no translator case
30 super(manager, null); 30 super(manager, null);
31 } 31 }
39 translator = new Translator(eid,optimizer); 39 translator = new Translator(eid,optimizer);
40 } 40 }
41 41
42 /* 42 /*
43 * Merge Protocol 43 * Merge Protocol
44 (0) Editor へのコマンドは、ack 以外は直接 Editor へ送られてしまう。(next.send(cmd))
45 Editor から返ってくるコマンドをtranslatorが処理する。
44 (1) Editor CommandをSession Ring 上に流し、それが戻って来るまでに、他のEditorから 46 (1) Editor CommandをSession Ring 上に流し、それが戻って来るまでに、他のEditorから
45 受け取った Editor Command をキューに入れておく。 47 受け取った Editor Command をキューに入れておく。
46 (2) 戻って来たタイミングで、キュー上のEditor Commandを、eid とCommandの 48 (2) 戻って来たタイミングで、キュー上のEditor Commandを、eid とCommandの
47 順序を基にソートする。(self merge) 49 順序を基にソートする。(self merge)
48 (3) 他のEditorにソートのタイミングを与えるために、Editor Command の 50 (3) 他のEditorにソートのタイミングを与えるために、Editor Command の
292 if (quit2!=null) checkQuit(); 294 if (quit2!=null) checkQuit();
293 } 295 }
294 296
295 297
296 private void endMerge() { 298 private void endMerge() {
299 translator.endMerge();
297 REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,""); 300 REPCommand mergeEnd = new REPCommand(REP.SMCMD_END_MERGE,sid,eid,seq(),0,"");
298 send(mergeEnd); 301 send(mergeEnd);
299 sentList.remove(0); 302 sentList.remove(0);
300 if (preMergeCommand.eid==eid) { 303 if (preMergeCommand.eid==eid) {
301 // First Phase End, send ACK 304 // First Phase End, send ACK