Keep orchestrator actions sorted, to avoid out-of-order events in OrchestrationRuntimeState #680
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.
When debugging a failing test in Connor's integration tests Azure/azure-functions-durable-extension#1979 today I noticed an oddity: on completed OrchestrationWorkItems, any events sent by the orchestration appeared in reverse order in the runtime state. I tracked this down to TaskOrchestrationDispatcher, which returns the orchestrator actions as follows:
but this is actually nondeterministic (and happened to be in reverse order for me) because the map is just a plain dictionary:
I am a bit surprised that this has not been noticed before and has not caused more issues. The particular test that detected this was an entity test, which was immune to this problem while I used the AzureStorage backend (thanks to the MessageSorter) but as soon as I used Netherite the problem became apparent.
The fix is trivial, use a
SortedDictionary
instead.