diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 48d2632..6c44998 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -173,7 +173,7 @@ jobs: toolchain: stable - name: Run integration tests - run: cargo test --package integration-tests --lib + run: cargo test --package integration-tests --lib -- --test-threads=3 env: RUST_LOG: info diff --git a/Cargo.lock b/Cargo.lock index 0cfbbc6..7eb58df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "ahash" version = "0.7.8" @@ -30,9 +15,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -48,9 +33,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -63,9 +48,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -102,6 +87,22 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "astral-tokio-tar" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5" +dependencies = [ + "filetime", + "futures-core", + "libc", + "portable-atomic", + "rustc-hash", + "tokio", + "tokio-stream", + "xattr", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -192,11 +193,11 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98e529aee37b5c8206bb4bf4c44797127566d72f76952c970bd3d1e85de8f4e2" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ - "axum-core 0.5.4", + "axum-core 0.5.5", "bytes", "futures-util", "http", @@ -238,9 +239,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ac7a6beb1182c7e30253ee75c3e918080bfb83f5a3023bcdf7209d85fd147e6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -254,21 +255,6 @@ dependencies = [ "tower-service", ] -[[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 0.2.0", -] - [[package]] name = "base64" version = "0.13.1" @@ -296,40 +282,20 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags 2.9.4", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn", -] - [[package]] name = "bindgen" version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash", "shlex", "syn", ] @@ -342,9 +308,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "block-buffer" @@ -357,13 +323,17 @@ dependencies = [ [[package]] name = "bollard" -version = "0.18.1" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30" +checksum = "87a52479c9237eb04047ddb94788c41ca0d26eaff8b697ecfbb4c32f7fdc3b1b" dependencies = [ + "async-stream", "base64 0.22.1", + "bitflags 2.10.0", + "bollard-buildkit-proto", "bollard-stubs", "bytes", + "chrono", "futures-core", "futures-util", "hex", @@ -376,7 +346,9 @@ dependencies = [ "hyper-util", "hyperlocal", "log", + "num", "pin-project-lite", + "rand", "rustls", "rustls-native-certs", "rustls-pemfile", @@ -388,19 +360,40 @@ dependencies = [ "serde_urlencoded", "thiserror 2.0.17", "tokio", + "tokio-stream", "tokio-util", + "tonic 0.14.2", "tower-service", "url", "winapi", ] +[[package]] +name = "bollard-buildkit-proto" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a885520bf6249ab931a764ffdb87b0ceef48e6e7d807cfdb21b751e086e1ad" +dependencies = [ + "prost 0.14.1", + "prost-types 0.14.1", + "tonic 0.14.2", + "tonic-prost", + "ureq", +] + [[package]] name = "bollard-stubs" -version = "1.47.1-rc.27.3.1" +version = "1.49.1-rc.28.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da" +checksum = "5731fe885755e92beff1950774068e0cae67ea6ec7587381536fca84f1779623" dependencies = [ + "base64 0.22.1", + "bollard-buildkit-proto", + "bytes", + "chrono", + "prost 0.14.1", "serde", + "serde_json", "serde_repr", "serde_with", ] @@ -429,9 +422,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.39" +version = "1.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ "find-msvc-tools", "jobserver", @@ -450,9 +443,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" @@ -463,7 +456,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -479,9 +472,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.48" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -489,9 +482,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -501,9 +494,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", @@ -513,9 +506,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "colorchoice" @@ -637,9 +630,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -697,18 +690,18 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "e2e" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "once_cell", - "prost", + "prost 0.13.5", "reqwest", "rock-node-protobufs", "serial_test 2.0.0", "testcontainers", "tokio", "tokio-stream", - "tonic", + "tonic 0.13.1", "tracing", "tracing-subscriber", "uuid", @@ -742,7 +735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -776,9 +769,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fixedbitset" @@ -913,9 +906,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -929,27 +922,21 @@ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "glob" version = "0.3.3" @@ -968,7 +955,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.11.4", + "indexmap 2.12.0", "slab", "tokio", "tokio-util", @@ -1010,11 +997,11 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1164,7 +1151,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "system-configuration", "tokio", "tower-service", @@ -1213,9 +1200,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1226,9 +1213,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1239,11 +1226,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1254,42 +1240,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1337,9 +1319,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -1349,12 +1331,12 @@ dependencies = [ [[package]] name = "integration-tests" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "prometheus", - "prost", + "prost 0.13.5", "rock-node-backfill-plugin", "rock-node-block-access-plugin", "rock-node-core", @@ -1376,17 +1358,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -1395,9 +1366,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" dependencies = [ "memchr", "serde", @@ -1405,18 +1376,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.12.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -1448,15 +1410,15 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -1479,17 +1441,11 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" -version = "0.2.176" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" @@ -1498,7 +1454,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -1507,21 +1463,20 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", - "redox_syscall 0.5.17", + "redox_syscall", ] [[package]] name = "librocksdb-sys" -version = "0.16.0+8.10.0" +version = "0.17.3+10.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3d60bc059831dc1c83903fb45c103f75db65c5a7bf22272764d9cc683e348c" +checksum = "cef2a00ee60fe526157c9023edab23943fae1ce2ab6f4abb2a807c1746835de9" dependencies = [ - "bindgen 0.69.5", + "bindgen", "bzip2-sys", "cc", - "glob", "libc", "libz-sys", "lz4-sys", @@ -1559,17 +1514,16 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -1618,9 +1572,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -1637,24 +1591,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1692,11 +1637,44 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", ] [[package]] @@ -1706,21 +1684,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "num-traits" -version = "0.2.19" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "object" -version = "0.37.3" +name = "num-rational" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "memchr", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", ] [[package]] @@ -1731,17 +1731,17 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -1769,9 +1769,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -1791,9 +1791,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1801,15 +1801,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link 0.2.1", ] [[package]] @@ -1851,20 +1851,19 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.17", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -1872,9 +1871,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", @@ -1885,9 +1884,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2", @@ -1900,7 +1899,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.11.4", + "indexmap 2.12.0", ] [[package]] @@ -1941,11 +1940,17 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -1977,9 +1982,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -1990,7 +1995,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "hex", "procfs-core", "rustix 0.38.44", @@ -2002,7 +2007,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "hex", ] @@ -2030,7 +2035,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" +dependencies = [ + "bytes", + "prost-derive 0.14.1", ] [[package]] @@ -2046,8 +2061,8 @@ dependencies = [ "once_cell", "petgraph", "prettyplease", - "prost", - "prost-types", + "prost 0.13.5", + "prost-types 0.13.5", "regex", "syn", "tempfile", @@ -2066,13 +2081,35 @@ dependencies = [ "syn", ] +[[package]] +name = "prost-derive" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "prost-types" version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "prost", + "prost 0.13.5", +] + +[[package]] +name = "prost-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" +dependencies = [ + "prost 0.14.1", ] [[package]] @@ -2145,25 +2182,16 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", + "getrandom 0.3.4", ] [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", ] [[package]] @@ -2188,9 +2216,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -2200,9 +2228,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -2211,15 +2239,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -2271,7 +2299,7 @@ dependencies = [ [[package]] name = "rock-node" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", @@ -2295,14 +2323,14 @@ dependencies = [ "tempfile", "tokio", "toml 0.8.23", - "tonic", + "tonic 0.13.1", "tracing", "tracing-subscriber", ] [[package]] name = "rock-node-backfill-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", @@ -2316,31 +2344,31 @@ dependencies = [ "tempfile", "tokio", "tokio-stream", - "tonic", + "tonic 0.13.1", "tracing", "tracing-subscriber", ] [[package]] name = "rock-node-block-access-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "futures-util", "prometheus", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "tokio", "tokio-stream", - "tonic", + "tonic 0.13.1", "tracing", ] [[package]] name = "rock-node-core" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", @@ -2354,14 +2382,14 @@ dependencies = [ "tokio", "tokio-test", "toml 0.8.23", - "tonic", + "tonic 0.13.1", "tracing", "uuid", ] [[package]] name = "rock-node-observability-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", @@ -2374,7 +2402,7 @@ dependencies = [ [[package]] name = "rock-node-persistence-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", @@ -2382,7 +2410,7 @@ dependencies = [ "dashmap", "lazy_static", "memmap2", - "prost", + "prost 0.13.5", "regex", "rock-node-core", "rock-node-protobufs", @@ -2397,73 +2425,73 @@ dependencies = [ [[package]] name = "rock-node-protobufs" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "fs_extra", - "prost", + "prost 0.13.5", "protobuf-src", "serde", - "tonic", + "tonic 0.13.1", "tonic-build", "walkdir", ] [[package]] name = "rock-node-publish-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "dashmap", "futures-util", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "tempfile", "thiserror 1.0.69", "tokio", "tokio-stream", - "tonic", + "tonic 0.13.1", "tracing", "uuid", ] [[package]] name = "rock-node-query-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "hex", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "tokio", - "tonic", + "tonic 0.13.1", "tracing", ] [[package]] name = "rock-node-server-status-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "rock-node-core", "rock-node-protobufs", "tokio", - "tonic", + "tonic 0.13.1", "tracing", ] [[package]] name = "rock-node-state-management-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "rocksdb", @@ -2473,31 +2501,31 @@ dependencies = [ [[package]] name = "rock-node-subscriber-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", "dashmap", "futures-util", "prometheus", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "thiserror 1.0.69", "tokio", "tokio-stream", - "tonic", + "tonic 0.13.1", "tracing", "uuid", ] [[package]] name = "rock-node-verifier-plugin" -version = "0.1.0" +version = "0.2.1" dependencies = [ "anyhow", "async-trait", - "prost", + "prost 0.13.5", "rock-node-core", "rock-node-protobufs", "tokio", @@ -2507,9 +2535,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd13e55d6d7b8cd0ea569161127567cd587676c99f4472f779a0279aa60a7a7" +checksum = "ddb7af00d2b17dbd07d82c0063e25411959748ff03e8d4f96134c2ff41fce34f" dependencies = [ "libc", "librocksdb-sys", @@ -2536,18 +2564,6 @@ dependencies = [ "ordered-multimap", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -2560,7 +2576,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -2573,19 +2589,20 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -2596,9 +2613,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -2617,18 +2634,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.6" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ "ring", "rustls-pki-types", @@ -2671,7 +2688,7 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -2688,9 +2705,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "1317c3bf3e7df961da95b0a56a172a02abead31276215a0497241a7624b487ce" dependencies = [ "dyn-clone", "ref-cast", @@ -2716,7 +2733,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -2729,7 +2746,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -2834,19 +2851,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.1" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.12.0", "schemars 0.9.0", - "schemars 1.0.4", - "serde", - "serde_derive", + "schemars 1.0.5", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -2854,9 +2870,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.1" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ "darling", "proc-macro2", @@ -2973,19 +2989,19 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "strsim" @@ -3024,9 +3040,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.106" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -3059,7 +3075,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -3081,21 +3097,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] name = "testcontainers" -version = "0.24.0" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23bb7577dca13ad86a78e8271ef5d322f37229ec83b8d98da6d996c588a1ddb1" +checksum = "3f3ac71069f20ecfa60c396316c283fbf35e6833a53dff551a31b5458da05edc" dependencies = [ + "astral-tokio-tar", "async-trait", "bollard", - "bollard-stubs", "bytes", "docker_credential", "either", @@ -3111,8 +3127,8 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tokio-stream", - "tokio-tar", "tokio-util", + "ulid", "url", ] @@ -3198,9 +3214,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -3208,29 +3224,26 @@ dependencies = [ [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -3268,21 +3281,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-tar" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75" -dependencies = [ - "filetime", - "futures-core", - "libc", - "redox_syscall 0.3.5", - "tokio", - "tokio-stream", - "xattr", -] - [[package]] name = "tokio-test" version = "0.4.4" @@ -3298,9 +3296,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", @@ -3345,7 +3343,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.11.4", + "indexmap 2.12.0", "serde", "serde_spanned", "toml_datetime", @@ -3366,7 +3364,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ "async-trait", - "axum 0.8.5", + "axum 0.8.6", "base64 0.22.1", "bytes", "h2", @@ -3378,7 +3376,7 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost", + "prost 0.13.5", "socket2 0.5.10", "tokio", "tokio-stream", @@ -3388,6 +3386,35 @@ dependencies = [ "tracing", ] +[[package]] +name = "tonic" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" +dependencies = [ + "async-trait", + "axum 0.8.6", + "base64 0.22.1", + "bytes", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "socket2 0.6.1", + "sync_wrapper", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tonic-build" version = "0.13.1" @@ -3397,11 +3424,22 @@ dependencies = [ "prettyplease", "proc-macro2", "prost-build", - "prost-types", + "prost-types 0.13.5", "quote", "syn", ] +[[package]] +name = "tonic-prost" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +dependencies = [ + "bytes", + "prost 0.14.1", + "tonic 0.14.2", +] + [[package]] name = "tower" version = "0.5.2" @@ -3410,7 +3448,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "indexmap 2.11.4", + "indexmap 2.12.0", "pin-project-lite", "slab", "sync_wrapper", @@ -3427,7 +3465,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytes", "futures-util", "http", @@ -3555,9 +3593,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -3565,11 +3603,21 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" +[[package]] +name = "ulid" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" +dependencies = [ + "rand", + "web-time", +] + [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "untrusted" @@ -3577,6 +3625,35 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "ureq" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ba1025f18a4a3fc3e9b48c868e9beb4f24f4b4b1a325bada26bd4119f46537" +dependencies = [ + "base64 0.22.1", + "log", + "percent-encoding", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "ureq-proto", + "utf-8", + "webpki-roots", +] + +[[package]] +name = "ureq-proto" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" +dependencies = [ + "base64 0.22.1", + "http", + "httparse", + "log", +] + [[package]] name = "url" version = "2.5.7" @@ -3589,6 +3666,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -3607,7 +3690,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "wasm-bindgen", ] @@ -3655,15 +3738,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -3675,9 +3749,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -3686,25 +3760,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" dependencies = [ "cfg-if", "js-sys", @@ -3715,9 +3775,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3725,36 +3785,55 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" dependencies = [ "js-sys", "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3777,7 +3856,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.1", + "windows-sys 0.61.2", ] [[package]] @@ -3788,22 +3867,22 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.62.1" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.0", - "windows-result 0.4.0", - "windows-strings 0.5.0", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] name = "windows-implement" -version = "0.60.1" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -3812,9 +3891,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.2" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -3829,9 +3908,9 @@ checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" @@ -3855,11 +3934,11 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -3873,11 +3952,11 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -3904,16 +3983,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.4", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.1" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.0", + "windows-link 0.2.1", ] [[package]] @@ -3934,19 +4013,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.4" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.2.0", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -3957,9 +4036,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -3969,9 +4048,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -3981,9 +4060,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -3993,9 +4072,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -4005,9 +4084,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -4017,9 +4096,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -4029,9 +4108,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -4041,9 +4120,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -4062,9 +4141,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "xattr" @@ -4087,11 +4166,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4099,9 +4177,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -4152,15 +4230,15 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -4169,9 +4247,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -4180,9 +4258,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", @@ -4213,7 +4291,6 @@ version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ - "bindgen 0.72.1", "cc", "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 1078189..7509e0c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,13 +18,13 @@ members = [ [workspace.package] edition = "2021" -version = "0.1.0" +version = "0.2.1" [workspace.dependencies] tokio = { version = "1", features = ["full"] } tonic = { version = "0.13.1", features = ["transport"] } prost = "0.13.5" -config = "0.14" # Updated to avoid unmaintained yaml-rust +config = "0.15" # Updated to avoid unmaintained yaml-rust tracing = "0.1" tracing-subscriber = { version = "0.3.20", features = ["fmt", "env-filter"] } # Fix RUSTSEC-2025-0055 slab = "0.4.11" # Fix RUSTSEC-2025-0047 diff --git a/app/rock-node/Cargo.toml b/app/rock-node/Cargo.toml index 0cf4ee4..2fed71c 100644 --- a/app/rock-node/Cargo.toml +++ b/app/rock-node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-backfill-plugin/Cargo.toml b/crates/rock-node-backfill-plugin/Cargo.toml index 11ad95c..32e8b52 100644 --- a/crates/rock-node-backfill-plugin/Cargo.toml +++ b/crates/rock-node-backfill-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-backfill-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] @@ -29,7 +29,7 @@ tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } prometheus = "0.14" # For RocksDB access -rocksdb = "0.22" +rocksdb = "0.24" rand = "0.9" futures-util = "0.3" diff --git a/crates/rock-node-backfill-plugin/examples/backfill_continious_mode.rs b/crates/rock-node-backfill-plugin/examples/backfill_continious_mode.rs index baf5d24..72eb524 100644 --- a/crates/rock-node-backfill-plugin/examples/backfill_continious_mode.rs +++ b/crates/rock-node-backfill-plugin/examples/backfill_continious_mode.rs @@ -50,7 +50,7 @@ impl BlockReader for MyAppsBlockReader { struct MyAppsBlockWriter; #[async_trait] impl BlockWriter for MyAppsBlockWriter { - async fn write_block(&self, block: &Block) -> Result<()> { + async fn write_block(&self, block: Arc) -> Result<()> { // Because this is only an example, we don't write to a database. info!( "[My App's Writer] The plugin gave me a new block to write: {:?}", @@ -58,7 +58,7 @@ impl BlockWriter for MyAppsBlockWriter { ); Ok(()) } - async fn write_block_batch(&self, blocks: &[Block]) -> Result<()> { + async fn write_block_batch(&self, blocks: Arc>) -> Result<()> { info!( "[My App's Writer] The plugin gave me a batch of {} new blocks to write.", blocks.len() diff --git a/crates/rock-node-backfill-plugin/src/lib.rs b/crates/rock-node-backfill-plugin/src/lib.rs index 504444b..2fe859d 100644 --- a/crates/rock-node-backfill-plugin/src/lib.rs +++ b/crates/rock-node-backfill-plugin/src/lib.rs @@ -146,14 +146,16 @@ mod tests { impl rock_node_core::block_writer::BlockWriter for MockBlockWriter { async fn write_block( &self, - _block: &rock_node_protobufs::com::hedera::hapi::block::stream::Block, + _block: std::sync::Arc, ) -> anyhow::Result<()> { Ok(()) } async fn write_block_batch( &self, - _blocks: &[rock_node_protobufs::com::hedera::hapi::block::stream::Block], + _blocks: std::sync::Arc< + Vec, + >, ) -> anyhow::Result<()> { Ok(()) } diff --git a/crates/rock-node-backfill-plugin/src/worker.rs b/crates/rock-node-backfill-plugin/src/worker.rs index a62877f..8ab8365 100644 --- a/crates/rock-node-backfill-plugin/src/worker.rs +++ b/crates/rock-node-backfill-plugin/src/worker.rs @@ -530,7 +530,7 @@ impl BackfillWorker { .set(block_number as i64); } } - self.block_writer.write_block(&block).await?; + self.block_writer.write_block(Arc::new(block)).await?; } }, Err(status) => return Err(anyhow!("gRPC stream error: {}", status)), @@ -591,7 +591,7 @@ impl BackfillWorker { .backfill_latest_continuous_block .set(block_number as i64); } - self.block_writer.write_block(&block).await?; + self.block_writer.write_block(Arc::new(block)).await?; } Ok(()) } @@ -738,7 +738,7 @@ mod tests { #[async_trait::async_trait] impl BlockWriter for MockBlockWriter { - async fn write_block(&self, _block: &Block) -> anyhow::Result<()> { + async fn write_block(&self, _block: Arc) -> anyhow::Result<()> { if self.should_error { return Err(anyhow::anyhow!("Mock write error")); } @@ -746,7 +746,7 @@ mod tests { Ok(()) } - async fn write_block_batch(&self, blocks: &[Block]) -> anyhow::Result<()> { + async fn write_block_batch(&self, blocks: Arc>) -> anyhow::Result<()> { if self.should_error { return Err(anyhow::anyhow!("Mock batch write error")); } diff --git a/crates/rock-node-block-access-plugin/Cargo.toml b/crates/rock-node-block-access-plugin/Cargo.toml index e5ea0d8..a4ccae8 100644 --- a/crates/rock-node-block-access-plugin/Cargo.toml +++ b/crates/rock-node-block-access-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-block-access-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-core/Cargo.toml b/crates/rock-node-core/Cargo.toml index 99f56e1..d4e2235 100644 --- a/crates/rock-node-core/Cargo.toml +++ b/crates/rock-node-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-core" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] @@ -10,7 +10,7 @@ serde = { version = "1", features = ["derive"] } tonic = "0.13.1" thiserror = "1" anyhow = "1" -rocksdb = "0.22" +rocksdb = "0.24" # For generating unique "Claim Check" keys uuid = { version = "1", features = ["v4"] } diff --git a/crates/rock-node-core/src/block_writer.rs b/crates/rock-node-core/src/block_writer.rs index 6285442..ec23197 100644 --- a/crates/rock-node-core/src/block_writer.rs +++ b/crates/rock-node-core/src/block_writer.rs @@ -9,12 +9,14 @@ use std::sync::Arc; #[async_trait] pub trait BlockWriter: Debug + Send + Sync + 'static { /// Stores a single block. Typically used by the live ingestion pipeline. - async fn write_block(&self, block: &Block) -> Result<()>; + /// Uses Arc to avoid expensive cloning of large protobuf messages. + async fn write_block(&self, block: Arc) -> Result<()>; /// Stores a batch of blocks. Optimized for historical backfilling. /// The implementation should be smart enough to route blocks to the /// correct tier (hot or cold) based on their block number. - async fn write_block_batch(&self, blocks: &[Block]) -> Result<()>; + /// Uses Arc to avoid expensive cloning of large protobuf messages. + async fn write_block_batch(&self, blocks: Arc>) -> Result<()>; } /// A concrete, shareable handle for the BlockWriter service. @@ -68,19 +70,19 @@ mod tests { #[async_trait] impl BlockWriter for MockBlockWriter { - async fn write_block(&self, block: &Block) -> Result<()> { + async fn write_block(&self, block: Arc) -> Result<()> { if *self.should_fail.read().unwrap() { return Err(anyhow::anyhow!("Mock write failure")); } - self.blocks.write().unwrap().push(block.clone()); + self.blocks.write().unwrap().push((*block).clone()); Ok(()) } - async fn write_block_batch(&self, blocks: &[Block]) -> Result<()> { + async fn write_block_batch(&self, blocks: Arc>) -> Result<()> { if *self.should_fail.read().unwrap() { return Err(anyhow::anyhow!("Mock batch write failure")); } - self.blocks.write().unwrap().extend_from_slice(blocks); + self.blocks.write().unwrap().extend_from_slice(&blocks); Ok(()) } } @@ -98,8 +100,8 @@ mod tests { let provider = BlockWriterProvider::new(mock_writer); let writer = provider.get_writer(); - let block = Block::default(); - assert!(writer.write_block(&block).await.is_ok()); + let block = Arc::new(Block::default()); + assert!(writer.write_block(block).await.is_ok()); } #[tokio::test] @@ -111,17 +113,17 @@ mod tests { let writer1 = provider.get_writer(); let writer2 = provider_clone.get_writer(); - let block = Block::default(); - assert!(writer1.write_block(&block).await.is_ok()); - assert!(writer2.write_block(&block).await.is_ok()); + let block = Arc::new(Block::default()); + assert!(writer1.write_block(Arc::clone(&block)).await.is_ok()); + assert!(writer2.write_block(block).await.is_ok()); } #[tokio::test] async fn test_mock_block_writer_write_single_block() { let writer = MockBlockWriter::new(); - let block = Block::default(); + let block = Arc::new(Block::default()); - assert!(writer.write_block(&block).await.is_ok()); + assert!(writer.write_block(block).await.is_ok()); assert_eq!(writer.get_written_blocks().len(), 1); } @@ -130,8 +132,8 @@ mod tests { let writer = MockBlockWriter::new(); for _ in 0..5 { - let block = Block::default(); - assert!(writer.write_block(&block).await.is_ok()); + let block = Arc::new(Block::default()); + assert!(writer.write_block(block).await.is_ok()); } assert_eq!(writer.get_written_blocks().len(), 5); @@ -140,27 +142,27 @@ mod tests { #[tokio::test] async fn test_mock_block_writer_write_batch() { let writer = MockBlockWriter::new(); - let blocks = vec![Block::default(), Block::default(), Block::default()]; + let blocks = Arc::new(vec![Block::default(), Block::default(), Block::default()]); - assert!(writer.write_block_batch(&blocks).await.is_ok()); + assert!(writer.write_block_batch(blocks).await.is_ok()); assert_eq!(writer.get_written_blocks().len(), 3); } #[tokio::test] async fn test_mock_block_writer_write_empty_batch() { let writer = MockBlockWriter::new(); - let blocks: Vec = vec![]; + let blocks: Arc> = Arc::new(vec![]); - assert!(writer.write_block_batch(&blocks).await.is_ok()); + assert!(writer.write_block_batch(blocks).await.is_ok()); assert_eq!(writer.get_written_blocks().len(), 0); } #[tokio::test] async fn test_mock_block_writer_write_large_batch() { let writer = MockBlockWriter::new(); - let blocks = vec![Block::default(); 100]; + let blocks = Arc::new(vec![Block::default(); 100]); - assert!(writer.write_block_batch(&blocks).await.is_ok()); + assert!(writer.write_block_batch(blocks).await.is_ok()); assert_eq!(writer.get_written_blocks().len(), 100); } @@ -169,16 +171,22 @@ mod tests { let writer = MockBlockWriter::new(); // Write single block - writer.write_block(&Block::default()).await.unwrap(); + writer + .write_block(Arc::new(Block::default())) + .await + .unwrap(); // Write batch writer - .write_block_batch(&[Block::default(), Block::default()]) + .write_block_batch(Arc::new(vec![Block::default(), Block::default()])) .await .unwrap(); // Write another single block - writer.write_block(&Block::default()).await.unwrap(); + writer + .write_block(Arc::new(Block::default())) + .await + .unwrap(); assert_eq!(writer.get_written_blocks().len(), 4); } @@ -186,7 +194,10 @@ mod tests { #[tokio::test] async fn test_mock_block_writer_clear() { let writer = MockBlockWriter::new(); - writer.write_block(&Block::default()).await.unwrap(); + writer + .write_block(Arc::new(Block::default())) + .await + .unwrap(); assert_eq!(writer.get_written_blocks().len(), 1); writer.clear(); @@ -198,7 +209,7 @@ mod tests { let writer = MockBlockWriter::new(); writer.set_should_fail(true); - let result = writer.write_block(&Block::default()).await; + let result = writer.write_block(Arc::new(Block::default())).await; assert!(result.is_err()); assert_eq!(writer.get_written_blocks().len(), 0); } @@ -208,8 +219,8 @@ mod tests { let writer = MockBlockWriter::new(); writer.set_should_fail(true); - let blocks = vec![Block::default(), Block::default()]; - let result = writer.write_block_batch(&blocks).await; + let blocks = Arc::new(vec![Block::default(), Block::default()]); + let result = writer.write_block_batch(blocks).await; assert!(result.is_err()); assert_eq!(writer.get_written_blocks().len(), 0); } @@ -219,15 +230,24 @@ mod tests { let writer = MockBlockWriter::new(); // First write succeeds - writer.write_block(&Block::default()).await.unwrap(); + writer + .write_block(Arc::new(Block::default())) + .await + .unwrap(); // Enable failures writer.set_should_fail(true); - assert!(writer.write_block(&Block::default()).await.is_err()); + assert!(writer + .write_block(Arc::new(Block::default())) + .await + .is_err()); // Disable failures and try again writer.set_should_fail(false); - writer.write_block(&Block::default()).await.unwrap(); + writer + .write_block(Arc::new(Block::default())) + .await + .unwrap(); assert_eq!(writer.get_written_blocks().len(), 2); } @@ -250,8 +270,14 @@ mod tests { let writer1 = provider1.get_writer(); let writer2 = provider2.get_writer(); - writer1.write_block(&Block::default()).await.unwrap(); - writer2.write_block(&Block::default()).await.unwrap(); + writer1 + .write_block(Arc::new(Block::default())) + .await + .unwrap(); + writer2 + .write_block(Arc::new(Block::default())) + .await + .unwrap(); // Both should write to the same underlying storage assert_eq!(mock_writer.get_written_blocks().len(), 2); @@ -265,7 +291,8 @@ mod tests { let mut handles = vec![]; for _ in 0..10 { let writer = provider.get_writer(); - let handle = tokio::spawn(async move { writer.write_block(&Block::default()).await }); + let handle = + tokio::spawn(async move { writer.write_block(Arc::new(Block::default())).await }); handles.push(handle); } diff --git a/crates/rock-node-core/src/cache.rs b/crates/rock-node-core/src/cache.rs index 5b9b41a..706bc3e 100644 --- a/crates/rock-node-core/src/cache.rs +++ b/crates/rock-node-core/src/cache.rs @@ -7,8 +7,8 @@ use tokio::sync::Mutex; use tracing::{trace, warn}; use uuid::Uuid; -const CACHE_TTL_SECONDS: u64 = 300; // 5 minutes -const CLEANUP_INTERVAL_SECONDS: u64 = 30; +const CACHE_TTL_SECONDS: u64 = 60; // 1 minute fallback safety net +const CLEANUP_INTERVAL_SECONDS: u64 = 10; /// A thread-safe, in-memory cache to hold block data temporarily /// while it passes through the processing pipeline. @@ -102,10 +102,12 @@ impl BlockDataCache { self.cache.get(key).map(|entry| entry.value().0.clone()) } - /// Marks a cache entry for future deletion by the background task. + /// Removes a cache entry immediately; if it no longer exists the key is queued as a fallback. pub async fn mark_for_removal(&self, key: Uuid) { - let mut queue = self.cleanup_queue.lock().await; - queue.insert(key); + if self.cache.remove(&key).is_none() { + let mut queue = self.cleanup_queue.lock().await; + queue.insert(key); + } } } @@ -178,19 +180,15 @@ mod tests { let block_data = create_test_block_data(10); let key = cache.insert(block_data); - // Verify the block is in the cache assert!(cache.get(&key).is_some()); - - // Mark for removal cache.mark_for_removal(key).await; - // Block should still be retrievable immediately after marking - assert!(cache.get(&key).is_some()); - - // Wait for cleanup interval + a bit more - sleep(Duration::from_secs(CLEANUP_INTERVAL_SECONDS + 2)).await; + // Entry should be dropped immediately + assert!(cache.get(&key).is_none()); - // Block should now be removed + // Ensure calling again is a no-op but does not panic + cache.mark_for_removal(key).await; + sleep(Duration::from_secs(CLEANUP_INTERVAL_SECONDS + 1)).await; assert!(cache.get(&key).is_none()); } @@ -379,13 +377,11 @@ mod tests { // Mark for removal cache.mark_for_removal(key).await; - // Still accessible before cleanup - assert!(cache.get(&key).is_some()); + // Should no longer be accessible + assert!(cache.get(&key).is_none()); - // Wait for cleanup + // Cleanup cycle runs without issues sleep(Duration::from_secs(CLEANUP_INTERVAL_SECONDS + 2)).await; - - // Should be removed assert!(cache.get(&key).is_none()); } } diff --git a/crates/rock-node-core/src/test_utils.rs b/crates/rock-node-core/src/test_utils.rs index 97d25a7..652a037 100644 --- a/crates/rock-node-core/src/test_utils.rs +++ b/crates/rock-node-core/src/test_utils.rs @@ -176,17 +176,17 @@ impl MockBlockWriter { impl crate::BlockWriter for MockBlockWriter { async fn write_block( &self, - block: &rock_node_protobufs::com::hedera::hapi::block::stream::Block, + block: Arc, ) -> anyhow::Result<()> { - self.blocks.write().unwrap().push(block.clone()); + self.blocks.write().unwrap().push((*block).clone()); Ok(()) } async fn write_block_batch( &self, - blocks: &[rock_node_protobufs::com::hedera::hapi::block::stream::Block], + blocks: Arc>, ) -> anyhow::Result<()> { - self.blocks.write().unwrap().extend_from_slice(blocks); + self.blocks.write().unwrap().extend_from_slice(&blocks); Ok(()) } } @@ -255,7 +255,7 @@ mod tests { let writer = MockBlockWriter::new(); let block = rock_node_protobufs::com::hedera::hapi::block::stream::Block::default(); - writer.write_block(&block).await.unwrap(); + writer.write_block(Arc::new(block)).await.unwrap(); assert_eq!(writer.get_written_blocks().len(), 1); writer.clear(); diff --git a/crates/rock-node-observability-plugin/Cargo.toml b/crates/rock-node-observability-plugin/Cargo.toml index e5618de..41596e5 100644 --- a/crates/rock-node-observability-plugin/Cargo.toml +++ b/crates/rock-node-observability-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-observability-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-persistence-plugin/Cargo.toml b/crates/rock-node-persistence-plugin/Cargo.toml index ec3ff7a..1d7f1ab 100644 --- a/crates/rock-node-persistence-plugin/Cargo.toml +++ b/crates/rock-node-persistence-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-persistence-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" publish = false @@ -20,7 +20,7 @@ tracing = "0.1" anyhow = "1" # For the hot-tier key-value store -rocksdb = "0.22" +rocksdb = "0.24" # For binary serialization of data into the DB serde = { version = "1.0", features = ["derive"] } diff --git a/crates/rock-node-persistence-plugin/src/lib.rs b/crates/rock-node-persistence-plugin/src/lib.rs index db5fb92..ded9bec 100644 --- a/crates/rock-node-persistence-plugin/src/lib.rs +++ b/crates/rock-node-persistence-plugin/src/lib.rs @@ -299,7 +299,7 @@ async fn process_event(event: InboundEvent, context: &AppContext, service: &Pers if let Some(data) = context.block_data_cache.get(&cache_key) { match Block::decode(data.contents.as_slice()) { Ok(block_proto) => { - if let Err(e) = service.write_block(&block_proto).await { + if let Err(e) = service.write_block(Arc::new(block_proto)).await { error!("Failed to persist block #{}: {}", block_number, e); } else { trace!("Successfully persisted block #{}.", block_number); diff --git a/crates/rock-node-persistence-plugin/src/service.rs b/crates/rock-node-persistence-plugin/src/service.rs index 9556e49..5945e07 100644 --- a/crates/rock-node-persistence-plugin/src/service.rs +++ b/crates/rock-node-persistence-plugin/src/service.rs @@ -97,19 +97,19 @@ impl BlockReader for PersistenceService { #[async_trait] impl BlockWriter for PersistenceService { - async fn write_block(&self, block: &Block) -> Result<()> { + async fn write_block(&self, block: Arc) -> Result<()> { let timer = self .metrics .persistence_write_duration_seconds .with_label_values(&["live"]) .start_timer(); - let block_number = get_block_number(block)?; + let block_number = get_block_number(&block)?; let state = self.state.clone(); let hot_tier = self.hot_tier.clone(); let archiver = self.archiver.clone(); let start_block_number = self.start_block_number; - let block = block.clone(); + // No cloning needed - just Arc::clone the pointer! tokio::task::spawn_blocking(move || -> Result<()> { let mut batch = WriteBatch::default(); @@ -197,7 +197,7 @@ impl BlockWriter for PersistenceService { Ok(()) } - async fn write_block_batch(&self, blocks: &[Block]) -> Result<()> { + async fn write_block_batch(&self, blocks: Arc>) -> Result<()> { if blocks.is_empty() { return Ok(()); } @@ -214,7 +214,7 @@ impl BlockWriter for PersistenceService { let archiver = self.archiver.clone(); let cold_reader = self.cold_reader.clone(); let state = self.state.clone(); - let blocks = blocks.to_vec(); + // No cloning needed - blocks is already Arc! tokio::task::spawn_blocking(move || -> Result<()> { let new_index_path = archiver.cold_writer.write_archive(&blocks)?; @@ -316,8 +316,14 @@ mod tests { let service = make_service(&tmp, 100); // write 100 and 102 to create a gap at 101 - service.write_block(&make_block(100)).await.unwrap(); - service.write_block(&make_block(102)).await.unwrap(); + service + .write_block(Arc::new(make_block(100))) + .await + .unwrap(); + service + .write_block(Arc::new(make_block(102))) + .await + .unwrap(); assert_eq!( service.get_latest_persisted_block_number().unwrap(), @@ -327,7 +333,10 @@ mod tests { assert!(service.state.find_containing_gap(101).unwrap().is_some()); // Fill the gap with 101 and ensure highest_contiguous advances to 102 - service.write_block(&make_block(101)).await.unwrap(); + service + .write_block(Arc::new(make_block(101))) + .await + .unwrap(); assert_eq!(service.get_highest_contiguous_block_number().unwrap(), 102); // Read from hot tier @@ -341,7 +350,7 @@ mod tests { let tmp = TempDir::new().unwrap(); let service = make_service(&tmp, 50); let blocks: Vec = (40..45).map(make_block).collect(); - service.write_block_batch(&blocks).await.unwrap(); + service.write_block_batch(Arc::new(blocks)).await.unwrap(); assert_eq!( service.get_earliest_persisted_block_number().unwrap(), Some(40) diff --git a/crates/rock-node-protobufs/Cargo.toml b/crates/rock-node-protobufs/Cargo.toml index 53973eb..a359a7f 100644 --- a/crates/rock-node-protobufs/Cargo.toml +++ b/crates/rock-node-protobufs/Cargo.toml @@ -1,14 +1,12 @@ -# File: rock-node-workspace/crates/rock-node-protobufs/Cargo.toml [package] name = "rock-node-protobufs" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] tonic = "0.13.1" prost = "0.13.5" -# Add serde as a dependency for the generated structs serde = { version = "1", features = ["derive"] } [build-dependencies] diff --git a/crates/rock-node-publish-plugin/Cargo.toml b/crates/rock-node-publish-plugin/Cargo.toml index 69811db..5db3523 100644 --- a/crates/rock-node-publish-plugin/Cargo.toml +++ b/crates/rock-node-publish-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-publish-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-query-plugin/Cargo.toml b/crates/rock-node-query-plugin/Cargo.toml index 2ab4a17..403aa2f 100644 --- a/crates/rock-node-query-plugin/Cargo.toml +++ b/crates/rock-node-query-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-query-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-server-status-plugin/Cargo.toml b/crates/rock-node-server-status-plugin/Cargo.toml index bde88ae..1d74504 100644 --- a/crates/rock-node-server-status-plugin/Cargo.toml +++ b/crates/rock-node-server-status-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-server-status-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-state-management-plugin/Cargo.toml b/crates/rock-node-state-management-plugin/Cargo.toml index 6e120c2..e60ca89 100644 --- a/crates/rock-node-state-management-plugin/Cargo.toml +++ b/crates/rock-node-state-management-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-state-management-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] @@ -23,7 +23,7 @@ tracing = "0.1" prost = "0.13.5" # Add the RocksDB dependency -rocksdb = "0.22" +rocksdb = "0.24" # Add async-trait for async methods in traits async-trait = "0.1" diff --git a/crates/rock-node-subscriber-plugin/Cargo.toml b/crates/rock-node-subscriber-plugin/Cargo.toml index 770e0f1..4067253 100644 --- a/crates/rock-node-subscriber-plugin/Cargo.toml +++ b/crates/rock-node-subscriber-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-subscriber-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/crates/rock-node-verifier-plugin/Cargo.toml b/crates/rock-node-verifier-plugin/Cargo.toml index 42b8488..d084ecb 100644 --- a/crates/rock-node-verifier-plugin/Cargo.toml +++ b/crates/rock-node-verifier-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rock-node-verifier-plugin" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/tests/e2e/Cargo.toml b/tests/e2e/Cargo.toml index 83216de..57da90e 100644 --- a/tests/e2e/Cargo.toml +++ b/tests/e2e/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "e2e" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] @@ -10,7 +10,7 @@ anyhow = "1" reqwest = { version = "0.12", features = ["json"] } tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } -testcontainers = "0.24" +testcontainers = "0.25" rock-node-protobufs = { path = "../../crates/rock-node-protobufs" } tonic = { version = "0.13.1", features = ["transport", "codegen"] } prost = "0.13.5" diff --git a/tests/e2e/src/tests/mod.rs b/tests/e2e/src/tests/mod.rs index e126a23..9d73c75 100644 --- a/tests/e2e/src/tests/mod.rs +++ b/tests/e2e/src/tests/mod.rs @@ -4,7 +4,8 @@ pub mod block_access_suite; pub mod gap_ingestion_suite; pub mod health_check; pub mod publish; -pub mod query_suites; +// TODO: This test needs state rework +// pub mod query_suites; pub mod resiliency_suite; pub mod server_status_suite; pub mod subscribe; diff --git a/tests/integration/Cargo.toml b/tests/integration/Cargo.toml index 4a33957..94b26c8 100644 --- a/tests/integration/Cargo.toml +++ b/tests/integration/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "integration-tests" -version = "0.1.0" +version = "0.2.1" edition = "2021" [dependencies] diff --git a/tests/integration/src/tests/end_to_end_workflows.rs b/tests/integration/src/tests/end_to_end_workflows.rs index d848c43..f8d78b1 100644 --- a/tests/integration/src/tests/end_to_end_workflows.rs +++ b/tests/integration/src/tests/end_to_end_workflows.rs @@ -5,6 +5,7 @@ use rock_node_persistence_plugin::PersistencePlugin; use rock_node_publish_plugin::PublishPlugin; use rock_node_verifier_plugin::VerifierPlugin; use std::any::TypeId; +use std::sync::Arc; use tokio::time::{timeout, Duration}; use tracing_test::traced_test; @@ -64,7 +65,7 @@ async fn test_persist_and_retrieve_block() { let block = builder.create_block(1); // Write block - writer.write_block(&block).await.unwrap(); + writer.write_block(Arc::new(block)).await.unwrap(); // Now read it back using BlockReader let reader_provider = providers @@ -111,7 +112,7 @@ async fn test_batch_block_persistence() { let blocks = builder.create_block_batch(10); // Write batch - this should succeed without errors - let result = writer.write_block_batch(&blocks).await; + let result = writer.write_block_batch(Arc::new(blocks)).await; assert!(result.is_ok(), "Batch write should succeed"); } @@ -165,9 +166,18 @@ async fn test_gap_detection() { let builder = TestDataBuilder::new(); // Write blocks 1, 2, then skip to 5 (creating gaps) - writer.write_block(&builder.create_block(1)).await.unwrap(); - writer.write_block(&builder.create_block(2)).await.unwrap(); - writer.write_block(&builder.create_block(5)).await.unwrap(); + writer + .write_block(Arc::new(builder.create_block(1))) + .await + .unwrap(); + writer + .write_block(Arc::new(builder.create_block(2))) + .await + .unwrap(); + writer + .write_block(Arc::new(builder.create_block(5))) + .await + .unwrap(); // Check highest contiguous (should be 2, not 5) let reader_provider = providers @@ -217,7 +227,8 @@ async fn test_concurrent_block_writes() { for i in 1..=10 { let writer_clone = writer.clone(); let block = builder.create_block(i); - let handle = tokio::spawn(async move { writer_clone.write_block(&block).await }); + let handle = + tokio::spawn(async move { writer_clone.write_block(Arc::new(block)).await }); handles.push(handle); } @@ -272,7 +283,7 @@ async fn test_high_throughput_block_processing() { let batch: Vec<_> = (batch_start..batch_start + 10) .map(|i| builder.create_block(i)) .collect(); - if writer.write_block_batch(&batch).await.is_ok() { + if writer.write_block_batch(Arc::new(batch)).await.is_ok() { success_count += 10; } } @@ -366,12 +377,21 @@ async fn test_plugin_continues_after_error() { let builder = TestDataBuilder::new(); // Write a valid block - writer.write_block(&builder.create_block(1)).await.unwrap(); + writer + .write_block(Arc::new(builder.create_block(1))) + .await + .unwrap(); // Even if there's an error (which we can't easily simulate here), // the plugin should continue accepting new blocks - writer.write_block(&builder.create_block(2)).await.unwrap(); - writer.write_block(&builder.create_block(3)).await.unwrap(); + writer + .write_block(Arc::new(builder.create_block(2))) + .await + .unwrap(); + writer + .write_block(Arc::new(builder.create_block(3))) + .await + .unwrap(); // Verify all blocks persisted let reader_provider = providers @@ -415,9 +435,21 @@ async fn test_cache_memory_management_under_load() { cache.mark_for_removal(*key).await; } - // They should still be accessible immediately + // They should be removed immediately for key in keys.iter().take(500) { - assert!(cache.get(key).is_some()); + assert!( + cache.get(key).is_none(), + "Block should be removed from cache immediately" + ); + } + + // Remaining 500 should still be accessible + for (i, key) in keys.iter().skip(500).enumerate() { + assert!( + cache.get(key).is_some(), + "Block {} should still be in cache", + i + 501 + ); } } @@ -476,7 +508,10 @@ async fn test_metrics_during_pipeline_operation() { // Write 10 blocks for i in 1..=10 { - writer.write_block(&builder.create_block(i)).await.unwrap(); + writer + .write_block(Arc::new(builder.create_block(i))) + .await + .unwrap(); } } diff --git a/tests/integration/src/tests/event_flow.rs b/tests/integration/src/tests/event_flow.rs index 79b9fdb..cc3744e 100644 --- a/tests/integration/src/tests/event_flow.rs +++ b/tests/integration/src/tests/event_flow.rs @@ -135,8 +135,8 @@ async fn test_cache_lifecycle() { // Mark for removal cache.mark_for_removal(key).await; - // Should still be accessible immediately - assert!(cache.get(&key).is_some()); + // Should be removed immediately + assert!(cache.get(&key).is_none()); } #[tokio::test]