mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 14:02:55 +00:00
- Add support for splitting async postgres_backend into read and write halfes. Safekeeper needs this for bidirectional streams. To this end, encapsulate reading-writing postgres messages to framed.rs with split support without any additional changes (relying on BufRead for reading and BytesMut out buffer for writing). - Use async postgres_backend throughout safekeeper (and in proxy auth link part). - In both safekeeper COPY streams, do read-write from the same thread/task with select! for easier error handling. - Tidy up finishing CopyBoth streams in safekeeper sending and receiving WAL -- join split parts back catching errors from them before returning. Initially I hoped to do that read-write without split at all, through polling IO: https://github.com/neondatabase/neon/pull/3522 However that turned out to be more complicated than I initially expected due to 1) borrow checking and 2) anon Future types. 1) required Rc<Refcell<...>> which is Send construct just to satisfy the checker; 2) can be workaround with transmute. But this is so messy that I decided to leave split.
80 lines
3.6 KiB
TOML
80 lines
3.6 KiB
TOML
# This file is generated by `cargo hakari`.
|
|
# To regenerate, run:
|
|
# cargo hakari generate
|
|
|
|
[package]
|
|
name = "workspace_hack"
|
|
version = "0.1.0"
|
|
description = "workspace-hack package, managed by hakari"
|
|
# You can choose to publish this crate: see https://docs.rs/cargo-hakari/latest/cargo_hakari/publishing.
|
|
publish = false
|
|
# The parts of the file between the BEGIN HAKARI SECTION and END HAKARI SECTION comments
|
|
# are managed by hakari.
|
|
|
|
### BEGIN HAKARI SECTION
|
|
[dependencies]
|
|
anyhow = { version = "1", features = ["backtrace"] }
|
|
byteorder = { version = "1" }
|
|
bytes = { version = "1", features = ["serde"] }
|
|
chrono = { version = "0.4", default-features = false, features = ["clock", "serde"] }
|
|
clap = { version = "4", features = ["derive", "string"] }
|
|
crossbeam-utils = { version = "0.8" }
|
|
digest = { version = "0.10", features = ["mac", "std"] }
|
|
either = { version = "1" }
|
|
fail = { version = "0.5", default-features = false, features = ["failpoints"] }
|
|
futures = { version = "0.3" }
|
|
futures-channel = { version = "0.3", features = ["sink"] }
|
|
futures-core = { version = "0.3" }
|
|
futures-executor = { version = "0.3" }
|
|
futures-sink = { version = "0.3" }
|
|
futures-util = { version = "0.3", features = ["channel", "io", "sink"] }
|
|
hashbrown = { version = "0.12", features = ["raw"] }
|
|
indexmap = { version = "1", default-features = false, features = ["std"] }
|
|
itertools = { version = "0.10" }
|
|
libc = { version = "0.2", features = ["extra_traits"] }
|
|
log = { version = "0.4", default-features = false, features = ["std"] }
|
|
memchr = { version = "2" }
|
|
nom = { version = "7" }
|
|
num-bigint = { version = "0.4" }
|
|
num-integer = { version = "0.1", features = ["i128"] }
|
|
num-traits = { version = "0.2", features = ["i128"] }
|
|
prost = { version = "0.11" }
|
|
rand = { version = "0.8", features = ["small_rng"] }
|
|
regex = { version = "1" }
|
|
regex-syntax = { version = "0.6" }
|
|
reqwest = { version = "0.11", default-features = false, features = ["blocking", "json", "multipart", "rustls-tls"] }
|
|
ring = { version = "0.16", features = ["std"] }
|
|
rustls = { version = "0.20", features = ["dangerous_configuration"] }
|
|
scopeguard = { version = "1" }
|
|
serde = { version = "1", features = ["alloc", "derive"] }
|
|
serde_json = { version = "1", features = ["raw_value"] }
|
|
socket2 = { version = "0.4", default-features = false, features = ["all"] }
|
|
tokio = { version = "1", features = ["fs", "io-std", "io-util", "macros", "net", "process", "rt-multi-thread", "signal", "sync", "time"] }
|
|
tokio-rustls = { version = "0.23" }
|
|
tokio-util = { version = "0.7", features = ["codec", "io"] }
|
|
tonic = { version = "0.8", features = ["tls-roots"] }
|
|
tower = { version = "0.4", features = ["balance", "buffer", "limit", "retry", "timeout", "util"] }
|
|
tracing = { version = "0.1", features = ["log"] }
|
|
tracing-core = { version = "0.1" }
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
url = { version = "2", features = ["serde"] }
|
|
|
|
[build-dependencies]
|
|
anyhow = { version = "1", features = ["backtrace"] }
|
|
bytes = { version = "1", features = ["serde"] }
|
|
either = { version = "1" }
|
|
hashbrown = { version = "0.12", features = ["raw"] }
|
|
indexmap = { version = "1", default-features = false, features = ["std"] }
|
|
itertools = { version = "0.10" }
|
|
libc = { version = "0.2", features = ["extra_traits"] }
|
|
log = { version = "0.4", default-features = false, features = ["std"] }
|
|
memchr = { version = "2" }
|
|
nom = { version = "7" }
|
|
prost = { version = "0.11" }
|
|
regex = { version = "1" }
|
|
regex-syntax = { version = "0.6" }
|
|
serde = { version = "1", features = ["alloc", "derive"] }
|
|
syn = { version = "1", features = ["extra-traits", "full", "visit", "visit-mut"] }
|
|
|
|
### END HAKARI SECTION
|