changeset 324:806cc010a5bd

remove enqueue bug.
author one
date Tue, 24 Dec 2013 18:30:13 +0900
parents d746c4486287
children 54d0b947079a
files src/alice/topology/manager/keeparive/CreateSchedule.java src/alice/topology/manager/keeparive/ListManager.java src/alice/topology/manager/keeparive/RemoveTask.java src/alice/topology/manager/keeparive/RespondPing.java src/alice/topology/manager/keeparive/TaskExecuter.java
diffstat 5 files changed, 21 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/CreateSchedule.java	Mon Dec 23 17:13:16 2013 +0900
+++ b/src/alice/topology/manager/keeparive/CreateSchedule.java	Tue Dec 24 18:30:13 2013 +0900
@@ -17,6 +17,7 @@
 	public void run() {
 		ListManager manager = info1.asClass(ListManager.class);
 		TaskInfo newTask = info2.asClass(TaskInfo.class);
+		System.out.println("addTask");
 		manager.addTask(newTask);
 		ods.update("_WAITINGLIST", manager);
 		new CheckExistTask();
--- a/src/alice/topology/manager/keeparive/ListManager.java	Mon Dec 23 17:13:16 2013 +0900
+++ b/src/alice/topology/manager/keeparive/ListManager.java	Tue Dec 24 18:30:13 2013 +0900
@@ -10,8 +10,24 @@
 	}
 		
 	public void addTask(TaskInfo newInfo){
+		TaskExecuter exec = TaskExecuter.getInstance();
+		
 		if (list.isEmpty()) {
-			list.add(newInfo);
+			if (exec.getNowTask() == null){ // active task is nothing
+				list.add(newInfo);
+			} else {
+				TaskInfo nowTask = exec.getNowTask();
+				long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - exec.getTime());
+				if (remainingTime < newInfo.getSleepTime()){
+					// newTask is longer than active task.
+					newInfo.setSleepTime(remainingTime - newInfo.getSleepTime());
+					list.add(newInfo);
+				} else {
+					// active task is longer than newTask. 
+					list.add(nowTask);
+					addTask(newInfo);
+				}
+			}
 		} else {
 			int cnt = 0;
 			for (TaskInfo info : list){
@@ -28,9 +44,7 @@
 				}
 				cnt++;
 			}
-			
 			list.add(cnt, newInfo);
-			
 		}
 	}
 	
--- a/src/alice/topology/manager/keeparive/RemoveTask.java	Mon Dec 23 17:13:16 2013 +0900
+++ b/src/alice/topology/manager/keeparive/RemoveTask.java	Tue Dec 24 18:30:13 2013 +0900
@@ -15,7 +15,6 @@
 
 	@Override
 	public void run() {
-		System.out.println();
 		ListManager list = info1.asClass(ListManager.class); // explicit cast
 		TaskInfo task = info2.asClass(TaskInfo.class);
 		TaskExecuter exec = TaskExecuter.getInstance();
--- a/src/alice/topology/manager/keeparive/RespondPing.java	Mon Dec 23 17:13:16 2013 +0900
+++ b/src/alice/topology/manager/keeparive/RespondPing.java	Tue Dec 24 18:30:13 2013 +0900
@@ -22,7 +22,6 @@
 			// need check, this connection is alive. may be close 
 			DataSegment.get(d.from).close();
 		} else {
-			System.out.println("alive");
 			// if nowTask is close d.from's socket cancel. 
 			// if not remove close task in the Queue.
 			TaskExecuter exec = TaskExecuter.getInstance();
--- a/src/alice/topology/manager/keeparive/TaskExecuter.java	Mon Dec 23 17:13:16 2013 +0900
+++ b/src/alice/topology/manager/keeparive/TaskExecuter.java	Tue Dec 24 18:30:13 2013 +0900
@@ -25,7 +25,7 @@
 
 	@Override
 	public synchronized void run(){
-		ListManager list = info.asClass(ListManager.class);
+		ListManager list = info.asClass(ListManager.class);	
 		if (list.getTaskList().size() == 0){
 			remainingTime = 0;
 			ods.update("_WAITINGLIST", list);
@@ -36,8 +36,10 @@
 		ods.update("_WAITINGLIST", list);
 		if (skipFlag){
 			nowTask.setSleepTime(nowTask.getSleepTime() + remainingTime);
+			skipFlag = false;
 		}
 		startTime = System.currentTimeMillis();
+		System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
 		if (nowTask.getSleepTime()!=0){
 			try {
 				this.wait(nowTask.getSleepTime());