# HG changeset patch # User one # Date 1390495874 -32400 # Node ID 54d0b947079a23f7e85b20976392cc6fc62bc587 # Parent 806cc010a5bd22512c5d570e96c50744dcf8e651 addTask method has bug. diff -r 806cc010a5bd -r 54d0b947079a src/alice/topology/manager/keeparive/ListManager.java --- 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 list = new LinkedList(); - public LinkedList getTaskList(){ + public LinkedList 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); } + } diff -r 806cc010a5bd -r 54d0b947079a src/alice/topology/manager/keeparive/TaskExecuter.java --- 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; } diff -r 806cc010a5bd -r 54d0b947079a src/alice/topology/manager/keeparive/TaskInfo.java --- 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; + } }