comparison src/alice/topology/manager/keeparive/TaskExecuter.java @ 323:d746c4486287

work
author one
date Mon, 23 Dec 2013 17:13:16 +0900
parents 4b5bf9cf1505
children 806cc010a5bd
comparison
equal deleted inserted replaced
322:4b5bf9cf1505 323:d746c4486287
6 import alice.datasegment.Receiver; 6 import alice.datasegment.Receiver;
7 7
8 public class TaskExecuter extends CodeSegment{ 8 public class TaskExecuter extends CodeSegment{
9 private Receiver info = ids.create(CommandType.TAKE); 9 private Receiver info = ids.create(CommandType.TAKE);
10 private TaskInfo nowTask; 10 private TaskInfo nowTask;
11 private boolean interruptFlag = false; 11 private boolean skipFlag = false;
12 private long time = 0; 12 private long startTime = 0;
13 private long remainingTime = 0;
13 private static TaskExecuter instance = new TaskExecuter(); 14 private static TaskExecuter instance = new TaskExecuter();
14 15
15 private TaskExecuter(){} 16 private TaskExecuter(){}
16 public static TaskExecuter getInstance(){ 17 public static TaskExecuter getInstance(){
17 return instance; 18 return instance;
24 25
25 @Override 26 @Override
26 public synchronized void run(){ 27 public synchronized void run(){
27 ListManager list = info.asClass(ListManager.class); 28 ListManager list = info.asClass(ListManager.class);
28 if (list.getTaskList().size() == 0){ 29 if (list.getTaskList().size() == 0){
30 remainingTime = 0;
29 ods.update("_WAITINGLIST", list); 31 ods.update("_WAITINGLIST", list);
30 setKey(); 32 setKey();
31 return; 33 return;
32 } 34 }
33 nowTask = list.getTaskList().poll(); 35 nowTask = list.getTaskList().poll();
34 ods.update("_WAITINGLIST", list); 36 ods.update("_WAITINGLIST", list);
35 time = System.currentTimeMillis(); 37 if (skipFlag){
38 nowTask.setSleepTime(nowTask.getSleepTime() + remainingTime);
39 }
40 startTime = System.currentTimeMillis();
36 if (nowTask.getSleepTime()!=0){ 41 if (nowTask.getSleepTime()!=0){
37 try { 42 try {
38 this.wait(nowTask.getSleepTime()); 43 this.wait(nowTask.getSleepTime());
39 } catch (InterruptedException e){} 44 } catch (InterruptedException e){}
40 } 45 }
41 if (interruptFlag){ 46 if (!skipFlag){
42 interruptFlag = false;
43 } else {
44 if (nowTask.getType() == TaskType.PING){ 47 if (nowTask.getType() == TaskType.PING){
45 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); 48 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
46 TaskInfo task = new TaskInfo(TaskType.CLOSE); 49 TaskInfo task = new TaskInfo(TaskType.CLOSE);
47 task.setInfo(nowTask.getManagerKey(), 60 * 1000); 50 task.setInfo(nowTask.getManagerKey(), 60 * 1000);
48 ods.put("_TASKINFO", task); 51 ods.put("_TASKINFO", task);
49 new RespondPing(nowTask.getReturnKey()); 52 new RespondPing(nowTask.getReturnKey());
50 } else { 53 } else {
54 // no response from the Remote DataSegment. So close this connection.
51 DataSegment.get(nowTask.getManagerKey()).close(); 55 DataSegment.get(nowTask.getManagerKey()).close();
52 } 56 }
53
54 } 57 }
55 nowTask = null; 58 nowTask = null;
56 setKey(); 59 setKey();
57 } 60 }
58 public synchronized void interrupt(){ 61
59 interruptFlag = true; 62 public synchronized void skip(){
63 skipFlag = true;
64 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
65 nowTask = null;
60 notify(); 66 notify();
61 } 67 }
62 68
63 public TaskInfo getNowTask(){ 69 public TaskInfo getNowTask(){
64 return nowTask; 70 return nowTask;
65 } 71 }
66 72
67 public long getTime(){ 73 public long getTime(){
68 return time; 74 return startTime;
69 } 75 }
76
77 public boolean compareNowTask(TaskInfo task){
78 if (nowTask != null){
79 if (nowTask.getType().equals(task.getType())
80 && nowTask.getManagerKey().equals(task.getManagerKey())){
81 return true;
82 }
83 }
84 return false;
85 }
86
70 } 87 }
71