# HG changeset patch # User sugi # Date 1396689016 -32400 # Node ID 6b82dae5d53772c5aeb4723e5f6454789126d3d6 # Parent 8266d7cfba7eb47558a83ade3a30c80d41adbbb3 refactor diff -r 8266d7cfba7e -r 6b82dae5d537 src/alice/topology/manager/keeparive/TaskExecuter.java --- 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 {