Netflix/conductor

[FEATURE]: Idempotent task execution within fork.

dimiturPavlovski opened this issue · 4 comments

Describe the Feature Request

Looking to have the capability to ensure idempotent parallel execution of tasks within a fork. It should be an alternative to the default fail-fast approach where, if a task fails within a fork, the other tasks get cancelled. The cancelled state causes problems on our side as it is a not deterministic state and the cancellation logic creates race conditions where other tasks within the same fork might get executed or might not.
download

Describe Preferred Solution

Describe Alternatives

We have a customer facing feature, that allows customers to define tasks as being optional or not. So for achieving idempotent execution of tasks within a fork we cannot leverage optional as it is reserved. Some tasks in the fork may be optional, or may not be optional. If not optional, we would like those to not interrupt the other tasks prior the join. Upon join, if any non-optional failed, we need to fail the join.

@dimiturPavlovski in the case above, in the case of the JOIN is set as failed because one task failed. Should the retry of the fork execute all of the tasks or only the one that failed?

In the current version of conductor when a task in a fork fails, only failed and cancelled tasks get retried. Which will make sense in the future request too. https://github.com/Netflix/conductor/blob/main/test-harness/src/test/groovy/com/netflix/conductor/test/integration/ForkJoinSpec.groovy#L254