mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-09 14:32:57 +00:00
This patch adds a timed LRU cache implementation and a compute node info cache on top of that. Cache entries might expire on their own (default ttl=5mins) or become invalid due to real-world events, e.g. compute node scale-to-zero event, so we add a connection retry loop with a wake-up call. Solved problems: - [x] Find a decent LRU implementation. - [x] Implement timed LRU on top of that. - [x] Cache results of `proxy_wake_compute` API call. - [x] Don't invalidate newer cache entries for the same key. - [x] Add cmdline configuration knobs (requires some refactoring). - [x] Add failed connection estab metric. - [x] Refactor auth backends to make things simpler (retries, cache placement, etc). - [x] Address review comments (add code comments + cleanup). - [x] Retry `/proxy_wake_compute` if we couldn't connect to a compute (e.g. stalled cache entry). - [x] Add high-level description for `TimedLru`. TODOs (will be addressed later): - [ ] Add cache metrics (hit, spurious hit, miss). - [ ] Synchronize http requests across concurrent per-client tasks (https://github.com/neondatabase/neon/pull/3331#issuecomment-1399216069). - [ ] Cache results of `proxy_get_role_secret` API call.
65 lines
1.6 KiB
TOML
65 lines
1.6 KiB
TOML
[package]
|
|
name = "proxy"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
|
|
[dependencies]
|
|
anyhow.workspace = true
|
|
async-trait.workspace = true
|
|
atty.workspace = true
|
|
base64.workspace = true
|
|
bstr.workspace = true
|
|
bytes = { workspace = true, features = ["serde"] }
|
|
chrono.workspace = true
|
|
clap.workspace = true
|
|
consumption_metrics.workspace = true
|
|
futures.workspace = true
|
|
git-version.workspace = true
|
|
hashbrown.workspace = true
|
|
hashlink.workspace = true
|
|
hex.workspace = true
|
|
hmac.workspace = true
|
|
hostname.workspace = true
|
|
humantime.workspace = true
|
|
hyper-tungstenite.workspace = true
|
|
hyper.workspace = true
|
|
itertools.workspace = true
|
|
md5.workspace = true
|
|
metrics.workspace = true
|
|
once_cell.workspace = true
|
|
parking_lot.workspace = true
|
|
pin-project-lite.workspace = true
|
|
pq_proto.workspace = true
|
|
prometheus.workspace = true
|
|
rand.workspace = true
|
|
regex.workspace = true
|
|
reqwest = { workspace = true, features = ["json"] }
|
|
routerify.workspace = true
|
|
rustls-pemfile.workspace = true
|
|
rustls.workspace = true
|
|
scopeguard.workspace = true
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
sha2.workspace = true
|
|
socket2.workspace = true
|
|
thiserror.workspace = true
|
|
tls-listener.workspace = true
|
|
tokio-postgres.workspace = true
|
|
tokio-rustls.workspace = true
|
|
tokio.workspace = true
|
|
tracing-subscriber.workspace = true
|
|
tracing.workspace = true
|
|
url.workspace = true
|
|
utils.workspace = true
|
|
uuid.workspace = true
|
|
webpki-roots.workspace = true
|
|
x509-parser.workspace = true
|
|
|
|
workspace_hack.workspace = true
|
|
|
|
[dev-dependencies]
|
|
rcgen.workspace = true
|
|
rstest.workspace = true
|
|
tokio-postgres-rustls.workspace = true
|