diff --git a/Cargo.lock b/Cargo.lock index 35aa4f1ef..f265a39da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -195,6 +195,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" +[[package]] +name = "async-compression" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c1f86859c1af3d514fa19e8323147ff10ea98684e6c7b307912509f50e67b2" +dependencies = [ + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -877,6 +890,23 @@ dependencies = [ "memchr", ] +[[package]] +name = "compression-codecs" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680dc087785c5230f8e8843e2e57ac7c1c90488b6a91b88caa265410568f441b" +dependencies = [ + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" + [[package]] name = "console" version = "0.15.8" @@ -1056,7 +1086,7 @@ dependencies = [ "crucible-common", "crucible-protocol", "crucible-workspace-hack", - "dropshot", + "dropshot 0.16.7", "fakedata_generator", "futures", "futures-core", @@ -1115,7 +1145,7 @@ dependencies = [ "anyhow", "atty", "crucible-workspace-hack", - "dropshot", + "dropshot 0.16.7", "nix 0.30.1", "rustls-pemfile 1.0.4", "schemars", @@ -1611,7 +1641,7 @@ dependencies = [ "camino", "chrono", "debug-ignore", - "dropshot_endpoint", + "dropshot_endpoint 0.16.7", "form_urlencoded", "futures", "hostname 0.4.2", @@ -1649,11 +1679,64 @@ dependencies = [ "waitgroup", ] +[[package]] +name = "dropshot" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409eb76c7ea1623d270393248ff55ec436841fcd724c2e1c9de294291edd35f5" +dependencies = [ + "async-compression", + "async-stream", + "async-trait", + "base64 0.22.1", + "bytes", + "camino", + "chrono", + "debug-ignore", + "dropshot_endpoint 0.17.0", + "form_urlencoded", + "futures", + "hostname 0.4.2", + "http", + "http-body-util", + "hyper", + "hyper-util", + "indexmap", + "multer", + "openapiv3", + "paste", + "percent-encoding", + "rustls 0.22.4", + "rustls-pemfile 2.2.0", + "schemars", + "scopeguard", + "semver 1.0.27", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "slog", + "slog-async", + "slog-bunyan", + "slog-json", + "slog-term", + "thiserror 2.0.18", + "tokio", + "tokio-rustls 0.25.0", + "tokio-util", + "toml 1.0.6+spec-1.1.0", + "usdt 0.6.0", + "uuid", + "version_check", + "waitgroup", +] + [[package]] name = "dropshot-api-manager" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c38a99616a680fafd8b7a03cc300aab80b0bbf0fb17c6baac53431d9d12b64b5" +checksum = "27edffb6c55e640e420fb4a03ac0a066449100e936457e2db074ab8f5f208c8a" dependencies = [ "anyhow", "atomicwrites", @@ -1661,7 +1744,7 @@ dependencies = [ "clap", "debug-ignore", "drift", - "dropshot", + "dropshot 0.17.0", "dropshot-api-manager-types", "fs-err", "git-stub", @@ -1684,9 +1767,9 @@ dependencies = [ [[package]] name = "dropshot-api-manager-types" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5116e3d69b975bb89824a721d0326707b8643e4fd3ba69ca880de1aada768cf" +checksum = "63d655f88937cd3cc3a99b81f731af996084f2f16d0067b2cfad43411ad4317f" dependencies = [ "anyhow", "camino", @@ -1710,6 +1793,21 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "dropshot_endpoint" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "906c3adfd4472030607130ed763e9af1b85f7e18832dd22998379d42ff81c28d" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "semver 1.0.27", + "serde", + "serde_tokenstream", + "syn 2.0.117", +] + [[package]] name = "dtrace-parser" version = "0.2.0" @@ -1819,7 +1917,7 @@ name = "ereport-types" version = "0.1.0" source = "git+https://github.com/oxidecomputer/omicron?branch=main#b8efb9a08b366541c71eb6334b54768f3cbee724" dependencies = [ - "dropshot", + "dropshot 0.16.7", "omicron-uuid-kinds", "omicron-workspace-hack", "schemars", @@ -2077,9 +2175,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -2092,9 +2190,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -2108,9 +2206,9 @@ checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -2119,15 +2217,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -2136,21 +2234,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -2160,7 +2258,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -2212,7 +2309,7 @@ version = "0.1.0" source = "git+https://github.com/oxidecomputer/omicron?branch=main#b8efb9a08b366541c71eb6334b54768f3cbee724" dependencies = [ "daft", - "dropshot", + "dropshot 0.16.7", "gateway-messages", "hex", "omicron-common", @@ -2291,11 +2388,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.2.0", "wasi 0.14.2+wasi-0.2.4", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + [[package]] name = "gimli" version = "0.28.1" @@ -2733,14 +2843,13 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", "http", "http-body", @@ -2900,6 +3009,12 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "id-map" version = "0.1.0" @@ -2979,7 +3094,7 @@ dependencies = [ "cfg-if", "crucible-smf", "debug-ignore", - "dropshot", + "dropshot 0.16.7", "futures", "http", "ipnetwork", @@ -3345,6 +3460,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" version = "0.2.180" @@ -3869,7 +3990,7 @@ dependencies = [ "daft", "derive-where", "derive_more", - "dropshot", + "dropshot 0.16.7", "futures", "gateway-client", "gateway-types", @@ -4215,7 +4336,7 @@ dependencies = [ "camino", "chrono", "daft", - "dropshot", + "dropshot 0.16.7", "futures", "hex", "http", @@ -4531,7 +4652,7 @@ dependencies = [ "clickward", "const_format", "debug-ignore", - "dropshot", + "dropshot 0.16.7", "futures", "gethostname 0.5.0", "highway", @@ -4602,7 +4723,7 @@ version = "0.1.0" source = "git+https://github.com/oxidecomputer/omicron?branch=main#b8efb9a08b366541c71eb6334b54768f3cbee724" dependencies = [ "chrono", - "dropshot", + "dropshot 0.16.7", "internal-dns-resolver", "internal-dns-types", "nexus-client", @@ -4925,7 +5046,7 @@ dependencies = [ "camino", "cfg-if", "cpuid_utils", - "dropshot", + "dropshot 0.17.0", "errno 0.2.8", "fatfs", "flate2", @@ -5007,7 +5128,7 @@ dependencies = [ "byteorder", "chrono", "cpuid_utils", - "dropshot", + "dropshot 0.17.0", "futures", "http", "itertools 0.13.0", @@ -5657,7 +5778,7 @@ dependencies = [ "atty", "base64 0.21.7", "clap", - "dropshot", + "dropshot 0.17.0", "futures", "hyper", "progenitor 0.13.0", @@ -5709,7 +5830,7 @@ dependencies = [ "const_format", "cpuid_utils", "crucible-client-types", - "dropshot", + "dropshot 0.17.0", "erased-serde 0.4.5", "expectorate", "futures", @@ -5764,7 +5885,7 @@ name = "propolis-server-api" version = "0.1.0" dependencies = [ "crucible-client-types", - "dropshot", + "dropshot 0.17.0", "dropshot-api-manager-types", "propolis-api-types-versions", ] @@ -5964,6 +6085,12 @@ version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -6271,7 +6398,7 @@ dependencies = [ "ascii", "bitflags 2.9.4", "clap", - "dropshot", + "dropshot 0.17.0", "futures", "image", "rgb_frame", @@ -7502,9 +7629,9 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags 2.9.4", "core-foundation 0.9.4", @@ -7855,9 +7982,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -8732,11 +8859,11 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.19.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.4.2", "js-sys", "serde_core", "wasm-bindgen", @@ -8870,6 +8997,24 @@ dependencies = [ "wit-bindgen-rt", ] +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasite" version = "0.1.0" @@ -8935,6 +9080,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.0" @@ -8961,6 +9128,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.9.4", + "hashbrown 0.15.2", + "indexmap", + "semver 1.0.27", +] + [[package]] name = "web-sys" version = "0.3.85" @@ -9610,6 +9789,26 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + [[package]] name = "wit-bindgen-rt" version = "0.39.0" @@ -9619,6 +9818,74 @@ dependencies = [ "bitflags 2.9.4", ] +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.9.4", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + [[package]] name = "write16" version = "1.0.0" diff --git a/Cargo.toml b/Cargo.toml index 4265b5595..1f95029ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -117,9 +117,9 @@ clap = "4.2" const_format = "0.2" crossbeam-channel = "0.5" ctrlc = "3.2" -dropshot = "0.16.6" -dropshot-api-manager = "0.5.2" -dropshot-api-manager-types = "0.5.2" +dropshot = "0.17.0" +dropshot-api-manager = "0.7.0" +dropshot-api-manager-types = "0.7.0" erased-serde = "0.4" errno = "0.2.8" escargot = "0.5.8" diff --git a/bin/mock-server/src/main.rs b/bin/mock-server/src/main.rs index 32dc8bfa8..6fa9917d8 100644 --- a/bin/mock-server/src/main.rs +++ b/bin/mock-server/src/main.rs @@ -8,7 +8,9 @@ use std::sync::Arc; use anyhow::anyhow; use clap::Parser; -use dropshot::{ConfigDropshot, HandlerTaskMode, HttpServerStarter}; +use dropshot::{ + CompressionConfig, ConfigDropshot, HandlerTaskMode, HttpServerStarter, +}; use slog::{info, Drain}; #[derive(Debug, Parser)] @@ -113,6 +115,7 @@ async fn main() -> anyhow::Result<()> { default_request_body_max_bytes: 1024 * 1024, // 1M for ISO bytes default_handler_task_mode: HandlerTaskMode::Detached, log_headers: vec![], + compression: CompressionConfig::None, }; let log = build_logger(); diff --git a/bin/propolis-server/src/main.rs b/bin/propolis-server/src/main.rs index b03c8149a..4a4a96aec 100644 --- a/bin/propolis-server/src/main.rs +++ b/bin/propolis-server/src/main.rs @@ -18,8 +18,8 @@ use propolis_server::{ use anyhow::{anyhow, Context}; use clap::Parser; use dropshot::{ - ClientSpecifiesVersionInHeader, ConfigDropshot, HandlerTaskMode, - VersionPolicy, + ClientSpecifiesVersionInHeader, CompressionConfig, ConfigDropshot, + HandlerTaskMode, VersionPolicy, }; use slog::{info, Logger}; @@ -308,6 +308,7 @@ fn main() -> anyhow::Result<()> { default_request_body_max_bytes: 1024 * 1024, // 1M for ISO bytes default_handler_task_mode: HandlerTaskMode::Detached, log_headers: vec![], + compression: CompressionConfig::None, }; let log = build_logger(log_level);