comparison src/alice/topology/manager/keeparive/PingScheduler.java @ 36:1dc3c76e6b34

bug fixed
author sugi
date Mon, 11 Nov 2013 19:32:00 +0900
parents 9638020264cd
children
comparison
equal deleted inserted replaced
35:9638020264cd 36:1dc3c76e6b34
8 8
9 public class PingScheduler extends CodeSegment{ 9 public class PingScheduler extends CodeSegment{
10 private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); 10 private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>();
11 private HashMap<String, Integer> map = new HashMap<String, Integer>(); 11 private HashMap<String, Integer> map = new HashMap<String, Integer>();
12 private long INTERVAL = 60 * 1000; 12 private long INTERVAL = 60 * 1000;
13 13
14 public boolean updateFlag = false; 14 public boolean updateFlag = false;
15 private boolean postponeFlag = false; 15 private boolean interruptFlag = false;
16 16
17 public long time = 0; 17 public long time = 0;
18 public int taskNum = 0; 18 public int taskNum = 0;
19 public TaskInfo nowTask; 19 public TaskInfo nowTask;
20 private long totalTime = 0; 20 private long totalTime = 0;
21 private long postponeTime = 0; 21 private long postponeTime = 0;
22 22
23 public long getTotalTime(){ 23 public long getTotalTime(){
24 return totalTime; 24 return totalTime;
25 } 25 }
26 26
27 public List<TaskInfo> getTaskList(){ 27 public List<TaskInfo> getTaskList(){
28 return list; 28 return list;
29 } 29 }
30 30
31 public synchronized void postpone(String name){ 31 public synchronized void postpone(String name){
32 long elapsedTime = System.currentTimeMillis() - time; 32 long elapsedTime = System.currentTimeMillis() - time;
33 totalTime += elapsedTime; 33 totalTime += elapsedTime;
34 postponeTime = nowTask.getTime() - elapsedTime; 34 postponeTime = nowTask.getTime() - elapsedTime;
35 if (name.equals(nowTask.getName())){ 35 if (name.equals(nowTask.getName())){
36 TaskInfo nextTask = list.get(0); 36 TaskInfo nextTask = list.get(0);
37 nextTask.setTime(postponeTime + nextTask.getTime()); 37 nextTask.setTime(postponeTime + nextTask.getTime());
38 nowTask.setTime(INTERVAL); 38 nowTask.setTime(INTERVAL);
39 addTask(nowTask); 39 addTask(nowTask);
40 40
41 } else { 41 } else {
42 int cnt = 0;
42 nowTask.setTime(postponeTime); 43 nowTask.setTime(postponeTime);
43 list.add(0, nowTask); 44 list.add(cnt, nowTask);
44 45 for (TaskInfo info : list){
45 for (int cnt = 0 ;cnt < list.size(); cnt++){ 46 if (name.equals(info.getName())){
46 TaskInfo task = list.get(cnt); 47 if (info != list.getLast()){
47 if (name.equals(task.getName())){ 48 TaskInfo nextInfo = list.get(cnt+1);
48 if (cnt+1 < list.size()){ 49 nextInfo.setTime(nextInfo.getTime() + info.getTime());
49 TaskInfo tasknext = list.get(cnt+1);
50 tasknext.setTime(task.getTime());
51 } 50 }
52 list.remove(task); 51 list.remove(info);
53 task.setTime(INTERVAL); 52 info.setTime(INTERVAL);
54 addTask(task); 53 addTask(info);
55 break; 54 break;
56 } 55 }
56 cnt++;
57 } 57 }
58 } 58 }
59 postponeFlag = true; 59 interruptFlag = true;
60 notify(); 60 notify();
61 } 61 }
62 62
63 63
64 public synchronized void addTask(TaskInfo newInfo){ 64 public synchronized void addTask(TaskInfo newInfo){
65 if (map.containsKey(newInfo.getName())){ 65 if (map.containsKey(newInfo.getName())){
66 newInfo.setTaskNum(map.get(newInfo.getName())); 66 newInfo.setTaskNum(map.get(newInfo.getName()));
67 } else { 67 } else {
68 taskNum +=10; 68 taskNum +=10;
84 info.setTime(info.getTime() - newInfo.getTime()); 84 info.setTime(info.getTime() - newInfo.getTime());
85 break; 85 break;
86 } 86 }
87 cnt++; 87 cnt++;
88 } 88 }
89
90 list.add(cnt, newInfo); 89 list.add(cnt, newInfo);
91 } 90 }
92 updateFlag = true; 91 updateFlag = true;
93 } 92 }
94 93
96 public synchronized void run() { 95 public synchronized void run() {
97 try { 96 try {
98 while(true){ 97 while(true){
99 if(list.size()== 0) 98 if(list.size()== 0)
100 System.exit(0); 99 System.exit(0);
100 for (TaskInfo info : list){
101 System.out.println(info.getName()+" "+info.getTime());
102 }
101 nowTask = list.poll(); 103 nowTask = list.poll();
102 System.out.print("taskNum "+nowTask.getTaskNum()); 104 System.out.print("taskNum "+nowTask.getTaskNum());
103 System.out.println(" taskTime "+nowTask.getTime()); 105 System.out.println(" taskTime "+nowTask.getTime());
104 time = System.currentTimeMillis(); 106 time = System.currentTimeMillis();
105 if (nowTask.getTime()!=0) 107 if (nowTask.getTime()!=0)
106 this.wait(nowTask.getTime()); 108 this.wait(nowTask.getTime());
107 if (postponeFlag){ 109 if (interruptFlag){
108 postponeFlag = false; 110 interruptFlag = false;
109 } else { 111 } else {
110 totalTime +=nowTask.getTime(); 112 totalTime +=nowTask.getTime();
111 nowTask.setTime(INTERVAL); 113 nowTask.setTime(INTERVAL);
112 addTask(nowTask); 114 addTask(nowTask);
113 } 115 }
114 116
115 } 117 }
116 } catch (InterruptedException e) { 118 } catch (InterruptedException e) {
117 } 119 }
118 } 120 }
119 } 121 }