Fix PagedIterable stream parallel processing issue #46291
Draft
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.
Problem
PagedIterable.stream().parallel()
was not actually executing in parallel, causing performance issues when processing large datasets. Users reported that even when calling.parallel()
on the stream, all operations were still executed sequentially on a single thread.Root Cause
The issue was in
ContinuablePagedIterable.stream()
which created streams using the defaultIterable.spliterator()
. This spliterator cannot effectively support parallel processing for paged data because:Solution
Implemented a
ParallelCapablePagedStream
wrapper that:.parallel()
is called, it eagerly collects all paged data and creates a proper parallel streamChanges
ParallelCapablePagedStream
- Stream wrapper that detects parallel vs sequential usageContinuablePagedIterable.stream()
- Now returns the parallel-capable wrapperVerification
Before fix:
After fix:
Breaking Changes
None. This is a purely additive fix that maintains full backward compatibility.
Fixes #40768
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.