Fix BulkUpdateDetection Race Condition #728
Merged
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.
There are 2 parts to a call to BulkUpdateDetection: the original request, and an async portion that does the bulk of the work. Both end with a log statement but during testing it isn't always clear which part of the call will log first. I've added a WaitSync for the request portion so we can control the timing.
InitMock doesn't have to wait on the WaitSync if the parameters of that test case won't kick off the async portion BUT any test case that does make it to the async portion should wait inside a DoAndReturn of the first possible mocked request (BuildBulkIndexer).
In plain english, once the main request is done it marks the nonAsyncWG as Done while the async portion of the request is waiting to build the bulk indexer. This ensures the async portion begins after the original request ends.