annotate src/alice/topology/manager/keeparive/TaskExecuter.java @ 332:6b82dae5d537

refactor
author sugi
date Sat, 05 Apr 2014 18:10:16 +0900
parents 8266d7cfba7e
children cf9072608fe4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
303
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
1 package alice.topology.manager.keeparive;
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
2
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
3 import alice.codesegment.CodeSegment;
309
797267843126 Refactor
sugi
parents: 308
diff changeset
4 import alice.datasegment.CommandType;
321
7de56e995f09 minor change
one
parents: 320
diff changeset
5 import alice.datasegment.DataSegment;
309
797267843126 Refactor
sugi
parents: 308
diff changeset
6 import alice.datasegment.Receiver;
303
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
7
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
8 public class TaskExecuter extends CodeSegment {
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
9 private Receiver info = ids.create(CommandType.TAKE);
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
10 private TaskInfo nowTask;
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
11 private boolean sleepFlag = false;
323
one
parents: 322
diff changeset
12 private boolean skipFlag = false;
one
parents: 322
diff changeset
13 private long startTime = 0;
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
14 private long remainingTime = 0;
319
89dc953fd9e8 Chanage Class namae
one
parents: 318
diff changeset
15 private static TaskExecuter instance = new TaskExecuter();
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
16
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
17 private TaskExecuter() {}
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
18 public static TaskExecuter getInstance() {
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
19 return instance;
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
20 }
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
21
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
22 public void setKey() {
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
23 ids.init();
309
797267843126 Refactor
sugi
parents: 308
diff changeset
24 info.setKey("_WAITINGLIST");
797267843126 Refactor
sugi
parents: 308
diff changeset
25 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
26
309
797267843126 Refactor
sugi
parents: 308
diff changeset
27 @Override
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
28 public synchronized void run() {
330
d35ff0f588e8 keep alive may work... but bug exist.
sugi
parents: 329
diff changeset
29 ListManager list = info.asClass(ListManager.class);
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
30 if (list.getTaskList().size() == 0){
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
31 if (remainingTime !=0){
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
32 TaskInfo info = new TaskInfo(TaskType.SKIP);
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
33 info.setSleepTime(remainingTime);
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
34 remainingTime = 0;
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
35 list.addTask(info);
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
36 }
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
37 ods.update("_WAITINGLIST", list);
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
38 } else {
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
39 nowTask = list.getTaskList().poll();
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
40 ods.update("_WAITINGLIST", list);
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
41
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
42 if (skipFlag) {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
43 skipFlag = false;
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
44 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime());
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
45 remainingTime = 0;
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
46 }
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
47
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
48 startTime = System.currentTimeMillis();
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
49 System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
50 if (nowTask.getSleepTime() != 0){
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
51 sleepFlag = true;
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
52 try {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
53 wait(nowTask.getSleepTime());
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
54 } catch (InterruptedException e) {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
55 e.printStackTrace();
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
56 }
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
57 sleepFlag = false;
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
58 }
330
d35ff0f588e8 keep alive may work... but bug exist.
sugi
parents: 329
diff changeset
59
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
60 if (!skipFlag){
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
61 // ping or close
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
62 if (nowTask.getType() == TaskType.PING) {
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
63 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
64 TaskInfo task = new TaskInfo(TaskType.CLOSE);
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
65 task.setInfo(nowTask.getManagerKey(), 10 * 1000);
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
66 ods.put("_TASKINFO", task);
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
67 new RespondPing(nowTask.getReturnKey());
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
68 } else if (nowTask.getType() == TaskType.CLOSE) {
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
69 // no response from the Remote DataSegment. So close this connection.
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
70 DataSegment.get(nowTask.getManagerKey()).close();
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
71 }
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
72 }
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
73 nowTask = null;
330
d35ff0f588e8 keep alive may work... but bug exist.
sugi
parents: 329
diff changeset
74 startTime = 0;
323
one
parents: 322
diff changeset
75 }
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
76 setKey();
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
77 }
330
d35ff0f588e8 keep alive may work... but bug exist.
sugi
parents: 329
diff changeset
78
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
79 public synchronized void skip() {
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
80 if (sleepFlag){
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
81 skipFlag = true;
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
82 if (startTime == 0){
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
83 remainingTime = nowTask.getSleepTime();
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
84 } else {
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
85 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
86 }
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
87 nowTask = null;
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
88 notify();
309
797267843126 Refactor
sugi
parents: 308
diff changeset
89 }
797267843126 Refactor
sugi
parents: 308
diff changeset
90 }
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
91
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
92 public synchronized void ignore() {
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
93 if (sleepFlag){
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
94 skipFlag = true;
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
95 remainingTime = 0;
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
96 nowTask = null;
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
97 notify();
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
98 }
309
797267843126 Refactor
sugi
parents: 308
diff changeset
99 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
100
330
d35ff0f588e8 keep alive may work... but bug exist.
sugi
parents: 329
diff changeset
101 public synchronized TaskInfo getNowTask() {
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
102 return nowTask;
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
103 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
104
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
105 // only use in ListManagerTest
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
106 public synchronized void setNowTask(TaskInfo info) {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
107 nowTask = info;
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
108 }
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
109
332
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
110 public synchronized long getRemainingTime() {
6b82dae5d537 refactor
sugi
parents: 331
diff changeset
111 if (sleepFlag) {
329
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
112 if (startTime !=0) {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
113 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
114 } else {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
115 return nowTask.getSleepTime();
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
116 }
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
117 } else {
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
118 return remainingTime;
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
119 }
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
120 }
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
121
35b4e24e3e02 setNowTask method need synchronized. may be...
sugi
parents: 326
diff changeset
122 public boolean compareNowTask(TaskInfo task) {
323
one
parents: 322
diff changeset
123 if (nowTask != null){
one
parents: 322
diff changeset
124 if (nowTask.getType().equals(task.getType())
one
parents: 322
diff changeset
125 && nowTask.getManagerKey().equals(task.getManagerKey())){
one
parents: 322
diff changeset
126 return true;
one
parents: 322
diff changeset
127 }
one
parents: 322
diff changeset
128 }
one
parents: 322
diff changeset
129 return false;
one
parents: 322
diff changeset
130 }
303
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
131
323
one
parents: 322
diff changeset
132 }