changeset 495:bd76f7e39247 no-global-seq-mode

comment
author one
date Sun, 24 Oct 2010 00:18:14 +0900
parents 6b718b6b789c
children 280a04224c6c
files Todo rep/handler/Editor.java
diffstat 2 files changed, 72 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 が
--- 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()
 		LinkedList<REPCommand>s = new LinkedList<REPCommand>();
 		for(REPCommand command:sentList) {
 			if (command.eid!=eid) {