fixing https://issues.apache.org/jira/browse/STRATOS-545
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/d8c7e56e Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/d8c7e56e Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/d8c7e56e Branch: refs/heads/master Commit: d8c7e56ed49b16aab9818439f4f346532762263a Parents: 0fbc64a Author: Nirmal Fernando <[email protected]> Authored: Mon Mar 31 11:52:54 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Mon Mar 31 11:52:54 2014 +0530 ---------------------------------------------------------------------- .../org.apache.stratos.cloud.controller/pom.xml | 6 +- .../TopologySynchronizerTaskScheduler.java | 91 ++++++++------------ 2 files changed, 42 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d8c7e56e/components/org.apache.stratos.cloud.controller/pom.xml ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/pom.xml b/components/org.apache.stratos.cloud.controller/pom.xml index 9b89a35..582c02a 100644 --- a/components/org.apache.stratos.cloud.controller/pom.xml +++ b/components/org.apache.stratos.cloud.controller/pom.xml @@ -53,10 +53,11 @@ org.apache.stratos.cloud.controller.interfaces.*, org.apache.stratos.cloud.controller.publisher.*, org.apache.stratos.cloud.controller.topic.*, + org.apache.stratos.cloud.controller.topology.*, org.apache.stratos.cloud.controller.iaases.*, org.apache.stratos.cloud.controller.pojo.*, - org.apache.stratos.cloud.controller.deployers.*, - org.apache.stratos.cloud.controller.exception.*, + org.apache.stratos.cloud.controller.deployers.*, + org.apache.stratos.cloud.controller.exception.*, </Export-Package> <Private-Package> !org.apache.stratos.cloud.controller.interfaces.*, @@ -66,6 +67,7 @@ !org.apache.stratos.cloud.controller.pojo.*, !org.apache.stratos.cloud.controller.deployers.*, !org.apache.stratos.cloud.controller.exception.*, + !org.apache.stratos.cloud.controller.topology.*, org.apache.stratos.cloud.controller.*, </Private-Package> <Import-Package> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/d8c7e56e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/TopologySynchronizerTaskScheduler.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/TopologySynchronizerTaskScheduler.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/TopologySynchronizerTaskScheduler.java index 7141279..398dc1f 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/TopologySynchronizerTaskScheduler.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/TopologySynchronizerTaskScheduler.java @@ -19,9 +19,16 @@ package org.apache.stratos.cloud.controller.publisher; +import java.util.HashMap; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; import org.apache.stratos.cloud.controller.topology.TopologySynchronizerTask; +import org.apache.stratos.cloud.controller.util.CloudControllerConstants; +import org.wso2.carbon.ntask.common.TaskException; +import org.wso2.carbon.ntask.core.TaskInfo; +import org.wso2.carbon.ntask.core.TaskManager; import org.wso2.carbon.ntask.core.service.TaskService; /** @@ -32,66 +39,44 @@ public class TopologySynchronizerTaskScheduler { private static final Log log = LogFactory.getLog(TopologySynchronizerTaskScheduler.class); - private static final String TOPOLOGY_SYNC_TASK_TYPE = "TOPOLOGY_SYNC_TASK_TYPE"; - private static final String TOPOLOGY_SYNC_TASK_NAME = "TOPOLOGY_SYNC_TASK"; - private static final String DEFAULT_CRON = "1 * * * * ? *"; + private static final FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance(); public static void schedule(TaskService taskService) { - // TODO: Replace this with task scheduler - Thread thread = new Thread(new TaskRunnable()); - thread.start(); - } + TaskManager taskManager = null; + try { - private static class TaskRunnable implements Runnable { - @Override - public void run() { - while (true) { + if (!taskService.getRegisteredTaskTypes().contains(CloudControllerConstants.TOPOLOGY_SYNC_TASK_TYPE)) { + // Register task type + taskService.registerTaskType(CloudControllerConstants.TOPOLOGY_SYNC_TASK_TYPE); + + // Register task + taskManager = taskService.getTaskManager(CloudControllerConstants.TOPOLOGY_SYNC_TASK_TYPE); + String cronProp = dataHolder.getTopologyConfig().getProperty(CloudControllerConstants.CRON_PROPERTY); + String cron = cronProp != null ? cronProp :CloudControllerConstants.TOPOLOGY_SYNC_CRON ; + TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo(cron); + TaskInfo taskInfo = new TaskInfo(CloudControllerConstants.TOPOLOGY_SYNC_TASK_NAME, + TopologySynchronizerTask.class.getName(), + new HashMap<String, String>(), triggerInfo); + taskManager.registerTask(taskInfo); + if(log.isDebugEnabled()) { + log.debug(String.format("Topology synchronization task scheduled: %s", CloudControllerConstants.TOPOLOGY_SYNC_TASK_NAME)); + } + } + + } catch (Exception e) { + if (taskManager != null) { try { - log.debug("Running topology synchronizer task"); - TopologySynchronizerTask task = new TopologySynchronizerTask(); - task.execute(); - try { - Thread.sleep(60 * 1000); - } catch (InterruptedException e) { + taskManager.deleteTask(CloudControllerConstants.TOPOLOGY_SYNC_TASK_NAME); + } catch (TaskException te) { + if (log.isErrorEnabled()) { + log.error(te); } - } catch (Exception e) { - log.error(e); } } + + String msg = String.format("Could not schedule topology synchronization task: %s", CloudControllerConstants.TOPOLOGY_SYNC_TASK_NAME); + log.error(msg, e); + throw new RuntimeException(msg, e); } } - -// public static void schedule(TaskService taskService) { -// TaskManager taskManager = null; -// try { -// -// if (!taskService.getRegisteredTaskTypes().contains(TOPOLOGY_SYNC_TASK_TYPE)) { -// // Register task type -// taskService.registerTaskType(TOPOLOGY_SYNC_TASK_TYPE); -// -// // Register task -// taskManager = taskService.getTaskManager(TOPOLOGY_SYNC_TASK_TYPE); -// TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo(DEFAULT_CRON); -// TaskInfo taskInfo = new TaskInfo(TOPOLOGY_SYNC_TASK_NAME, -// TopologySynchronizerTask.class.getName(), -// new HashMap<String, String>(), triggerInfo); -// taskManager.registerTask(taskInfo); -// if(log.isDebugEnabled()) { -// log.debug(String.format("Topology synchronization task scheduled: %s", TOPOLOGY_SYNC_TASK_NAME)); -// } -// } -// -// } catch (Exception e) { -// if (taskManager != null) { -// try { -// taskManager.deleteTask(TOPOLOGY_SYNC_TASK_NAME); -// } catch (TaskException te) { -// if (log.isErrorEnabled()) { -// log.error(te); -// } -// } -// } -// throw new RuntimeException(String.format("Could not schedule topology synchronization task: %s", TOPOLOGY_SYNC_TASK_NAME), e); -// } -// } }
