changeset 325:54d0b947079a

addTask method has bug.
author one
date Fri, 24 Jan 2014 01:51:14 +0900
parents 806cc010a5bd
children c382d6fe1ec4
files src/alice/topology/manager/keeparive/ListManager.java src/alice/topology/manager/keeparive/TaskExecuter.java src/alice/topology/manager/keeparive/TaskInfo.java
diffstat 3 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/ListManager.java	Tue Dec 24 18:30:13 2013 +0900
+++ b/src/alice/topology/manager/keeparive/ListManager.java	Fri Jan 24 01:51:14 2014 +0900
@@ -5,27 +5,33 @@
 public class ListManager {
 	private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>();
 	
-	public LinkedList<TaskInfo> getTaskList(){
+	public LinkedList<TaskInfo> getTaskList() {
 		return list;
 	}
 		
-	public void addTask(TaskInfo newInfo){
+	public void addTask(TaskInfo newInfo) {
 		TaskExecuter exec = TaskExecuter.getInstance();
-		
 		if (list.isEmpty()) {
-			if (exec.getNowTask() == null){ // active task is nothing
+			if (exec.getNowTask() == null) { // active task is nothing
 				list.add(newInfo);
 			} else {
 				TaskInfo nowTask = exec.getNowTask();
-				long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getTime());
+				long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getStartTime());
+				if (remainingTime < 0) {
+					list.add(newInfo);
+					return;
+				}
 				if (remainingTime < newInfo.getSleepTime()){
 					// newTask is longer than active task.
-					newInfo.setSleepTime(remainingTime - newInfo.getSleepTime());
+					newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime);
 					list.add(newInfo);
 				} else {
 					// active task is longer than newTask. 
-					list.add(nowTask);
-					addTask(newInfo);
+					list.add(newInfo);
+					TaskInfo task = nowTask.clone();
+					task.setSleepTime(remainingTime);
+					addTask(task);
+					exec.skip();				
 				}
 			}
 		} else {
@@ -35,7 +41,7 @@
 					newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime());	
 				} else if (info.getSleepTime() == newInfo.getSleepTime()){
 					// newInfo.getSleepTime() - info.getSleepTime() must be Zero
-					newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime());
+					newInfo.setSleepTime(0);
 					cnt++;
 					break;
 				} else if (info.getSleepTime() > newInfo.getSleepTime()){
@@ -46,6 +52,7 @@
 			}
 			list.add(cnt, newInfo);
 		}
+		
 	}
 	
 	
--- a/src/alice/topology/manager/keeparive/TaskExecuter.java	Tue Dec 24 18:30:13 2013 +0900
+++ b/src/alice/topology/manager/keeparive/TaskExecuter.java	Fri Jan 24 01:51:14 2014 +0900
@@ -35,7 +35,6 @@
 		nowTask = list.getTaskList().poll();
 		ods.update("_WAITINGLIST", list);
 		if (skipFlag){
-			nowTask.setSleepTime(nowTask.getSleepTime() + remainingTime);
 			skipFlag = false;
 		}
 		startTime = System.currentTimeMillis();
@@ -63,7 +62,6 @@
 	
 	public synchronized void skip(){
 		skipFlag = true;
-		remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
 		nowTask = null;
 		notify();
 	}
@@ -72,7 +70,7 @@
 		return nowTask;
 	}
 
-	public long getTime(){
+	public long getStartTime(){
 		return startTime;
 	}
 	
--- a/src/alice/topology/manager/keeparive/TaskInfo.java	Tue Dec 24 18:30:13 2013 +0900
+++ b/src/alice/topology/manager/keeparive/TaskInfo.java	Fri Jan 24 01:51:14 2014 +0900
@@ -30,6 +30,9 @@
 	}
 	
 	public void setSleepTime(long time){
+		if (time < 0 ){
+			System.out.println(time);
+		}
 		sleepTime = time;
 	}
 
@@ -40,4 +43,10 @@
 	public String getReturnKey(){
 		return returnKey;
 	}
+	
+	public TaskInfo clone(){
+		TaskInfo task = new TaskInfo(type);
+		task.setInfo(managerKey, returnKey, sleepTime);
+		return task;
+	}
 }