Преглед на файлове

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);
 
     JobDataMap jobDataMap = context.getMergedJobDataMap();
+
     String nextJobName = jobDataMap.getString(NEXT_EXECUTION_JOB_NAME_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
     Trigger trigger = newTrigger()
       .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(),
             batchRequest.getOrderId());
 
+          Integer separationSeconds = requestExecution.getBatch()
+            .getBatchSettings().getBatchSeparationInSeconds();
+
           // Create Job and store properties to get next batch request details
           jobDetail = newJob(BatchRequestJob.class)
             .withIdentity(jobName, ExecutionJob.LINEAR_EXECUTION_JOB_GROUP)
@@ -300,6 +303,8 @@ public class ExecutionScheduleManager {
               batchRequest.getOrderId())
             .usingJobData(BatchRequestJob.BATCH_REQUEST_CLUSTER_NAME_KEY,
               requestExecution.getClusterName())
+            .usingJobData(BatchRequestJob.NEXT_EXECUTION_SEPARATION_SECONDS,
+              separationSeconds != null ? separationSeconds : 0)
             .storeDurably()
             .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());
     assertThat(triggers.get(0), instanceOf(SimpleTrigger.class));
 
+    Assert.assertNull(jobDetail2.getJobDataMap().getString(
+      ExecutionJob.NEXT_EXECUTION_JOB_NAME_KEY));
+
     int waitCount = 0;
     while (scheduler.getCurrentlyExecutingJobs().size() != 0 && waitCount < 10) {
       Thread.sleep(100);