changeset 310:f1cd920ea913

recreate "PingScheduler" with CS and DS
author sugi
date Tue, 26 Nov 2013 16:46:26 +0900
parents 797267843126
children 4b38039e4454
files src/alice/topology/manager/keeparive/CreateSchedule.java src/alice/topology/manager/keeparive/ListManager.java src/alice/topology/manager/keeparive/PingScheduler.java src/alice/topology/manager/keeparive/TaskInfo.java src/alice/topology/manager/keeparive/WaitingList.java
diffstat 5 files changed, 132 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- /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<TaskInfo> 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();
+	}
+}
--- /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<TaskInfo> list = new LinkedList<TaskInfo>();
+	
+	public LinkedList<TaskInfo> 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);
+			
+		}
+	}
+	
+	
+}
--- 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<TaskInfo> 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;
+	}
 }
 
--- /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;
+	}
+}
--- 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<TaskInfo> list = new LinkedList<TaskInfo>();
-	
-	public LinkedList<TaskInfo> 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);
-			
-		}
-	}
-	
-	
-}