# HG changeset patch # User sugi # Date 1385451986 -32400 # Node ID f1cd920ea9133c77846b7d8d3151286405dd3fda # Parent 797267843126519264bd79f9e7126b0a759ef815 recreate "PingScheduler" with CS and DS diff -r 797267843126 -r f1cd920ea913 src/alice/topology/manager/keeparive/CreateSchedule.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/topology/manager/keeparive/CreateSchedule.java Tue Nov 26 16:46:26 2013 +0900 @@ -0,0 +1,42 @@ +package alice.topology.manager.keeparive; + +import java.util.LinkedList; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; + +public class CreateSchedule extends CodeSegment{ + private Receiver info1 = ids.create(CommandType.TAKE); // WaitingList + private Receiver info2 = ids.create(CommandType.TAKE); // TaskInfo + + public CreateSchedule(){ + info1.setKey("_WAITINGLIST"); + info2.setKey("_TASKINFO"); + } + + @Override + public void run() { + ListManager manager = info1.asClass(ListManager.class); + TaskInfo newTask = info2.asClass(TaskInfo.class); + PingScheduler ps = PingScheduler.getInstance(); + TaskInfo nowTask = ps.getNowTask(); + LinkedList list = manager.getTaskList(); + if (nowTask.getManagerKey().equals(newTask.getManagerKey())){ + long postponeTime = nowTask.getSleepTime() - (System.currentTimeMillis() - ps.getTime()); + TaskInfo nextTask = list.getFirst(); + nextTask.setSleepTime(postponeTime + nextTask.getSleepTime()); + manager.addTask(newTask); + ps.interrupt(); + } else { + for (TaskInfo info : list){ + if (newTask.getManagerKey().equals(info.getManagerKey())){ + list.remove(info); + } + } + manager.addTask(newTask); + } + ods.update("_SCHEDLIST", manager); + new CreateSchedule(); + } +} diff -r 797267843126 -r f1cd920ea913 src/alice/topology/manager/keeparive/ListManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/topology/manager/keeparive/ListManager.java Tue Nov 26 16:46:26 2013 +0900 @@ -0,0 +1,38 @@ +package alice.topology.manager.keeparive; + +import java.util.LinkedList; + +public class ListManager { + private LinkedList list = new LinkedList(); + + public LinkedList getTaskList(){ + return list; + } + + public void addTask(TaskInfo newInfo){ + if (list.isEmpty()) { + list.add(newInfo); + } else { + int cnt = 0; + for (TaskInfo info : list){ + if (info.getSleepTime() < newInfo.getSleepTime()){ + newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); + } else if (info.getSleepTime() == newInfo.getSleepTime()){ + // newInfo.getSleepTime() - info.getSleepTime() must be Zero + newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); + cnt++; + break; + } else if (info.getSleepTime() > newInfo.getSleepTime()){ + info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); + break; + } + cnt++; + } + + list.add(cnt, newInfo); + + } + } + + +} diff -r 797267843126 -r f1cd920ea913 src/alice/topology/manager/keeparive/PingScheduler.java --- a/src/alice/topology/manager/keeparive/PingScheduler.java Tue Nov 26 15:33:29 2013 +0900 +++ b/src/alice/topology/manager/keeparive/PingScheduler.java Tue Nov 26 16:46:26 2013 +0900 @@ -5,26 +5,24 @@ import alice.datasegment.Receiver; public class PingScheduler extends CodeSegment{ + private Receiver info = ids.create(CommandType.TAKE); + private TaskInfo nowTask; + private boolean interruptFlag = false; + private long time = 0; + static class SingletonHolder { private static PingScheduler Instance = new PingScheduler(); } public static PingScheduler getInstance(){ return SingletonHolder.Instance; } - private Receiver info = ids.create(CommandType.TAKE); - public void setKey(){ info.setKey("_WAITINGLIST"); } - private TaskInfo nowTask; - private boolean interruptFlag = false; - - private long time = 0; - private long postponeTime = 0; @Override public synchronized void run() { - WaitingList list = info.asClass(WaitingList.class); + ListManager list = info.asClass(ListManager.class); try { nowTask = list.getTaskList().pollFirst(); ods.update("_WAITINGLIST", list); @@ -40,40 +38,17 @@ } PingScheduler.getInstance().setKey(); } - /* - * private long INTERVAL = 60 * 1000; - public synchronized void postpone(String name){ - long elapsedTime = System.currentTimeMillis() - time; - postponeTime = nowTask.getSleepTime() - elapsedTime; - LinkedList list = plist.getTaskList(); - if (name.equals(nowTask.getManagerKey())){ - TaskInfo nextTask = list.get(0); - nextTask.setSleepTime(postponeTime + nextTask.getSleepTime()); - nowTask.setSleepTime(INTERVAL); - plist.addTask(nowTask); - - } else { - int cnt = 0; - nowTask.setSleepTime(postponeTime); - list.add(cnt, nowTask); - for (TaskInfo info : list){ - if (name.equals(info.getManagerKey())){ - if (info != list.getLast()){ - TaskInfo nextInfo = list.get(cnt+1); - nextInfo.setSleepTime(nextInfo.getSleepTime() + info.getSleepTime()); - } - list.remove(info); - info.setSleepTime(INTERVAL); - plist.addTask(info); - break; - } - cnt++; - } - } + public synchronized void interrupt(){ interruptFlag = true; notify(); } - */ - + + public TaskInfo getNowTask() { + return nowTask; + } + + public long getTime(){ + return time; + } } diff -r 797267843126 -r f1cd920ea913 src/alice/topology/manager/keeparive/TaskInfo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/topology/manager/keeparive/TaskInfo.java Tue Nov 26 16:46:26 2013 +0900 @@ -0,0 +1,37 @@ +package alice.topology.manager.keeparive; + +public class TaskInfo { + private long sleepTime; + private String managerKey; + private String returnKey; + + public TaskInfo(String managerKey, String returnKey, long time){ + this.managerKey = managerKey; + this.returnKey = returnKey; + sleepTime = time; + } + + public long getSleepTime(){ + return sleepTime; + } + + public void setSleepTime(long time){ + sleepTime = time; + } + + public String getManagerKey() { + return managerKey; + } + + public void setManagerKey(String key) { + managerKey = key; + } + + public String getReturnKey() { + return returnKey; + } + + public void setReturnKey(String key) { + returnKey = key; + } +} diff -r 797267843126 -r f1cd920ea913 src/alice/topology/manager/keeparive/WaitingList.java --- a/src/alice/topology/manager/keeparive/WaitingList.java Tue Nov 26 15:33:29 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -package alice.topology.manager.keeparive; - -import java.util.LinkedList; - -public class WaitingList { - private LinkedList list = new LinkedList(); - - public LinkedList getTaskList(){ - return list; - } - - public void addTask(TaskInfo newInfo){ - if (list.isEmpty()) { - list.add(newInfo); - } else { - int cnt = 0; - for (TaskInfo info : list){ - if (info.getSleepTime() < newInfo.getSleepTime()){ - newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); - } else if (info.getSleepTime() == newInfo.getSleepTime()){ - newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); - cnt++; - break; - } else if (info.getSleepTime() > newInfo.getSleepTime()){ - info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); - break; - } - cnt++; - } - - list.add(cnt, newInfo); - - } - } - - -}