diff --git a/Cargo.lock b/Cargo.lock index 1515e30e44..5993bdfb69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,19 +4,13 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -68,7 +62,7 @@ dependencies = [ "getrandom", "once_cell", "version_check", - "zerocopy 0.7.34", + "zerocopy 0.7.35", ] [[package]] @@ -109,9 +103,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -130,27 +124,27 @@ checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -213,15 +207,15 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -380,9 +374,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.4" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel 2.3.1", "async-io", @@ -395,7 +389,6 @@ dependencies = [ "futures-lite", "rustix", "tracing", - "windows-sys 0.59.0", ] [[package]] @@ -457,9 +450,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -468,9 +461,9 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", @@ -564,9 +557,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backoff" @@ -584,17 +577,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide 0.7.2", - "object 0.32.2", + "miniz_oxide", + "object 0.36.5", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -635,7 +628,7 @@ checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" dependencies = [ "async-trait", "futures-util", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "tokio", ] @@ -681,9 +674,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.69.4" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ "bitflags 2.6.0", "cexpr", @@ -725,9 +718,9 @@ checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" [[package]] name = "bitfield-struct" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657dce144574f921af10a92876a96f0ca05dd830900598d21d91c8e4cf78f74" +checksum = "adc0846593a56638b74e136a45610f9934c052e14761bebca6b092d5522599e3" dependencies = [ "proc-macro2", "quote", @@ -783,9 +776,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.1" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" dependencies = [ "arrayref", "arrayvec", @@ -793,7 +786,7 @@ dependencies = [ "cfg-if", "constant_time_eq", "memmap2", - "rayon", + "rayon-core", ] [[package]] @@ -907,9 +900,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "regex-automata", @@ -1071,13 +1064,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -1191,6 +1184,27 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "chrono-tz" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94fea34d77a245229e7746bd2beb786cd2a896f306ff491fb8cecb3074b10a7" +dependencies = [ + "parse-zoneinfo", + "phf_codegen", +] + [[package]] name = "ciborium" version = "0.2.2" @@ -1231,9 +1245,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", @@ -1277,9 +1291,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clickhouse-admin-api" @@ -1362,9 +1376,9 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "5.3.1" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", ] @@ -1418,9 +1432,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colored" @@ -1496,9 +1510,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "convert_case" @@ -1546,15 +1560,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1593,9 +1607,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -1652,15 +1666,15 @@ dependencies = [ [[package]] name = "critical-section" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" +checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -1686,9 +1700,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crossterm" @@ -1700,7 +1714,7 @@ dependencies = [ "crossterm_winapi", "futures-core", "mio", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rustix", "serde", "signal-hook", @@ -1910,9 +1924,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -1920,9 +1934,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", @@ -1934,9 +1948,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", @@ -2066,9 +2080,9 @@ dependencies = [ [[package]] name = "der_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", @@ -2098,18 +2112,18 @@ dependencies = [ [[package]] name = "derive_builder" -version = "0.20.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" dependencies = [ "derive_builder_macro", ] [[package]] name = "derive_builder_core" -version = "0.20.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ "darling", "proc-macro2", @@ -2119,9 +2133,9 @@ dependencies = [ [[package]] name = "derive_builder_macro" -version = "0.20.0" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", "syn 2.0.79", @@ -2209,7 +2223,7 @@ dependencies = [ [[package]] name = "diesel-dtrace" version = "0.3.0" -source = "git+https://github.com/oxidecomputer/diesel-dtrace?branch=main#8fcc2bb37c635598c39711d8034b14227c210096" +source = "git+https://github.com/oxidecomputer/diesel-dtrace?branch=main#f781d0dbc822adbb49fee509ccd9a5389c34e169" dependencies = [ "diesel", "serde", @@ -2220,9 +2234,9 @@ dependencies = [ [[package]] name = "diesel_derives" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ff2be1e7312c858b2ef974f5c7089833ae57b5311b334b30923af58e5718d8" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" dependencies = [ "diesel_table_macro_syntax", "dsl_auto_type", @@ -2390,7 +2404,7 @@ dependencies = [ "serde", "serde_json", "thiserror", - "zerocopy 0.7.34", + "zerocopy 0.7.35", ] [[package]] @@ -2591,6 +2605,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "ena" version = "0.14.3" @@ -2646,7 +2666,7 @@ dependencies = [ "serde", "serde_json", "sled-agent-types", - "socket2 0.5.7", + "socket2", "tokio", "toml 0.8.19", "uuid", @@ -2672,11 +2692,11 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.79", @@ -2730,18 +2750,15 @@ dependencies = [ [[package]] name = "error-code" -version = "3.2.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" +checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" [[package]] name = "escape8259" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4911e3666fcd7826997b4745c8224295a6f3072f1418c3067b97a67557ee" -dependencies = [ - "rustversion", -] +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" [[package]] name = "event-listener" @@ -2867,12 +2884,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "finl_unicode" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" - [[package]] name = "fixedbitset" version = "0.4.2" @@ -2881,9 +2892,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flagset" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb3aa5e95cf9aabc17f060cfa0ced7b83f042390760ca53bf09df9968acaa1" +checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" [[package]] name = "flate2" @@ -2892,7 +2903,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -2928,6 +2939,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -3221,7 +3238,7 @@ dependencies = [ "serde-big-array", "slog", "slog-error-chain", - "socket2 0.5.7", + "socket2", "string_cache", "thiserror", "tlvc 0.3.1 (git+https://github.com/oxidecomputer/tlvc.git?branch=main)", @@ -3286,9 +3303,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -3309,9 +3326,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "git2" @@ -3334,9 +3351,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -3508,6 +3525,11 @@ name = "hashbrown" version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "hashlink" @@ -3650,7 +3672,7 @@ dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner 0.6.0", + "enum-as-inner 0.6.1", "futures-channel", "futures-io", "futures-util", @@ -3677,7 +3699,7 @@ dependencies = [ "ipconfig", "lru-cache", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "rand", "resolv-conf", "smallvec 1.13.2", @@ -3695,7 +3717,7 @@ dependencies = [ "async-trait", "bytes", "cfg-if", - "enum-as-inner 0.6.0", + "enum-as-inner 0.6.1", "futures-util", "hickory-proto", "serde", @@ -3796,9 +3818,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -3813,7 +3835,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -3825,9 +3847,9 @@ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -3919,7 +3941,7 @@ dependencies = [ [[package]] name = "hubtools" version = "0.4.6" -source = "git+https://github.com/oxidecomputer/hubtools.git?branch=main#943c4bbe6b50d1ab635d085d6204895fb4154e79" +source = "git+https://github.com/oxidecomputer/hubtools.git?branch=main#f48e2da029ba6552cff5c07ff8a2fc21cc56aa32" dependencies = [ "hex", "lpc55_areas", @@ -3959,7 +3981,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "socket2", "tokio", "tower-service", "tracing", @@ -3977,7 +3999,7 @@ dependencies = [ "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -4016,7 +4038,7 @@ dependencies = [ "http 1.1.0", "hyper 1.4.1", "hyper-util", - "rustls 0.23.10", + "rustls 0.23.14", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -4069,10 +4091,10 @@ dependencies = [ "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", - "socket2 0.5.7", + "socket2", "tokio", "tower-service", "tracing", @@ -4080,9 +4102,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -4394,9 +4416,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -4488,7 +4510,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.7", + "socket2", "widestring", "windows-sys 0.48.0", "winreg", @@ -4512,11 +4534,11 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] @@ -4529,9 +4551,9 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "ispf" @@ -4585,9 +4607,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -4719,7 +4741,7 @@ checksum = "b024e211b1b371da58cd69e4fb8fa4ed16915edcc0e2e1fb04ac4bad61959f25" [[package]] name = "libfalcon" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/falcon?branch=main#d8c38f890040f90cdc467e23f3f06b6372a9921c" +source = "git+https://github.com/oxidecomputer/falcon?branch=main#651fb5889d66be90ac1afa4a730c573b643aef1e" dependencies = [ "anstyle", "anyhow", @@ -4776,9 +4798,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -4806,16 +4828,16 @@ dependencies = [ "oxnet", "rand", "rusty-doors", - "socket2 0.5.7", + "socket2", "thiserror", "tracing", - "winnow 0.6.18", + "winnow 0.6.20", ] [[package]] name = "libnet" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/netadm-sys#4ceaf96e02acb8258ea4aa403326c08932324835" +source = "git+https://github.com/oxidecomputer/netadm-sys#e07ad76458eb50601e0da4f9da16dbc942bfc2ba" dependencies = [ "anyhow", "cfg-if", @@ -4825,10 +4847,13 @@ dependencies = [ "num_enum", "nvpair", "nvpair-sys", + "oxnet", + "rand", "rusty-doors", - "socket2 0.4.10", + "socket2", "thiserror", "tracing", + "winnow 0.6.20", ] [[package]] @@ -4857,7 +4882,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", ] [[package]] @@ -4904,9 +4929,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -4998,11 +5023,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -5082,9 +5107,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap" @@ -5098,9 +5123,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ "libc", ] @@ -5154,9 +5179,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -5168,15 +5193,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" -dependencies = [ - "adler", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -5262,11 +5278,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -6010,11 +6025,11 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "nu-ansi-term" -version = "0.50.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2800e1520bdc966782168a627aa5d1ad92e33b984bf7c7615d31280c83ff14" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -6032,9 +6047,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -6205,18 +6220,18 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "olpc-cjson" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d637c9c15b639ccff597da8f4fa968300651ad2f1e968aefc3b4927a6fb2027a" +checksum = "696183c9b5fe81a7715d074fd632e8bd46f4ccc0231a3ed7fc580a80de5f7083" dependencies = [ "serde", "serde_json", @@ -7023,6 +7038,7 @@ dependencies = [ "generic-array", "getrandom", "group", + "hashbrown 0.15.0", "hex", "hickory-proto", "hmac", @@ -7052,12 +7068,15 @@ dependencies = [ "peg-runtime", "pem-rfc7468", "petgraph", + "phf", + "phf_shared 0.11.2", "pkcs8", "postgres-types", "predicates", "proc-macro2", "qorb", "quote", + "rand", "regex", "regex-automata", "regex-syntax 0.8.5", @@ -7065,7 +7084,7 @@ dependencies = [ "ring 0.17.8", "rsa", "rustix", - "rustls 0.23.10", + "rustls 0.23.14", "schemars", "scopeguard", "semver 1.0.23", @@ -7100,7 +7119,7 @@ dependencies = [ "usdt-impl", "uuid", "x509-cert", - "zerocopy 0.7.34", + "zerocopy 0.7.35", "zeroize", ] @@ -7144,9 +7163,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "opaque-debug" @@ -7372,7 +7391,7 @@ dependencies = [ "smoltcp 0.11.0", "tabwriter", "uuid", - "zerocopy 0.7.34", + "zerocopy 0.7.35", ] [[package]] @@ -7475,6 +7494,7 @@ dependencies = [ "camino", "camino-tempfile", "chrono", + "chrono-tz", "clap", "clickward", "criterion", @@ -7485,9 +7505,11 @@ dependencies = [ "futures", "gethostname", "highway", + "iana-time-zone", "indexmap 2.6.0", "itertools 0.13.0", "libc", + "nom", "num", "omicron-common", "omicron-test-utils", @@ -7669,7 +7691,7 @@ dependencies = [ [[package]] name = "oxnet" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/oxnet#2612d2203effcfdcbf83778a77f1bfd03fe6ed24" +source = "git+https://github.com/oxidecomputer/oxnet#7dacd265f1bcd0f8b47bd4805250c4f0812da206" dependencies = [ "ipnetwork", "schemars", @@ -7781,9 +7803,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core 0.9.10", @@ -7811,7 +7833,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", "smallvec 1.13.2", "windows-targets 0.52.6", ] @@ -7847,6 +7869,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "944553dd59c802559559161f9816429058b869003836120e262e8caec061b7ae" +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + [[package]] name = "partial-io" version = "0.5.4" @@ -7904,9 +7935,9 @@ dependencies = [ [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" dependencies = [ "camino", ] @@ -7987,9 +8018,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -7998,9 +8029,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -8008,9 +8039,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", @@ -8021,9 +8052,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.10" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ "once_cell", "pest", @@ -8051,6 +8082,26 @@ dependencies = [ "phf_shared 0.11.2", ] +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand", +] + [[package]] name = "phf_shared" version = "0.10.0" @@ -8071,18 +8122,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", @@ -8152,9 +8203,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plain" @@ -8164,9 +8215,9 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plotters" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" dependencies = [ "num-traits", "plotters-backend", @@ -8177,15 +8228,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" [[package]] name = "plotters-svg" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" dependencies = [ "plotters-backend", ] @@ -8251,18 +8302,19 @@ source = "git+https://github.com/oxidecomputer/poptrie?branch=multipath#ca52bef3 [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "postcard" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" dependencies = [ "cobs", - "embedded-io", + "embedded-io 0.4.0", + "embedded-io 0.6.1", "serde", ] @@ -8307,9 +8359,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy 0.7.35", +] [[package]] name = "pq-sys" @@ -8341,15 +8396,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -8659,7 +8714,7 @@ dependencies = [ [[package]] name = "qorb" version = "0.0.2" -source = "git+https://github.com/oxidecomputer/qorb?branch=master#de6f7784790c813931042dcc98c84413ecf11826" +source = "git+https://github.com/oxidecomputer/qorb?branch=master#88452176c7a9a573cf300d42a7c8147328224ce1" dependencies = [ "anyhow", "async-trait", @@ -8706,8 +8761,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.10", - "socket2 0.5.7", + "rustls 0.23.14", + "socket2", "thiserror", "tokio", "tracing", @@ -8723,7 +8778,7 @@ dependencies = [ "rand", "ring 0.17.8", "rustc-hash 2.0.0", - "rustls 0.23.10", + "rustls 0.23.14", "slab", "thiserror", "tinyvec", @@ -8738,7 +8793,7 @@ checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" dependencies = [ "libc", "once_cell", - "socket2 0.5.7", + "socket2", "tracing", "windows-sys 0.59.0", ] @@ -8759,7 +8814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" dependencies = [ "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "scheduled-thread-pool", ] @@ -8945,18 +9000,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -9118,7 +9173,7 @@ dependencies = [ "futures-util", "h2 0.4.6", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "hyper 1.4.1", "hyper-rustls 0.27.3", @@ -9133,7 +9188,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.10", + "rustls 0.23.14", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -9360,9 +9415,9 @@ dependencies = [ [[package]] name = "russh-cryptovec" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b077b6dd8d8c085dac62f7fcc5a83df60c7f7a22d49bfba994f2f4dbf60bc74" +checksum = "fadd2c0ab350e21c66556f94ee06f766d8bdae3213857ba7610bfd8e10e51880" dependencies = [ "libc", "winapi", @@ -9513,31 +9568,31 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" dependencies = [ "log", "once_cell", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", "rustls-pemfile 2.2.0", @@ -9582,9 +9637,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring 0.17.8", "rustls-pki-types", @@ -9712,11 +9767,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -9725,7 +9780,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.2", + "parking_lot 0.12.3", ] [[package]] @@ -9827,9 +9882,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", "core-foundation", @@ -9840,9 +9895,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -9977,9 +10032,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -10535,9 +10590,9 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75976f4748ab44f6e5332102be424e7c2dc18daeaf7e725f2040c3ebb133512e" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ "futures-core", "pin-project", @@ -10546,26 +10601,16 @@ dependencies = [ [[package]] name = "snafu-derive" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b19911debfb8c2fb1107bc6cb2d61868aaf53a988449213959bb1b5b1ed95f" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.79", ] -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.7" @@ -10637,7 +10682,7 @@ dependencies = [ "ed25519-dalek", "libipcc", "pem-rfc7468", - "rustls 0.23.10", + "rustls 0.23.14", "secrecy", "serde", "sha2", @@ -10777,7 +10822,7 @@ checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "phf_shared 0.10.0", "precomputed-hash", "serde", @@ -10791,13 +10836,13 @@ checksum = "7b3c8667cd96245cbb600b8dec5680a7319edd719c5aa2b5d23c6bff94f39765" [[package]] name = "stringprep" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ - "finl_unicode", "unicode-bidi", "unicode-normalization", + "unicode-properties", ] [[package]] @@ -10921,9 +10966,9 @@ dependencies = [ [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "supports-color" @@ -11216,9 +11261,9 @@ dependencies = [ [[package]] name = "thread-id" -version = "4.2.1" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0ec81c46e9eb50deaa257be2f148adf052d1fb7701cfd55ccfab2525280b70b" +checksum = "cfe8f25bbdd100db7e1d34acf7fd2dc59c4bf8f7483f505eaa7d4f12f76cc0ea" dependencies = [ "libc", "winapi", @@ -11297,9 +11342,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -11382,10 +11427,10 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2", "tokio-macros", "windows-sys 0.52.0", ] @@ -11424,14 +11469,14 @@ dependencies = [ "futures-channel", "futures-util", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.3", "percent-encoding", "phf", "pin-project-lite", "postgres-protocol", "postgres-types", "rand", - "socket2 0.5.7", + "socket2", "tokio", "tokio-util", "whoami", @@ -11464,7 +11509,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.14", "rustls-pki-types", "tokio", ] @@ -11574,7 +11619,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.18", + "winnow 0.6.20", ] [[package]] @@ -11632,9 +11677,9 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -11700,9 +11745,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "207aa50d36c4be8d8c6ea829478be44a372c6a77669937bb39c698e52f1491e8" +checksum = "8923cde76a6329058a86f04d033f0945a2c6df8b94093512e4ab188b3e3a8950" dependencies = [ "glob", "serde", @@ -11906,9 +11951,9 @@ dependencies = [ [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unarray" @@ -11927,9 +11972,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" @@ -11945,40 +11990,47 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-truncate" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5fbabedabe362c618c714dbefda9927b5afc8e2a8102f47f081089a9019226" +checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" dependencies = [ - "itertools 0.12.1", + "itertools 0.13.0", + "unicode-segmentation", "unicode-width", ] [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unicode_categories" @@ -12166,9 +12218,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" @@ -12254,9 +12306,9 @@ dependencies = [ [[package]] name = "vte_generate_state_changes" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" dependencies = [ "proc-macro2", "quote", @@ -12313,19 +12365,20 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -12338,9 +12391,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -12350,9 +12403,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12360,9 +12413,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -12373,15 +12426,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" dependencies = [ "futures-util", "js-sys", @@ -12392,9 +12445,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -12402,9 +12455,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] @@ -12427,7 +12480,7 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.5.1", + "redox_syscall 0.5.7", "wasite", "web-sys", ] @@ -12674,11 +12727,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -12895,9 +12948,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -13020,12 +13073,12 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive 0.7.34", + "zerocopy-derive 0.7.35", ] [[package]] @@ -13041,9 +13094,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 25345eac06..fbf13f8e82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -312,6 +312,7 @@ cargo_metadata = "0.18.1" chacha20poly1305 = "0.10.1" cfg-if = "1.0" chrono = { version = "0.4", features = [ "serde" ] } +chrono-tz = "0.10.0" ciborium = "0.2.2" clap = { version = "4.5", features = ["cargo", "derive", "env", "wrap_help"] } clickhouse-admin-api = { path = "clickhouse-admin/api" } @@ -398,6 +399,7 @@ hyper-util = "0.1.9" hyper-rustls = "0.26.0" hyper-staticfile = "0.10.0" illumos-utils = { path = "illumos-utils" } +iana-time-zone = "0.1.61" indent_write = "2.2.0" indexmap = "2.6.0" indicatif = { version = "0.17.8", features = ["rayon"] } @@ -611,7 +613,7 @@ tokio-util = { version = "0.7.12", features = ["io", "io-util"] } toml = "0.8.19" toml_edit = "0.22.22" tough = { version = "0.17.1", features = [ "http" ] } -trybuild = "1.0.99" +trybuild = "1.0.100" tufaceous = { path = "tufaceous" } tufaceous-lib = { path = "tufaceous-lib" } tui-tree-widget = "0.22.0" diff --git a/common/src/api/external/mod.rs b/common/src/api/external/mod.rs index 69fc841812..083497258c 100644 --- a/common/src/api/external/mod.rs +++ b/common/src/api/external/mod.rs @@ -726,16 +726,16 @@ impl From for i64 { } /// Generation numbers stored in the database, used for optimistic concurrency -/// control. -/// -/// A generation is a value between 0 and 2**63-1, i.e. equivalent to a u63. -/// The reason is that we store it as an i64 in the database, and we want to -/// disallow negative values. (We could potentially use two's complement to -/// store values greater than that as negative values, but surely 2**63 is -/// enough.) -/// -/// TODO: This allows deserialization into a value that's out of range. That's -/// not correct. See . +/// control +// +// A generation is a value between 0 and 2**63-1, i.e. equivalent to a u63. +// The reason is that we store it as an i64 in the database, and we want to +// disallow negative values. (We could potentially use two's complement to +// store values greater than that as negative values, but surely 2**63 is +// enough.) +// +// TODO: This allows deserialization into a value that's out of range. That's +// not correct. See . #[derive( Copy, Clone, diff --git a/dev-tools/openapi-manager/src/spec.rs b/dev-tools/openapi-manager/src/spec.rs index 90e5a9b733..dafcebac05 100644 --- a/dev-tools/openapi-manager/src/spec.rs +++ b/dev-tools/openapi-manager/src/spec.rs @@ -93,7 +93,7 @@ pub fn all_apis() -> Vec { }, ApiSpec { title: "Oxide Region API", - version: "20241009.0", + version: "20241204.0", description: "API for interacting with the Oxide control plane", boundary: ApiBoundary::External, api_description: diff --git a/dev-tools/releng/src/main.rs b/dev-tools/releng/src/main.rs index 7cf5459088..9f95344862 100644 --- a/dev-tools/releng/src/main.rs +++ b/dev-tools/releng/src/main.rs @@ -41,7 +41,7 @@ use crate::job::Jobs; /// to as "v8", "version 8", or "release 8" to customers). The use of semantic /// versioning is mostly to hedge for perhaps wanting something more granular in /// the future. -const BASE_VERSION: Version = Version::new(11, 0, 0); +const BASE_VERSION: Version = Version::new(12, 0, 0); const RETRY_ATTEMPTS: usize = 3; diff --git a/nexus/external-api/src/lib.rs b/nexus/external-api/src/lib.rs index 918cc6188d..b05366e0c5 100644 --- a/nexus/external-api/src/lib.rs +++ b/nexus/external-api/src/lib.rs @@ -23,7 +23,7 @@ use omicron_common::api::external::{ use openapi_manager_types::ValidationContext; use openapiv3::OpenAPI; -pub const API_VERSION: &str = "20241009.0"; +pub const API_VERSION: &str = "20241204.0"; // API ENDPOINT FUNCTION NAMING CONVENTIONS // diff --git a/openapi/nexus.json b/openapi/nexus.json index c4c5324324..97f9830b7a 100644 --- a/openapi/nexus.json +++ b/openapi/nexus.json @@ -7,7 +7,7 @@ "url": "https://oxide.computer", "email": "api@oxide.computer" }, - "version": "20241009.0" + "version": "20241204.0" }, "paths": { "/device/auth": { diff --git a/oximeter/db/Cargo.toml b/oximeter/db/Cargo.toml index a1750e3fc9..af66028ad3 100644 --- a/oximeter/db/Cargo.toml +++ b/oximeter/db/Cargo.toml @@ -15,13 +15,16 @@ async-trait.workspace = true bcs.workspace = true camino.workspace = true chrono.workspace = true +chrono-tz.workspace = true clap.workspace = true clickward.workspace = true dropshot.workspace = true futures.workspace = true gethostname.workspace = true highway.workspace = true +iana-time-zone.workspace = true libc.workspace = true +nom.workspace = true num.workspace = true omicron-common.workspace = true omicron-workspace-hack.workspace = true diff --git a/oximeter/db/src/bin/oxdb/main.rs b/oximeter/db/src/bin/oxdb/main.rs index 3ad8959e66..2f80518145 100644 --- a/oximeter/db/src/bin/oxdb/main.rs +++ b/oximeter/db/src/bin/oxdb/main.rs @@ -361,7 +361,9 @@ async fn main() -> anyhow::Result<()> { .await? } #[cfg(feature = "native-sql")] - Subcommand::NativeSql => oximeter_db::shells::native::shell().await?, + Subcommand::NativeSql => { + oximeter_db::shells::native::shell(args.address).await? + } } Ok(()) } diff --git a/oximeter/db/src/native/block.rs b/oximeter/db/src/native/block.rs index 026ee49744..a51b27352f 100644 --- a/oximeter/db/src/native/block.rs +++ b/oximeter/db/src/native/block.rs @@ -7,11 +7,20 @@ //! Types for working with actual blocks and columns of data. use super::Error; -use chrono::{DateTime, Utc}; +use chrono::{DateTime, NaiveDate}; +use chrono_tz::Tz; use indexmap::IndexMap; +use nom::{ + bytes::complete::{tag, take_while1}, + character::complete::u8 as nom_u8, + combinator::{eof, map, map_opt, opt}, + sequence::{delimited, preceded, tuple}, + IResult, +}; use std::{ fmt, net::{Ipv4Addr, Ipv6Addr}, + sync::LazyLock, }; use uuid::Uuid; @@ -78,11 +87,13 @@ impl Block { if !self.matches_structure(&block) { return Err(Error::MismatchedBlockStructure); } + let n_new_rows = block.n_rows; for (our_col, their_col) in self.columns.values_mut().zip(block.columns.into_values()) { our_col.concat(their_col).expect("Checked above"); } + self.n_rows += n_new_rows; Ok(()) } @@ -195,8 +206,9 @@ pub enum ValueArray { Uuid(Vec), Ipv4(Vec), Ipv6(Vec), - DateTime(Vec>), - DateTime64 { precision: Precision, values: Vec> }, + Date(Vec), + DateTime { tz: Tz, values: Vec> }, + DateTime64 { precision: Precision, tz: Tz, values: Vec> }, Nullable { is_null: Vec, values: Box }, Enum8 { variants: IndexMap, values: Vec }, Array { inner_type: DataType, values: Vec }, @@ -221,7 +233,8 @@ impl ValueArray { ValueArray::Uuid(inner) => inner.len(), ValueArray::Ipv4(inner) => inner.len(), ValueArray::Ipv6(inner) => inner.len(), - ValueArray::DateTime(inner) => inner.len(), + ValueArray::Date(inner) => inner.len(), + ValueArray::DateTime { values, .. } => values.len(), ValueArray::DateTime64 { values, .. } => values.len(), ValueArray::Nullable { values, .. } => values.len(), ValueArray::Enum8 { values, .. } => values.len(), @@ -248,10 +261,15 @@ impl ValueArray { DataType::Uuid => ValueArray::Uuid(vec![]), DataType::Ipv4 => ValueArray::Ipv4(vec![]), DataType::Ipv6 => ValueArray::Ipv6(vec![]), - DataType::DateTime => ValueArray::DateTime(vec![]), - DataType::DateTime64(precision) => { - ValueArray::DateTime64 { precision: *precision, values: vec![] } + DataType::Date => ValueArray::Date(vec![]), + DataType::DateTime(tz) => { + ValueArray::DateTime { tz: *tz, values: vec![] } } + DataType::DateTime64(precision, tz) => ValueArray::DateTime64 { + precision: *precision, + tz: *tz, + values: vec![], + }, DataType::Enum8(variants) => { ValueArray::Enum8 { variants: variants.clone(), values: vec![] } } @@ -321,9 +339,10 @@ impl ValueArray { (ValueArray::Ipv6(us), ValueArray::Ipv6(mut them)) => { us.append(&mut them) } - (ValueArray::DateTime(us), ValueArray::DateTime(mut them)) => { - us.append(&mut them) - } + ( + ValueArray::DateTime { values: us, .. }, + ValueArray::DateTime { values: mut them, .. }, + ) => us.append(&mut them), ( ValueArray::DateTime64 { values: us, .. }, ValueArray::DateTime64 { values: mut them, .. }, @@ -401,13 +420,13 @@ impl TryFrom for Precision { /// order to convert it to a number of seconds and nanoseconds. Those are then /// used to call `DateTime::from_timestamp()`. macro_rules! precision_conversion_func { - ($precision:literal) => {{ - |x| { + ($tz:expr, $precision:literal) => {{ + |tz, x| { const SCALE: i64 = 10i64.pow($precision); const FACTOR: i64 = 10i64.pow(Precision::MAX as u32 - $precision); let seconds = x.div_euclid(SCALE); let nanos = (FACTOR * x.rem_euclid(SCALE)).try_into().unwrap(); - DateTime::from_timestamp(seconds, nanos).unwrap() + tz.timestamp_opt(seconds, nanos).unwrap() } }}; } @@ -425,7 +444,10 @@ impl Precision { /// Return a conversion function that takes an i64 count and converts it to /// a DateTime. - pub(crate) fn as_conv(&self) -> fn(i64) -> DateTime { + pub(crate) fn as_conv( + &self, + _: &T, + ) -> fn(&T, i64) -> DateTime { // For the easy values, we'll convert to seconds or microseconds, and // then use a constructor. // @@ -433,33 +455,39 @@ impl Precision { // next-smallest sane unit, in this case milliseconds, and use the // appropriate constructor. match self.0 { - 0 => |x| DateTime::from_timestamp(x, 0).unwrap(), - 1 => precision_conversion_func!(1), - 2 => precision_conversion_func!(2), - 3 => |x| DateTime::from_timestamp_millis(x).unwrap(), - 4 => precision_conversion_func!(4), - 5 => precision_conversion_func!(5), - 6 => |x| DateTime::from_timestamp_micros(x).unwrap(), - 7 => precision_conversion_func!(7), - 8 => precision_conversion_func!(8), - 9 => |x| DateTime::from_timestamp_nanos(x), + 0 => |tz, x| tz.timestamp_opt(x, 0).unwrap(), + 1 => precision_conversion_func!(tz, 1), + 2 => precision_conversion_func!(tz, 2), + 3 => |tz, x| tz.timestamp_millis_opt(x).unwrap(), + 4 => precision_conversion_func!(tz, 4), + 5 => precision_conversion_func!(tz, 5), + 6 => |tz, x| tz.timestamp_nanos(x * 1000), + 7 => precision_conversion_func!(tz, 7), + 8 => precision_conversion_func!(tz, 8), + 9 => |tz, x| tz.timestamp_nanos(x), 10..=u8::MAX => unreachable!(), } } /// Convert the provided datetime into a timestamp in the right precision. - pub(crate) fn scale(&self, value: DateTime) -> i64 { + /// + /// This returns `None` if the timestamp cannot be converted to an `i64`, + /// which is how ClickHouse stores the values. + pub(crate) fn scale( + &self, + value: DateTime, + ) -> Option { match self.0 { - 0 => value.timestamp(), - 1 => value.timestamp_millis() / 100, - 2 => value.timestamp_millis() / 10, - 3 => value.timestamp_millis(), - 4 => value.timestamp_micros() / 100, - 5 => value.timestamp_micros() / 10, - 6 => value.timestamp_micros(), - 7 => value.timestamp_nanos_opt().unwrap() / 100, - 8 => value.timestamp_nanos_opt().unwrap() / 10, - 9 => value.timestamp_nanos_opt().unwrap(), + 0 => Some(value.timestamp()), + 1 => Some(value.timestamp_millis() / 100), + 2 => Some(value.timestamp_millis() / 10), + 3 => Some(value.timestamp_millis()), + 4 => Some(value.timestamp_micros() / 100), + 5 => Some(value.timestamp_micros() / 10), + 6 => Some(value.timestamp_micros()), + 7 => value.timestamp_nanos_opt().map(|x| x / 100), + 8 => value.timestamp_nanos_opt().map(|x| x / 10), + 9 => value.timestamp_nanos_opt(), 10.. => unreachable!(), } } @@ -490,8 +518,9 @@ pub enum DataType { Uuid, Ipv4, Ipv6, - DateTime, - DateTime64(Precision), + Date, + DateTime(Tz), + DateTime64(Precision, Tz), Enum8(IndexMap), Nullable(Box), Array(Box), @@ -536,8 +565,11 @@ impl fmt::Display for DataType { DataType::Uuid => write!(f, "UUID"), DataType::Ipv4 => write!(f, "IPv4"), DataType::Ipv6 => write!(f, "IPv6"), - DataType::DateTime => write!(f, "DateTime"), - DataType::DateTime64(prec) => write!(f, "DateTime64({prec})"), + DataType::Date => write!(f, "Date"), + DataType::DateTime(tz) => write!(f, "DateTime('{tz}')"), + DataType::DateTime64(prec, tz) => { + write!(f, "DateTime64({prec}, '{tz}')") + } DataType::Enum8(map) => { write!(f, "Enum8(")?; for (i, (val, name)) in map.iter().enumerate() { @@ -554,6 +586,62 @@ impl fmt::Display for DataType { } } +// Parse a quoted timezone, like `'UTC'` or `'America/Los_Angeles'` +fn quoted_timezone(s: &str) -> IResult<&str, Tz> { + map( + delimited(tag("'"), take_while1(|c| c != '\''), tag("'")), + parse_timezone, + )(s) +} + +// Parse a quoted timezone, delimited by parentheses (). +fn parenthesized_timezone(s: &str) -> IResult<&str, Tz> { + delimited(tag("("), quoted_timezone, tag(")"))(s) +} + +/// Parse a `DateTime` data type from a string, optionally with a timezone in +/// it. +fn datetime(s: &str) -> IResult<&str, DataType> { + map( + tuple((tag("DateTime"), opt(parenthesized_timezone), eof)), + |(_, maybe_tz, _)| { + DataType::DateTime(maybe_tz.unwrap_or_else(|| *DEFAULT_TIMEZONE)) + }, + )(s) +} + +/// Parse a `DateTime64` data type from a string, with a precision and optional +/// timezone in it. +/// +/// Matches things like `DateTime64(1)` and `DateTime64(1, 'UTC')`. +fn datetime64(s: &str) -> IResult<&str, DataType> { + map( + tuple(( + tag("DateTime64("), + map_opt(nom_u8, Precision::new), + opt(preceded(tag(", "), quoted_timezone)), + tag(")"), + eof, + )), + |(_, precision, maybe_tz, _, _)| { + DataType::DateTime64( + precision, + maybe_tz.unwrap_or_else(|| *DEFAULT_TIMEZONE), + ) + }, + )(s) +} + +static DEFAULT_TIMEZONE: LazyLock = + LazyLock::new(|| match iana_time_zone::get_timezone() { + Ok(s) => s.parse().unwrap_or_else(|_| Tz::UTC), + Err(_) => Tz::UTC, + }); + +fn parse_timezone(s: &str) -> Tz { + s.parse().unwrap_or_else(|_| *DEFAULT_TIMEZONE) +} + impl std::str::FromStr for DataType { type Err = Error; @@ -591,20 +679,19 @@ impl std::str::FromStr for DataType { return Ok(DataType::Ipv4); } else if s == "IPv6" { return Ok(DataType::Ipv6); - } else if s == "DateTime" { - return Ok(DataType::DateTime); + } else if s == "Date" { + return Ok(DataType::Date); } - // Check for DateTime with precision. - if let Some(suffix) = s.strip_prefix("DateTime64(") { - let Some(inner) = suffix.strip_suffix(")") else { - return Err(Error::UnsupportedDataType(s.to_string())); - }; - return inner - .parse() - .map_err(|_| Error::UnsupportedDataType(s.to_string())) - .map(|p| DataType::DateTime64(Precision(p))); - } + // Check for datetime, possibly with a timezone. + if let Ok((_, dt)) = datetime(s) { + return Ok(dt); + }; + + // Check for DateTime64 with precision, and possibly a timezone. + if let Ok((_, dt)) = datetime64(s) { + return Ok(dt); + }; // Check for Enum8s. // @@ -653,8 +740,14 @@ impl std::str::FromStr for DataType { #[cfg(test)] mod tests { - use super::{DataType, Precision}; + use super::{ + Block, BlockInfo, Column, DataType, Precision, ValueArray, + DEFAULT_TIMEZONE, + }; + use crate::native::block::{datetime, datetime64}; use chrono::{SubsecRound as _, Utc}; + use chrono_tz::Tz; + use indexmap::IndexMap; #[test] fn test_data_type_to_string() { @@ -677,8 +770,12 @@ mod tests { (DataType::Uuid, "UUID"), (DataType::Ipv4, "IPv4"), (DataType::Ipv6, "IPv6"), - (DataType::DateTime, "DateTime"), - (DataType::DateTime64(6.try_into().unwrap()), "DateTime64(6)"), + (DataType::Date, "Date"), + (DataType::DateTime(Tz::UTC), "DateTime('UTC')"), + ( + DataType::DateTime64(6.try_into().unwrap(), Tz::UTC), + "DateTime64(6, 'UTC')", + ), (DataType::Enum8(enum8), "Enum8('foo' = 0, 'bar' = 1)"), (DataType::Nullable(Box::new(DataType::UInt8)), "Nullable(UInt8)"), (DataType::Array(Box::new(DataType::UInt8)), "Array(UInt8)"), @@ -709,9 +806,10 @@ mod tests { let now = Utc::now(); for precision in 0..=Precision::MAX { let prec = Precision(precision); - let timestamp = prec.scale(now); - let conv = prec.as_conv(); - let recovered = conv(timestamp); + let timestamp = + prec.scale(now).expect("Current time should fit in an i64"); + let conv = prec.as_conv(&Utc); + let recovered = conv(&Utc, timestamp); let now_with_precision = now.trunc_subsecs(u16::from(prec.0)); assert_eq!( now_with_precision, recovered, @@ -724,4 +822,87 @@ mod tests { ); } } + + #[test] + fn datetime64_scale_checks_range() { + assert_eq!( + Precision(9).scale(chrono::DateTime::::MAX_UTC), + None, + "Should fail to scale a timestamp that doesn't fit in \ + the range of an i64" + ); + } + + #[test] + fn parse_date_time() { + for (type_, s) in [ + (DataType::DateTime(*DEFAULT_TIMEZONE), "DateTime"), + (DataType::DateTime(Tz::UTC), "DateTime('UTC')"), + ( + DataType::DateTime(Tz::America__Los_Angeles), + "DateTime('America/Los_Angeles')", + ), + ] { + let dt = datetime(s).unwrap().1; + assert_eq!(type_, dt, "Failed to parse '{}' into DateTime", s,); + } + + assert!(datetime("DateTim").is_err()); + assert!(datetime("DateTime()").is_err()); + assert!(datetime("DateTime()").is_err()); + assert!(datetime("DateTime('U)").is_err()); + assert!(datetime("DateTime(0)").is_err()); + } + + #[test] + fn parse_date_time64() { + for (type_, s) in [ + ( + DataType::DateTime64(Precision(3), *DEFAULT_TIMEZONE), + "DateTime64(3)", + ), + ( + DataType::DateTime64(Precision(3), Tz::UTC), + "DateTime64(3, 'UTC')", + ), + ( + DataType::DateTime64(Precision(6), Tz::America__Los_Angeles), + "DateTime64(6, 'America/Los_Angeles')", + ), + ] { + let dt = datetime64(s).unwrap().1; + assert_eq!(type_, dt, "Failed to parse '{}' into DateTime64", s,); + } + + assert!(datetime64("DateTime6").is_err()); + assert!(datetime64("DateTime64(").is_err()); + assert!(datetime64("DateTime64()").is_err()); + assert!(datetime64("DateTime64('U)").is_err()); + assert!(datetime64("DateTime64(0, )").is_err()); + assert!(datetime64("DateTime64('a', 'UTC')").is_err()); + assert!(datetime64("DateTime64(1,'UTC')").is_err()); + } + + #[test] + fn concat_blocks() { + let data = vec![0, 1]; + let values = ValueArray::UInt64(data.clone()); + let mut block = Block { + name: String::new(), + info: BlockInfo::default(), + n_columns: 1, + n_rows: values.len() as u64, + columns: IndexMap::from([( + String::from("a"), + Column { values: values.clone(), data_type: DataType::UInt64 }, + )]), + }; + block.concat(block.clone()).unwrap(); + assert_eq!(block.n_columns, 1); + assert_eq!(block.n_rows, values.len() as u64 * 2); + assert_eq!( + block.columns["a"].values, + ValueArray::UInt64([data.as_slice(), data.as_slice()].concat()) + ); + } } diff --git a/oximeter/db/src/native/connection.rs b/oximeter/db/src/native/connection.rs index 51bb71cd39..f6367ca126 100644 --- a/oximeter/db/src/native/connection.rs +++ b/oximeter/db/src/native/connection.rs @@ -170,6 +170,22 @@ impl Connection { break Err(Error::UnexpectedPacket("Hello")); } ServerPacket::Data(block) => { + probes::data__packet__received!(|| { + ( + block.n_columns, + block.n_rows, + block + .columns + .iter() + .map(|(name, col)| { + ( + name.clone(), + col.data_type.to_string(), + ) + }) + .collect::>(), + ) + }); // Empty blocks are sent twice: the beginning of the // query so that the client knows the table structure, // and then the end to signal the last data transfer. @@ -466,7 +482,7 @@ mod tests { assert_eq!(block.n_rows, 1); let (name, col) = block.columns.first().unwrap(); assert_eq!(name, "timestamp"); - assert_eq!(col.data_type, DataType::DateTime); + assert!(matches!(col.data_type, DataType::DateTime(_))); db.cleanup().await.unwrap(); logctx.cleanup_successful(); } diff --git a/oximeter/db/src/native/io/block.rs b/oximeter/db/src/native/io/block.rs index b7a13be1d8..e6ab6c8ba1 100644 --- a/oximeter/db/src/native/io/block.rs +++ b/oximeter/db/src/native/io/block.rs @@ -24,7 +24,7 @@ pub fn encode(block: Block, mut dst: &mut BytesMut) -> Result<(), Error> { io::varuint::encode(block.n_columns, &mut dst); io::varuint::encode(block.n_rows, &mut dst); for (name, col) in block.columns { - io::column::encode(&name, col, &mut dst); + io::column::encode(&name, col, &mut dst)?; } Ok(()) } diff --git a/oximeter/db/src/native/io/column.rs b/oximeter/db/src/native/io/column.rs index 0922a49aa2..649d6a044d 100644 --- a/oximeter/db/src/native/io/column.rs +++ b/oximeter/db/src/native/io/column.rs @@ -11,10 +11,33 @@ use crate::native::{ io, Error, }; use bytes::{Buf as _, BufMut as _, BytesMut}; -use chrono::DateTime; +use chrono::{NaiveDate, TimeDelta, TimeZone}; use std::net::{Ipv4Addr, Ipv6Addr}; use uuid::Uuid; +// ClickHouse `Date`s are represented as an unsigned 16-bit number of days from +// the UNIX epoch. +// +// This is deprecated, but we allow it so we can create a const. The fallible +// constructor requires unwrapping. +#[allow(deprecated)] +const EPOCH: NaiveDate = NaiveDate::from_ymd(1970, 1, 1); + +// Maximum supported Date in ClickHouse. +// +// See https://clickhouse.com/docs/en/sql-reference/data-types/date +const MAX_DATE: &str = "2149-06-06"; + +// Maximum supported DateTime in ClickHouse. +// +// See https://clickhouse.com/docs/en/sql-reference/data-types/datetime. +const MAX_DATETIME: &str = "2106-02-07 06:28:15"; + +// Maximum supported DateTime64 in ClickHouse +// +// See https://clickhouse.com/docs/en/sql-reference/data-types/datetime64. +const MAX_DATETIME64: &str = "2299-12-31 23:59:59.99999999"; + /// Helper macro to quickly and unsafely copy POD data from a message from the /// ClickHouse server into our own column data types. macro_rules! copyin_pod_values_raw { @@ -150,7 +173,17 @@ fn decode_value_array( // encoding of IPv4 addresses. copyin_pod_as_values!(Ipv6Addr, src, n_rows) } - DataType::DateTime => { + DataType::Date => { + // Dates are stored as 16-bit unsigned values, giving the number of + // days since the UNIX epoch. + let days = copyin_pod_values_raw!(u16, src, n_rows); + let mut out = Vec::with_capacity(days.len()); + for day in days.into_iter() { + out.push(EPOCH + TimeDelta::days(i64::from(day))); + } + ValueArray::Date(out) + } + DataType::DateTime(tz) => { // DateTimes are encoded as little-endian u32s, giving a traditional // UNIX timestamp with 1 second resolution. Similar to IPv4 // addresses, we'll iterate in chunks and then convert. @@ -164,16 +197,14 @@ fn decode_value_array( // this has exactly `n_rows` chunks of 4 bytes each. let timestamp = u32::from_le_bytes(chunk.try_into().unwrap()); - // Safey: This only panics if the timestamp is out of range, + // Safety: This only panics if the timestamp is out of range, // which is not possible as this is actually a u32. - values.push( - DateTime::from_timestamp(i64::from(timestamp), 0).unwrap(), - ); + values.push(tz.timestamp_opt(i64::from(timestamp), 0).unwrap()); } *src = rest; - ValueArray::DateTime(values) + ValueArray::DateTime { tz: *tz, values } } - DataType::DateTime64(precision) => { + DataType::DateTime64(precision, timezone) => { // DateTime64s are encoded as little-endian i64s, but their // precision is encoded in the argument, not the column itself. // We'll iterate over chunks of the provided data again, and convert @@ -186,18 +217,22 @@ fn decode_value_array( // The precision determines how to convert these values. Most things // should be 3, 6, or 9, for milliseconds, microseconds, or // nanoseconds. But technically any precision in [0, 9] is possible. - let conv = precision.as_conv(); + let conv = precision.as_conv(timezone); for chunk in data.chunks_exact(std::mem::size_of::()) { // Safety: Because we split this above on `n_bytes`, we know // this has exactly `n_rows` chunks of 8 bytes each. let timestamp = i64::from_le_bytes(chunk.try_into().unwrap()); - // Safey: This only panics if the timestamp is out of range, + // Safety: This only panics if the timestamp is out of range, // which is not possible as this is actually a u32. - values.push(conv(timestamp)); + values.push(conv(timezone, timestamp)); } *src = rest; - ValueArray::DateTime64 { precision: *precision, values } + ValueArray::DateTime64 { + precision: *precision, + tz: *timezone, + values, + } } DataType::Enum8(variants) => { // Copy the encoded variant indices themselves, and include the @@ -296,17 +331,24 @@ macro_rules! copyout_pod_values { /// /// This panics if the data type is unsupported. Use `DataType::is_supported()` /// to check that first. -pub fn encode(name: &str, column: Column, mut dst: &mut BytesMut) { +pub fn encode( + name: &str, + column: Column, + mut dst: &mut BytesMut, +) -> Result<(), Error> { assert!(column.data_type.is_supported()); io::string::encode(name, &mut dst); io::string::encode(column.data_type.to_string(), &mut dst); // Encode the "custom serialization tag". See `decode` for details. dst.put_u8(0); - encode_value_array(column.values, dst); + encode_value_array(column.values, dst) } /// Encode an array of values into a buffer. -fn encode_value_array(values: ValueArray, mut dst: &mut BytesMut) { +fn encode_value_array( + values: ValueArray, + mut dst: &mut BytesMut, +) -> Result<(), Error> { match values { ValueArray::UInt8(values) => dst.put(values.as_slice()), ValueArray::UInt16(values) => copyout_pod_values!(u16, values, dst), @@ -339,27 +381,62 @@ fn encode_value_array(values: ValueArray, mut dst: &mut BytesMut) { } } ValueArray::Ipv6(values) => copyout_pod_values!(Ipv6Addr, values, dst), - ValueArray::DateTime(values) => { + ValueArray::Date(values) => { + // Dates are represented in ClickHouse as a 16-bit unsigned number + // of days since the UNIX epoch. + // + // Since these can be constructed from any `NaiveDate`, they can + // have wider values than ClickHouse supports. Check that here + // during conversion to the `u16` format. + dst.reserve(values.len() * std::mem::size_of::()); + for value in values { + let days = value.signed_duration_since(EPOCH).num_days(); + let days = + u16::try_from(days).map_err(|_| Error::OutOfRange { + type_name: String::from("Date"), + min: EPOCH.to_string(), + max: MAX_DATE.to_string(), + value: value.to_string(), + })?; + dst.put_u16_le(days); + } + } + ValueArray::DateTime { values, .. } => { // DateTimes are always little-endian u32s giving the UNIX // timestamp. for value in values { - // Safety: We only construct these today from a u32 in the first - // place, so this must also be safe. - dst.put_u32_le(u32::try_from(value.timestamp()).unwrap()); + // DateTime's in ClickHouse must fit in a u32, so validate the + // range here. + let val = u32::try_from(value.timestamp()).map_err(|_| { + Error::OutOfRange { + type_name: String::from("DateTime"), + min: EPOCH.and_hms_opt(0, 0, 0).unwrap().to_string(), + max: MAX_DATETIME.to_string(), + value: value.to_string(), + } + })?; + dst.put_u32_le(val); } } - ValueArray::DateTime64 { precision, values } => { + ValueArray::DateTime64 { precision, values, .. } => { // DateTime64s are always encoded as i64s, in whatever // resolution is defined by the column type itself. dst.reserve(values.len() * std::mem::size_of::()); for value in values { - let timestamp = precision.scale(value); + let Some(timestamp) = precision.scale(value) else { + return Err(Error::OutOfRange { + type_name: String::from("DateTime64"), + min: EPOCH.to_string(), + max: MAX_DATETIME64.to_string(), + value: value.to_string(), + }); + }; dst.put_i64_le(timestamp); } } ValueArray::Nullable { is_null, values } => { copyout_pod_values!(bool, is_null, dst); - encode_value_array(*values, dst); + encode_value_array(*values, dst)?; } ValueArray::Enum8 { values, .. } => { copyout_pod_values!(i8, values, dst) @@ -369,10 +446,11 @@ fn encode_value_array(values: ValueArray, mut dst: &mut BytesMut) { // array, plus the flattened data itself. encode_array_offsets(&arrays, dst); for array in arrays { - encode_value_array(array, dst); + encode_value_array(array, dst)?; } } } + Ok(()) } // Encode the column offsets for an array column into the provided buffer. @@ -398,7 +476,9 @@ fn encode_array_offsets(arrays: &[ValueArray], dst: &mut BytesMut) { mod tests { use super::*; use crate::native::block::Precision; - use chrono::{SubsecRound as _, Utc}; + use chrono::SubsecRound as _; + use chrono::TimeZone; + use chrono_tz::Tz; #[test] fn test_decode_uint8_column() { @@ -517,7 +597,7 @@ mod tests { #[test] fn test_encode_decode_column() { - let now64 = Utc::now(); + let now64 = Tz::UTC.timestamp_opt(0, 0).unwrap(); let now = now64.trunc_subsecs(0); let precision = Precision::new(9).unwrap(); for (typ, values) in [ @@ -546,10 +626,18 @@ mod tests { ), (DataType::Ipv4, ValueArray::Ipv4(vec![Ipv4Addr::LOCALHOST])), (DataType::Ipv6, ValueArray::Ipv6(vec![Ipv6Addr::LOCALHOST])), - (DataType::DateTime, ValueArray::DateTime(vec![now])), + (DataType::Date, ValueArray::Date(vec![now.date_naive()])), ( - DataType::DateTime64(precision), - ValueArray::DateTime64 { precision, values: vec![now64] }, + DataType::DateTime(Tz::UTC), + ValueArray::DateTime { tz: Tz::UTC, values: vec![now] }, + ), + ( + DataType::DateTime64(precision, Tz::UTC), + ValueArray::DateTime64 { + precision, + tz: Tz::UTC, + values: vec![now64], + }, ), ( DataType::Nullable(Box::new(DataType::UInt8)), @@ -599,7 +687,7 @@ mod tests { let n_rows = values.len(); let col = Column { values, data_type: typ.clone() }; let mut buf = BytesMut::new(); - encode("foo", col.clone(), &mut buf); + encode("foo", col.clone(), &mut buf).unwrap(); let (name, decoded) = decode(&mut &buf[..], n_rows) .expect("Should have succeeded in decoding full column") .unwrap_or_else(|| { @@ -613,4 +701,36 @@ mod tests { ); } } + + #[test] + fn fail_to_encode_out_of_range_column() { + let max = Tz::from_utc_datetime( + &Tz::UTC, + &chrono::DateTime::::MAX_UTC.naive_utc(), + ); + let precision = Precision::new(9).unwrap(); + // See https://clickhouse.com/docs/en/sql-reference/data-types/datetime + // and related pages for the supported ranges of these types. + for (typ, values) in [ + (DataType::Date, ValueArray::Date(vec![max.date_naive()])), + ( + DataType::DateTime(Tz::UTC), + ValueArray::DateTime { tz: Tz::UTC, values: vec![max] }, + ), + ( + DataType::DateTime64(precision, Tz::UTC), + ValueArray::DateTime64 { + precision, + tz: Tz::UTC, + values: vec![max], + }, + ), + ] { + let col = Column { values, data_type: typ.clone() }; + let mut buf = BytesMut::new(); + let err = encode("foo", col.clone(), &mut buf) + .expect_err("Should fail to encode date-like column with out of range value"); + assert!(matches!(err, Error::OutOfRange { .. })); + } + } } diff --git a/oximeter/db/src/native/mod.rs b/oximeter/db/src/native/mod.rs index f8deb22b8b..15d013fa35 100644 --- a/oximeter/db/src/native/mod.rs +++ b/oximeter/db/src/native/mod.rs @@ -136,6 +136,15 @@ mod probes { /// Emitted when we receive a packet from the server, with its kind. fn packet__received(kind: &str) {} + /// Emitted when we receive a data packet, with details about the size and + /// data types for each column. + fn data__packet__received( + n_cols: u64, + n_rows: u64, + columns: Vec<(String, String)>, + ) { + } + /// Emitted when we receive an unrecognized packet, with the kind and the /// length of the discarded buffer. fn unrecognized__server__packet(kind: u64, len: usize) {} @@ -194,4 +203,7 @@ pub enum Error { #[error("Cannot concatenate blocks with mismatched structure")] MismatchedBlockStructure, + + #[error("Value out of range for corresponding ClickHouse type")] + OutOfRange { type_name: String, min: String, max: String, value: String }, } diff --git a/oximeter/db/src/shells/native.rs b/oximeter/db/src/shells/native.rs index 289610b4f3..c0e86367da 100644 --- a/oximeter/db/src/shells/native.rs +++ b/oximeter/db/src/shells/native.rs @@ -12,12 +12,13 @@ use crossterm::style::Stylize; use display_error_chain::DisplayErrorChain; use omicron_common::address::CLICKHOUSE_TCP_PORT; use reedline::{DefaultPrompt, DefaultPromptSegment, Reedline, Signal}; -use std::net::{Ipv6Addr, SocketAddr}; +use std::net::{IpAddr, SocketAddr}; use tabled::{builder::Builder, settings::Style}; /// Run the native SQL shell. -pub async fn shell() -> anyhow::Result<()> { - let addr = SocketAddr::new(Ipv6Addr::LOCALHOST.into(), CLICKHOUSE_TCP_PORT); +pub async fn shell(addr: IpAddr) -> anyhow::Result<()> { + usdt::register_probes()?; + let addr = SocketAddr::new(addr, CLICKHOUSE_TCP_PORT); let mut conn = native::Connection::new(addr) .await .context("Trying to connect to ClickHouse server")?; @@ -162,9 +163,12 @@ fn values_to_string<'a>( ValueArray::Ipv6(vals) => { Box::new(vals.iter().map(ToString::to_string)) } - ValueArray::DateTime(vals) => { + ValueArray::Date(vals) => { Box::new(vals.iter().map(ToString::to_string)) } + ValueArray::DateTime { values, .. } => { + Box::new(values.iter().map(ToString::to_string)) + } ValueArray::DateTime64 { values, .. } => { Box::new(values.iter().map(ToString::to_string)) } diff --git a/workspace-hack/Cargo.toml b/workspace-hack/Cargo.toml index eee0bb6172..72452e8f5d 100644 --- a/workspace-hack/Cargo.toml +++ b/workspace-hack/Cargo.toml @@ -27,7 +27,7 @@ bit-set = { version = "0.5.3" } bit-vec = { version = "0.6.3" } bitflags-dff4ba8e3ae991db = { package = "bitflags", version = "1.3.2" } bitflags-f595c2ba2a3f28df = { package = "bitflags", version = "2.6.0", default-features = false, features = ["serde", "std"] } -bstr = { version = "1.9.1" } +bstr = { version = "1.10.0" } byteorder = { version = "1.5.0" } bytes = { version = "1.7.2", features = ["serde"] } chrono = { version = "0.4.38", features = ["serde"] } @@ -36,7 +36,7 @@ clap = { version = "4.5.20", features = ["cargo", "derive", "env", "wrap_help"] clap_builder = { version = "4.5.20", default-features = false, features = ["cargo", "color", "env", "std", "suggestions", "usage", "wrap_help"] } console = { version = "0.15.8" } crossbeam-epoch = { version = "0.9.18" } -crossbeam-utils = { version = "0.8.19" } +crossbeam-utils = { version = "0.8.20" } crossterm = { version = "0.28.1", features = ["event-stream", "serde"] } crypto-common = { version = "0.1.6", default-features = false, features = ["getrandom", "std"] } curve25519-dalek = { version = "4.1.3", features = ["digest", "legacy_compatibility", "rand_core"] } @@ -58,8 +58,9 @@ futures-task = { version = "0.3.31", default-features = false, features = ["std" futures-util = { version = "0.3.31", features = ["channel", "io", "sink"] } gateway-messages = { git = "https://github.com/oxidecomputer/management-gateway-service", rev = "9bbac475dcaac88286c07a20b6bd3e94fc81d7f0", features = ["std"] } generic-array = { version = "0.14.7", default-features = false, features = ["more_lengths", "zeroize"] } -getrandom = { version = "0.2.14", default-features = false, features = ["js", "rdrand", "std"] } +getrandom = { version = "0.2.15", default-features = false, features = ["js", "rdrand", "std"] } group = { version = "0.13.0", default-features = false, features = ["alloc"] } +hashbrown = { version = "0.15.0" } hex = { version = "0.4.3", features = ["serde"] } hickory-proto = { version = "0.24.1", features = ["text-parsing"] } hmac = { version = "0.12.1", default-features = false, features = ["reset"] } @@ -73,7 +74,7 @@ lazy_static = { version = "1.5.0", default-features = false, features = ["spin_n libc = { version = "0.2.159", features = ["extra_traits"] } log = { version = "0.4.22", default-features = false, features = ["kv_unstable", "std"] } managed = { version = "0.8.0", default-features = false, features = ["alloc", "map"] } -memchr = { version = "2.7.2" } +memchr = { version = "2.7.4" } nom = { version = "7.1.3" } num-bigint-dig = { version = "0.8.4", default-features = false, features = ["i128", "prime", "serde", "u64_digit", "zeroize"] } num-integer = { version = "0.1.46", features = ["i128"] } @@ -83,12 +84,15 @@ openapiv3 = { version = "2.0.0", default-features = false, features = ["skip_ser peg-runtime = { version = "0.8.3", default-features = false, features = ["std"] } pem-rfc7468 = { version = "0.7.0", default-features = false, features = ["std"] } petgraph = { version = "0.6.5", features = ["serde-1"] } +phf = { version = "0.11.2" } +phf_shared = { version = "0.11.2" } pkcs8 = { version = "0.10.2", default-features = false, features = ["encryption", "pem", "std"] } postgres-types = { version = "0.2.8", default-features = false, features = ["with-chrono-0_4", "with-serde_json-1", "with-uuid-1"] } predicates = { version = "3.1.2" } proc-macro2 = { version = "1.0.87" } qorb = { git = "https://github.com/oxidecomputer/qorb", branch = "master", features = ["qtop"] } quote = { version = "1.0.37" } +rand = { version = "0.8.5", features = ["small_rng"] } regex = { version = "1.11.0" } regex-automata = { version = "0.4.8", default-features = false, features = ["dfa", "hybrid", "meta", "nfa", "perf", "unicode"] } regex-syntax = { version = "0.8.5" } @@ -107,7 +111,7 @@ slog = { version = "2.7.0", features = ["dynamic-keys", "max_level_trace", "rele smallvec = { version = "1.13.2", default-features = false, features = ["const_new"] } spin = { version = "0.9.8" } string_cache = { version = "0.8.7" } -subtle = { version = "2.5.0" } +subtle = { version = "2.6.1" } syn-f595c2ba2a3f28df = { package = "syn", version = "2.0.79", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } time = { version = "0.3.36", features = ["formatting", "local-offset", "macros", "parsing"] } tokio = { version = "1.40.0", features = ["full", "test-util"] } @@ -118,13 +122,13 @@ toml = { version = "0.7.8" } toml_datetime = { version = "0.6.8", default-features = false, features = ["serde"] } toml_edit-3c51e837cfc5589a = { package = "toml_edit", version = "0.22.22", features = ["serde"] } tracing = { version = "0.1.40", features = ["log"] } -unicode-bidi = { version = "0.3.15" } -unicode-normalization = { version = "0.1.23" } +unicode-bidi = { version = "0.3.17" } +unicode-normalization = { version = "0.1.24" } usdt = { version = "0.5.0" } usdt-impl = { version = "0.5.0", default-features = false, features = ["asm", "des"] } uuid = { version = "1.10.0", features = ["serde", "v4"] } x509-cert = { version = "0.2.5" } -zerocopy = { version = "0.7.34", features = ["derive", "simd"] } +zerocopy = { version = "0.7.35", features = ["derive", "simd"] } zeroize = { version = "1.8.1", features = ["std", "zeroize_derive"] } [build-dependencies] @@ -138,17 +142,17 @@ bit-set = { version = "0.5.3" } bit-vec = { version = "0.6.3" } bitflags-dff4ba8e3ae991db = { package = "bitflags", version = "1.3.2" } bitflags-f595c2ba2a3f28df = { package = "bitflags", version = "2.6.0", default-features = false, features = ["serde", "std"] } -bstr = { version = "1.9.1" } +bstr = { version = "1.10.0" } byteorder = { version = "1.5.0" } bytes = { version = "1.7.2", features = ["serde"] } -cc = { version = "1.0.97", default-features = false, features = ["parallel"] } +cc = { version = "1.1.30", default-features = false, features = ["parallel"] } chrono = { version = "0.4.38", features = ["serde"] } cipher = { version = "0.4.4", default-features = false, features = ["block-padding", "zeroize"] } clap = { version = "4.5.20", features = ["cargo", "derive", "env", "wrap_help"] } clap_builder = { version = "4.5.20", default-features = false, features = ["cargo", "color", "env", "std", "suggestions", "usage", "wrap_help"] } console = { version = "0.15.8" } crossbeam-epoch = { version = "0.9.18" } -crossbeam-utils = { version = "0.8.19" } +crossbeam-utils = { version = "0.8.20" } crossterm = { version = "0.28.1", features = ["event-stream", "serde"] } crypto-common = { version = "0.1.6", default-features = false, features = ["getrandom", "std"] } curve25519-dalek = { version = "4.1.3", features = ["digest", "legacy_compatibility", "rand_core"] } @@ -170,8 +174,9 @@ futures-task = { version = "0.3.31", default-features = false, features = ["std" futures-util = { version = "0.3.31", features = ["channel", "io", "sink"] } gateway-messages = { git = "https://github.com/oxidecomputer/management-gateway-service", rev = "9bbac475dcaac88286c07a20b6bd3e94fc81d7f0", features = ["std"] } generic-array = { version = "0.14.7", default-features = false, features = ["more_lengths", "zeroize"] } -getrandom = { version = "0.2.14", default-features = false, features = ["js", "rdrand", "std"] } +getrandom = { version = "0.2.15", default-features = false, features = ["js", "rdrand", "std"] } group = { version = "0.13.0", default-features = false, features = ["alloc"] } +hashbrown = { version = "0.15.0" } hex = { version = "0.4.3", features = ["serde"] } hickory-proto = { version = "0.24.1", features = ["text-parsing"] } hmac = { version = "0.12.1", default-features = false, features = ["reset"] } @@ -185,7 +190,7 @@ lazy_static = { version = "1.5.0", default-features = false, features = ["spin_n libc = { version = "0.2.159", features = ["extra_traits"] } log = { version = "0.4.22", default-features = false, features = ["kv_unstable", "std"] } managed = { version = "0.8.0", default-features = false, features = ["alloc", "map"] } -memchr = { version = "2.7.2" } +memchr = { version = "2.7.4" } nom = { version = "7.1.3" } num-bigint-dig = { version = "0.8.4", default-features = false, features = ["i128", "prime", "serde", "u64_digit", "zeroize"] } num-integer = { version = "0.1.46", features = ["i128"] } @@ -195,12 +200,15 @@ openapiv3 = { version = "2.0.0", default-features = false, features = ["skip_ser peg-runtime = { version = "0.8.3", default-features = false, features = ["std"] } pem-rfc7468 = { version = "0.7.0", default-features = false, features = ["std"] } petgraph = { version = "0.6.5", features = ["serde-1"] } +phf = { version = "0.11.2" } +phf_shared = { version = "0.11.2" } pkcs8 = { version = "0.10.2", default-features = false, features = ["encryption", "pem", "std"] } postgres-types = { version = "0.2.8", default-features = false, features = ["with-chrono-0_4", "with-serde_json-1", "with-uuid-1"] } predicates = { version = "3.1.2" } proc-macro2 = { version = "1.0.87" } qorb = { git = "https://github.com/oxidecomputer/qorb", branch = "master", features = ["qtop"] } quote = { version = "1.0.37" } +rand = { version = "0.8.5", features = ["small_rng"] } regex = { version = "1.11.0" } regex-automata = { version = "0.4.8", default-features = false, features = ["dfa", "hybrid", "meta", "nfa", "perf", "unicode"] } regex-syntax = { version = "0.8.5" } @@ -219,7 +227,7 @@ slog = { version = "2.7.0", features = ["dynamic-keys", "max_level_trace", "rele smallvec = { version = "1.13.2", default-features = false, features = ["const_new"] } spin = { version = "0.9.8" } string_cache = { version = "0.8.7" } -subtle = { version = "2.5.0" } +subtle = { version = "2.6.1" } syn-dff4ba8e3ae991db = { package = "syn", version = "1.0.109", features = ["extra-traits", "fold", "full", "visit"] } syn-f595c2ba2a3f28df = { package = "syn", version = "2.0.79", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } time = { version = "0.3.36", features = ["formatting", "local-offset", "macros", "parsing"] } @@ -232,14 +240,14 @@ toml = { version = "0.7.8" } toml_datetime = { version = "0.6.8", default-features = false, features = ["serde"] } toml_edit-3c51e837cfc5589a = { package = "toml_edit", version = "0.22.22", features = ["serde"] } tracing = { version = "0.1.40", features = ["log"] } -unicode-bidi = { version = "0.3.15" } -unicode-normalization = { version = "0.1.23" } -unicode-xid = { version = "0.2.4" } +unicode-bidi = { version = "0.3.17" } +unicode-normalization = { version = "0.1.24" } +unicode-xid = { version = "0.2.6" } usdt = { version = "0.5.0" } usdt-impl = { version = "0.5.0", default-features = false, features = ["asm", "des"] } uuid = { version = "1.10.0", features = ["serde", "v4"] } x509-cert = { version = "0.2.5" } -zerocopy = { version = "0.7.34", features = ["derive", "simd"] } +zerocopy = { version = "0.7.35", features = ["derive", "simd"] } zeroize = { version = "1.8.1", features = ["std", "zeroize_derive"] } [target.x86_64-unknown-linux-gnu.dependencies] @@ -251,7 +259,7 @@ linux-raw-sys = { version = "0.4.14", default-features = false, features = ["elf mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.x86_64-unknown-linux-gnu.build-dependencies] @@ -263,7 +271,7 @@ linux-raw-sys = { version = "0.4.14", default-features = false, features = ["elf mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.x86_64-apple-darwin.dependencies] @@ -273,7 +281,7 @@ hyper-util = { version = "0.1.9", features = ["full"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.x86_64-apple-darwin.build-dependencies] @@ -283,7 +291,7 @@ hyper-util = { version = "0.1.9", features = ["full"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.aarch64-apple-darwin.dependencies] @@ -293,7 +301,7 @@ hyper-util = { version = "0.1.9", features = ["full"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.aarch64-apple-darwin.build-dependencies] @@ -303,7 +311,7 @@ hyper-util = { version = "0.1.9", features = ["full"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } [target.x86_64-unknown-illumos.dependencies] @@ -315,7 +323,7 @@ indicatif = { version = "0.17.8", features = ["rayon"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } toml_edit-cdcf2f9584511fe6 = { package = "toml_edit", version = "0.19.15", features = ["serde"] } @@ -328,7 +336,7 @@ indicatif = { version = "0.17.8", features = ["rayon"] } mio = { version = "1.0.2", features = ["net", "os-ext"] } once_cell = { version = "1.20.2" } rustix = { version = "0.38.37", features = ["event", "fs", "net", "pipe", "process", "stdio", "system", "termios", "time"] } -rustls = { version = "0.23.10", default-features = false, features = ["logging", "ring", "std", "tls12"] } +rustls = { version = "0.23.14", default-features = false, features = ["logging", "ring", "std", "tls12"] } tokio-rustls = { version = "0.26.0", default-features = false, features = ["logging", "ring", "tls12"] } toml_edit-cdcf2f9584511fe6 = { package = "toml_edit", version = "0.19.15", features = ["serde"] }