diff test/sematest/TestEditor.java @ 313:0585fd2410b8 single-insert-command

Single Insert Command worked.
author kono
date Sun, 05 Oct 2008 22:36:24 +0900
parents c5be84d53c7f
children 20fb70068089
line wrap: on
line diff
--- a/test/sematest/TestEditor.java	Sun Oct 05 11:39:18 2008 +0900
+++ b/test/sematest/TestEditor.java	Sun Oct 05 22:36:24 2008 +0900
@@ -26,6 +26,7 @@
 	private InetSocketAddress semaIP;
 	private REPLogger ns;
 	private int seq = 0;
+	private int prevSeq = 0;
 	public Text text;
 	public LinkedList<REPCommand> cmds;
 	private int eid = 0;
@@ -34,7 +35,6 @@
 	boolean running = true;
 	long timeout = 1;
 	private String name;
-	private REPCommand nop = new REPCommand(REP.REPCMD_NOP,0,0,0,0,"");
 	private boolean inputLock=false;
 	public boolean detached=false;
 	public boolean master=false;
@@ -179,6 +179,7 @@
 			case SMCMD_JOIN:
 			case SMCMD_PUT:
 				sendCommand(cmd,seq++);
+				prevSeq = seq;
 				/*
 				 * To prevent confusion, stop user input until the ack
 				 */
@@ -194,7 +195,8 @@
 	}
 
 
-	private void sendCommand(REPCommand cmd,int seq) {
+	private void sendCommand(REPCommand cmd1,int seq) {
+		REPCommand cmd = new REPCommand(cmd1);
 		cmd.setSEQID(seq);
 		cmd.setEID(eid);
 		cmd.setSID(sid);
@@ -208,29 +210,32 @@
 		switch(cmd.cmd) {
 		case REPCMD_INSERT	:
 			text.insert(cmd.lineno, cmd.string);
+			if (cmd.eid==REP.MERGE_EID.id) break;
+			addNop();
 			sendCommand(cmd,cmd.seq);
-			// sendCommand(nop); session manager do this for me
 			break;
 		case REPCMD_INSERT_ACK	:
 			assert(false);
 			break;
 		case REPCMD_DELETE	:
 			String del = text.delete(cmd.lineno);
+			if (cmd.eid==REP.MERGE_EID.id) break;
+			addNop();
 			cmd.setString(del);
 			sendCommand(cmd,cmd.seq);
-			// sendCommand(nop); session manager do this for me
 			break;
 		 case REPCMD_DELETE_ACK	:
 				assert(false);
 			 break;
-		 case REPCMD_CLOSE	:
+		 case REPCMD_NOP		:
+ 			 if (cmd.eid==REP.MERGE_EID.id) break;
+			 addNop();
+			 sendCommand(cmd,cmd.seq);
+			 break;		 case REPCMD_CLOSE	:
 		 case REPCMD_CLOSE_2	:
 				assert(false);
 			 break;
-		 case REPCMD_NOP		:
-			 sendCommand(cmd,cmd.seq);
-			 sendCommand(nop,seq++);
-			 break;
+
 		 case SMCMD_JOIN_ACK	:
 			 sid = cmd.sid;
 			 eid = cmd.eid;
@@ -283,4 +288,12 @@
 		 	 break;
 		}
 	}
+
+	private void addNop() {
+		if (seq!=prevSeq) return;
+		// We haven't send any command, add nop before retransmition.
+		REPCommand nop = new REPCommand(REP.REPCMD_NOP, sid, eid, seq, 0, "");
+		sendCommand(nop,seq++);
+		prevSeq = seq;
+	}
 }