# HG changeset patch # User sugi # Date 1385447609 -32400 # Node ID 797267843126519264bd79f9e7126b0a759ef815 # Parent a8255a831ade7d673f43cb47d9212a766ea0e39c Refactor diff -r a8255a831ade -r 797267843126 .settings/org.eclipse.core.resources.prefs --- a/.settings/org.eclipse.core.resources.prefs Tue Nov 19 17:39:44 2013 +0900 +++ b/.settings/org.eclipse.core.resources.prefs Tue Nov 26 15:33:29 2013 +0900 @@ -4,3 +4,4 @@ encoding//src/alice/test/codesegment/local/wordcount/WordCount.java=UTF-8 encoding//src/alice/topology/manager/IncomingHosts.java=UTF-8 encoding//src/alice/topology/manager/createABSIPList.java=UTF-8 +encoding//src/alice/topology/manager/keeparive/PingScheduler.java=UTF-8 diff -r a8255a831ade -r 797267843126 src/alice/codesegment/OutputDataSegment.java --- a/src/alice/codesegment/OutputDataSegment.java Tue Nov 19 17:39:44 2013 +0900 +++ b/src/alice/codesegment/OutputDataSegment.java Tue Nov 26 15:33:29 2013 +0900 @@ -92,7 +92,7 @@ * @param managerKey * @param key */ - public void ping(String managerKey ,String returnKey) { + public void ping(String managerKey, String returnKey) { DataSegment.get(managerKey).ping(returnKey); } diff -r a8255a831ade -r 797267843126 src/alice/test/codesegment/api/PingSchedulerTest.java --- a/src/alice/test/codesegment/api/PingSchedulerTest.java Tue Nov 19 17:39:44 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -package alice.test.codesegment.api; - -import alice.topology.manager.keeparive.PingScheduler; -import alice.topology.manager.keeparive.TaskInfo; - -public class PingSchedulerTest { - public static void main(String[] args){ - PingScheduler sched = new PingScheduler(); - int[] num = { 1 * 1000, - 2 * 1000, - 6 * 1000, - 4 * 1000, - 3 * 1000 - }; - - for (int i = 0; i < num.length; i++){ - String name = "task"+i; - sched.plist.addTask( - new TaskInfo(name, num[i]) - ); - } - - for (TaskInfo info : sched.plist.getTaskList()){ - System.out.println(info.getSleepTime()); - } - - sched.execute(); - //System.exit(0); - } - -} diff -r a8255a831ade -r 797267843126 src/alice/topology/manager/keeparive/PingSchedList.java --- a/src/alice/topology/manager/keeparive/PingSchedList.java Tue Nov 19 17:39:44 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package alice.topology.manager.keeparive; - -import java.util.LinkedList; - -public class PingSchedList { - /* TODO - * This LinkedList may be called some threads. - * So need lock. - */ - 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); - } - } - - -} diff -r a8255a831ade -r 797267843126 src/alice/topology/manager/keeparive/PingScheduler.java --- a/src/alice/topology/manager/keeparive/PingScheduler.java Tue Nov 19 17:39:44 2013 +0900 +++ b/src/alice/topology/manager/keeparive/PingScheduler.java Tue Nov 26 15:33:29 2013 +0900 @@ -1,18 +1,47 @@ package alice.topology.manager.keeparive; -import java.util.LinkedList; import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; public class PingScheduler extends CodeSegment{ - public PingSchedList plist = new PingSchedList(); + 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 INTERVAL = 60 * 1000; private long time = 0; private long postponeTime = 0; - + @Override + public synchronized void run() { + WaitingList list = info.asClass(WaitingList.class); + try { + nowTask = list.getTaskList().pollFirst(); + ods.update("_WAITINGLIST", list); + time = System.currentTimeMillis(); + if (nowTask.getSleepTime()!=0) + this.wait(nowTask.getSleepTime()); + if (interruptFlag){ + interruptFlag = false; + } else { + ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); + } + } catch (InterruptedException e) { + } + PingScheduler.getInstance().setKey(); + } + /* + * private long INTERVAL = 60 * 1000; public synchronized void postpone(String name){ long elapsedTime = System.currentTimeMillis() - time; postponeTime = nowTask.getSleepTime() - elapsedTime; @@ -43,27 +72,8 @@ } interruptFlag = true; notify(); - } + } + */ - @Override - public synchronized void run() { - LinkedList list = plist.getTaskList(); - try { - while(true){ - nowTask = list.poll(); - System.out.print("TaskName "+nowTask.getManagerKey()); - System.out.println(" sleepTime "+nowTask.getSleepTime()); - time = System.currentTimeMillis(); - if (nowTask.getSleepTime()!=0) - this.wait(nowTask.getSleepTime()); - if (interruptFlag){ - interruptFlag = false; - } else { - ods.put("_SENDPING", nowTask.getManagerKey()); - } - } - } catch (InterruptedException e) { - } - } } diff -r a8255a831ade -r 797267843126 src/alice/topology/manager/keeparive/SendPing.java --- a/src/alice/topology/manager/keeparive/SendPing.java Tue Nov 19 17:39:44 2013 +0900 +++ b/src/alice/topology/manager/keeparive/SendPing.java Tue Nov 26 15:33:29 2013 +0900 @@ -12,9 +12,8 @@ } @Override - public void run(){ - String managerKey = taskInfo.asString(); - ods.ping(managerKey , "UUID"); - //new RespondPing(); + public synchronized void run(){ + + } } diff -r a8255a831ade -r 797267843126 src/alice/topology/manager/keeparive/WaitingList.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/topology/manager/keeparive/WaitingList.java Tue Nov 26 15:33:29 2013 +0900 @@ -0,0 +1,37 @@ +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); + + } + } + + +}