Mercurial > hg > Database > Alice
comparison src/main/java/alice/topology/manager/keeparive/TaskExecuter.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | 388e7d4b0624 |
comparison
equal
deleted
inserted
replaced
344:9f97ec18f8c5 | 345:8f71c3e6f11d |
---|---|
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 { | |
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; | |
14 private long remainingTime = 0; | |
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 } | |
26 | |
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); | |
36 | |
37 if (skipFlag) { | |
38 skipFlag = false; | |
39 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime()); | |
40 remainingTime = 0; | |
41 } | |
42 | |
43 startTime = System.currentTimeMillis(); | |
44 System.out.println(nowTask.getSleepTime()+" "+nowTask.getType()); | |
45 if (nowTask.getSleepTime() != 0){ | |
46 sleepFlag = true; | |
47 try { | |
48 wait(nowTask.getSleepTime()); | |
49 } catch (InterruptedException e) { | |
50 e.printStackTrace(); | |
51 } | |
52 sleepFlag = false; | |
53 } | |
54 | |
55 if (!skipFlag){ | |
56 // ping or close | |
57 if (nowTask.getType() == TaskType.PING) { | |
58 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey()); | |
59 TaskInfo task = new TaskInfo(TaskType.CLOSE); | |
60 task.setInfo(nowTask.getManagerKey(), 10 * 1000); | |
61 ods.put("_TASKINFO", task); | |
62 new RespondPing(nowTask.getReturnKey()); | |
63 } else if (nowTask.getType() == TaskType.CLOSE) { | |
64 // no response from the Remote DataSegment. So close this connection. | |
65 System.out.println("SHOTDOWN"); | |
66 DataSegment.get(nowTask.getManagerKey()).close(); | |
67 } | |
68 } | |
69 nowTask = null; | |
70 startTime = 0; | |
71 } | |
72 setKey(); | |
73 } | |
74 | |
75 public synchronized void skip() { | |
76 if (sleepFlag){ | |
77 skipFlag = true; | |
78 if (startTime == 0){ | |
79 remainingTime = nowTask.getSleepTime(); | |
80 } else { | |
81 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); | |
82 } | |
83 nowTask = null; | |
84 notify(); | |
85 } | |
86 } | |
87 | |
88 public synchronized void ignore() { | |
89 if (sleepFlag){ | |
90 skipFlag = true; | |
91 remainingTime = 0; | |
92 nowTask = null; | |
93 notify(); | |
94 } | |
95 } | |
96 | |
97 public synchronized TaskInfo getNowTask() { | |
98 return nowTask; | |
99 } | |
100 | |
101 // only use in ListManagerTest | |
102 public synchronized void setNowTask(TaskInfo info) { | |
103 nowTask = info; | |
104 } | |
105 | |
106 public synchronized long getRemainingTime() { | |
107 if (sleepFlag) { | |
108 if (startTime !=0) { | |
109 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime); | |
110 } else { | |
111 return nowTask.getSleepTime(); | |
112 } | |
113 } else { | |
114 return remainingTime; | |
115 } | |
116 } | |
117 | |
118 public boolean compareNowTask(TaskInfo task) { | |
119 if (nowTask != null){ | |
120 if (nowTask.getType().equals(task.getType()) | |
121 && nowTask.getManagerKey().equals(task.getManagerKey())){ | |
122 return true; | |
123 } | |
124 } | |
125 return false; | |
126 } | |
127 | |
128 } |