Fix VirtualClusterRequestInvoker async path and TestableDateTimeProvider.DeadTime#195
Merged
Merged
Conversation
…der.DeadTime RequestAsync previously wrapped the sync Request in Task.FromResult, which meant PostData.StreamHandler's async writer was never invoked — leaving RequestBodyInBytes empty for callers using the async transport path. Now RequestAsync is truly async with its own HandleRulesAsync chain that calls InMemoryRequestInvoker.BuildResponseAsync (and thus PostData.WriteAsync). Also implement TestableDateTimeProvider.DeadTime with exponential backoff matching DefaultDateTimeProvider instead of throwing NotImplementedException, which crashed when content-type mismatches caused the transport to mark a node as dead. Co-authored-by: Cursor <cursoragent@cursor.com>
…sync path BuildResponseAsync was missing the final ?? BoundConfiguration.DefaultContentType fallback that BuildResponse (sync) had, causing null content-type on async responses when neither an explicit nor constructor content-type was provided. This led to content-type mismatch audit events that broke sync/async audit trail parity in virtual cluster tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
RequestAsync previously wrapped the sync Request in Task.FromResult, which
meant PostData.StreamHandler's async writer was never invoked — leaving
RequestBodyInBytes empty for callers using the async transport path.
Now RequestAsync is truly async with its own HandleRulesAsync chain that
calls InMemoryRequestInvoker.BuildResponseAsync (and thus PostData.WriteAsync).
Also implement TestableDateTimeProvider.DeadTime with exponential backoff
matching DefaultDateTimeProvider instead of throwing NotImplementedException,
which crashed when content-type mismatches caused the transport to mark a
node as dead.
Co-authored-by: Cursor cursoragent@cursor.com