This repository has been archived by the owner on Dec 13, 2023. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request type
./gradlew generateLock saveLock
to refresh dependencies)NOTE: Please remember to run
./gradlew spotlessApply
to fix any format violations. (Check.)Changes in this PR
Why:
We need idempotent forked tasks, meaning all tasks get executed, but any failures are still detected upon join.
Issue #3861
What:
Introduced the concept of Permissive tasks.
A Permissive task is similar to a Simple task. The difference is, it permits the other tasks to continue - in case a Permissive task failed.
Result is:
Testing done:
PermissiveTaskMapperTest added,
TestDeciderOutcomes.testPermissive() added,
WorkflowAndTaskConfigurationSpec "Test simple workflow which has a permissive task" and "Test simple workflow which has a permissive optional task added" that cover retry,
ForkJoinSpec "Test a simple workflow with fork join permissive failure flow" and "Test retrying a failed permissive fork join workflow" added.
In addition, performed e2e tests locally running a Conductor instance. Did build a docker image with the code changes made, started it locally, and started a SampleWorker to poll 3 tasks in parallel. Verified e2e scenarios of task_def_permissive, task_def_permissive_optional, task_def_simple.json, task_def_simple_optional.json, each joining on 6 forked tasks, then running simple task 7 after join.
Alternatives considered