annotate src/main/java/alice/topology/manager/keeparive/TaskExecuter.java @ 599:3284428f525e dispose

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