annotate src/main/java/alice/topology/manager/keeparive/TaskExecuter.java @ 498:e5d2141af6c2 dispose

keep alive Scheduler has bug
author sugi
date Mon, 15 Dec 2014 19:16:20 +0900
parents 9a7dd7591ddc
children d3442b23e3df
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 {
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
9 private Receiver info = ids.create(CommandType.TAKE);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
10 private TaskInfo nowTask;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
11 private boolean sleepFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
12 private boolean skipFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
13 private long startTime = 0;
467
6e304a7a60e7 remove white space
sugi
parents: 419
diff changeset
14 private long remainingTime = 0;
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
15 private static TaskExecuter instance = new TaskExecuter();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
16
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
17 private TaskExecuter() {}
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
18 public static TaskExecuter getInstance() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
19 return instance;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
20 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
21
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
22 public void setKey() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
23 ids.init();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
24 info.setKey("_WAITINGLIST");
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
25 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
26
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
27 @Override
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
28 public synchronized void run() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
29 ListManager list = info.asClass(ListManager.class);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
30 if (list.getTaskList().size() == 0){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
31 remainingTime = 0;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
32 ods.update("_WAITINGLIST", list);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
33 } else {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
34 nowTask = list.getTaskList().poll();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
35 ods.update("_WAITINGLIST", list);
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
36
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
37 if (skipFlag) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
38 skipFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
39 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime());
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
40 remainingTime = 0;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
41 }
498
e5d2141af6c2 keep alive Scheduler has bug
sugi
parents: 489
diff changeset
42 list.show();
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
43 startTime = System.currentTimeMillis();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
44 if (nowTask.getSleepTime() != 0){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
45 sleepFlag = true;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
46 try {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
47 wait(nowTask.getSleepTime());
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
48 } catch (InterruptedException e) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
49 e.printStackTrace();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
50 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
51 sleepFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
52 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
53
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
54 if (!skipFlag){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
55 // ping or close
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
56 if (nowTask.getType() == TaskType.PING) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
57 ods.ping(nowTask.getManagerKey(), nowTask.getReturnKey());
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
58 TaskInfo task = new TaskInfo(TaskType.CLOSE);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
59 task.setInfo(nowTask.getManagerKey(), 10 * 1000);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
60 ods.put("_TASKINFO", task);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
61 new RespondPing(nowTask.getReturnKey());
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
62 } else if (nowTask.getType() == TaskType.CLOSE) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
63 // no response from the Remote DataSegment. So close this connection.
471
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
64 if (DataSegment.contains(nowTask.getManagerKey())) {
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
65 DataSegment.get(nowTask.getManagerKey()).shutdown();
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
66 System.out.println(nowTask.getManagerKey() +" IS SHOTDOWN");
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
67 } else {
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
68 System.out.println(nowTask.getManagerKey() +" IS ALREADY SHOTDOWN");
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 468
diff changeset
69 }
468
27079619f5fd change create task algotherm
sugi
parents: 467
diff changeset
70 } else if (nowTask.getType() == TaskType.CREATE) {
27079619f5fd change create task algotherm
sugi
parents: 467
diff changeset
71 new CreateTask();
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
72 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
73 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
74 nowTask = null;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
75 startTime = 0;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
76 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
77 setKey();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
78 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
79
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
80 public synchronized void skip() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
81 if (sleepFlag){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
82 skipFlag = true;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
83 if (startTime == 0){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
84 remainingTime = nowTask.getSleepTime();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
85 } else {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
86 remainingTime = nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
87 }
467
6e304a7a60e7 remove white space
sugi
parents: 419
diff changeset
88 nowTask = null;
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
89 notify();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
90 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
91 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
92
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
93 public synchronized void ignore() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
94 if (sleepFlag){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
95 skipFlag = true;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
96 remainingTime = 0;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
97 nowTask = null;
467
6e304a7a60e7 remove white space
sugi
parents: 419
diff changeset
98 notify();
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
99 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
100 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
101
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
102 public synchronized TaskInfo getNowTask() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
103 return nowTask;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
104 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
105
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
106 // only use in ListManagerTest
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
107 public synchronized void setNowTask(TaskInfo info) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
108 nowTask = info;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
109 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
110
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
111 public synchronized long getRemainingTime() {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
112 if (sleepFlag) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
113 if (startTime !=0) {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
114 return nowTask.getSleepTime() - (System.currentTimeMillis() - startTime);
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
115 } else {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
116 return nowTask.getSleepTime();
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
117 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
118 } else {
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
119 return remainingTime;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
120 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
121 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
122
498
e5d2141af6c2 keep alive Scheduler has bug
sugi
parents: 489
diff changeset
123 public synchronized boolean compareAndSkip(TaskInfo task) {
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
124 if (nowTask != null){
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
125 if (nowTask.getType().equals(task.getType())
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
126 && nowTask.getManagerKey().equals(task.getManagerKey())){
498
e5d2141af6c2 keep alive Scheduler has bug
sugi
parents: 489
diff changeset
127 skip();
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
128 return true;
467
6e304a7a60e7 remove white space
sugi
parents: 419
diff changeset
129 }
419
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
130 }
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
131 return false;
aefbe41fcf12 change tab to space
sugi
parents: 350
diff changeset
132 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
133
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
134 }