changeset 332:6b82dae5d537

refactor
author sugi
date Sat, 05 Apr 2014 18:10:16 +0900
parents 8266d7cfba7e
children cf9072608fe4
files src/alice/topology/manager/keeparive/TaskExecuter.java
diffstat 1 files changed, 34 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/TaskExecuter.java	Thu Apr 03 20:26:23 2014 +0900
+++ b/src/alice/topology/manager/keeparive/TaskExecuter.java	Sat Apr 05 18:10:16 2014 +0900
@@ -8,6 +8,7 @@
 public class TaskExecuter extends CodeSegment {
 	private Receiver info = ids.create(CommandType.TAKE);
 	private TaskInfo nowTask;
+	private boolean sleepFlag = false;
 	private boolean skipFlag = false;
 	private long startTime = 0;
 	private long remainingTime = 0; 
@@ -35,7 +36,7 @@
 			}
 			ods.update("_WAITINGLIST", list);
 		} else {
-			setNowTask(list.getTaskList().poll());
+			nowTask = list.getTaskList().poll();
 			ods.update("_WAITINGLIST", list);
 			
 			if (skipFlag) {
@@ -47,67 +48,67 @@
 			startTime = System.currentTimeMillis();
 			System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
 			if (nowTask.getSleepTime() != 0){
+				sleepFlag = true;
 				try {
 					wait(nowTask.getSleepTime());
 				} catch (InterruptedException e) {
 					e.printStackTrace();
 				}
+				sleepFlag = false;
 			}
 			
-			
 			if (!skipFlag){
-				execTask();
+				// ping or close
+				if (nowTask.getType() == TaskType.PING) {
+					ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
+					TaskInfo task = new TaskInfo(TaskType.CLOSE);
+					task.setInfo(nowTask.getManagerKey(), 10 * 1000);
+					ods.put("_TASKINFO", task);
+					new RespondPing(nowTask.getReturnKey());
+				} else if (nowTask.getType() == TaskType.CLOSE) {
+					// no response from the Remote DataSegment. So close this connection.
+					DataSegment.get(nowTask.getManagerKey()).close();
+				}
 			}
-			setNowTask(null);
+			nowTask = null;
 			startTime = 0;
 		}
 		setKey();
 	}
-
-	private synchronized void execTask(){
-		// ping or close
-		if (nowTask.getType() == TaskType.PING) {
-			ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
-			TaskInfo task = new TaskInfo(TaskType.CLOSE);
-			task.setInfo(nowTask.getManagerKey(), 10 * 1000);
-			ods.put("_TASKINFO", task);
-			new RespondPing(nowTask.getReturnKey());
-		} else if (nowTask.getType() == TaskType.CLOSE) {
-			// no response from the Remote DataSegment. So close this connection.
-			DataSegment.get(nowTask.getManagerKey()).close();
-		}
-	}
 	
 	public synchronized void skip() {
-		skipFlag = true;
-		if (startTime == 0){
-			remainingTime = nowTask.getSleepTime();
-		} else {
-			remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
+		if (sleepFlag){
+			skipFlag = true;
+			if (startTime == 0){
+				remainingTime = nowTask.getSleepTime();
+			} else {
+				remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
+			}
+			nowTask = null;			
+			notify();
 		}
-		System.out.println(remainingTime);
-		nowTask = null;
-		notify();
-		System.out.println(nowTask);
 	}
 
 	public synchronized void ignore() {
-		skipFlag = true;
-		remainingTime = 0;
-		nowTask = null;
-		notify();
+		if (sleepFlag){
+			skipFlag = true;
+			remainingTime = 0;
+			nowTask = null;
+			notify();			
+		}
 	}
 
 	public synchronized TaskInfo getNowTask() {
 		return nowTask;
 	}
 
+	// only use in ListManagerTest
 	public synchronized void setNowTask(TaskInfo info) {
 		nowTask = info;
 	}
 
-	public long getRemainingTime() {
-		if (nowTask != null) {
+	public synchronized long getRemainingTime() {
+		if (sleepFlag) {
 			if (startTime !=0) {
 				return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
 			} else {