From 5fdfa17265963911a2ca6cc7184aa05a92e8a65b Mon Sep 17 00:00:00 2001 From: Ara Sadoyan Date: Fri, 18 Sep 2026 18:33:35 +0200 Subject: [PATCH] Update to Pingora 0.9, improved logging, Fix cache key bug. --- Cargo.lock | 498 +++++++++++++++-------------------------- Cargo.toml | 21 +- src/utils/parceyaml.rs | 2 +- src/web/logging.rs | 72 ++++-- src/web/proxyhttp.rs | 27 ++- 5 files changed, 268 insertions(+), 352 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b4fa8d..2d61ed3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -24,6 +15,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", + "const-random", "getrandom 0.3.4", "once_cell", "version_check", @@ -138,7 +130,7 @@ checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "aralez" -version = "0.93.4" +version = "0.93.5" dependencies = [ "ahash", "arc-swap", @@ -147,7 +139,7 @@ dependencies = [ "base16ct 1.0.0", "base64 0.23.1", "bytes", - "dashmap", + "dashmap 7.0.0-rc2", "futures", "http-body-util", "hyper", @@ -171,7 +163,7 @@ dependencies = [ "pingora-limits", "pingora-proxy", "privdrop", - "prometheus 0.14.0", + "prometheus", "rand 0.10.2", "rcgen", "rustls", @@ -261,6 +253,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -393,21 +397,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", -] - [[package]] name = "base16ct" version = "0.2.0" @@ -524,12 +513,6 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.12.1" @@ -548,34 +531,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cf-rustracing" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f85c3824e4191621dec0551e3cef3d511f329da9a8990bf3e450a85651d97e" -dependencies = [ - "backtrace", - "rand 0.8.7", - "tokio", - "trackable", -] - -[[package]] -name = "cf-rustracing-jaeger" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a5f80d44c257c3300a7f45ada676c211e64bbbac591bbec19344a8f61fbcab" -dependencies = [ - "cf-rustracing", - "hostname", - "local-ip-address", - "percent-encoding", - "rand 0.9.5", - "thrift_codec", - "tokio", - "trackable", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -675,12 +630,41 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "const-oid" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -757,6 +741,12 @@ version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-bigint" version = "0.5.5" @@ -816,10 +806,10 @@ dependencies = [ ] [[package]] -name = "daemonize" -version = "0.5.0" +name = "daemonix" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e" +checksum = "f0b747381562a10fd2104e9333ad72fe5158d79de81b64426fc9e229c6d3fb38" dependencies = [ "libc", ] @@ -833,38 +823,14 @@ dependencies = [ "petgraph", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - [[package]] name = "darling" version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.23.0", - "darling_macro 0.23.0", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.118", + "darling_core", + "darling_macro", ] [[package]] @@ -882,24 +848,26 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.11" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.20.11", + "darling_core", "quote", "syn 2.0.118", ] [[package]] -name = "darling_macro" -version = "0.23.0" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "darling_core 0.23.0", - "quote", - "syn 2.0.118", + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] @@ -995,37 +963,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn 2.0.118", -] - [[package]] name = "derive_more" version = "2.1.1" @@ -1295,6 +1232,18 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "flurry" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5efcf77a4da27927d3ab0509dec5b0954bb3bc59da5a1de9e52642ebd4cdf9" +dependencies = [ + "ahash", + "num_cpus", + "parking_lot", + "seize", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1473,23 +1422,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "getset" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cf442baaabe4213ce7d1239afc26c039180b6456da2cededa316ae2c8a77a77" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "gloo-timers" version = "0.3.0" @@ -1525,9 +1457,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.15" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb093c84e8bd9b188d4c4a8cb6579fc016968d14c99882163cd3ff402a4f155" +checksum = "ef8e5e5a340588f4452631496976cf8636d4a7ecf600239fdc27615d2530bc16" dependencies = [ "atomic-waker", "bytes", @@ -1548,6 +1480,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.15.5" @@ -1582,6 +1520,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + [[package]] name = "hex" version = "0.4.3" @@ -2009,9 +1953,9 @@ dependencies = [ [[package]] name = "jsonwebtoken" -version = "11.0.0" +version = "11.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881733cbc631fc9e472e24447ce32a64bedf2da498d6d8570b08edc87de71f65" +checksum = "e75fe14a82d81e5f5af639997db37d8b96045938a7ac6ab18cdbe1c7467e05e1" dependencies = [ "base64 0.22.1", "ed25519-dalek", @@ -2137,7 +2081,7 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92141c19e1fa83bf91633c1234c66b03375c29aa8ca5486331ddb47e3a3da9c0" dependencies = [ - "darling 0.23.0", + "darling", "proc-macro2", "quote", "serde", @@ -2218,17 +2162,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "local-ip-address" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa08fb2b1ec3ea84575e94b489d06d4ce0cbf052d12acd515838f50e3c3d63e3" -dependencies = [ - "libc", - "neli", - "windows-sys 0.61.2", -] - [[package]] name = "lock_api" version = "0.4.14" @@ -2285,11 +2218,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.4" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" +checksum = "ff9840bcc50b71349309900da0ce7279aa336ae71d73250b07998932c7d97c25" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", ] [[package]] @@ -2306,9 +2239,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -2406,47 +2339,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "neli" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" -dependencies = [ - "bitflags 2.13.0", - "byteorder", - "derive_builder", - "getset", - "libc", - "log", - "neli-proc-macros", - "parking_lot", -] - -[[package]] -name = "neli-proc-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d8d08c6e98f20a62417478ebf7be8e1425ec9acecc6f63e22da633f6b71609" -dependencies = [ - "either", - "proc-macro2", - "quote", - "serde", - "syn 2.0.118", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.30.1" @@ -2459,6 +2351,19 @@ dependencies = [ "libc", ] +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags 2.13.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -2506,9 +2411,9 @@ dependencies = [ [[package]] name = "noyalib" -version = "0.0.32" +version = "0.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190b855ac3a2a1ff710c203db23da6aec67f4317af6e226960d40f181ceeccac" +checksum = "f307578cc6389d7c00bc284401ee1bff6d47c66c39debd8fc4db5b02892bc7a4" dependencies = [ "hashbrown 0.17.1", "indexmap 2.14.0", @@ -2583,6 +2488,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -2602,15 +2517,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "oid-registry" version = "0.8.1" @@ -2868,9 +2774,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pingora" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a75f2ff8e122aa80ab202dc865294fe59cd856c2a5dab2d3df6e122c93b941" +checksum = "fc02712a3847828d6b798ecf31f0ac64e138df26b9513e20d52319cf3cecd11e" dependencies = [ "pingora-cache", "pingora-core", @@ -2882,17 +2788,16 @@ dependencies = [ [[package]] name = "pingora-cache" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527735ac204efb9fa3884bfd9224d016c5735fabe1d394ebed145b40e7545b99" +checksum = "8d2b5ad1877a7e0656d1fbcca0375aae46a7b17b71efe1956203c81f3ad4f013" dependencies = [ "ahash", + "arrayvec", "async-trait", "blake2", "bstr", "bytes", - "cf-rustracing", - "cf-rustracing-jaeger", "hex", "http", "httparse", @@ -2919,9 +2824,9 @@ dependencies = [ [[package]] name = "pingora-core" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7ffe2f5acf9f94fd255cfd1438866bc9124f8f0c7d42562bd3f853df2094b7" +checksum = "7fd4d1ddc6d6dbc1a97164ce13c301980c25c35422aab87b512c4c8b5123729b" dependencies = [ "ahash", "async-trait", @@ -2930,10 +2835,11 @@ dependencies = [ "bytes", "chrono", "clap", - "daemonize", + "daemonix", "daggy", "derivative", "flate2", + "flurry", "futures", "h2", "http", @@ -2941,7 +2847,7 @@ dependencies = [ "httpdate", "libc", "log", - "nix 0.24.3", + "nix 0.31.3", "once_cell", "openssl-probe 0.1.6", "parking_lot", @@ -2952,7 +2858,6 @@ dependencies = [ "pingora-pool", "pingora-runtime", "pingora-timeout", - "prometheus 0.13.4", "rand 0.8.7", "regex", "serde", @@ -2971,15 +2876,15 @@ dependencies = [ [[package]] name = "pingora-error" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23f7bc013de67e44ed902a82843f6157460b89d11da882bcc6f09f8ae380af1" +checksum = "b6399da6e698035093d6b458707df5f3ea5292858816b99d4b2624d96b4f567f" [[package]] name = "pingora-header-serde" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "828c0e53e74160cbfe8e67dd3a811eb6a253c36acbaf7a39a01d9aacfb9ac139" +checksum = "e2e824dac9612e4b807e55981c2d6b665b6f936a8b4b75ee0ce1922373e93243" dependencies = [ "bytes", "http", @@ -2993,9 +2898,9 @@ dependencies = [ [[package]] name = "pingora-http" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d553d310a15ec88107b9388a02885f798efc57764d8e9bdaaf32a76722927a10" +checksum = "ac9876e8775ebeb5d91262be4daaaf26d21a8932f53402106ed280867fe4c4f4" dependencies = [ "bytes", "http", @@ -3004,27 +2909,27 @@ dependencies = [ [[package]] name = "pingora-ketama" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2a2e43a14f1d291fba7905542c7c1d1f89528f470b3cd48b6806e702ea772f" +checksum = "21e1baa2fffc859944e0c42d1955412858ac80f1e6ad175c6c3d93693c990d60" dependencies = [ "crc32fast", ] [[package]] name = "pingora-limits" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bafc633ceb95dc8b39a0d1b52d105758ae0913d360ef3a3365a6f6494d0fe17" +checksum = "f17248f7a1586c1f1244481f058a70e4d44707d8f936bf0b2323c8c85c40c8c0" dependencies = [ "ahash", ] [[package]] name = "pingora-load-balancing" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "361b69af0234d2e4d10234e2efd106bb3b8147c575d52f45604a46aaf26def7a" +checksum = "377e653ba80b73c1f35c16ade085eb5bc5a58cdd92f8e4ff1f967750f6faa654" dependencies = [ "arc-swap", "async-trait", @@ -3044,21 +2949,26 @@ dependencies = [ [[package]] name = "pingora-lru" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6705a26ad89d241a989a5395641931ba37076f5ab5fbd19ee92402414a43af32" +checksum = "aff106b6d8a53a746a23a6304e25709b3f2e580841ffe3176acc1979095b3806" dependencies = [ + "ahash", "arrayvec", + "async-channel", + "flurry", "hashbrown 0.17.1", + "log", "parking_lot", "rand 0.8.7", + "tokio", ] [[package]] name = "pingora-openssl" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f288cacd77196168db0f6ae80817bc4844a8dd1448b75bb2da935eb6d9c3118" +checksum = "acba32c08038ae662bf6f0bba76eb0c3529986243d8a3f9282a34ca92d0beff7" dependencies = [ "foreign-types", "libc", @@ -3069,24 +2979,25 @@ dependencies = [ [[package]] name = "pingora-pool" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb1237893b15a9cf6b371bee8d7e2e1c10742e4be6eb00ed38cfe87fd1363f8" +checksum = "0f9276b751bf2f908d24c73b8f23fcf05c2102fe373513457deb8868e17ef238" dependencies = [ "crossbeam-queue", + "dashmap 5.5.3", + "futures", "log", "lru", "parking_lot", "pingora-timeout", - "thread_local", "tokio", ] [[package]] name = "pingora-proxy" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a92ee756ecf6ecb6419864da651cad6cecd933b6d420a26877031efa16bef57" +checksum = "2467265ad39b56230b56149f1c03ca510f46c4bf4a25d6d4b7345e0f06cc46e7" dependencies = [ "async-trait", "bytes", @@ -3107,21 +3018,23 @@ dependencies = [ [[package]] name = "pingora-runtime" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41815a13691a3e7d9ad0e34767d4140284132e31b95a4481f5e73ab6f407f834" +checksum = "89aed2e58b34196682bdc2370c4293f908dece5741c56f5f5ba1018f55de68f2" dependencies = [ + "log", "once_cell", "rand 0.8.7", + "serde", "thread_local", "tokio", ] [[package]] name = "pingora-timeout" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e321452eaa461e0b6c5aaa35b7e42527ee89df33710279f37fae7f066b68e" +checksum = "8a1dac05d3ebf3ec1be4748d7ef391c48baa886181ce0f1b564ef8fa569243e3" dependencies = [ "once_cell", "parking_lot", @@ -3215,21 +3128,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prometheus" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" -dependencies = [ - "cfg-if", - "fnv", - "lazy_static", - "memchr", - "parking_lot", - "protobuf 2.28.0", - "thiserror 1.0.69", -] - [[package]] name = "prometheus" version = "0.14.0" @@ -3241,16 +3139,10 @@ dependencies = [ "lazy_static", "memchr", "parking_lot", - "protobuf 3.7.2", + "protobuf", "thiserror 2.0.18", ] -[[package]] -name = "protobuf" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" - [[package]] name = "protobuf" version = "3.7.2" @@ -3514,12 +3406,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "rustc-demangle" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" - [[package]] name = "rustc-hash" version = "2.1.3" @@ -3758,6 +3644,12 @@ dependencies = [ "libc", ] +[[package]] +name = "seize" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "689224d06523904ebcc9b482c6a3f4f7fb396096645c4cd10c0d2ff7371a34d3" + [[package]] name = "semver" version = "1.0.28" @@ -4196,16 +4088,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "thrift_codec" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d957f535b242b91aa9f47bde08080f9a6fef276477e55b0079979d002759d5" -dependencies = [ - "byteorder", - "trackable", -] - [[package]] name = "time" version = "0.3.53" @@ -4236,6 +4118,15 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tokio" version = "1.53.1" @@ -4436,25 +4327,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "trackable" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" -dependencies = [ - "trackable_derive", -] - -[[package]] -name = "trackable_derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" -dependencies = [ - "quote", - "syn 1.0.109", -] - [[package]] name = "try-lock" version = "0.2.5" diff --git a/Cargo.toml b/Cargo.toml index 9fc6845..0d7d64f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "aralez" -version = "0.93.4" +version = "0.93.5" edition = "2021" license = "Apache-2.0" description = "Reverse proxy built on top of Cloudflare's Pingora" @@ -16,23 +16,24 @@ strip = true [dependencies] tokio = { version = "1.53.1", features = ["full"] } -pingora = { version = "0.8.1", features = ["lb", "openssl"] } # openssl, rustls, boringssl -pingora-core = "0.8.1" -pingora-proxy = "0.8.1" -pingora-http = "0.8.1" -pingora-limits = "0.8.1" -pingora-cache = "0.8.1" +pingora = { version = "0.9.0", features = ["lb", "openssl"] } # openssl, rustls, boringssl +pingora-core = "0.9.0" +pingora-proxy = "0.9.0" +pingora-http = "0.9.0" +pingora-limits = "0.9.0" +pingora-cache = "0.9.0" dashmap = "7.0.0-rc2" async-trait = "0.1.92" log = "0.4.34" notify = "9.0.0-rc.4" axum = { version = "0.8.9" } serde = { version = "1.0.229", features = ["derive"] } -noyalib = { version = "0.0.32", features = ["compat-serde-yaml"] } +noyalib = { version = "0.0.44", features = ["compat-serde-yaml"] } rand = "0.10.2" base64 = "0.23.1" -jsonwebtoken = { version = "11.0.0", default-features = false, features = ["use_pem", "rust_crypto"] } -sha2 = { version = "0.11.0-rc.5", default-features = false } +jsonwebtoken = { version = "11.1.0", default-features = false, features = ["use_pem", "rust_crypto"] } +#sha2 = { version = "0.11.0-rc.5", default-features = false } +sha2 = { version = "0.11.0", default-features = false } base16ct = { version = "1.0.0", features = ["alloc"] } urlencoding = "2.1.3" arc-swap = "1.9.2" diff --git a/src/utils/parceyaml.rs b/src/utils/parceyaml.rs index aa83ddb..f00829d 100644 --- a/src/utils/parceyaml.rs +++ b/src/utils/parceyaml.rs @@ -91,7 +91,7 @@ pub async fn load_configuration(d: &str, kind: &str) -> (Option, } info!("Reading upstreams from {}", d); - data // [2606:4700:2ff9::1]:443 + data } "content" => { info!("Reading upstreams from API post body"); diff --git a/src/web/logging.rs b/src/web/logging.rs index 725a516..54d3211 100644 --- a/src/web/logging.rs +++ b/src/web/logging.rs @@ -1,10 +1,11 @@ use crate::utils::metrics::LOGGING_ERRORS; use crate::utils::structs::AppConfig; -use log::{info, LevelFilter}; +use log::{error, info, warn, LevelFilter}; use log4rs::append::rolling_file::policy::compound::roll::fixed_window::FixedWindowRoller; use log4rs::append::rolling_file::policy::compound::trigger::size::SizeTrigger; use log4rs::append::rolling_file::policy::compound::CompoundPolicy; use log4rs::append::rolling_file::RollingFileAppender; +use log4rs::config::Logger; use log4rs::{ append::console::ConsoleAppender, config::{Appender, Config as Log4rsConfig, Root}, @@ -15,7 +16,7 @@ use pingora_http::Version; use pingora_proxy::Session; use std::net::{IpAddr, Ipv4Addr}; use std::sync::OnceLock; -use tokio::sync::mpsc; +use tokio::sync::mpsc; // Add Logger import #[derive(Debug)] pub struct LogMessage { @@ -74,6 +75,7 @@ pub fn log_builder(conf: &AppConfig, location: &Option) { let config = Log4rsConfig::builder() .appender(Appender::builder().build("file", Box::new(file))) + .logger(Logger::builder().build("pingora_proxy", LevelFilter::Off)) .build(Root::builder().appender("file").build(log_level)) .unwrap(); log4rs::init_config(config).unwrap(); @@ -83,6 +85,7 @@ pub fn log_builder(conf: &AppConfig, location: &Option) { let config = Log4rsConfig::builder() .appender(Appender::builder().build("stdout", Box::new(stdout))) + .logger(Logger::builder().build("pingora_proxy", LevelFilter::Off)) .build(Root::builder().appender("stdout").build(log_level)) .unwrap(); log4rs::init_config(config).unwrap(); @@ -112,13 +115,30 @@ impl LogLevel { } } +#[derive(Debug)] +pub enum MatchStatus { + Ok2xx, + Er4xx, + Er5xx, +} +impl MatchStatus { + #[inline] + pub fn from_code(code: u16) -> Self { + match code { + 100..=399 => Self::Ok2xx, + 400..=499 => Self::Er4xx, + _ => Self::Er5xx, + } + } +} pub fn access_log(response_code: u16, summary: &str, session: &Session) { let level = ACCESS_LOG.get().unwrap_or(&LogLevel::None); - + let status = MatchStatus::from_code(response_code); let should_log = match level { LogLevel::Access => true, LogLevel::None => false, - LogLevel::Error => !(100..=399).contains(&response_code), + LogLevel::Error => matches!(status, MatchStatus::Er5xx), + // LogLevel::Error => matches!(status, MatchStatus::Er4xx | MatchStatus::Er5xx), }; if !should_log { @@ -132,12 +152,6 @@ pub fn access_log(response_code: u16, summary: &str, session: &Session) { .unwrap_or(IpAddr::V4(Ipv4Addr::LOCALHOST)); let user_agent = session.req_header().headers.get("user-agent").and_then(|v| v.to_str().ok()).unwrap_or("-"); - // let cache_status = match session.cache.phase() { - // CachePhase::Hit => "Hit", - // CachePhase::Miss => "Miss", - // CachePhase::Expired => "Expired", - // _ => "Disabled", - // }; let log = LogMessage { response_code, summary: summary.to_owned(), @@ -167,14 +181,34 @@ pub fn init_logging(enabled: Option) { pub fn log_receiver(mut receiver: mpsc::Receiver) { while let Some(msg) = receiver.blocking_recv() { - info!( - "{}, {}, {}, client: {}, version: {:?}, useragent: {}", - msg.response_code, - msg.cache_status.as_str(), - msg.summary, - msg.client_ip, - msg.version, - msg.user_agent, - ); + match MatchStatus::from_code(msg.response_code) { + MatchStatus::Ok2xx => info!( + "{}, {}, {}, client: {}, version: {:?}, useragent: {}", + msg.response_code, + msg.cache_status.as_str(), + msg.summary, + msg.client_ip, + msg.version, + msg.user_agent, + ), + MatchStatus::Er4xx => warn!( + "{}, {}, {}, client: {}, version: {:?}, useragent: {}", + msg.response_code, + msg.cache_status.as_str(), + msg.summary, + msg.client_ip, + msg.version, + msg.user_agent, + ), + MatchStatus::Er5xx => error!( + "{}, {}, {}, client: {}, version: {:?}, useragent: {}", + msg.response_code, + msg.cache_status.as_str(), + msg.summary, + msg.client_ip, + msg.version, + msg.user_agent, + ), + } } } diff --git a/src/web/proxyhttp.rs b/src/web/proxyhttp.rs index c7e0453..79ec698 100644 --- a/src/web/proxyhttp.rs +++ b/src/web/proxyhttp.rs @@ -46,6 +46,9 @@ pub struct Context { x4xx_limit: Option, } +thread_local! { + static KEY_BUF: RefCell = RefCell::new(String::with_capacity(256)); +} #[async_trait] impl ProxyHttp for LB { type CTX = Context; @@ -61,9 +64,22 @@ impl ProxyHttp for LB { } } - fn cache_key_callback(&self, session: &Session, _ctx: &mut Self::CTX) -> Result { - Ok(CacheKey::new(_ctx.hostname.clone().unwrap_or_default().as_ref(), session.req_header().uri.to_string(), "")) + fn cache_key_callback(&self, session: &Session, ctx: &mut Self::CTX) -> Result { + let host = ctx.hostname.as_deref().unwrap_or("default"); + let path = session.req_header().uri.path(); + + let primary_key = KEY_BUF.with(|buf| { + let mut b = buf.borrow_mut(); + b.clear(); + b.push_str(host); + b.push_str(path); + b.clone() + }); + + let secondary_key = session.req_header().uri.path_and_query().map(|pq| pq.as_str()).unwrap_or("/"); + Ok(CacheKey::new(primary_key, secondary_key)) } + fn request_cache_filter(&self, session: &mut Session, _ctx: &mut Self::CTX) -> Result<()> { if self.cache_enabled && session.req_header().method == Method::GET { if let Some(eviction) = EVICTION.get() { @@ -339,13 +355,6 @@ impl ProxyHttp for LB { } } } - // match session.cache.phase() { - // CachePhase::Hit => info!("Cache Status: HIT (Served from Memory)"), - // CachePhase::Miss => info!("Cache Status: MISS (Fetched from Upstream)"), - // CachePhase::Expired => info!("Cache Status: EXPIRED (Revalidating)"), - // _ => {} - // } - access_log(response_code, &self.request_summary(session, ctx), session); } }