annotate 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
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
319
89dc953fd9e8 Chanage Class namae
one
parents: 318
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;
323
one
parents: 322
diff changeset
11 private boolean skipFlag = false;
one
parents: 322
diff changeset
12 private long startTime = 0;
one
parents: 322
diff changeset
13 private long remainingTime = 0;
319
89dc953fd9e8 Chanage Class namae
one
parents: 318
diff changeset
14 private static TaskExecuter instance = new TaskExecuter();
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
15
319
89dc953fd9e8 Chanage Class namae
one
parents: 318
diff changeset
16 private TaskExecuter(){}
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
17 public static TaskExecuter getInstance(){
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
18 return instance;
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
19 }
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
20
309
797267843126 Refactor
sugi
parents: 308
diff changeset
21 public void setKey(){
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
22 ids.init();
309
797267843126 Refactor
sugi
parents: 308
diff changeset
23 info.setKey("_WAITINGLIST");
797267843126 Refactor
sugi
parents: 308
diff changeset
24 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
25
309
797267843126 Refactor
sugi
parents: 308
diff changeset
26 @Override
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
27 public synchronized void run(){
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
28 ListManager list = info.asClass(ListManager.class);
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
29 if (list.getTaskList().size() == 0){
323
one
parents: 322
diff changeset
30 remainingTime = 0;
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
31 ods.update("_WAITINGLIST", list);
316
9e84deb9b1e0 Respond Worked
sugi
parents: 315
diff changeset
32 setKey();
314
f1f0638861ab ping responce receivable
sugi
parents: 312
diff changeset
33 return;
320
aafc88985822 Refactor
one
parents: 319
diff changeset
34 }
aafc88985822 Refactor
one
parents: 319
diff changeset
35 nowTask = list.getTaskList().poll();
aafc88985822 Refactor
one
parents: 319
diff changeset
36 ods.update("_WAITINGLIST", list);
323
one
parents: 322
diff changeset
37 if (skipFlag){
one
parents: 322
diff changeset
38 nowTask.setSleepTime(nowTask.getSleepTime() + remainingTime);
one
parents: 322
diff changeset
39 }
one
parents: 322
diff changeset
40 startTime = System.currentTimeMillis();
320
aafc88985822 Refactor
one
parents: 319
diff changeset
41 if (nowTask.getSleepTime()!=0){
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
42 try {
320
aafc88985822 Refactor
one
parents: 319
diff changeset
43 this.wait(nowTask.getSleepTime());
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
44 } catch (InterruptedException e){}
320
aafc88985822 Refactor
one
parents: 319
diff changeset
45 }
323
one
parents: 322
diff changeset
46 if (!skipFlag){
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
47 if (nowTask.getType() == TaskType.PING){
321
7de56e995f09 minor change
one
parents: 320
diff changeset
48 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
49 TaskInfo task = new TaskInfo(TaskType.CLOSE);
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
50 task.setInfo(nowTask.getManagerKey(), 60 * 1000);
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
51 ods.put("_TASKINFO", task);
321
7de56e995f09 minor change
one
parents: 320
diff changeset
52 new RespondPing(nowTask.getReturnKey());
7de56e995f09 minor change
one
parents: 320
diff changeset
53 } else {
323
one
parents: 322
diff changeset
54 // no response from the Remote DataSegment. So close this connection.
321
7de56e995f09 minor change
one
parents: 320
diff changeset
55 DataSegment.get(nowTask.getManagerKey()).close();
323
one
parents: 322
diff changeset
56 }
309
797267843126 Refactor
sugi
parents: 308
diff changeset
57 }
321
7de56e995f09 minor change
one
parents: 320
diff changeset
58 nowTask = null;
316
9e84deb9b1e0 Respond Worked
sugi
parents: 315
diff changeset
59 setKey();
309
797267843126 Refactor
sugi
parents: 308
diff changeset
60 }
323
one
parents: 322
diff changeset
61
one
parents: 322
diff changeset
62 public synchronized void skip(){
one
parents: 322
diff changeset
63 skipFlag = true;
one
parents: 322
diff changeset
64 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
one
parents: 322
diff changeset
65 nowTask = null;
303
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
66 notify();
309
797267843126 Refactor
sugi
parents: 308
diff changeset
67 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
68
322
4b5bf9cf1505 minor change
one
parents: 321
diff changeset
69 public TaskInfo getNowTask(){
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
70 return nowTask;
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
71 }
315
f9ec5bead150 come back response. but has bug
sugi
parents: 314
diff changeset
72
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
73 public long getTime(){
323
one
parents: 322
diff changeset
74 return startTime;
310
f1cd920ea913 recreate "PingScheduler" with CS and DS
sugi
parents: 309
diff changeset
75 }
323
one
parents: 322
diff changeset
76
one
parents: 322
diff changeset
77 public boolean compareNowTask(TaskInfo task){
one
parents: 322
diff changeset
78 if (nowTask != null){
one
parents: 322
diff changeset
79 if (nowTask.getType().equals(task.getType())
one
parents: 322
diff changeset
80 && nowTask.getManagerKey().equals(task.getManagerKey())){
one
parents: 322
diff changeset
81 return true;
one
parents: 322
diff changeset
82 }
one
parents: 322
diff changeset
83 }
one
parents: 322
diff changeset
84 return false;
one
parents: 322
diff changeset
85 }
303
6e0a909b4b12 add PingScheduler
sugi
parents:
diff changeset
86
323
one
parents: 322
diff changeset
87 }