Prevent already scheduled tasks from being added to opentasks list #457
+47
−0
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.
Due to the limitations of the out-of-process replay protocol used in the Python SDK, the SDK needs to jump through some hoops when trying creating composite tasks (WhenAll/WhenAny) out of sub-tasks that were already scheduled.
For example, consider the following orchestrator:
In our out-of-process replay protocol, we have to return a list of all actions taken in the replay.
Assuming that the "hello tokyo activity" completes first:* a naive way to represent the final replay of the above orchestrator in this protocol, would be as follows:
However, it is assumed that each action in the actions array corresponds to a new task, and above we're scheduling the "Hello Seattle" activity twice, which isn't right. Instead, we need to be clever and exclude the "Hello Seattle" activity from the 2nd WhenAny task, resulting in the following actions array:
This "fix" isn't perfect, but it's the best we can do given today's protocol. This fix was recently implemented but not correctly, we forgot to also avoid re-registering the "Hello Seattle" activity in the "open tasks" list of the "TaskOrchestrationExecutor" if we know it's been alreayd scheduled. This PR does just that.