Search code examples
javaamazon-web-servicesregistrationamazon-swf

AWS SWF Flow does the activity start to close timeout include activity retries?


I'm trying to configure one of my SWF activities using the Flow framework for java and I can't find any documentation about whether the StartToClose timeout is only for a single activity attempt or for all of the retry attempts for that activity.

Here is the configuration for my activity:

@Activity(name = "WaitForExternalTaskToFinish", version = "1.0")
@ActivityRegistrationOptions(
        defaultTaskScheduleToStartTimeoutSeconds = 60,
        defaultTaskStartToCloseTimeoutSeconds = 60)
@ExponentialRetry(
        initialRetryIntervalSeconds = 60,
        maximumRetryIntervalSeconds = 300,
        retryExpirationSeconds = 7200,
        exceptionsToRetry = IllegalStateException.class)
boolean waitForExternalTaskToFinish(long externalTaskId);

I'm trying to get this activity that is expected to take a very short execution time (eg. 5 sec) but if the activity fails then keep retrying the activity to for 2 hours.

  • Will this configuration do what I want?
  • Do I need to change defaultTaskStartToCloseTimeoutSeconds to 7200?
  • If I need to change defaultTaskStartToCloseTimeoutSeconds to 7200, then how do I get the activity to fail if the execution of a single activity attempt is "too long" (eg. 100 sec)?

Solution

  • StartToClose timeout is for a single activity attempt. Exponential retry is not natively supported by SWF backend and is currently implemented as a decider logic. If you are curious here is the ExponentialRetry AspectJ aspect implementation.

    Answering your questions:

    1. Yes it will.
    2. No.