Skip to content

Conversation

@dagnir
Copy link
Contributor

@dagnir dagnir commented Jan 10, 2026

Previously, signalig onNext() to the subscriber was done via recursion, pulling elements from an iterator over the current page returned by the service. However, this can quickly lead to a stackoverflow error since the stack will grow linearly with the size of the page.

This commit fixes this issue by using SdkPublisher's builtin flatMapIterable(), which uses a loop to signal onNext(), and also ensures that it does not call itself recursively.

fixes #6411

Motivation and Context

Modifications

Testing

Screenshots (if appropriate)

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)

Checklist

  • I have read the CONTRIBUTING document
  • Local run of mvn install succeeds
  • My code follows the code style of this project
  • My change requires a change to the Javadoc documentation
  • I have updated the Javadoc documentation accordingly
  • I have added tests to cover my changes
  • All new and existing tests passed
  • I have added a changelog entry. Adding a new entry must be accomplished by running the scripts/new-change script and following the instructions. Commit the new file created by the script in .changes/next-release with your changes.
  • My change is to implement 1.11 parity feature and I have updated LaunchChangelog

License

  • I confirm that this pull request can be released under the Apache 2 license

Previously, signalig onNext() to the subscriber was done via recursion,
pulling elements from an iterator over the current page returned by the
service. However, this can quickly lead to a stackoverflow error since
the stack will grow linearly with the size of the page.

This commit fixes this issue by using SdkPublisher's builtin
flatMapIterable(), which uses a loop to signal onNext(), and also
ensures that it does not call itself recursively.

fixes #6411
@dagnir dagnir marked this pull request as ready for review January 12, 2026 18:45
@dagnir dagnir requested a review from a team as a code owner January 12, 2026 18:45
public static final Function<Integer, Iterator<Integer>> EMPTY_ITERATOR = response -> new ArrayList<Integer>().listIterator();
@Mock
AsyncPageFetcher asyncPageFetcher;
PaginatedItemsPublisher<Integer, Integer> itemsPublisher;
Copy link
Contributor Author

@dagnir dagnir Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: this test is just testing features of SdkPublisher such as limit(), not PaginatedItemsPublisher itself, so just removed this class entirely

@dagnir dagnir enabled auto-merge January 12, 2026 21:21
@dagnir dagnir added the no-api-surface-area-change Indicate there is no API surface area change and thus API surface area review is not required label Jan 12, 2026
@sonarqubecloud
Copy link

@dagnir dagnir added this pull request to the merge queue Jan 12, 2026
Merged via the queue into master with commit 0e0d18f Jan 12, 2026
47 of 51 checks passed
@github-actions
Copy link

This pull request has been closed and the conversation has been locked. Comments on closed PRs are hard for our team to see. If you need more assistance, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jan 12, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

no-api-surface-area-change Indicate there is no API surface area change and thus API surface area review is not required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Hang (StackOverflow?) in ScanPublisher.items()

3 participants