Mercurial > hg > Database > Alice
diff src/alice/topology/manager/keeparive/TaskExecuter.java @ 329:35b4e24e3e02
setNowTask method need synchronized. may be...
author | sugi |
---|---|
date | Mon, 24 Mar 2014 23:52:20 +0900 |
parents | c382d6fe1ec4 |
children | d35ff0f588e8 |
line wrap: on
line diff
--- 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())){