# HG changeset patch # User one # Date 1287847094 -32400 # Node ID bd76f7e3924778a3fa73ffc8f9ac47b490023efa # Parent 6b718b6b789ca7389a46358db6d0f99bd4c81493 comment diff -r 6b718b6b789c -r bd76f7e39247 Todo --- a/Todo Sat Oct 23 19:32:16 2010 +0900 +++ b/Todo Sun Oct 24 00:18:14 2010 +0900 @@ -1,3 +1,71 @@ +Sat Oct 23 22:24:31 JST 2010 + + Editor1 Editor2 Editor3 + c(e1s1) a(e3s1) + a(e3s1) c(e1s1) + e(e2s2) c(e1s1) + d(e3s2) + c(e1s1) a(e3s1) e(e2s2) E1 c_a + d(e2s2) + e(e2s2) ca(e1s1) a(e3s1) E3 c_a, E2 c_a + d(e3s2) + aa(e3s1) e(e2s2) ca(e1s1) E2 _ed + d(e3s2) E3 _ed + aa(e3s1) ea(e2s2) + da(e3s2) + ea(e2s2) + da(e3s2) + + [c,a,e,d] + +うーん。あんまり状況が変わってないんですけど。でも、こういう風にseqを +使うのは、あんまり良くないが... + +seq を使わずに merge mark で出来るかも。 + + Editor1 Editor2 Editor3 + c(e1s1) a(e3s1) + a(e3s1) c(e1s1) + e(e2s2) c(e1s1) + d(e3s2) + c(e1s1) a(e3s1) e(e2s2) E1 c_a e は a に追い越される + d(e2s2) f(e2s3) + e(e2s2) ca(e1s1) a(e3s1) E3 c_a, E2 c_a + d(e3s2) f(e2s3) しかし、e は d には追い越されない + aa(e3s1) e(e2s2) ca(e1s1) E2 _ed + f(e2s3) d(e3s2) E3 _ed + aa(e3s1) ea(e2s2) + da(e3s2) f(e2s3) E2 _f_ + ea(e2s2) fa(e2s3) + fa(e2s3) da(e3s2) + fa(e2s3) + [c,a,e,d] + +Editor3で、eがa,cを追い越せない理由は? + + c_a + _ed + _f_ + +の意味は? + +つまり、全部廻ったかどうか、数が関係するわけ? + + 他のコマンドが来たらgseqを一つ増やす + 同じgseq同士で eid, lseq で、sort + +同じってのがひっかかるけど。mm だと、d(e3s2)がf(e2s3)を追い +越すことが出来ない。(いや、出来る?) + +heart beat でseqを合わせるか。 + + 他コマンドが来てたら自コマンドの前に mm + 他コマンドは mm の前にsortして挿入 + mm 以降の自コマンドは後回し + ack が来たらmmまでの他コマンドは確定 sentList から削除 + +うーん、他コマンドをsortするか、しないかの判断がmmでは出来ないみたい。 + Sat Oct 23 12:04:43 JST 2010 sentList から外すときに、unMergeCmds からも外すのだが、その時に、merge command が diff -r 6b718b6b789c -r bd76f7e39247 rep/handler/Editor.java --- a/rep/handler/Editor.java Sat Oct 23 19:32:16 2010 +0900 +++ b/rep/handler/Editor.java Sun Oct 24 00:18:14 2010 +0900 @@ -392,8 +392,9 @@ if (mergeMode==MergeMode.Direct) { REPCommand last = sentList.size()==0?null:sentList.getLast(); ServerMainLoop.logger.writeLog("Editor"+eid+": EndMerge Before"+report()); - if (last!=null && last.eid==eid && last.sid==sid) - truncateSentList(last,false); + if (last!=null && last.eid==eid && last.sid==sid) { + truncateSentList(last,false); // Own command interrupts us, trucate sentList + } sentList.remove(mergeMark); preMergeCommand = null; ServerMainLoop.logger.writeLog("Editor"+eid+": EndMerge "+report()); @@ -420,7 +421,7 @@ *   mode==false Don't truncate unMergedCmds after merge mark */ private void truncateSentList(REPCommand commit, boolean mode) { - if (blocking) return; // merging is not enough + if (mode && blocking) return; // merging is not enough except from endMerge() LinkedLists = new LinkedList(); for(REPCommand command:sentList) { if (command.eid!=eid) {