Mercurial > hg > Database > Alice
view src/alice/topology/manager/keeparive/TaskExecuter.java @ 326:c382d6fe1ec4
need reamainingTime add next task
author | sugi |
---|---|
date | Fri, 24 Jan 2014 02:18:09 +0900 |
parents | 54d0b947079a |
children | 35b4e24e3e02 |
line wrap: on
line source
package alice.topology.manager.keeparive; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.DataSegment; import alice.datasegment.Receiver; public class TaskExecuter extends CodeSegment{ private Receiver info = ids.create(CommandType.TAKE); private TaskInfo nowTask; private boolean skipFlag = false; private long startTime = 0; private static TaskExecuter instance = new TaskExecuter(); private TaskExecuter(){} public static TaskExecuter getInstance(){ return instance; } public void setKey(){ ids.init(); info.setKey("_WAITINGLIST"); } @Override public synchronized void run(){ ListManager list = info.asClass(ListManager.class); if (list.getTaskList().size() == 0){ ods.update("_WAITINGLIST", list); setKey(); return; } nowTask = list.getTaskList().poll(); ods.update("_WAITINGLIST", list); if (skipFlag){ skipFlag = false; } 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(); } } nowTask = null; setKey(); } public synchronized long skip(){ skipFlag = true; long remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); nowTask = null; notify(); return remainingTime; } public TaskInfo getNowTask(){ return nowTask; } public long getStartTime(){ 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; } }