changeset 498:e5d2141af6c2 dispose

keep alive Scheduler has bug
author sugi
date Mon, 15 Dec 2014 19:16:20 +0900
parents 5adb0f530e3d
children d3442b23e3df
files src/main/java/alice/topology/manager/keeparive/CreateTask.java src/main/java/alice/topology/manager/keeparive/RemoveTask.java src/main/java/alice/topology/manager/keeparive/RespondPing.java src/main/java/alice/topology/manager/keeparive/TaskExecuter.java src/main/java/alice/topology/node/ConfigurationFinish.java
diffstat 5 files changed, 32 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/topology/manager/keeparive/CreateTask.java	Mon Dec 15 16:41:08 2014 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/CreateTask.java	Mon Dec 15 19:16:20 2014 +0900
@@ -17,22 +17,17 @@
         @SuppressWarnings("unchecked")
         List<String> list = info.asClass(List.class);
 
-        if (list.size()==0) {
-            TaskInfo task = new TaskInfo(TaskType.CREATE);
-            task.setSleepTime(3000);
+        int i = 5;
+        for (String manager : list){
+            TaskInfo task = new TaskInfo(TaskType.PING);
+            task.setInfo(manager, "_FORM_"+manager, i * 1000);
             ods.put("_TASKINFO", task);
-        } else {
-            for (String manager : list){
-                int i = 5;
-                TaskInfo task = new TaskInfo(TaskType.PING);
-                task.setInfo(manager, "_FORM_"+manager, i * 1000);
-                ods.put("_TASKINFO", task);
-                i +=5;
-            }
+            i +=5;
+        }
 
-            TaskInfo task = new TaskInfo(TaskType.CREATE);
-            task.setSleepTime(10 * 1000);
-            ods.put("_TASKINFO", task);
-        }
+        TaskInfo task = new TaskInfo(TaskType.CREATE);
+        task.setSleepTime((i + 15) * 1000);
+        ods.put("_TASKINFO", task);
+
     }
 }
--- a/src/main/java/alice/topology/manager/keeparive/RemoveTask.java	Mon Dec 15 16:41:08 2014 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/RemoveTask.java	Mon Dec 15 19:16:20 2014 +0900
@@ -18,15 +18,19 @@
         ListManager list = info1.asClass(ListManager.class); // explicit cast
         TaskInfo task = info2.asClass(TaskInfo.class);
         TaskExecuter exec = TaskExecuter.getInstance();
-        if (exec.compareNowTask(task)){
-            // case: remove task is state countdown.
-            exec.skip();
-        } else {
+        if (!exec.compareAndSkip(task)){
             // case: remove task is still in the waiting queue.
             boolean removeFlag = list.deleteTask(task);
             if (!removeFlag){
+                System.out.println("falied RemoveTask "+task.getManagerKey());
                 ods.put("_REMOVETASK", task);
+            } else {
+                System.out.println("success RemoveTask "+task.getManagerKey());
+                //list.show();
             }
+        } else {
+            System.out.println("success RemoveTask "+task.getManagerKey());
+            //list.show();
         }
         ods.update("_WAITINGLIST", list);
     }
--- a/src/main/java/alice/topology/manager/keeparive/RespondPing.java	Mon Dec 15 16:41:08 2014 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/RespondPing.java	Mon Dec 15 19:16:20 2014 +0900
@@ -10,31 +10,25 @@
 
     public RespondPing(String key) {
         respond.setKey(key);
+        this.setPriority(10);
     }
 
     @Override
     public void run() {
-        RespondData d = respond.asClass(RespondData.class);
-        System.out.print("ping from "+d.from);
-        System.out.println(" Recieved time "+(d.time - pingedTime));
-//        if (d.time - pingedTime > 60 * 1000){
-//            // need check, this connection is alive. may be close
-//            if (DataSegment.contains(d.from))
-//                DataSegment.get(d.from).shutdown();
-//        } else {
-            // if nowTask close d.from's socket cancel.
-            // if not remove close task in the Queue.
-            TaskExecuter exec = TaskExecuter.getInstance();
+        TaskExecuter exec = TaskExecuter.getInstance();
+        synchronized (exec){
+            RespondData d = respond.asClass(RespondData.class);
+            System.out.print("ping from "+d.from);
+            System.out.println(" Recieved time "+(d.time - pingedTime));
+
             TaskInfo task = new TaskInfo(TaskType.CLOSE);
             task.setInfo(d.from, null, 0);
-            if (exec.compareNowTask(task)){
-                // case: remove task is state countdown.
-                exec.skip(); // countdown
-            } else {
+            if (!exec.compareAndSkip(task)){
+                System.out.println("falied RespondPing");
                 // case: remove task is still in the waiting queue.
                 ods.put("_REMOVETASK",task);
                 new RemoveTask();
             }
-//        }
+        }
     }
 }
--- a/src/main/java/alice/topology/manager/keeparive/TaskExecuter.java	Mon Dec 15 16:41:08 2014 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/TaskExecuter.java	Mon Dec 15 19:16:20 2014 +0900
@@ -39,7 +39,7 @@
                 nowTask.setSleepTime(remainingTime + nowTask.getSleepTime());
                 remainingTime = 0;
             }
-
+            list.show();
             startTime = System.currentTimeMillis();
             if (nowTask.getSleepTime() != 0){
                 sleepFlag = true;
@@ -120,10 +120,11 @@
         }
     }
 
-    public synchronized boolean compareNowTask(TaskInfo task) {
+    public synchronized boolean compareAndSkip(TaskInfo task) {
         if (nowTask != null){
             if (nowTask.getType().equals(task.getType())
                     && nowTask.getManagerKey().equals(task.getManagerKey())){
+                skip();
                 return true;
             }
         }
--- a/src/main/java/alice/topology/node/ConfigurationFinish.java	Mon Dec 15 16:41:08 2014 +0900
+++ b/src/main/java/alice/topology/node/ConfigurationFinish.java	Mon Dec 15 19:16:20 2014 +0900
@@ -26,7 +26,7 @@
             Start cs = new Start(startCS);
             cs.done.setKey("manager", "start");
 
-            //new StartKeepAlive().execute();
+            new StartKeepAlive().execute();
             new ReceiveCloseMessage(CommandType.PEEK);
             DisconnectEventManager.getInstance().register(DeleteConnection.class);
             DisconnectEventManager.getInstance().setKey();