Updated Branches: refs/heads/trunk 625d0df9a -> e192cc384
AMBARI-4291. To handle misfired trigger, the scheduler should start after a fixed delay. (swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e192cc38 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e192cc38 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e192cc38 Branch: refs/heads/trunk Commit: e192cc3849ecc6b22550883808bdd4f969be0fc9 Parents: 625d0df Author: Siddharth Wagle <[email protected]> Authored: Tue Jan 14 12:51:56 2014 -0800 Committer: Siddharth Wagle <[email protected]> Committed: Tue Jan 14 12:56:59 2014 -0800 ---------------------------------------------------------------------- .../apache/ambari/server/configuration/Configuration.java | 10 ++++++++++ .../server/scheduler/AbstractLinearExecutionJob.java | 2 +- .../ambari/server/scheduler/ExecutionScheduleManager.java | 4 +++- .../ambari/server/scheduler/ExecutionScheduler.java | 2 +- .../ambari/server/scheduler/ExecutionSchedulerImpl.java | 4 ++-- .../ambari/server/scheduler/ExecutionSchedulerTest.java | 4 ++-- 6 files changed, 19 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index a1a25e0..6b2301d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -271,9 +271,13 @@ public class Configuration { "server.execution.scheduler.maxDbConnections"; public static final String EXECUTION_SCHEDULER_MISFIRE_TOLERATION = "server.execution.scheduler.misfire.toleration.minutes"; + public static final String EXECUTION_SCHEDULER_START_DELAY = + "server.execution.scheduler.start.delay.seconds"; + public static final String DEFAULT_SCHEDULER_THREAD_COUNT = "5"; public static final String DEFAULT_SCHEDULER_MAX_CONNECTIONS = "5"; public static final String DEFAULT_EXECUTION_SCHEDULER_MISFIRE_TOLERATION = "480"; + public static final String DEFAULT_SCHEDULER_START_DELAY_SECONDS = "120"; private static final Logger LOG = LoggerFactory.getLogger( Configuration.class); @@ -899,4 +903,10 @@ public class Configuration { DEFAULT_EXECUTION_SCHEDULER_MISFIRE_TOLERATION); return Long.parseLong(limit); } + + public Integer getExecutionSchedulerStartDelay() { + String delay = properties.getProperty(EXECUTION_SCHEDULER_START_DELAY, + DEFAULT_SCHEDULER_START_DELAY_SECONDS); + return Integer.parseInt(delay); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java index 5fdd77e..9203aac 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java @@ -97,7 +97,7 @@ public abstract class AbstractLinearExecutionJob implements ExecutionJob { return; } - int separationSeconds = jobDataMap.getIntValue((NEXT_EXECUTION_SEPARATION_SECONDS)); + int separationSeconds = jobDataMap.getIntValue(NEXT_EXECUTION_SEPARATION_SECONDS); // Create trigger for next job execution Trigger trigger = newTrigger() http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java index 7949952..98e7b4e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java @@ -125,8 +125,10 @@ public class ExecutionScheduleManager { public void start() { LOG.info("Starting scheduler"); try { - executionScheduler.startScheduler(); + executionScheduler.startScheduler(configuration + .getExecutionSchedulerStartDelay()); schedulerAvailable = true; + } catch (AmbariException e) { LOG.warn("Unable to start scheduler. No recurring tasks will be " + "scheduled."); http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduler.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduler.java index c51bd6b..6644e1b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduler.java @@ -32,7 +32,7 @@ public interface ExecutionScheduler { * Initialize and start the scheduler to accept jobs. * @throws AmbariException */ - public void startScheduler() throws AmbariException; + public void startScheduler(Integer delay) throws AmbariException; /** * Shutdown the scheduler threads and do not accept any more jobs. http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionSchedulerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionSchedulerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionSchedulerImpl.java index 353aaf0..7e1381d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionSchedulerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionSchedulerImpl.java @@ -148,7 +148,7 @@ public class ExecutionSchedulerImpl implements ExecutionScheduler { } @Override - public synchronized void startScheduler() throws AmbariException { + public synchronized void startScheduler(Integer delay) throws AmbariException { try { if (!isInitialized) { initializeScheduler(); @@ -161,7 +161,7 @@ public class ExecutionSchedulerImpl implements ExecutionScheduler { throw new AmbariException(msg); } try { - scheduler.start(); + scheduler.startDelayed(delay != null ? delay : 0); } catch (SchedulerException e) { LOG.error("Failed to start scheduler", e); throw new AmbariException(e.getMessage()); http://git-wip-us.apache.org/repos/asf/ambari/blob/e192cc38/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionSchedulerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionSchedulerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionSchedulerTest.java index ebf54ac..89c8d26 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionSchedulerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionSchedulerTest.java @@ -92,7 +92,7 @@ public class ExecutionSchedulerTest { Scheduler scheduler = createNiceMock(Scheduler.class); expect(factory.getScheduler()).andReturn(scheduler); - expectPrivate(scheduler, "start").once(); + expectPrivate(scheduler, "startDelayed", new Integer(180)).once(); expectNew(StdSchedulerFactory.class).andReturn(factory); expectPrivate(scheduler, "shutdown").once(); @@ -100,7 +100,7 @@ public class ExecutionSchedulerTest { ExecutionSchedulerImpl executionScheduler = new ExecutionSchedulerImpl(configuration); - executionScheduler.startScheduler(); + executionScheduler.startScheduler(180); executionScheduler.stopScheduler(); PowerMock.verify(factory, StdSchedulerFactory.class, scheduler);
