[Flight] add failing test to demonstrate bug in ReadableStream implementation #23140
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.
This PR contributes a failing test related to the following issues:
renderToReadableStream
#22772react-dom/server.browser
#22889This test is fixed if we add back the "reentrancy hack" removed in this PR #22446
When a reader consumes a ReadableStream created by
renderToReadableStream
, it seems that callingcontroller.enqueue
synchronously callspull > startFlowing
.Sometimes, this leads to a stream being closed prematurely. This surfaces as an error (seen in this particular test) like:
Other times, this leads to the stream never being closed at all. This is because
request.pendingChunks
ends up as a negative number due torequest.pendingChunks--
being called too many times:Since
request.pendingChunks
never equals 0, the request is never closed, and the reader hangs.All of these issues are related to the competing nature of the ReadableStream enqueue/pull mechanism vs React's internal ping/retrySegment.
Note: This particular test is for Flight, but one could easily reproduce a similar failure for Fizz +
renderToReadableStream
.