fix(testing-sdk): fix race condition where concurrent updates can cause duplicate invocations #362
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.
Issue #, if available:
Description of changes:
In some cases, if two updates come at the exact same time, the testing library creates a duplicate invocation. This is due to the invocation tracker only registering the invocation AFTER the
startInvocationAPI completes, so it doesn't know there's an active invocation until after the API call completes. If two updates that start an invocation come too quickly, the second one may come before the first one registers the invocation, so it will re-invoke concurrently.The fix is to register the invocation BEFORE the
startInvocationAPI is called to ensure it happens synchronously.To help find these bugs, we could also have the testing library to stop allowing the same execution to use different checkpoint tokens and be more properly idempotent. This can come later, as things like this can only really happen if the testing library or language SDK have bugs.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.