Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

meta request: support for should_continue cancellation callback #467

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

grrtrr
Copy link
Contributor

@grrtrr grrtrr commented Dec 2, 2024

This restores an updated version of #238.

Rationale

Add a boolean continue_callback, which polls a request-cancellation flag set by the user. This matches the use-case of the ContinueRequestHandler / ContinueRequest / ShouldContinue boolean functions used by aws-sdk-cpp.

Passive polling is preferred over active cancellation, since the latter would require to store a reference to the s3 meta request. The polling function is evaluated at the following points during the lifetime of the meta request:

  1. Request preparation (aws_s3_meta_request_prepare_request).
  2. Request update (the .update handler invoked via aws_s3_meta_request_update).
  3. Http stream completion (.on_complete handler invoking aws_s3_meta_request_send_request_finish_default).
  4. Writing download data (aws_s3_meta_request_stream_response_body_synced).

If a continue_callback is provided and if it returns false at any of these 4 evaluation times, the meta request completes with the error_code AWS_ERROR_S3_CANCELED.

By using a boolean flag in the body of the function, the polling overhead can be kept minimal.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

grrtrr and others added 6 commits December 6, 2022 09:39
Add a boolean `continue_callback`, which polls a request-cancellation flag set by the user.
This matches the use-case of the `ContinueRequestHandler` / `ContinueRequest` / `ShouldContinue` boolean
functions used by `aws-sdk-cpp`.

Passive polling is preferred over active cancellation, since the latter would require to store a reference
to the s3 meta request. The polling function is evaluated at the following points during the lifetime of the
meta request:
1. _Request preparation_ (`aws_s3_meta_request_prepare_request`).
2. _Request update_ (the `.update` handler invoked via `aws_s3_meta_request_update`).
3. _Http stream completion_ (`.on_complete` handler invoking `aws_s3_meta_request_send_request_finish_default`).
4. _Writing download data_ (`aws_s3_meta_request_stream_response_body_synced`).

If a `continue_callback` is provided and if it returns `false` at any of these 4 evaluation times, the
meta request completes with the `error_code` `AWS_ERROR_S3_CANCELED`.
@grrtrr
Copy link
Contributor Author

grrtrr commented Dec 2, 2024

@jmklix @TingDaoK - this is an updated version of #238, which takes into account Dengke's changes in #395 and #399.

We need the should_continue callback function in order to implement the AWS C++ SDK Cancel() function for the S3CrtClient.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants