From 95a6ab073bf17320f90b578bc53ebab7448fe3fc Mon Sep 17 00:00:00 2001 From: Liang Mei Date: Thu, 18 Apr 2019 17:35:02 -0700 Subject: [PATCH] Fix cron schedule merge issue in child workflow option --- .../workflow/ChildWorkflowOptions.java | 2 +- .../cadence/client/WorkflowOptionsTest.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/uber/cadence/workflow/ChildWorkflowOptions.java b/src/main/java/com/uber/cadence/workflow/ChildWorkflowOptions.java index 42654b263..538dd6cbc 100644 --- a/src/main/java/com/uber/cadence/workflow/ChildWorkflowOptions.java +++ b/src/main/java/com/uber/cadence/workflow/ChildWorkflowOptions.java @@ -52,7 +52,7 @@ public static ChildWorkflowOptions merge( a.executionStartToCloseTimeoutSeconds(), o.getExecutionStartToCloseTimeout())) .setTaskList(OptionsUtils.merge(a.taskList(), o.getTaskList(), String.class)) .setRetryOptions(RetryOptions.merge(r, o.getRetryOptions())) - .setCronSchedule(cronAnnotation) + .setCronSchedule(OptionsUtils.merge(cronAnnotation, o.getCronSchedule(), String.class)) .validateAndBuildWithDefaults(); } diff --git a/src/test/java/com/uber/cadence/client/WorkflowOptionsTest.java b/src/test/java/com/uber/cadence/client/WorkflowOptionsTest.java index 1ce73221c..692b140f2 100644 --- a/src/test/java/com/uber/cadence/client/WorkflowOptionsTest.java +++ b/src/test/java/com/uber/cadence/client/WorkflowOptionsTest.java @@ -21,6 +21,7 @@ import com.uber.cadence.common.CronSchedule; import com.uber.cadence.common.MethodRetry; import com.uber.cadence.common.RetryOptions; +import com.uber.cadence.workflow.ChildWorkflowOptions; import com.uber.cadence.workflow.WorkflowMethod; import java.lang.reflect.Method; import java.time.Duration; @@ -116,6 +117,37 @@ public void testBothPresent() throws NoSuchMethodException { Assert.assertEquals("* 1 * * *", merged.getCronSchedule()); } + @Test + public void testChildWorkflowOptionMerge() throws NoSuchMethodException { + RetryOptions retryOptions = + new RetryOptions.Builder() + .setDoNotRetry(IllegalArgumentException.class) + .setMaximumAttempts(11111) + .setBackoffCoefficient(1.55) + .setMaximumInterval(Duration.ofDays(3)) + .setExpiration(Duration.ofDays(365)) + .setInitialInterval(Duration.ofMinutes(12)) + .build(); + + ChildWorkflowOptions o = + new ChildWorkflowOptions.Builder() + .setTaskList("foo") + .setExecutionStartToCloseTimeout(Duration.ofSeconds(321)) + .setTaskStartToCloseTimeout(Duration.ofSeconds(13)) + .setWorkflowIdReusePolicy(WorkflowIdReusePolicy.RejectDuplicate) + .setWorkflowId("bar") + .setRetryOptions(retryOptions) + .setCronSchedule("* 1 * * *") + .build(); + Method method = WorkflowOptionsTest.class.getMethod("defaultWorkflowOptions"); + WorkflowMethod a = method.getAnnotation(WorkflowMethod.class); + MethodRetry r = method.getAnnotation(MethodRetry.class); + CronSchedule c = method.getAnnotation(CronSchedule.class); + ChildWorkflowOptions merged = ChildWorkflowOptions.merge(a, r, c, o); + Assert.assertEquals(retryOptions, merged.getRetryOptions()); + Assert.assertEquals("* 1 * * *", merged.getCronSchedule()); + } + @WorkflowMethod @CronSchedule("asdf * * * *") public void invalidCronScheduleAnnotation() {}