changeset 441:15888d516f10

wait for pervious merge completion in getMargedAgain
author one
date Sun, 12 Sep 2010 15:11:46 +0900
parents c50cee354f62
children 3819dec4641e
files Todo rep/handler/Translator.java
diffstat 2 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/Todo	Sat Sep 11 18:01:04 2010 +0900
+++ b/Todo	Sun Sep 12 15:11:46 2010 +0900
@@ -2,6 +2,11 @@
 
 これ、やっぱり難しすぎ。getMergeAgain で、sentMergedList が空でない場合がある。
 
+Termination するようにはなった。しかし、Merge はダメなようだ。
+
+mergeAgain した時に、前のmerge command がeditorから返されることがあって、
+それは、全部、読む必要がある。
+
 Sat Jan 16 18:06:37 JST 2010
 
 sentList 全部削除だと quit2 が早めに出されてしまうので、
--- a/rep/handler/Translator.java	Sat Sep 11 18:01:04 2010 +0900
+++ b/rep/handler/Translator.java	Sun Sep 12 15:11:46 2010 +0900
@@ -96,9 +96,10 @@
 			REPCommand m = new REPCommand(c);
 			m.setEID(REP.MERGE_EID.id);
 			m.setSEQID(editor.seq());
-			sentMergedList.add(m);
+			sentMergedList.addLast(m);
 			editor.send(m);
-		}				
+		}
+		logger.writeLog("Output eid="+eid+"SentMergedList = "+sentMergedList);
 		merge_mode = true;
 		return true;
 	}
@@ -144,18 +145,23 @@
 	public boolean checkMergeConflict(REPCommand command) {
 		unMergedCmds.addFirst(command);
 		
-		if (mergeAgain) {
-			return true;
+		REPCommand prev = sentMergedList.getFirst();
+		if (prev.seq==command.seq) {
+			logger.writeLog("Input eid="+eid+"SentMergedList = "+sentMergedList);
+			sentMergedList.removeFirst();
+		} else {
+			//  previous merge command may be returned
 		}
-		REPCommand prev = sentMergedList.remove();
-		assert (prev.seq==command.seq);
-		if(sentMergedList.size()==0) {
+
+		if(sentMergedList.size()==0 && !mergeAgain) {
 			merge_mode=false;
 		}
-		return false;
+		return mergeAgain;
 	}
 
 	public void getMergeAgain(REPNode editor) {
+		if (sentMergedList.size()>0) return; //  wait for previous merge completion
+		
 		LinkedList<REPCommand> returnCommand = new LinkedList<REPCommand>();
 		LinkedList<REPCommand> merge = new LinkedList<REPCommand>();
 		LinkedList<REPCommand> conflict = new LinkedList<REPCommand>();
@@ -184,7 +190,7 @@
 //			default: assert false;
 //			}
 //		}
-		logger.writeLog("MergeAgain ret="+returnCommand.size());
+		logger.writeLog("MergeAgain "+eid+" ret="+returnCommand.size());
 //				+" increment="+count);
 		mergeAgain = false;
 		optimizedSend(editor, returnCommand);