# HG changeset patch # User sugi # Date 1395672740 -32400 # Node ID 35b4e24e3e021dba2d98f5f948b9f874e554c877 # Parent 370a2f63944f644f245d861c38e900ef3fbb5f65 setNowTask method need synchronized. may be... diff -r 370a2f63944f -r 35b4e24e3e02 src/alice/topology/manager/keeparive/ListManagerTest.java --- a/src/alice/topology/manager/keeparive/ListManagerTest.java Tue Feb 11 16:10:23 2014 +0900 +++ b/src/alice/topology/manager/keeparive/ListManagerTest.java Mon Mar 24 23:52:20 2014 +0900 @@ -35,6 +35,12 @@ manager.showList(); i +=1; } + + manager = new ListManager(); + System.out.println(TaskExecuter.getInstance().getRemainingTime()); + TaskExecuter.getInstance().setNowTask(taskA); + TaskExecuter.getInstance().skip(); + System.out.println(TaskExecuter.getInstance().getRemainingTime()); } } \ No newline at end of file diff -r 370a2f63944f -r 35b4e24e3e02 src/alice/topology/manager/keeparive/RespondPing.java --- a/src/alice/topology/manager/keeparive/RespondPing.java Tue Feb 11 16:10:23 2014 +0900 +++ b/src/alice/topology/manager/keeparive/RespondPing.java Mon Mar 24 23:52:20 2014 +0900 @@ -29,7 +29,7 @@ task.setInfo(d.from, null, 0); if (exec.compareNowTask(task)){ // case: remove task is state countdown. - exec.skip(); + exec.skip(); // countdown } else { // case: remove task is still in the waiting queue. ods.put("_REMOVETASK",task); diff -r 370a2f63944f -r 35b4e24e3e02 src/alice/topology/manager/keeparive/TaskExecuter.java --- a/src/alice/topology/manager/keeparive/TaskExecuter.java Tue Feb 11 16:10:23 2014 +0900 +++ b/src/alice/topology/manager/keeparive/TaskExecuter.java Mon Mar 24 23:52:20 2014 +0900 @@ -5,76 +5,121 @@ import alice.datasegment.DataSegment; import alice.datasegment.Receiver; -public class TaskExecuter extends CodeSegment{ +public class TaskExecuter extends CodeSegment { private Receiver info = ids.create(CommandType.TAKE); private TaskInfo nowTask; private boolean skipFlag = false; private long startTime = 0; + private long remainingTime = 0; private static TaskExecuter instance = new TaskExecuter(); - private TaskExecuter(){} - public static TaskExecuter getInstance(){ + private TaskExecuter() {} + public static TaskExecuter getInstance() { return instance; } - public void setKey(){ + public void setKey() { ids.init(); info.setKey("_WAITINGLIST"); } @Override - public synchronized void run(){ + public synchronized void run() { ListManager list = info.asClass(ListManager.class); if (list.getTaskList().size() == 0){ + if (remainingTime !=0){ + TaskInfo info = new TaskInfo(TaskType.SKIP); + info.setSleepTime(remainingTime); + remainingTime = 0; + list.addTask(info); + } ods.update("_WAITINGLIST", list); - setKey(); - return; - } - nowTask = list.getTaskList().poll(); - ods.update("_WAITINGLIST", list); - if (skipFlag){ - skipFlag = false; + } else { + setNowTask(list.getTaskList().poll()); + ods.update("_WAITINGLIST", list); + + if (skipFlag) { + skipFlag = false; + nowTask.setSleepTime(remainingTime + nowTask.getSleepTime()); + remainingTime = 0; + } + + startTime = System.currentTimeMillis(); + System.out.println(nowTask.getSleepTime()+" "+nowTask.getType()); + if (nowTask.getSleepTime() != 0){ + try { + wait(nowTask.getSleepTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + setNowTask(null); + startTime = 0; + + if (!skipFlag){ + // ping or close + /* + if (nowTask.getType() == TaskType.PING) { + ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); + TaskInfo task = new TaskInfo(TaskType.CLOSE); + task.setInfo(nowTask.getManagerKey(), 60 * 1000); + ods.put("_TASKINFO", task); + new RespondPing(nowTask.getReturnKey()); + } else { + // no response from the Remote DataSegment. So close this connection. + DataSegment.get(nowTask.getManagerKey()).close(); + } + */ + } } - startTime = System.currentTimeMillis(); - System.out.println(nowTask.getSleepTime()+" "+nowTask.getType()); - if (nowTask.getSleepTime()!=0){ - try { - this.wait(nowTask.getSleepTime()); - } catch (InterruptedException e){} - } - if (!skipFlag){ - if (nowTask.getType() == TaskType.PING){ - ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); - TaskInfo task = new TaskInfo(TaskType.CLOSE); - task.setInfo(nowTask.getManagerKey(), 60 * 1000); - ods.put("_TASKINFO", task); - new RespondPing(nowTask.getReturnKey()); - } else { - // no response from the Remote DataSegment. So close this connection. - DataSegment.get(nowTask.getManagerKey()).close(); - } + setKey(); + } + + public synchronized void skip() { + skipFlag = true; + if (startTime == 0){ + remainingTime = nowTask.getSleepTime(); + } else { + remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); } nowTask = null; - setKey(); + notify(); } - - public synchronized long skip(){ + + public synchronized void ignore() { skipFlag = true; - long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); + remainingTime = 0; nowTask = null; notify(); - return remainingTime; } - public TaskInfo getNowTask(){ + public TaskInfo getNowTask() { return nowTask; } - public long getStartTime(){ - return startTime; + public synchronized void setNowTask(TaskInfo info) { + nowTask = info; } - - public boolean compareNowTask(TaskInfo task){ + + public long getRemainingTime() { + if (nowTask != null) { + if (startTime !=0) { + return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); + } else { + return nowTask.getSleepTime(); + } + } else { + return remainingTime; + } + } + + public long initRemainingTime() { + long time = remainingTime; + remainingTime = 0; + return time; + } + + public boolean compareNowTask(TaskInfo task) { if (nowTask != null){ if (nowTask.getType().equals(task.getType()) && nowTask.getManagerKey().equals(task.getManagerKey())){ diff -r 370a2f63944f -r 35b4e24e3e02 src/alice/topology/manager/keeparive/TaskInfo.java --- a/src/alice/topology/manager/keeparive/TaskInfo.java Tue Feb 11 16:10:23 2014 +0900 +++ b/src/alice/topology/manager/keeparive/TaskInfo.java Mon Mar 24 23:52:20 2014 +0900 @@ -30,9 +30,6 @@ } public void setSleepTime(long time){ - if (time < 0 ){ - System.out.println(time); - } sleepTime = time; } diff -r 370a2f63944f -r 35b4e24e3e02 src/alice/topology/manager/keeparive/TaskType.java --- a/src/alice/topology/manager/keeparive/TaskType.java Tue Feb 11 16:10:23 2014 +0900 +++ b/src/alice/topology/manager/keeparive/TaskType.java Mon Mar 24 23:52:20 2014 +0900 @@ -3,5 +3,5 @@ public enum TaskType { PING, CLOSE, - WAIT + SKIP, }