瀏覽代碼

AMBARI-4282. Execption in log for Rolling Restart Command. (swagle)

Siddharth Wagle 11 年之前
父節點
當前提交
144755b2bb

+ 7 - 4
ambari-server/src/main/java/org/apache/ambari/server/scheduler/AbstractLinearExecutionJob.java

@@ -88,15 +88,18 @@ public abstract class AbstractLinearExecutionJob implements ExecutionJob {
     LOG.debug("Finished linear job: " + jobKey);
     LOG.debug("Finished linear job: " + jobKey);
 
 
     JobDataMap jobDataMap = context.getMergedJobDataMap();
     JobDataMap jobDataMap = context.getMergedJobDataMap();
+
     String nextJobName = jobDataMap.getString(NEXT_EXECUTION_JOB_NAME_KEY);
     String nextJobName = jobDataMap.getString(NEXT_EXECUTION_JOB_NAME_KEY);
     String nextJobGroup = jobDataMap.getString(NEXT_EXECUTION_JOB_GROUP_KEY);
     String nextJobGroup = jobDataMap.getString(NEXT_EXECUTION_JOB_GROUP_KEY);
-    Integer separationSeconds = jobDataMap.getIntegerFromString(
-      (NEXT_EXECUTION_SEPARATION_SECONDS));
 
 
-    if (separationSeconds == null) {
-      separationSeconds = 0;
+    if (nextJobName == null || nextJobName.isEmpty()) {
+      LOG.debug("End of linear job chain. Returning with success.");
+      return;
     }
     }
 
 
+    Integer separationSeconds = jobDataMap.getIntegerFromString(
+      (NEXT_EXECUTION_SEPARATION_SECONDS));
+
     // Create trigger for next job execution
     // Create trigger for next job execution
     Trigger trigger = newTrigger()
     Trigger trigger = newTrigger()
       .forJob(nextJobName, nextJobGroup)
       .forJob(nextJobName, nextJobGroup)

+ 5 - 0
ambari-server/src/main/java/org/apache/ambari/server/scheduler/ExecutionScheduleManager.java

@@ -288,6 +288,9 @@ public class ExecutionScheduleManager {
           String jobName = getJobName(requestExecution.getId(),
           String jobName = getJobName(requestExecution.getId(),
             batchRequest.getOrderId());
             batchRequest.getOrderId());
 
 
+          Integer separationSeconds = requestExecution.getBatch()
+            .getBatchSettings().getBatchSeparationInSeconds();
+
           // Create Job and store properties to get next batch request details
           // Create Job and store properties to get next batch request details
           jobDetail = newJob(BatchRequestJob.class)
           jobDetail = newJob(BatchRequestJob.class)
             .withIdentity(jobName, ExecutionJob.LINEAR_EXECUTION_JOB_GROUP)
             .withIdentity(jobName, ExecutionJob.LINEAR_EXECUTION_JOB_GROUP)
@@ -300,6 +303,8 @@ public class ExecutionScheduleManager {
               batchRequest.getOrderId())
               batchRequest.getOrderId())
             .usingJobData(BatchRequestJob.BATCH_REQUEST_CLUSTER_NAME_KEY,
             .usingJobData(BatchRequestJob.BATCH_REQUEST_CLUSTER_NAME_KEY,
               requestExecution.getClusterName())
               requestExecution.getClusterName())
+            .usingJobData(BatchRequestJob.NEXT_EXECUTION_SEPARATION_SECONDS,
+              separationSeconds != null ? separationSeconds : 0)
             .storeDurably()
             .storeDurably()
             .build();
             .build();
 
 

+ 3 - 0
ambari-server/src/test/java/org/apache/ambari/server/scheduler/ExecutionScheduleManagerTest.java

@@ -304,6 +304,9 @@ public class ExecutionScheduleManagerTest {
     Assert.assertEquals(1, triggers.size());
     Assert.assertEquals(1, triggers.size());
     assertThat(triggers.get(0), instanceOf(SimpleTrigger.class));
     assertThat(triggers.get(0), instanceOf(SimpleTrigger.class));
 
 
+    Assert.assertNull(jobDetail2.getJobDataMap().getString(
+      ExecutionJob.NEXT_EXECUTION_JOB_NAME_KEY));
+
     int waitCount = 0;
     int waitCount = 0;
     while (scheduler.getCurrentlyExecutingJobs().size() != 0 && waitCount < 10) {
     while (scheduler.getCurrentlyExecutingJobs().size() != 0 && waitCount < 10) {
       Thread.sleep(100);
       Thread.sleep(100);