annotate src/main/java/alice/topology/manager/keeparive/TaskExecuter.java @ 350:388e7d4b0624

heart beat may finish.
author sugi
date Tue, 22 Apr 2014 04:21:22 +0900
parents 8f71c3e6f11d
children aefbe41fcf12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.topology.manager.keeparive;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
3 import alice.codesegment.CodeSegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4 import alice.datasegment.CommandType;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import alice.datasegment.DataSegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
6 import alice.datasegment.Receiver;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
8 public class TaskExecuter extends CodeSegment {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
9 private Receiver info = ids.create(CommandType.TAKE);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
10 private TaskInfo nowTask;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
11 private boolean sleepFlag = false;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12 private boolean skipFlag = false;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 private long startTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14 private long remainingTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 private static TaskExecuter instance = new TaskExecuter();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
16
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
17 private TaskExecuter() {}
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
18 public static TaskExecuter getInstance() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
19 return instance;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
20 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
21
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
22 public void setKey() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
23 ids.init();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
24 info.setKey("_WAITINGLIST");
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
25 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
26
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
27 @Override
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
28 public synchronized void run() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
29 ListManager list = info.asClass(ListManager.class);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
30 if (list.getTaskList().size() == 0){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
31 remainingTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
32 ods.update("_WAITINGLIST", list);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
33 } else {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
34 nowTask = list.getTaskList().poll();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
35 ods.update("_WAITINGLIST", list);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
36
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
37 if (skipFlag) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
38 skipFlag = false;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
39 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
40 remainingTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
41 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
42
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
43 startTime = System.currentTimeMillis();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
44 System.out.println(nowTask.getSleepTime()+" "+nowTask.getType());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
45 if (nowTask.getSleepTime() != 0){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
46 sleepFlag = true;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
47 try {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
48 wait(nowTask.getSleepTime());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
49 } catch (InterruptedException e) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
50 e.printStackTrace();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
51 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
52 sleepFlag = false;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
53 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
54
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
55 if (!skipFlag){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
56 // ping or close
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
57 if (nowTask.getType() == TaskType.PING) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
58 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
59 TaskInfo task = new TaskInfo(TaskType.CLOSE);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
60 task.setInfo(nowTask.getManagerKey(), 10 * 1000);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
61 ods.put("_TASKINFO", task);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
62 new RespondPing(nowTask.getReturnKey());
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
63 } else if (nowTask.getType() == TaskType.CLOSE) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
64 // no response from the Remote DataSegment. So close this connection.
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
65 System.out.println("SHOTDOWN");
350
388e7d4b0624 heart beat may finish.
sugi
parents: 345
diff changeset
66 DataSegment.get(nowTask.getManagerKey()).shutdown();
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
67 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
68 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
69 nowTask = null;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
70 startTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
71 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
72 setKey();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
73 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
74
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
75 public synchronized void skip() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
76 if (sleepFlag){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
77 skipFlag = true;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
78 if (startTime == 0){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
79 remainingTime = nowTask.getSleepTime();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
80 } else {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
81 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
82 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
83 nowTask = null;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
84 notify();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
85 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
86 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
87
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
88 public synchronized void ignore() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
89 if (sleepFlag){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
90 skipFlag = true;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
91 remainingTime = 0;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
92 nowTask = null;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
93 notify();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
94 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
95 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
96
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
97 public synchronized TaskInfo getNowTask() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
98 return nowTask;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
99 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
100
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
101 // only use in ListManagerTest
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
102 public synchronized void setNowTask(TaskInfo info) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
103 nowTask = info;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
104 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
105
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
106 public synchronized long getRemainingTime() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
107 if (sleepFlag) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
108 if (startTime !=0) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
109 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
110 } else {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
111 return nowTask.getSleepTime();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
112 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
113 } else {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
114 return remainingTime;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
115 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
116 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
117
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
118 public boolean compareNowTask(TaskInfo task) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
119 if (nowTask != null){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
120 if (nowTask.getType().equals(task.getType())
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
121 && nowTask.getManagerKey().equals(task.getManagerKey())){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
122 return true;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
123 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
124 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
125 return false;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
126 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
127
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
128 }