From ec71cccda59ec229b5e649736c499b1784590ff7 Mon Sep 17 00:00:00 2001 From: phil Date: Mon, 2 Feb 2026 15:21:52 -0500 Subject: [PATCH] update foyer --- Cargo.lock | 502 +++++++++++--------------------- slingshot/Cargo.toml | 2 +- slingshot/src/firehose_cache.rs | 22 +- slingshot/src/identity.rs | 69 +++-- slingshot/src/record.rs | 11 + slingshot/src/server.rs | 29 +- 6 files changed, 249 insertions(+), 386 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f959f3..cea4cde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", "once_cell", "version_check", "zerocopy 0.7.35", @@ -122,12 +121,6 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - [[package]] name = "arrayvec" version = "0.7.6" @@ -162,7 +155,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn", ] [[package]] @@ -204,7 +197,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", "synstructure", ] @@ -216,19 +209,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[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", + "syn", ] [[package]] @@ -274,15 +255,9 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.88" @@ -291,7 +266,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -498,18 +473,6 @@ dependencies = [ "trait-variant", ] -[[package]] -name = "auto_enums" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" -dependencies = [ - "derive_utils", - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -749,7 +712,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn", "which", ] @@ -762,13 +725,13 @@ dependencies = [ "bitflags", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.12.1", "proc-macro2", "quote", "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.106", + "syn", ] [[package]] @@ -780,13 +743,13 @@ dependencies = [ "bitflags", "cexpr", "clang-sys", - "itertools 0.13.0", + "itertools 0.12.1", "proc-macro2", "quote", "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.106", + "syn", ] [[package]] @@ -1009,7 +972,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] @@ -1021,7 +984,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1172,6 +1135,17 @@ dependencies = [ "memchr", ] +[[package]] +name = "core_affinity" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" +dependencies = [ + "libc", + "num_cpus", + "winapi", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -1268,38 +1242,14 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[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_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -1312,19 +1262,8 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", - "syn 2.0.106", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "strsim", + "syn", ] [[package]] @@ -1333,9 +1272,9 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", + "darling_core", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1375,7 +1314,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18e4fdb82bd54a12e42fb58a800dcae6b9e13982238ce2296dc3570b92148e1f" dependencies = [ "data-encoding", - "syn 2.0.106", + "syn", ] [[package]] @@ -1434,10 +1373,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1447,7 +1386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn", ] [[package]] @@ -1467,21 +1406,10 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", "unicode-xid", ] -[[package]] -name = "derive_utils" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "digest" version = "0.10.7" @@ -1523,7 +1451,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1532,12 +1460,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0d05e1c0dbad51b52c38bda7adceef61b9efc2baf04acfe8726a8c4630a6f57" -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dropshot" version = "0.16.3" @@ -1582,7 +1504,7 @@ dependencies = [ "thiserror 2.0.16", "tokio", "tokio-rustls 0.25.0", - "toml 0.9.7", + "toml", "uuid", "version_check", "waitgroup", @@ -1600,7 +1522,7 @@ dependencies = [ "semver", "serde", "serde_tokenstream", - "syn 2.0.106", + "syn", ] [[package]] @@ -1673,7 +1595,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1685,7 +1607,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -1760,6 +1682,16 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +[[package]] +name = "fastant" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e825441bfb2d831c47c97d05821552db8832479f44c571b97fededbf0099c07" +dependencies = [ + "small_ctor", + "web-time", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1835,9 +1767,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ - "futures-core", - "futures-sink", - "nanorand", "spin", ] @@ -1853,6 +1782,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1879,40 +1814,39 @@ dependencies = [ [[package]] name = "foyer" -version = "0.18.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b4d8e96374206ff1b4265f2e2e6e1f80bc3048957b2a1e7fdeef929d68f318f" +checksum = "3b0abc0b87814989efa711f9becd9f26969820e2d3905db27d10969c4bd45890" dependencies = [ + "anyhow", "equivalent", "foyer-common", "foyer-memory", "foyer-storage", - "madsim-tokio", + "foyer-tokio", + "futures-util", + "mea", "mixtrics", "pin-project", "serde", - "thiserror 2.0.16", - "tokio", "tracing", ] [[package]] name = "foyer-common" -version = "0.18.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911b8e3f23d5fe55b0b240f75af1d2fa5cb7261d3f9b38ef1c57bbc9f0449317" +checksum = "a3db80d5dece93adb7ad709c84578794724a9cba342a7e566c3551c7ec626789" dependencies = [ + "anyhow", "bincode 1.3.3", "bytes", "cfg-if", - "itertools 0.14.0", - "madsim-tokio", + "foyer-tokio", "mixtrics", "parking_lot", "pin-project", "serde", - "thiserror 2.0.16", - "tokio", "twox-hash", ] @@ -1927,62 +1861,71 @@ dependencies = [ [[package]] name = "foyer-memory" -version = "0.18.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "506883d5a8500dea1b1662f7180f3534bdcbfa718d3253db7179552ef83612fa" +checksum = "db907f40a527ca2aa2f40a5f68b32ea58aa70f050cd233518e9ffd402cfba6ce" dependencies = [ - "arc-swap", + "anyhow", "bitflags", "cmsketch", "equivalent", "foyer-common", "foyer-intrusive-collections", - "hashbrown 0.15.2", + "foyer-tokio", + "futures-util", + "hashbrown 0.16.1", "itertools 0.14.0", - "madsim-tokio", + "mea", "mixtrics", "parking_lot", + "paste", "pin-project", "serde", - "thiserror 2.0.16", - "tokio", "tracing", ] [[package]] name = "foyer-storage" -version = "0.18.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba8403a54a2f2032fb647e49c442e5feeb33f3989f7024f1b178341a016f06d" +checksum = "1983f1db3d0710e9c9d5fc116d9202dccd41a2d1e032572224f1aff5520aa958" dependencies = [ "allocator-api2", "anyhow", - "auto_enums", "bytes", + "core_affinity", "equivalent", - "flume", + "fastant", "foyer-common", "foyer-memory", + "foyer-tokio", "fs4 0.13.1", "futures-core", "futures-util", + "hashbrown 0.16.1", + "io-uring", "itertools 0.14.0", "libc", "lz4", - "madsim-tokio", - "ordered_hash_map", + "mea", "parking_lot", - "paste", "pin-project", "rand 0.9.1", "serde", - "thiserror 2.0.16", - "tokio", "tracing", "twox-hash", "zstd", ] +[[package]] +name = "foyer-tokio" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6577b05a7ffad0db555aedf00bfe52af818220fc4c1c3a7a12520896fc38627" +dependencies = [ + "tokio", +] + [[package]] name = "fs4" version = "0.12.0" @@ -2065,7 +2008,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -2230,15 +2173,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -2253,7 +2187,18 @@ checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -2687,7 +2632,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -2825,15 +2770,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -2891,7 +2827,7 @@ checksum = "43ce13c40ec6956157a3635d97a1ee2df323b263f09ea14165131289cb0f5c19" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -3242,60 +3178,6 @@ dependencies = [ "libc", ] -[[package]] -name = "madsim" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6694555643da293dfb89e33c2880a13b62711d64b6588bc7df6ce4110b27f1" -dependencies = [ - "ahash", - "async-channel", - "async-stream", - "async-task", - "bincode 1.3.3", - "bytes", - "downcast-rs", - "futures-util", - "lazy_static", - "libc", - "madsim-macros", - "naive-timer", - "panic-message", - "rand 0.8.5", - "rand_xoshiro 0.6.0", - "rustversion", - "serde", - "spin", - "tokio", - "tokio-util", - "toml 0.8.23", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "madsim-macros" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d248e97b1a48826a12c3828d921e8548e714394bf17274dd0a93910dc946e1" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "madsim-tokio" -version = "0.2.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3eb2acc57c82d21d699119b859e2df70a91dbdb84734885a1e72be83bdecb5" -dependencies = [ - "madsim", - "spin", - "tokio", -] - [[package]] name = "match_cfg" version = "0.1.0" @@ -3317,6 +3199,15 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +[[package]] +name = "mea" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6747f54621d156e1b47eb6b25f39a941b9fc347f98f67d25d8881ff99e8ed832" +dependencies = [ + "slab", +] + [[package]] name = "mediatype" version = "0.19.20" @@ -3551,21 +3442,6 @@ dependencies = [ "unsigned-varint", ] -[[package]] -name = "naive-timer" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034a0ad7deebf0c2abcf2435950a6666c3c15ea9d8fad0c0f48efa8a7f843fed" - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.15", -] - [[package]] name = "native-tls" version = "0.2.14" @@ -3701,6 +3577,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 = "num_threads" version = "0.1.7" @@ -3772,7 +3658,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -3803,15 +3689,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "ordered_hash_map" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0e5f22bf6dd04abd854a8874247813a8fa2c8c1260eba6fbb150270ce7c176" -dependencies = [ - "hashbrown 0.13.2", -] - [[package]] name = "p256" version = "0.13.2" @@ -3834,12 +3711,6 @@ dependencies = [ "primeorder", ] -[[package]] -name = "panic-message" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384e52fd8fbd4cbe3c317e8216260c21a0f9134de108cea8a4dd4e7e152c472d" - [[package]] name = "parking" version = "2.2.1" @@ -3949,7 +3820,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -3979,7 +3850,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -4097,7 +3968,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -4132,7 +4003,7 @@ version = "5.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41273b691a3d467a8c44d05506afba9f7b6bd56c9cdf80123de13fe52d7ec587" dependencies = [ - "darling 0.20.11", + "darling", "http", "indexmap 2.11.4", "mime", @@ -4140,7 +4011,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn", "thiserror 2.0.16", ] @@ -4181,7 +4052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn", ] [[package]] @@ -4492,7 +4363,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -4874,7 +4745,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn", ] [[package]] @@ -5007,7 +4878,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5018,7 +4889,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5070,15 +4941,6 @@ dependencies = [ "thiserror 2.0.16", ] -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - [[package]] name = "serde_spanned" version = "1.0.2" @@ -5097,7 +4959,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn", ] [[package]] @@ -5136,10 +4998,10 @@ version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5231,12 +5093,9 @@ checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slingshot" @@ -5324,6 +5183,12 @@ dependencies = [ "time", ] +[[package]] +name = "small_ctor" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88414a5ca1f85d82cc34471e975f0f74f6aa54c40f062efa42c0080e7f763f81" + [[package]] name = "smallvec" version = "1.15.0" @@ -5410,12 +5275,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ae9eec00137a8eed469fb4148acd9fc6ac8c3f9b110f52cd34698c8b5bfa0e" -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -5428,17 +5287,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.106" @@ -5467,7 +5315,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5553,7 +5401,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5564,7 +5412,7 @@ checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5689,7 +5537,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5773,18 +5621,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned 0.6.9", - "toml_datetime 0.6.11", - "toml_edit", -] - [[package]] name = "toml" version = "0.9.7" @@ -5793,7 +5629,7 @@ checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" dependencies = [ "indexmap 2.11.4", "serde_core", - "serde_spanned 1.0.2", + "serde_spanned", "toml_datetime 0.7.2", "toml_parser", "toml_writer", @@ -5805,9 +5641,6 @@ name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] [[package]] name = "toml_datetime" @@ -5825,10 +5658,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.11.4", - "serde", - "serde_spanned 0.6.9", "toml_datetime 0.6.11", - "toml_write", "winnow", ] @@ -5841,12 +5671,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - [[package]] name = "toml_writer" version = "1.0.3" @@ -5919,7 +5743,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -5969,7 +5793,7 @@ checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6291,7 +6115,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn", "wasm-bindgen-shared", ] @@ -6326,7 +6150,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6479,7 +6303,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6490,7 +6314,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6796,7 +6620,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", "synstructure", ] @@ -6826,7 +6650,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6837,7 +6661,7 @@ checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6857,7 +6681,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", "synstructure", ] @@ -6879,7 +6703,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] @@ -6901,7 +6725,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn", ] [[package]] diff --git a/slingshot/Cargo.toml b/slingshot/Cargo.toml index eed7de8..1f0dee9 100644 --- a/slingshot/Cargo.toml +++ b/slingshot/Cargo.toml @@ -10,7 +10,7 @@ atrium-identity = { git = "https://github.com/uniphil/atrium.git", branch = "fix atrium-oauth = { git = "https://github.com/uniphil/atrium.git", branch = "fix/resolve-handle-https-accept-whitespace" } clap = { workspace = true } ctrlc = "3.4.7" -foyer = { version = "0.18.0", features = ["serde"] } +foyer = { version = "0.22.3", features = ["serde"] } hickory-resolver = "0.25.2" jetstream = { path = "../jetstream", features = ["metrics"] } links = { path = "../links" } diff --git a/slingshot/src/firehose_cache.rs b/slingshot/src/firehose_cache.rs index 5faffab..7b069ec 100644 --- a/slingshot/src/firehose_cache.rs +++ b/slingshot/src/firehose_cache.rs @@ -1,5 +1,5 @@ use crate::CachedRecord; -use foyer::{DirectFsDeviceOptions, Engine, HybridCache, HybridCacheBuilder}; +use foyer::{BlockEngineConfig, DeviceBuilder, FileDeviceBuilder, HybridCache, HybridCacheBuilder}; use std::path::Path; pub async fn firehose_cache( @@ -7,18 +7,24 @@ pub async fn firehose_cache( memory_mb: usize, disk_gb: usize, ) -> Result, String> { + let device = FileDeviceBuilder::new(cache_dir) + .with_capacity(disk_gb * 2_usize.pow(30)) + .build() + .map_err(|e| format!("foyer device setup error: {e}"))?; + + let engine = BlockEngineConfig::new(device).with_block_size(16 * 2_usize.pow(20)); // note: this does limit the max cached item size + let cache = HybridCacheBuilder::new() .with_name("firehose") .memory(memory_mb * 2_usize.pow(20)) - .with_weighter(|k: &String, v| k.len() + std::mem::size_of_val(v)) - .storage(Engine::large()) - .with_device_options( - DirectFsDeviceOptions::new(cache_dir) - .with_capacity(disk_gb * 2_usize.pow(30)) - .with_file_size(16 * 2_usize.pow(20)), // note: this does limit the max cached item size (records should be max 1mb cbor, bit bigger json) - ) + .with_weighter(|k: &String, v: &CachedRecord| { + std::mem::size_of_val(k.as_str()) + v.weight() + }) + .storage() + .with_engine_config(engine) .build() .await .map_err(|e| format!("foyer setup error: {e:?}"))?; + Ok(cache) } diff --git a/slingshot/src/identity.rs b/slingshot/src/identity.rs index 16733ce..25c7ddc 100644 --- a/slingshot/src/identity.rs +++ b/slingshot/src/identity.rs @@ -26,7 +26,7 @@ use atrium_identity::{ handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver}, }; use atrium_oauth::DefaultHttpClient; // it's probably not worth bringing all of atrium_oauth for this but -use foyer::{DirectFsDeviceOptions, Engine, HybridCache, HybridCacheBuilder}; +use foyer::{BlockEngineConfig, DeviceBuilder, FileDeviceBuilder, HybridCache, HybridCacheBuilder}; use serde::{Deserialize, Serialize}; use time::UtcDateTime; @@ -40,6 +40,16 @@ enum IdentityKey { Did(Did), } +impl IdentityKey { + fn weight(&self) -> usize { + let s = match self { + IdentityKey::Handle(h) => h.as_str(), + IdentityKey::Did(d) => d.as_str(), + }; + std::mem::size_of::() + std::mem::size_of_val(s) + } +} + #[derive(Debug, Serialize, Deserialize)] struct IdentityVal(UtcDateTime, IdentityData); @@ -50,6 +60,22 @@ enum IdentityData { Doc(PartialMiniDoc), } +impl IdentityVal { + fn weight(&self) -> usize { + let wrapping = std::mem::size_of::(); + let inner = match &self.1 { + IdentityData::NotFound => 0, + IdentityData::Did(d) => std::mem::size_of_val(d.as_str()), + IdentityData::Doc(d) => { + std::mem::size_of_val(d.unverified_handle.as_str()) + + std::mem::size_of_val(d.pds.as_str()) + + std::mem::size_of_val(d.signing_key.as_str()) + } + }; + wrapping + inner + } +} + /// partial representation of a com.bad-example.identity mini atproto doc /// /// partial because the handle is not verified @@ -176,16 +202,17 @@ impl Identity { http_client: http_client.clone(), }); + let device = FileDeviceBuilder::new(cache_dir) + .with_capacity(disk_gb * 2_usize.pow(30)) + .build()?; + let engine = BlockEngineConfig::new(device).with_block_size(2_usize.pow(20)); // note: this does limit the max cached item size + let cache = HybridCacheBuilder::new() .with_name("identity") .memory(memory_mb * 2_usize.pow(20)) - .with_weighter(|k, v| std::mem::size_of_val(k) + std::mem::size_of_val(v)) - .storage(Engine::small()) - .with_device_options( - DirectFsDeviceOptions::new(cache_dir) - .with_capacity(disk_gb * 2_usize.pow(30)) // TODO: configurable (1GB to have something) - .with_file_size(2_usize.pow(20)), // note: this does limit the max cached item size! - ) + .with_weighter(|k: &IdentityKey, v: &IdentityVal| k.weight() + v.weight()) + .storage() + .with_engine_config(engine) .build() .await?; @@ -235,7 +262,7 @@ impl Identity { let key = IdentityKey::Handle(handle.clone()); let entry = self .cache - .fetch(key.clone(), { + .get_or_fetch(&key, { let handle = handle.clone(); let resolver = self.handle_resolver.clone(); || async move { @@ -244,10 +271,10 @@ impl Identity { Err(atrium_identity::Error::NotFound) => { Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound)) } - Err(other) => Err(foyer::Error::Other(Box::new({ + Err(other) => { log::debug!("other error resolving handle: {other:?}"); - IdentityError::ResolutionFailed(other) - }))), + Err(IdentityError::ResolutionFailed(other)) + } } } }) @@ -283,7 +310,7 @@ impl Identity { let key = IdentityKey::Did(did.clone()); let entry = self .cache - .fetch(key.clone(), { + .get_or_fetch(&key, { let did = did.clone(); let resolver = self.did_resolver.clone(); || async move { @@ -291,23 +318,17 @@ impl Identity { Ok(did_doc) => { // TODO: fix in atrium: should verify id is did if did_doc.id != did.to_string() { - return Err(foyer::Error::other(Box::new( - IdentityError::BadDidDoc( - "did doc's id did not match did".to_string(), - ), - ))); + return Err(IdentityError::BadDidDoc( + "did doc's id did not match did".to_string(), + )); } - let mini_doc = did_doc.try_into().map_err(|e| { - foyer::Error::Other(Box::new(IdentityError::BadDidDoc(e))) - })?; + let mini_doc = did_doc.try_into().map_err(IdentityError::BadDidDoc)?; Ok(IdentityVal(UtcDateTime::now(), IdentityData::Doc(mini_doc))) } Err(atrium_identity::Error::NotFound) => { Ok(IdentityVal(UtcDateTime::now(), IdentityData::NotFound)) } - Err(other) => Err(foyer::Error::Other(Box::new( - IdentityError::ResolutionFailed(other), - ))), + Err(other) => Err(IdentityError::ResolutionFailed(other)), } } }) diff --git a/slingshot/src/record.rs b/slingshot/src/record.rs index 971c648..8b11902 100644 --- a/slingshot/src/record.rs +++ b/slingshot/src/record.rs @@ -42,6 +42,17 @@ pub enum CachedRecord { Deleted, } +impl CachedRecord { + pub(crate) fn weight(&self) -> usize { + let wrapping = std::mem::size_of::(); + let inner = match self { + CachedRecord::Found(RawRecord { record, .. }) => std::mem::size_of_val(record.as_str()), + _ => 0, + }; + wrapping + inner + } +} + //////// upstream record fetching #[derive(Deserialize)] diff --git a/slingshot/src/server.rs b/slingshot/src/server.rs index e0819e7..5e1344b 100644 --- a/slingshot/src/server.rs +++ b/slingshot/src/server.rs @@ -565,33 +565,34 @@ impl Xrpc { let fr = self .cache - .fetch(at_uri.clone(), { + .get_or_fetch(&at_uri, { let cid = cid.clone(); let repo_api = self.repo.clone(); - || async move { - repo_api - .get_record(&did, &collection, &rkey, &cid) - .await - .map_err(|e| foyer::Error::Other(Box::new(e))) - } + || async move { repo_api.get_record(&did, &collection, &rkey, &cid).await } }) .await; let entry = match fr { Ok(e) => e, - Err(foyer::Error::Other(e)) => { - let record_error = match e.downcast::() { - Ok(e) => e, - Err(e) => { - log::error!("error (foyer other) getting cache entry, {e:?}"); + Err(e) if e.kind() == foyer::ErrorKind::External => { + let record_error = match e.source().map(|s| s.downcast_ref::()) { + Some(Some(e)) => e, + other => { + if other.is_none() { + log::error!("external error without a source. wat? {e}"); + } else { + log::error!("downcast to RecordError failed...? {e}"); + } return GetRecordResponse::ServerError(xrpc_error( "ServerError", "sorry, something went wrong", )); } }; - let RecordError::UpstreamBadRequest(ErrorResponseObject { error, message }) = - *record_error + let RecordError::UpstreamBadRequest(ErrorResponseObject { + ref error, + ref message, + }) = *record_error else { log::error!("RecordError getting cache entry, {record_error:?}"); return GetRecordResponse::ServerError(xrpc_error( -- 2.51.2