From b57d95c6103b8a33743cde6df6b4eed898184300 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Tue, 16 Jul 2024 14:15:07 -0700 Subject: [PATCH] chore(deps): upgrade dependencies, fix hyper io traits issue (#252) --- Cargo.lock | 367 ++++++++++++++----------------------- Cargo.toml | 27 +-- crates/krata/Cargo.toml | 3 + crates/krata/src/client.rs | 13 +- crates/krata/src/lib.rs | 3 + crates/krata/src/unix.rs | 73 ++++++++ 6 files changed, 238 insertions(+), 248 deletions(-) create mode 100644 crates/krata/src/unix.rs diff --git a/Cargo.lock b/Cargo.lock index 83262642..3823a8f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,12 @@ dependencies = [ "syn 2.0.57", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.2.0" @@ -163,18 +169,17 @@ checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "axum" -version = "0.6.20" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" dependencies = [ "async-trait", "axum-core", - "bitflags 1.3.2", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", + "http", + "http-body", + "http-body-util", "itoa", "matchit", "memchr", @@ -183,7 +188,7 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.1", "tower", "tower-layer", "tower-service", @@ -191,26 +196,29 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper 0.1.2", "tower-layer", "tower-service", ] [[package]] name = "backhand" -version = "0.15.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25019127c4061fa4ddfcde7cc65894a9ec65e00007960b2cc0a3b89efdfa5c9" +checksum = "8f2fc1bc7bb7fd449e02000cc1592cc63dcdcd61710f8b9efe32bab2d1784603" dependencies = [ "deku", "flate2", @@ -410,7 +418,7 @@ version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.57", @@ -561,38 +569,14 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "darling_core 0.20.8", - "darling_macro 0.20.8", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -609,24 +593,13 @@ dependencies = [ "syn 2.0.57", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "darling_core 0.20.8", + "darling_core", "quote", "syn 2.0.57", ] @@ -665,25 +638,27 @@ dependencies = [ [[package]] name = "deku" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819b87cc7a05b3abe3fc38e59b3980a5fd3162f25a247116441a9171d3e84481" +checksum = "709ade444d53896e60f6265660eb50480dd08b77bfc822e5dcc233b88b0b2fba" dependencies = [ "bitvec", "deku_derive", + "no_std_io", + "rustversion", ] [[package]] name = "deku_derive" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2ca12572239215a352a74ad7c776d7e8a914f8a23511c6cbedddd887e5009e" +checksum = "d7534973f93f9de83203e41c8ddd32d230599fa73fa889f3deb1580ccd186913" dependencies = [ - "darling 0.14.4", + "darling", "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.57", ] [[package]] @@ -701,7 +676,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" dependencies = [ - "darling 0.20.8", + "darling", "proc-macro2", "quote", "syn 2.0.57", @@ -786,9 +761,9 @@ dependencies = [ [[package]] name = "etherparse" -version = "0.14.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095ab548cf452be5813424558a18af88f0a620d0f4a3d8793aa09311a3b6fa5f" +checksum = "21696e6dfe1057a166a042c6d27b89a46aad2ee1003e6e1e03c49d54fd3270d7" dependencies = [ "arrayvec", ] @@ -989,16 +964,16 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", - "http 0.2.12", + "http", "indexmap 2.2.6", "slab", "tokio", @@ -1041,12 +1016,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1065,17 +1034,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.1.0" @@ -1087,17 +1045,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.0" @@ -1105,7 +1052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http 1.1.0", + "http", ] [[package]] @@ -1116,8 +1063,8 @@ checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" dependencies = [ "bytes", "futures-core", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "pin-project-lite", ] @@ -1147,42 +1094,20 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "httparse", - "itoa", - "pin-project-lite", "smallvec", "tokio", "want", @@ -1195,41 +1120,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.2.0", + "http", + "hyper", "hyper-util", - "rustls 0.23.7", + "rustls", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tower-service", "webpki-roots", ] [[package]] name = "hyper-timeout" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 0.14.28", + "hyper", + "hyper-util", "pin-project-lite", "tokio", - "tokio-io-timeout", + "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.2.0", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", @@ -1320,6 +1246,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -1351,10 +1286,13 @@ dependencies = [ "anyhow", "async-trait", "bytes", + "hyper", + "hyper-util", "libc", "log", "nix 0.29.0", "once_cell", + "pin-project-lite", "prost", "prost-build", "prost-reflect", @@ -1882,6 +1820,15 @@ dependencies = [ "libc", ] +[[package]] +name = "no_std_io" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fa5f306a6f2c01b4fd172f29bb46195b1764061bf926c75e96ff55df3178208" +dependencies = [ + "memchr", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -2096,12 +2043,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "toml_edit 0.21.1", ] [[package]] @@ -2139,9 +2085,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" dependencies = [ "bytes", "prost-derive", @@ -2149,13 +2095,13 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +checksum = "5bb182580f71dd070f88d01ce3de9f4da5021db7115d2e1c3605a754153b77c1" dependencies = [ "bytes", - "heck 0.5.0", - "itertools", + "heck", + "itertools 0.13.0", "log", "multimap", "once_cell", @@ -2170,12 +2116,12 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" dependencies = [ "anyhow", - "itertools", + "itertools 0.13.0", "proc-macro2", "quote", "syn 2.0.57", @@ -2183,9 +2129,9 @@ dependencies = [ [[package]] name = "prost-reflect" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5eec97d5d34bdd17ad2db2219aabf46b054c6c41bd5529767c9ce55be5898f" +checksum = "55a6a9143ae25c25fa7b6a48d6cc08b10785372060009c25140a4e7c340e95af" dependencies = [ "base64 0.22.1", "once_cell", @@ -2198,9 +2144,9 @@ dependencies = [ [[package]] name = "prost-reflect-build" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88efc86388935bd2a10db545e4aaefcd15b067f921c09001d952c3d50078e214" +checksum = "50e2537231d94dd2778920c2ada37dd9eb1ac0325bb3ee3ee651bd44c1134123" dependencies = [ "prost-build", "prost-reflect", @@ -2208,9 +2154,9 @@ dependencies = [ [[package]] name = "prost-reflect-derive" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c3f519df051f8a700c5aa42b53f9c42d54959506b7ed58ac7a6af7991fdc22" +checksum = "f4fce6b22f15cc8d8d400a2b98ad29202b33bd56c7d9ddd815bc803a807ecb65" dependencies = [ "proc-macro2", "quote", @@ -2219,9 +2165,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" dependencies = [ "prost", ] @@ -2237,7 +2183,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.7", + "rustls", "thiserror", "tokio", "tracing", @@ -2253,7 +2199,7 @@ dependencies = [ "rand", "ring", "rustc-hash", - "rustls 0.23.7", + "rustls", "slab", "thiserror", "tinyvec", @@ -2320,19 +2266,20 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.26.3" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef" +checksum = "d16546c5b5962abf8ce6e2881e722b4e0ae3b6f1a08a26ae3573c55853ca68d3" dependencies = [ "bitflags 2.5.0", "cassowary", "compact_str", "crossterm", - "itertools", + "itertools 0.13.0", "lru", "paste", "stability", "strum", + "strum_macros", "unicode-segmentation", "unicode-truncate", "unicode-width", @@ -2424,10 +2371,10 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", - "hyper 1.2.0", + "hyper", "hyper-rustls", "hyper-util", "ipnet", @@ -2438,7 +2385,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.7", + "rustls", "rustls-pemfile", "rustls-pki-types", "serde", @@ -2446,7 +2393,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 1.0.1", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls", "tower-service", "url", "wasm-bindgen", @@ -2514,26 +2461,13 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - [[package]] name = "rustls" version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebbbdb961df0ad3f2652da8f3fdc4b36122f568f968f45ad3316f26c025c677b" dependencies = [ + "log", "once_cell", "ring", "rustls-pki-types", @@ -2571,9 +2505,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" @@ -2834,11 +2768,11 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", @@ -2933,9 +2867,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "804a949d00f0fe6d3935127238b04ef4f56131c7cab670584194f17f01fca6b6" [[package]] name = "thiserror" @@ -2991,16 +2925,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-macros" version = "2.3.0" @@ -3012,24 +2936,13 @@ dependencies = [ "syn 2.0.57", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.7", + "rustls", "rustls-pki-types", "tokio", ] @@ -3094,9 +3007,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap 2.2.6", "toml_datetime", @@ -3118,27 +3031,29 @@ dependencies = [ [[package]] name = "tonic" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +checksum = "f738b6a169a29bca4e39656db89c44a08e09c5b700b896ee9e7459f0652e81dd" dependencies = [ "async-stream", "async-trait", "axum", - "base64 0.21.7", + "base64 0.22.1", "bytes", "h2", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", + "http", + "http-body", + "http-body-util", + "hyper", "hyper-timeout", + "hyper-util", "percent-encoding", "pin-project", "prost", "rustls-pemfile", - "rustls-pki-types", + "socket2", "tokio", - "tokio-rustls 0.25.0", + "tokio-rustls", "tokio-stream", "tower", "tower-layer", @@ -3148,9 +3063,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2" +checksum = "690943cc223adcdd67bb597a2e573ead1b88e999ba37528fe8e6356bf44b29b6" dependencies = [ "prettyplease", "proc-macro2", @@ -3237,9 +3152,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "udp-stream" -version = "0.0.11" +version = "0.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3919f77f6284b720c9b775dcac42a399198a3667d893ba26700da3d1c6b85baa" +checksum = "cf021324a3dc10f5b46ab1c1cf5635e6a81b5559971967b806674673a5f2a18e" dependencies = [ "bytes", "log", @@ -3279,15 +3194,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5fbabedabe362c618c714dbefda9927b5afc8e2a8102f47f081089a9019226" dependencies = [ - "itertools", + "itertools 0.12.1", "unicode-width", ] [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unsafe-libyaml" diff --git a/Cargo.toml b/Cargo.toml index bc235d4f..3a7e5d1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ arrayvec = "0.7.4" async-compression = "0.4.11" async-stream = "0.3.5" async-trait = "0.1.81" -backhand = "0.15.0" +backhand = "0.18.0" base64 = "0.22.1" byteorder = "1" bytes = "1.6.1" @@ -41,10 +41,12 @@ crossterm = "0.27.0" ctrlc = "3.4.4" elf = "0.7.4" env_logger = "0.11.0" -etherparse = "0.14.3" +etherparse = "0.15.0" fancy-duration = "0.9.2" flate2 = "1.0" futures = "0.3.30" +hyper = "1.4.1" +hyper-util = "0.1.6" human_bytes = "0.4" indexmap = "2.2.6" indicatif = "0.17.8" @@ -60,13 +62,14 @@ oci-spec = "0.6.7" once_cell = "1.19.0" path-absolutize = "3.1.1" path-clean = "1.0.1" +pin-project-lite = "0.2.14" platform-info = "2.0.3" -prost = "0.12.6" -prost-build = "0.12.6" -prost-reflect-build = "0.13.0" -prost-types = "0.12.6" +prost = "0.13.1" +prost-build = "0.13.1" +prost-reflect-build = "0.14.0" +prost-types = "0.13.1" rand = "0.8.5" -ratatui = "0.26.3" +ratatui = "0.27.0" redb = "2.1.1" regex = "1.10.5" rtnetlink = "0.14.1" @@ -78,13 +81,13 @@ signal-hook = "0.3.17" slice-copy = "0.3.0" smoltcp = "0.11.0" sysinfo = "0.30.13" -termtree = "0.4.1" +termtree = "0.5.0" thiserror = "1.0" tokio-tun = "0.11.5" toml = "0.8.14" -tonic-build = "0.11.0" +tonic-build = "0.12.0" tower = "0.4.13" -udp-stream = "0.0.11" +udp-stream = "0.0.12" url = "2.5.2" walkdir = "2" xz2 = "0.1" @@ -94,7 +97,7 @@ version = "4.5.9" features = ["derive"] [workspace.dependencies.prost-reflect] -version = "0.13.1" +version = "0.14.0" features = ["derive"] [workspace.dependencies.reqwest] @@ -119,7 +122,7 @@ version = "0.1" features = ["io-util", "net"] [workspace.dependencies.tonic] -version = "0.11.0" +version = "0.12.0" features = ["tls"] [workspace.dependencies.uuid] diff --git a/crates/krata/Cargo.toml b/crates/krata/Cargo.toml index b5114e84..ca177f03 100644 --- a/crates/krata/Cargo.toml +++ b/crates/krata/Cargo.toml @@ -15,6 +15,7 @@ bytes = { workspace = true } libc = { workspace = true } log = { workspace = true } once_cell = { workspace = true } +pin-project-lite = { workspace = true } prost = { workspace = true } prost-reflect = { workspace = true } prost-types = { workspace = true } @@ -27,6 +28,8 @@ tower = { workspace = true } url = { workspace = true } [target.'cfg(unix)'.dependencies] +hyper = { workspace = true } +hyper-util = { workspace = true } nix = { workspace = true, features = ["term"] } [build-dependencies] diff --git a/crates/krata/src/client.rs b/crates/krata/src/client.rs index 33df6673..a9304050 100644 --- a/crates/krata/src/client.rs +++ b/crates/krata/src/client.rs @@ -1,14 +1,10 @@ +#[cfg(unix)] +use crate::unix::HyperUnixConnector; use crate::{dial::ControlDialAddress, v1::control::control_service_client::ControlServiceClient}; #[cfg(not(unix))] use anyhow::anyhow; use anyhow::Result; -#[cfg(unix)] -use tokio::net::UnixStream; -#[cfg(unix)] -use tonic::transport::Uri; use tonic::transport::{Channel, ClientTlsConfig, Endpoint}; -#[cfg(unix)] -use tower::service_fn; pub struct ControlClientProvider {} @@ -52,10 +48,7 @@ impl ControlClientProvider { async fn dial_unix_socket(path: String) -> Result { // This URL is not actually used but is required to be specified. Ok(Endpoint::try_from(format!("unix://localhost/{}", path))? - .connect_with_connector(service_fn(|uri: Uri| { - let path = uri.path().to_string(); - UnixStream::connect(path) - })) + .connect_with_connector(HyperUnixConnector {}) .await?) } } diff --git a/crates/krata/src/lib.rs b/crates/krata/src/lib.rs index fc97f331..149e24ab 100644 --- a/crates/krata/src/lib.rs +++ b/crates/krata/src/lib.rs @@ -12,6 +12,9 @@ pub mod launchcfg; #[cfg(target_os = "linux")] pub mod ethtool; +#[cfg(unix)] +pub mod unix; + pub static DESCRIPTOR_POOL: Lazy = Lazy::new(|| { DescriptorPool::decode( include_bytes!(concat!(env!("OUT_DIR"), "/file_descriptor_set.bin")).as_ref(), diff --git a/crates/krata/src/unix.rs b/crates/krata/src/unix.rs new file mode 100644 index 00000000..1bd0f60b --- /dev/null +++ b/crates/krata/src/unix.rs @@ -0,0 +1,73 @@ +use std::future::Future; +use std::io::Error; +use std::pin::Pin; +use std::task::{Context, Poll}; + +use hyper::rt::ReadBufCursor; +use hyper_util::rt::TokioIo; +use pin_project_lite::pin_project; +use tokio::io::AsyncWrite; +use tokio::net::UnixStream; +use tonic::transport::Uri; +use tower::Service; + +pin_project! { + #[derive(Debug)] + pub struct HyperUnixStream { + #[pin] + pub stream: UnixStream, + } +} + +impl hyper::rt::Read for HyperUnixStream { + fn poll_read( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: ReadBufCursor<'_>, + ) -> Poll> { + let mut tokio = TokioIo::new(self.project().stream); + Pin::new(&mut tokio).poll_read(cx, buf) + } +} + +impl hyper::rt::Write for HyperUnixStream { + fn poll_write( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + buf: &[u8], + ) -> Poll> { + self.project().stream.poll_write(cx, buf) + } + + fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.project().stream.poll_flush(cx) + } + + fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + self.project().stream.poll_shutdown(cx) + } +} + +pub struct HyperUnixConnector; + +impl Service for HyperUnixConnector { + type Response = HyperUnixStream; + type Error = Error; + #[allow(clippy::type_complexity)] + type Future = + Pin> + Send + 'static>>; + + fn call(&mut self, req: Uri) -> Self::Future { + let fut = async move { + let path = req.path().to_string(); + let stream = UnixStream::connect(path).await?; + Ok(HyperUnixStream { stream }) + }; + + Box::pin(fut) + } + + fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(Ok(())) + } +}