303
|
1 package alice.topology.manager.keeparive;
|
|
2
|
|
3 import alice.codesegment.CodeSegment;
|
309
|
4 import alice.datasegment.CommandType;
|
321
|
5 import alice.datasegment.DataSegment;
|
309
|
6 import alice.datasegment.Receiver;
|
303
|
7
|
319
|
8 public class TaskExecuter extends CodeSegment{
|
310
|
9 private Receiver info = ids.create(CommandType.TAKE);
|
|
10 private TaskInfo nowTask;
|
323
|
11 private boolean skipFlag = false;
|
|
12 private long startTime = 0;
|
|
13 private long remainingTime = 0;
|
319
|
14 private static TaskExecuter instance = new TaskExecuter();
|
310
|
15
|
319
|
16 private TaskExecuter(){}
|
322
|
17 public static TaskExecuter getInstance(){
|
315
|
18 return instance;
|
|
19 }
|
|
20
|
309
|
21 public void setKey(){
|
314
|
22 ids.init();
|
309
|
23 info.setKey("_WAITINGLIST");
|
|
24 }
|
315
|
25
|
309
|
26 @Override
|
322
|
27 public synchronized void run(){
|
324
|
28 ListManager list = info.asClass(ListManager.class);
|
314
|
29 if (list.getTaskList().size() == 0){
|
323
|
30 remainingTime = 0;
|
314
|
31 ods.update("_WAITINGLIST", list);
|
316
|
32 setKey();
|
314
|
33 return;
|
320
|
34 }
|
|
35 nowTask = list.getTaskList().poll();
|
|
36 ods.update("_WAITINGLIST", list);
|
323
|
37 if (skipFlag){
|
324
|
38 skipFlag = false;
|
323
|
39 }
|
|
40 startTime = System.currentTimeMillis();
|
324
|
41 System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
|
320
|
42 if (nowTask.getSleepTime()!=0){
|
315
|
43 try {
|
320
|
44 this.wait(nowTask.getSleepTime());
|
322
|
45 } catch (InterruptedException e){}
|
320
|
46 }
|
323
|
47 if (!skipFlag){
|
322
|
48 if (nowTask.getType() == TaskType.PING){
|
321
|
49 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
|
322
|
50 TaskInfo task = new TaskInfo(TaskType.CLOSE);
|
|
51 task.setInfo(nowTask.getManagerKey(), 60 * 1000);
|
|
52 ods.put("_TASKINFO", task);
|
321
|
53 new RespondPing(nowTask.getReturnKey());
|
|
54 } else {
|
323
|
55 // no response from the Remote DataSegment. So close this connection.
|
321
|
56 DataSegment.get(nowTask.getManagerKey()).close();
|
323
|
57 }
|
309
|
58 }
|
321
|
59 nowTask = null;
|
316
|
60 setKey();
|
309
|
61 }
|
323
|
62
|
|
63 public synchronized void skip(){
|
|
64 skipFlag = true;
|
|
65 nowTask = null;
|
303
|
66 notify();
|
309
|
67 }
|
315
|
68
|
322
|
69 public TaskInfo getNowTask(){
|
310
|
70 return nowTask;
|
|
71 }
|
315
|
72
|
325
|
73 public long getStartTime(){
|
323
|
74 return startTime;
|
310
|
75 }
|
323
|
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 }
|
303
|
86
|
323
|
87 } |