Fix/issue 10273 cosmos pagination for cross-partition queries - #10276
Fix/issue 10273 cosmos pagination for cross-partition queries#10276vladrai wants to merge 2 commits into
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
|
@vladrai please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement ( “Agreement” ) is agreed to by the party signing below ( “You” ), 1. Definitions. “Code” means the computer software code, whether in human-readable or machine-executable form, “Project” means any of the projects owned or managed by .NET Foundation and offered under a license “Submit” is the act of uploading, submitting, transmitting, or distributing code or other content to any “Submission” means the Code and any other copyrightable material Submitted by You, including any 2. Your Submission. You must agree to the terms of this Agreement before making a Submission to any 3. Originality of Work. You represent that each of Your Submissions is entirely Your 4. Your Employer. References to “employer” in this Agreement include Your employer or anyone else 5. Licenses. a. Copyright License. You grant .NET Foundation, and those who receive the Submission directly b. Patent License. You grant .NET Foundation, and those who receive the Submission directly or c. Other Rights Reserved. Each party reserves all rights not expressly granted in this Agreement. 6. Representations and Warranties. You represent that You are legally entitled to grant the above 7. Notice to .NET Foundation. You agree to notify .NET Foundation in writing of any facts or 8. Information about Submissions. You agree that contributions to Projects and information about 9. Governing Law/Jurisdiction. This Agreement is governed by the laws of the State of Washington, and 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the parties, and .NET Foundation dedicates this Contribution License Agreement to the public domain according to the Creative Commons CC0 1. |
|
@dotnet-policy-service agree company="Microsoft" |
For cross-partition Cosmos queries, empty pages are valid while HasMoreResults is true. Drain FeedIterator until HasMoreResults is false in CosmosReminderTable ReadRows methods. Fixes dotnet#10273
b1e2f15 to
9dacfd9
Compare
This pull request improves the reliability and maintainability of Cosmos DB reminder table operations by introducing a robust helper for draining paginated query results and refactoring the codebase to use it. The most important changes are summarized below:
Core reliability fix:
DrainAsyncextension method inFeedIteratorExtensions.csthat fully drains aFeedIterator<T>, ensuring all items are collected across all pages, even if empty pages appear before the end. This addresses a subtle bug where iteration could previously terminate early if an empty page was encountered while more results remained.Refactoring to use the new helper:
CosmosReminderTable.csmethods (ReadRows(GrainId),ReadRows(uint, uint), andTestOnlyClearTable) to use the newDrainAsynchelper instead of duplicating page-draining logic. This reduces code duplication and ensures robust iteration in all cases. [1] [2] [3] [4]Testing and validation:
FeedIteratorExtensionsTests.csto verify thatDrainAsynccorrectly handles various pagination scenarios, including empty pages in the middle, at the start, or at the end of the sequence. These tests use a custom in-memoryFeedIteratorto simulate edge cases that can occur in production.Microsoft Reviewers: Open in CodeFlow