# HG changeset patch # User sugi # Date 1418638580 -32400 # Node ID e5d2141af6c2057e3d819eb843d05fab5ecd422c # Parent 5adb0f530e3d9cbc3c4d90f7fffbf7f0473ea1f3 keep alive Scheduler has bug diff -r 5adb0f530e3d -r e5d2141af6c2 src/main/java/alice/topology/manager/keeparive/CreateTask.java --- 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 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); + } } diff -r 5adb0f530e3d -r e5d2141af6c2 src/main/java/alice/topology/manager/keeparive/RemoveTask.java --- 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); } diff -r 5adb0f530e3d -r e5d2141af6c2 src/main/java/alice/topology/manager/keeparive/RespondPing.java --- 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(); } -// } + } } } diff -r 5adb0f530e3d -r e5d2141af6c2 src/main/java/alice/topology/manager/keeparive/TaskExecuter.java --- 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; } } diff -r 5adb0f530e3d -r e5d2141af6c2 src/main/java/alice/topology/node/ConfigurationFinish.java --- 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();