Mercurial > hg > Database > Alice
annotate src/main/java/alice/topology/manager/keeparive/TaskExecuter.java @ 498:e5d2141af6c2 dispose
keep alive Scheduler has bug
author | sugi |
---|---|
date | Mon, 15 Dec 2014 19:16:20 +0900 |
parents | 9a7dd7591ddc |
children | d3442b23e3df |
rev | line source |
---|---|
345 | 1 package alice.topology.manager.keeparive; |
2 | |
3 import alice.codesegment.CodeSegment; | |
4 import alice.datasegment.CommandType; | |
5 import alice.datasegment.DataSegment; | |
6 import alice.datasegment.Receiver; | |
7 | |
8 public class TaskExecuter extends CodeSegment { | |
419 | 9 private Receiver info = ids.create(CommandType.TAKE); |
10 private TaskInfo nowTask; | |
11 private boolean sleepFlag = false; | |
12 private boolean skipFlag = false; | |
13 private long startTime = 0; | |
467 | 14 private long remainingTime = 0; |
419 | 15 private static TaskExecuter instance = new TaskExecuter(); |
16 | |
17 private TaskExecuter() {} | |
18 public static TaskExecuter getInstance() { | |
19 return instance; | |
20 } | |
21 | |
22 public void setKey() { | |
23 ids.init(); | |
24 info.setKey("_WAITINGLIST"); | |
25 } | |
345 | 26 |
419 | 27 @Override |
28 public synchronized void run() { | |
29 ListManager list = info.asClass(ListManager.class); | |
30 if (list.getTaskList().size() == 0){ | |
31 remainingTime = 0; | |
32 ods.update("_WAITINGLIST", list); | |
33 } else { | |
34 nowTask = list.getTaskList().poll(); | |
35 ods.update("_WAITINGLIST", list); | |
345 | 36 |
419 | 37 if (skipFlag) { |
38 skipFlag = false; | |
39 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime()); | |
40 remainingTime = 0; | |
41 } | |
498 | 42 list.show(); |
419 | 43 startTime = System.currentTimeMillis(); |
44 if (nowTask.getSleepTime() != 0){ | |
45 sleepFlag = true; | |
46 try { | |
47 wait(nowTask.getSleepTime()); | |
48 } catch (InterruptedException e) { | |
49 e.printStackTrace(); | |
50 } | |
51 sleepFlag = false; | |
52 } | |
345 | 53 |
419 | 54 if (!skipFlag){ |
55 // ping or close | |
56 if (nowTask.getType() == TaskType.PING) { | |
57 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); | |
58 TaskInfo task = new TaskInfo(TaskType.CLOSE); | |
59 task.setInfo(nowTask.getManagerKey(), 10 * 1000); | |
60 ods.put("_TASKINFO", task); | |
61 new RespondPing(nowTask.getReturnKey()); | |
62 } else if (nowTask.getType() == TaskType.CLOSE) { | |
63 // no response from the Remote DataSegment. So close this connection. | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
64 if (DataSegment.contains(nowTask.getManagerKey())) { |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
65 DataSegment.get(nowTask.getManagerKey()).shutdown(); |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
66 System.out.println(nowTask.getManagerKey() +" IS SHOTDOWN"); |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
67 } else { |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
68 System.out.println(nowTask.getManagerKey() +" IS ALREADY SHOTDOWN"); |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
468
diff
changeset
|
69 } |
468 | 70 } else if (nowTask.getType() == TaskType.CREATE) { |
71 new CreateTask(); | |
419 | 72 } |
73 } | |
74 nowTask = null; | |
75 startTime = 0; | |
76 } | |
77 setKey(); | |
78 } | |
79 | |
80 public synchronized void skip() { | |
81 if (sleepFlag){ | |
82 skipFlag = true; | |
83 if (startTime == 0){ | |
84 remainingTime = nowTask.getSleepTime(); | |
85 } else { | |
86 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); | |
87 } | |
467 | 88 nowTask = null; |
419 | 89 notify(); |
90 } | |
91 } | |
345 | 92 |
419 | 93 public synchronized void ignore() { |
94 if (sleepFlag){ | |
95 skipFlag = true; | |
96 remainingTime = 0; | |
97 nowTask = null; | |
467 | 98 notify(); |
419 | 99 } |
100 } | |
345 | 101 |
419 | 102 public synchronized TaskInfo getNowTask() { |
103 return nowTask; | |
104 } | |
345 | 105 |
419 | 106 // only use in ListManagerTest |
107 public synchronized void setNowTask(TaskInfo info) { | |
108 nowTask = info; | |
109 } | |
345 | 110 |
419 | 111 public synchronized long getRemainingTime() { |
112 if (sleepFlag) { | |
113 if (startTime !=0) { | |
114 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); | |
115 } else { | |
116 return nowTask.getSleepTime(); | |
117 } | |
118 } else { | |
119 return remainingTime; | |
120 } | |
121 } | |
345 | 122 |
498 | 123 public synchronized boolean compareAndSkip(TaskInfo task) { |
419 | 124 if (nowTask != null){ |
125 if (nowTask.getType().equals(task.getType()) | |
126 && nowTask.getManagerKey().equals(task.getManagerKey())){ | |
498 | 127 skip(); |
419 | 128 return true; |
467 | 129 } |
419 | 130 } |
131 return false; | |
132 } | |
345 | 133 |
134 } |