mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-14 17:02:56 +00:00
Cancellation and timeouts are handled at remote_storage callsites, if
they are. However they should always be handled, because we've had
transient problems with remote storage connections.
- Add cancellation token to the `trait RemoteStorage` methods
- For `download*`, `list*` methods there is
`DownloadError::{Cancelled,Timeout}`
- For the rest now using `anyhow::Error`, it will have root cause
`remote_storage::TimeoutOrCancel::{Cancel,Timeout}`
- Both types have `::is_permanent` equivalent which should be passed to
`backoff::retry`
- New generic RemoteStorageConfig option `timeout`, defaults to 120s
- Start counting timeouts only after acquiring concurrency limiter
permit
- Cancellable permit acquiring
- Download stream timeout or cancellation is communicated via an
`std::io::Error`
- Exit backoff::retry by marking cancellation errors permanent
Fixes: #6096
Closes: #4781
Co-authored-by: arpad-m <arpad-m@users.noreply.github.com>
45 lines
1.2 KiB
TOML
45 lines
1.2 KiB
TOML
[package]
|
|
name = "remote_storage"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
async-trait.workspace = true
|
|
once_cell.workspace = true
|
|
aws-smithy-async.workspace = true
|
|
aws-smithy-types.workspace = true
|
|
aws-config.workspace = true
|
|
aws-sdk-s3.workspace = true
|
|
aws-credential-types.workspace = true
|
|
bytes.workspace = true
|
|
camino.workspace = true
|
|
humantime.workspace = true
|
|
hyper = { workspace = true, features = ["stream"] }
|
|
futures.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
tokio = { workspace = true, features = ["sync", "fs", "io-util"] }
|
|
tokio-stream.workspace = true
|
|
tokio-util = { workspace = true, features = ["compat"] }
|
|
toml_edit.workspace = true
|
|
tracing.workspace = true
|
|
scopeguard.workspace = true
|
|
metrics.workspace = true
|
|
utils.workspace = true
|
|
pin-project-lite.workspace = true
|
|
workspace_hack.workspace = true
|
|
azure_core.workspace = true
|
|
azure_identity.workspace = true
|
|
azure_storage.workspace = true
|
|
azure_storage_blobs.workspace = true
|
|
futures-util.workspace = true
|
|
http-types.workspace = true
|
|
itertools.workspace = true
|
|
|
|
[dev-dependencies]
|
|
camino-tempfile.workspace = true
|
|
test-context.workspace = true
|
|
rand.workspace = true
|