Mercurial > hg > Database > Alice
diff src/alice/topology/manager/keeparive/TaskExecuter.java @ 323:d746c4486287
work
author | one |
---|---|
date | Mon, 23 Dec 2013 17:13:16 +0900 |
parents | 4b5bf9cf1505 |
children | 806cc010a5bd |
line wrap: on
line diff
--- a/src/alice/topology/manager/keeparive/TaskExecuter.java Tue Dec 17 19:46:29 2013 +0900 +++ b/src/alice/topology/manager/keeparive/TaskExecuter.java Mon Dec 23 17:13:16 2013 +0900 @@ -8,8 +8,9 @@ public class TaskExecuter extends CodeSegment{ private Receiver info = ids.create(CommandType.TAKE); private TaskInfo nowTask; - private boolean interruptFlag = false; - private long time = 0; + private boolean skipFlag = false; + private long startTime = 0; + private long remainingTime = 0; private static TaskExecuter instance = new TaskExecuter(); private TaskExecuter(){} @@ -26,21 +27,23 @@ public synchronized void run(){ ListManager list = info.asClass(ListManager.class); if (list.getTaskList().size() == 0){ + remainingTime = 0; ods.update("_WAITINGLIST", list); setKey(); return; } nowTask = list.getTaskList().poll(); ods.update("_WAITINGLIST", list); - time = System.currentTimeMillis(); + if (skipFlag){ + nowTask.setSleepTime(nowTask.getSleepTime() + remainingTime); + } + startTime = System.currentTimeMillis(); if (nowTask.getSleepTime()!=0){ try { this.wait(nowTask.getSleepTime()); } catch (InterruptedException e){} } - if (interruptFlag){ - interruptFlag = false; - } else { + if (!skipFlag){ if (nowTask.getType() == TaskType.PING){ ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); TaskInfo task = new TaskInfo(TaskType.CLOSE); @@ -48,15 +51,18 @@ ods.put("_TASKINFO", task); new RespondPing(nowTask.getReturnKey()); } else { + // no response from the Remote DataSegment. So close this connection. DataSegment.get(nowTask.getManagerKey()).close(); - } - + } } nowTask = null; setKey(); } - public synchronized void interrupt(){ - interruptFlag = true; + + public synchronized void skip(){ + skipFlag = true; + remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); + nowTask = null; notify(); } @@ -65,7 +71,17 @@ } public long getTime(){ - return time; + return startTime; } -} + + public boolean compareNowTask(TaskInfo task){ + if (nowTask != null){ + if (nowTask.getType().equals(task.getType()) + && nowTask.getManagerKey().equals(task.getManagerKey())){ + return true; + } + } + return false; + } +} \ No newline at end of file