[CLIENT-5298] Address {Query,Scan}.results() and Scan.foreach() potentially missing records during a paginated query disruption - #1208
Open
juliannguyen4 wants to merge 129 commits into
Open
juliannguyen4 wants to merge 129 commits into
juliannguyen4 wants to merge 129 commits into
Conversation
…uery-and-scan-foreach-and-results
…uery-and-scan-foreach-and-results
…d-error-verbosity-level-for-expression-tracing # Conflicts: # aerospike-client-c
…erver master branch.
…nder the OpNotApplicable section.
…d-error-verbosity-level-for-expression-tracing
…message batch result attribute
…details_in_py_batch_record code path.
…-query-and-scan-foreach-and-results
…d-error-verbosity-level-for-expression-tracing
…o be a no-op instead of also raising an exception. Currently waiting on product management to decide whether raising an exception is expected behavior
…it easier to compare side-by-side for param order consistency
juliannguyen4
changed the base branch from
stage
to
CLIENT-5338-string-list-join-op-and-expr
August 28, 2026 21:49
Base automatically changed from
CLIENT-5338-string-list-join-op-and-expr
to
stage
September 1, 2026 18:34
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
Collaborator
Author
|
QE reported that this issue still happens for Scan and Query results() |
…forming the query. If it fails, then ensure it fails atomically by restoring the partitions status before the C client query API is called. This makes sure that no records collected during a failed query are dropped silently
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
…query-and-scan-foreach-and-results-possibly-missing-records-during-paginated-query-disruption
…partitions status and that partitions status is an empty dictionary and passed again to the query policy
… status arg fails and restores the original status of NULL instead of the partitions status arg
…tions status is made and the latter is accidentally reset..
…l especially during a paginated query. reuse a one-time heap allocated buffer that belongs to the query instance.
…_status_backup_buffer_capacity belong to the query instance as private members
…tatus_backup_buffer. We never change the number of partitions so this condition might be confusing
…sn't render the indentation so it's harder to review
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.
Extra changes
fix: bug where an empty partitions status dictionary returned by
{Query,Scan}.get_partitions_status()causes a ClientError exception.TODO
query.results()
query.results(). It is only one byte since it is a boolean type.scan.results()
See note in
query.results().scan.foreach()
Implementation details
Deliberately kept the scan/query foreground implementations separate instead of merging them together, because scan foreground queries exclusively accept a nodename parameter
Notes (out of scope)