From 58db99a1dadcd71016e60793994561ce57509803 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Mon, 29 Dec 2025 10:54:06 -0800 Subject: [PATCH 01/13] Initial uring impl --- Cargo.lock | 1752 +++++++++-------- Cargo.toml | 1 + rust/lance-io/Cargo.toml | 5 + rust/lance-io/src/lib.rs | 2 + rust/lance-io/src/object_store.rs | 52 + rust/lance-io/src/object_store/providers.rs | 3 + rust/lance-io/src/uring/current_thread.rs | 372 ++++ .../src/uring/current_thread_future.rs | 92 + rust/lance-io/src/uring/future.rs | 46 + rust/lance-io/src/uring/mod.rs | 72 + rust/lance-io/src/uring/reader.rs | 298 +++ rust/lance-io/src/uring/requests.rs | 36 + rust/lance-io/src/uring/tests.rs | 215 ++ rust/lance-io/src/uring/thread.rs | 398 ++++ 14 files changed, 2518 insertions(+), 826 deletions(-) create mode 100644 rust/lance-io/src/uring/current_thread.rs create mode 100644 rust/lance-io/src/uring/current_thread_future.rs create mode 100644 rust/lance-io/src/uring/future.rs create mode 100644 rust/lance-io/src/uring/mod.rs create mode 100644 rust/lance-io/src/uring/reader.rs create mode 100644 rust/lance-io/src/uring/requests.rs create mode 100644 rust/lance-io/src/uring/tests.rs create mode 100644 rust/lance-io/src/uring/thread.rs diff --git a/Cargo.lock b/Cargo.lock index 49ac3b56a23..ce493d14609 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,7 +37,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpufeatures", ] [[package]] @@ -116,9 +116,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "1.0.0" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -131,15 +131,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.14" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "1.0.0" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] @@ -166,9 +166,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" [[package]] name = "approx" @@ -181,9 +181,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" +checksum = "9ded5f9a03ac8f24d1b8a25101ee812cd32cdc8c50a4c50237de2c4915850e73" dependencies = [ "rustversion", ] @@ -202,9 +202,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4754a624e5ae42081f464514be454b39711daae0458906dacde5f4c632f33a8" +checksum = "2a2b10dcb159faf30d3f81f6d56c1211a5bea2ca424eabe477648a44b993320e" dependencies = [ "arrow-arith", "arrow-array", @@ -223,9 +223,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7b3141e0ec5145a22d8694ea8b6d6f69305971c4fa1c1a13ef0195aef2d678b" +checksum = "288015089e7931843c80ed4032c5274f02b37bcb720c4a42096d50b390e70372" dependencies = [ "arrow-array", "arrow-buffer", @@ -237,9 +237,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8955af33b25f3b175ee10af580577280b4bd01f7e823d94c7cdef7cf8c9aef" +checksum = "65ca404ea6191e06bf30956394173337fa9c35f445bd447fe6c21ab944e1a23c" dependencies = [ "ahash", "arrow-buffer", @@ -256,9 +256,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c697ddca96183182f35b3a18e50b9110b11e916d7b7799cbfd4d34662f2c56c2" +checksum = "36356383099be0151dacc4245309895f16ba7917d79bdb71a7148659c9206c56" dependencies = [ "bytes", "half", @@ -268,9 +268,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "646bbb821e86fd57189c10b4fcdaa941deaf4181924917b0daa92735baa6ada5" +checksum = "9c8e372ed52bd4ee88cc1e6c3859aa7ecea204158ac640b10e187936e7e87074" dependencies = [ "arrow-array", "arrow-buffer", @@ -290,9 +290,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da746f4180004e3ce7b83c977daf6394d768332349d3d913998b10a120b790a" +checksum = "8e4100b729fe656f2e4fb32bc5884f14acf9118d4ad532b7b33c1132e4dce896" dependencies = [ "arrow-array", "arrow-cast", @@ -305,9 +305,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fdd994a9d28e6365aa78e15da3f3950c0fdcea6b963a12fa1c391afb637b304" +checksum = "bf87f4ff5fc13290aa47e499a8b669a82c5977c6a1fedce22c7f542c1fd5a597" dependencies = [ "arrow-buffer", "arrow-schema", @@ -318,9 +318,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf7df950701ab528bf7c0cf7eeadc0445d03ef5d6ffc151eaae6b38a58feff1" +checksum = "eb3ca63edd2073fcb42ba112f8ae165df1de935627ead6e203d07c99445f2081" dependencies = [ "arrow-array", "arrow-buffer", @@ -328,15 +328,15 @@ dependencies = [ "arrow-schema", "arrow-select", "flatbuffers", - "lz4_flex 0.12.1", + "lz4_flex 0.12.0", "zstd", ] [[package]] name = "arrow-json" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ff8357658bedc49792b13e2e862b80df908171275f8e6e075c460da5ee4bf86" +checksum = "a36b2332559d3310ebe3e173f75b29989b4412df4029a26a30cc3f7da0869297" dependencies = [ "arrow-array", "arrow-buffer", @@ -358,9 +358,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d8f1870e03d4cbed632959498bcc84083b5a24bded52905ae1695bd29da45b" +checksum = "13c4e0530272ca755d6814218dffd04425c5b7854b87fa741d5ff848bf50aa39" dependencies = [ "arrow-array", "arrow-buffer", @@ -371,9 +371,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18228633bad92bff92a95746bbeb16e5fc318e8382b75619dec26db79e4de4c0" +checksum = "b07f52788744cc71c4628567ad834cadbaeb9f09026ff1d7a4120f69edf7abd3" dependencies = [ "arrow-array", "arrow-buffer", @@ -384,20 +384,20 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c872d36b7bf2a6a6a2b40de9156265f0242910791db366a2c17476ba8330d68" +checksum = "6bb63203e8e0e54b288d0d8043ca8fa1013820822a27692ef1b78a977d879f2c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "serde_core", "serde_json", ] [[package]] name = "arrow-select" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bf3e3efbd1278f770d67e5dc410257300b161b93baedb3aae836144edcaf4b" +checksum = "c96d8a1c180b44ecf2e66c9a2f2bbcb8b1b6f14e165ce46ac8bde211a363411b" dependencies = [ "ahash", "arrow-array", @@ -409,9 +409,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e968097061b3c0e9fe3079cf2e703e487890700546b5b0647f60fca1b5a8d8" +checksum = "a8ad6a81add9d3ea30bf8374ee8329992c7fd246ffd8b7e2f48a3cea5aa0cc9a" dependencies = [ "arrow-array", "arrow-buffer", @@ -459,9 +459,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.41" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1" +checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" dependencies = [ "compression-codecs", "compression-core", @@ -482,7 +482,7 @@ dependencies = [ "futures-lite 2.6.1", "parking", "polling", - "rustix 1.1.4", + "rustix 1.1.3", "slab", "windows-sys 0.61.2", ] @@ -513,7 +513,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.1.4", + "rustix 1.1.3", ] [[package]] @@ -524,7 +524,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -539,7 +539,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.4", + "rustix 1.1.3", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -559,7 +559,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -594,9 +594,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-config" -version = "1.8.14" +version = "1.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a8fc176d53d6fe85017f230405e3255cedb4a02221cb55ed6d76dccbbb099b2" +checksum = "c456581cb3c77fafcc8c67204a70680d40b61112d6da78c77bd31d945b65f1b5" dependencies = [ "aws-credential-types", "aws-runtime", @@ -624,9 +624,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.13" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d203b0bf2626dcba8665f5cd0871d7c2c0930223d6b6be9097592fea21242d0" +checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -636,9 +636,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.16.2" +version = "1.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" +checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" dependencies = [ "aws-lc-sys", "zeroize", @@ -646,9 +646,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.39.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" +checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" dependencies = [ "cc", "cmake", @@ -658,9 +658,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.7.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede2ddc593e6c8acc6ce3358c28d6677a6dc49b65ba4b37a2befe14a11297e75" +checksum = "c635c2dc792cb4a11ce1a4f392a925340d1bdf499289b5ec1ec6810954eb43f5" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -672,7 +672,6 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "bytes-utils", "fastrand 2.3.0", "http 0.2.12", "http 1.4.0", @@ -686,9 +685,9 @@ dependencies = [ [[package]] name = "aws-sdk-dynamodb" -version = "1.107.0" +version = "1.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561bf86e858a2759c6876b517b13f3f4051a6484abbb0d8a1f4dfc5d902cc85a" +checksum = "f04c47115cc8d46dcc94a9a81e7a3384cea859283c1a737729691d4221f11584" dependencies = [ "aws-credential-types", "aws-runtime", @@ -710,9 +709,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.124.0" +version = "1.122.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744c09d75dfec039a05cf8e117c995ded3b0baffa6eb83f3ed7075a01d8d8947" +checksum = "94c2ca0cba97e8e279eb6c0b2d0aa10db5959000e602ab2b7c02de6b85d4c19b" dependencies = [ "aws-credential-types", "aws-runtime", @@ -745,9 +744,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.95.0" +version = "1.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c5ff27c6ba2cbd95e6e26e2e736676fdf6bcf96495b187733f521cfe4ce448" +checksum = "9dcb38bb33fc0a11f1ffc3e3e85669e0a11a37690b86f77e75306d8f369146a0" dependencies = [ "aws-credential-types", "aws-runtime", @@ -769,9 +768,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.97.0" +version = "1.95.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d186f1e5a3694a188e5a0640b3115ccc6e084d104e16fd6ba968dca072ffef8" +checksum = "2ada8ffbea7bd1be1f53df1dadb0f8fdb04badb13185b3321b929d1ee3caad09" dependencies = [ "aws-credential-types", "aws-runtime", @@ -793,9 +792,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.99.0" +version = "1.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acba7c62f3d4e2408fa998a3a8caacd8b9a5b5549cf36e2372fbdae329d5449" +checksum = "e6443ccadc777095d5ed13e21f5c364878c9f5bad4e35187a6cdbd863b0afcad" dependencies = [ "aws-credential-types", "aws-runtime", @@ -818,9 +817,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.4.1" +version = "1.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37411f8e0f4bea0c3ca0958ce7f18f6439db24d555dbd809787262cd00926aa9" +checksum = "efa49f3c607b92daae0c078d48a4571f599f966dce3caee5f1ea55c4d9073f99" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -828,22 +827,27 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "bytes", + "crypto-bigint 0.5.5", "form_urlencoded", "hex", "hmac", "http 0.2.12", "http 1.4.0", + "p256", "percent-encoding", + "ring", "sha2", + "subtle", "time", "tracing", + "zeroize", ] [[package]] name = "aws-smithy-async" -version = "1.2.13" +version = "1.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc50d0f63e714784b84223abd7abbc8577de8c35d699e0edd19f0a88a08ae13" +checksum = "52eec3db979d18cb807fc1070961cc51d87d069abe9ab57917769687368a8c6c" dependencies = [ "futures-util", "pin-project-lite", @@ -852,9 +856,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.5" +version = "0.64.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180dddf5ef0f52a2f99e2fada10e16ea610e507ef6148a42bdc4d5867596aa00" +checksum = "ddcf418858f9f3edd228acb8759d77394fed7531cce78d02bdda499025368439" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -873,9 +877,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.19" +version = "0.60.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" +checksum = "35b9c7354a3b13c66f60fe4616d6d1969c9fd36b1b5333a5dfb3ee716b33c588" dependencies = [ "aws-smithy-types", "bytes", @@ -884,9 +888,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.5" +version = "0.63.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d619373d490ad70966994801bc126846afaa0d1ee920697a031f0cf63f2568e7" +checksum = "630e67f2a31094ffa51b210ae030855cb8f3b7ee1329bdd8d085aaf61e8b97fc" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -906,51 +910,57 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.11" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ccbb08c10f6bcf912f398188e42ee2eab5f1767ce215a02a73bc5df1bbdd95" +checksum = "12fb0abf49ff0cab20fd31ac1215ed7ce0ea92286ba09e2854b42ba5cabe7525" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2", + "h2 0.3.27", + "h2 0.4.13", + "http 0.2.12", "http 1.4.0", - "hyper", - "hyper-rustls", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper 1.8.1", + "hyper-rustls 0.24.2", + "hyper-rustls 0.27.7", "hyper-util", "pin-project-lite", - "rustls", + "rustls 0.21.12", + "rustls 0.23.36", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tower", "tracing", ] [[package]] name = "aws-smithy-json" -version = "0.62.4" +version = "0.62.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b3a779093e18cad88bbae08dc4261e1d95018c4c5b9356a52bcae7c0b6e9bb" +checksum = "3cb96aa208d62ee94104645f7b2ecaf77bf27edf161590b6224bfbac2832f979" dependencies = [ "aws-smithy-types", ] [[package]] name = "aws-smithy-observability" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3f39d5bb871aaf461d59144557f16d5927a5248a983a40654d9cf3b9ba183b" +checksum = "c0a46543fbc94621080b3cf553eb4cbbdc41dd9780a30c4756400f0139440a1d" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.14" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" +checksum = "0cebbddb6f3a5bd81553643e9c7daf3cc3dc5b0b5f398ac668630e8a84e6fff0" dependencies = [ "aws-smithy-types", "urlencoding", @@ -958,9 +968,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.10.2" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ccf7f6eba8b2dcf8ce9b74806c6c185659c311665c4bf8d6e71ebd454db6bf" +checksum = "f3df87c14f0127a0d77eb261c3bc45d5b4833e2a1f63583ebfb728e4852134ee" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -983,9 +993,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.5" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4af6e5def28be846479bbeac55aa4603d6f7986fc5da4601ba324dd5d377516" +checksum = "49952c52f7eebb72ce2a754d3866cc0f87b97d2a46146b79f80f3a93fb2b3716" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -1000,9 +1010,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.5" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca2734c16913a45343b37313605d84e7d8b34a4611598ce1d25b35860a2bed3" +checksum = "3b3a26048eeab0ddeba4b4f9d51654c79af8c3b32357dc5f336cee85ab331c33" dependencies = [ "base64-simd", "bytes", @@ -1026,18 +1036,18 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.14" +version = "0.60.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53543b4b86ed43f051644f704a98c7291b3618b67adf057ee77a366fa52fcaa" +checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57" dependencies = [ "xmlparser", ] [[package]] name = "aws-types" -version = "1.3.13" +version = "1.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0470cc047657c6e286346bdf10a8719d26efd6a91626992e0e64481e44323e96" +checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -1060,7 +1070,7 @@ dependencies = [ "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-util", "itoa", "matchit", @@ -1235,6 +1245,12 @@ dependencies = [ "windows-link", ] +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + [[package]] name = "base64" version = "0.13.1" @@ -1319,9 +1335,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitpacking" @@ -1355,16 +1371,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.4" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d2d5991425dfd0785aed03aedcf0b321d61975c9b5b3689c774a2610ae0b51e" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", - "cpufeatures 0.3.0", + "cpufeatures", ] [[package]] @@ -1400,9 +1416,9 @@ dependencies = [ [[package]] name = "bon" -version = "3.9.1" +version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47dbe92550676ee653353c310dfb9cf6ba17ee70396e1f7cf0a2020ad49b2fe" +checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" dependencies = [ "bon-macros", "rustversion", @@ -1410,9 +1426,9 @@ dependencies = [ [[package]] name = "bon-macros" -version = "3.9.1" +version = "3.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519bd3116aeeb42d5372c29d982d16d0170d3d4a5ed85fc7dd91642ffff3c67c" +checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" dependencies = [ "darling 0.23.0", "ident_case", @@ -1420,7 +1436,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -1446,9 +1462,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" @@ -1495,9 +1511,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.58" +version = "1.2.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" +checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" dependencies = [ "find-msvc-tools", "jobserver", @@ -1534,9 +1550,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", @@ -1595,9 +1611,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", "clap_derive", @@ -1605,9 +1621,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstream", "anstyle", @@ -1617,36 +1633,36 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "cmake" -version = "0.1.58" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "comfy-table" @@ -1660,9 +1676,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.37" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" +checksum = "00828ba6fd27b45a448e57dbfe84f1029d4c9f26b368157e9a448a5f49a2ec2a" dependencies = [ "compression-core", "flate2", @@ -1725,9 +1741,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.12" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413d67b29ef1021b4d60f4aa1e925ca031751e213832b4b1d588fae623c05c60" +checksum = "2f8a2ca5ac02d09563609681103aada9e1777d54fc57a5acd7a41404f9c93b6e" [[package]] name = "constant_time_eq" @@ -1788,15 +1804,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpufeatures" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" -dependencies = [ - "libc", -] - [[package]] name = "crc" version = "3.3.0" @@ -1939,6 +1946,28 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -2025,7 +2054,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2038,7 +2067,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2060,7 +2089,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2071,7 +2100,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2096,9 +2125,9 @@ dependencies = [ [[package]] name = "datafusion" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c18ba387f9c05ac1f3be32a73f8f3cc6c1cfc43e5d4b7a8e5b0d3a5eb48dc7" +checksum = "8ba7cb113e9c0bedf9e9765926031e132fa05a1b09ba6e93a6d1a4d7044457b8" dependencies = [ "arrow", "arrow-schema", @@ -2138,6 +2167,7 @@ dependencies = [ "parquet", "rand 0.9.2", "regex", + "rstest 0.26.1", "sqlparser", "tempfile", "tokio", @@ -2147,9 +2177,9 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c75a4ce672b27fb8423810efb92a3600027717a1664d06a2c307eeeabcec694" +checksum = "66a3a799f914a59b1ea343906a0486f17061f39509af74e874a866428951130d" dependencies = [ "arrow", "async-trait", @@ -2172,9 +2202,9 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8b9a3795ffb46bf4957a34c67d89a67558b311ae455c8d4295ff2115eeea50" +checksum = "6db1b113c80d7a0febcd901476a57aef378e717c54517a163ed51417d87621b0" dependencies = [ "arrow", "async-trait", @@ -2191,20 +2221,21 @@ dependencies = [ "itertools 0.14.0", "log", "object_store", + "tokio", ] [[package]] name = "datafusion-common" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "205dc1e20441973f470e6b7ef87626a3b9187970e5106058fef1b713047f770c" +checksum = "7c10f7659e96127d25e8366be7c8be4109595d6a2c3eac70421f380a7006a1b0" dependencies = [ "ahash", "arrow", "arrow-ipc", "chrono", "half", - "hashbrown 0.16.1", + "hashbrown 0.14.5", "indexmap", "libc", "log", @@ -2218,9 +2249,9 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf5880c02ff6f5f11fb5bc19211789fb32fd3c53d79b7d6cb2b12e401312ba0" +checksum = "b92065bbc6532c6651e2f7dd30b55cba0c7a14f860c7e1d15f165c41a1868d95" dependencies = [ "futures", "log", @@ -2229,9 +2260,9 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc614d6e709450e29b7b032a42c1bdb705f166a6b2edef7bed7c7897eb905499" +checksum = "fde13794244bc7581cd82f6fff217068ed79cdc344cafe4ab2c3a1c3510b38d6" dependencies = [ "arrow", "async-trait", @@ -2258,9 +2289,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-arrow" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e497d5fc48dac7ce86f6b4fb09a3a494385774af301ff20ec91aebfae9b05b4" +checksum = "804fa9b4ecf3157982021770617200ef7c1b2979d57bec9044748314775a9aea" dependencies = [ "arrow", "arrow-ipc", @@ -2282,9 +2313,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dfc250cad940d0327ca2e9109dc98830892d17a3d6b2ca11d68570e872cf379" +checksum = "61a1641a40b259bab38131c5e6f48fac0717bedb7dc93690e604142a849e0568" dependencies = [ "arrow", "async-trait", @@ -2305,9 +2336,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91e9677ed62833b0e8129dec0d1a8f3c9bb7590bd6dd714a43e4c3b663e4aa0" +checksum = "adeacdb00c1d37271176f8fb6a1d8ce096baba16ea7a4b2671840c5c9c64fe85" dependencies = [ "arrow", "async-trait", @@ -2327,9 +2358,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23798383465e0c569bd442d1453b50691261f8ad6511d840c48457b3bf51ae21" +checksum = "43d0b60ffd66f28bfb026565d62b0a6cbc416da09814766a3797bba7d85a3cd9" dependencies = [ "arrow", "async-trait", @@ -2357,19 +2388,18 @@ dependencies = [ [[package]] name = "datafusion-doc" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e13e5fe3447baa0584b61ee8644086e007e1ef6e58f4be48bc8a72417854729" +checksum = "2b99e13947667b36ad713549237362afb054b2d8f8cc447751e23ec61202db07" [[package]] name = "datafusion-execution" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48a6cc03e34899a54546b229235f7b192634c8e832f78a267f0989b18216c56d" +checksum = "63695643190679037bc946ad46a263b62016931547bf119859c511f7ff2f5178" dependencies = [ "arrow", "async-trait", - "chrono", "dashmap", "datafusion-common", "datafusion-expr", @@ -2384,9 +2414,9 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3315d87eca7a7df58e52a1fb43b4c4171b545fd30ffc3102945c162a9f6ddb" +checksum = "f9a4787cbf5feb1ab351f789063398f67654a6df75c4d37d7f637dc96f951a91" dependencies = [ "arrow", "async-trait", @@ -2406,9 +2436,9 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c6d83feae0753799f933a2c47dfd15980c6947960cb95ed60f5c1f885548b3" +checksum = "5ce2fb1b8c15c9ac45b0863c30b268c69dc9ee7a1ee13ecf5d067738338173dc" dependencies = [ "arrow", "datafusion-common", @@ -2419,9 +2449,9 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b82962015cc3db4d7662459c9f7fcda0591b5edacb8af1cf3bc3031f274800" +checksum = "794a9db7f7b96b3346fc007ff25e994f09b8f0511b4cf7dff651fadfe3ebb28f" dependencies = [ "arrow", "arrow-buffer", @@ -2429,7 +2459,6 @@ dependencies = [ "blake2", "blake3", "chrono", - "chrono-tz", "datafusion-common", "datafusion-doc", "datafusion-execution", @@ -2450,9 +2479,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e42c227d9e55a6c8041785d4a8a117e4de531033d480aae10984247ac62e27e" +checksum = "1c25210520a9dcf9c2b2cbbce31ebd4131ef5af7fc60ee92b266dc7d159cb305" dependencies = [ "ahash", "arrow", @@ -2471,9 +2500,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cead3cfed825b0b688700f4338d281cd7857e4907775a5b9554c083edd5f3f95" +checksum = "62f4a66f3b87300bb70f4124b55434d2ae3fe80455f3574701d0348da040b55d" dependencies = [ "ahash", "arrow", @@ -2484,9 +2513,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ea99612970aebab8cf864d02eb3d296bbab7f4881e1023d282b57fe431b201" +checksum = "ae5c06eed03918dc7fe7a9f082a284050f0e9ecf95d72f57712d1496da03b8c4" dependencies = [ "arrow", "arrow-ord", @@ -2507,9 +2536,9 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83dbf3ab8b9af6f209b068825a7adbd3b88bf276f2a1ec14ba09567b97f5674" +checksum = "db4fed1d71738fbe22e2712d71396db04c25de4111f1ec252b8f4c6d3b25d7f5" dependencies = [ "arrow", "async-trait", @@ -2523,9 +2552,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732edabe07496e2fc5a1e57a284d7a36edcea445a2821119770a0dea624b472c" +checksum = "1d92206aa5ae21892f1552b4d61758a862a70956e6fd7a95cb85db1de74bc6d1" dependencies = [ "arrow", "datafusion-common", @@ -2541,9 +2570,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c6e30e09700799bd52adce8c377ab03dda96e73a623e4803a31ad94fe7ce14" +checksum = "53ae9bcc39800820d53a22d758b3b8726ff84a5a3e24cecef04ef4e5fdf1c7cc" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -2551,20 +2580,20 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402f2a8ed70fb99a18f71580a1fe338604222a3d32ddeac6e72c5b34feea2d4d" +checksum = "1063ad4c9e094b3f798acee16d9a47bd7372d9699be2de21b05c3bd3f34ab848" dependencies = [ "datafusion-doc", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "datafusion-optimizer" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f32edb8ba12f08138f86c09b80fae3d4a320551262fa06b91d8a8cb3065a5b" +checksum = "9f35f9ec5d08b87fd1893a30c2929f2559c2f9806ca072d8fefca5009dc0f06a" dependencies = [ "arrow", "chrono", @@ -2581,9 +2610,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987c5e29e96186589301b42e25aa7d11bbe319a73eb02ef8d755edc55b5b89fc" +checksum = "c30cc8012e9eedcb48bbe112c6eff4ae5ed19cf3003cb0f505662e88b7014c5d" dependencies = [ "ahash", "arrow", @@ -2593,20 +2622,19 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-physical-expr-common", "half", - "hashbrown 0.16.1", + "hashbrown 0.14.5", "indexmap", "itertools 0.14.0", "parking_lot", "paste", "petgraph", - "tokio", ] [[package]] name = "datafusion-physical-expr-adapter" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de89d0afa08b6686697bd8a6bac4ba2cd44c7003356e1bce6114d5a93f94b5c" +checksum = "7f9ff2dbd476221b1f67337699eff432781c4e6e1713d2aefdaa517dfbf79768" dependencies = [ "arrow", "datafusion-common", @@ -2619,26 +2647,23 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602d1970c0fe87f1c3a36665d131fbfe1c4379d35f8fc5ec43a362229ad2954d" +checksum = "90da43e1ec550b172f34c87ec68161986ced70fd05c8d2a2add66eef9c276f03" dependencies = [ "ahash", "arrow", - "chrono", "datafusion-common", "datafusion-expr-common", - "hashbrown 0.16.1", - "indexmap", + "hashbrown 0.14.5", "itertools 0.14.0", - "parking_lot", ] [[package]] name = "datafusion-physical-optimizer" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b24d704b6385ebe27c756a12e5ba15684576d3b47aeca79cc9fb09480236dc32" +checksum = "ce9804f799acd7daef3be7aaffe77c0033768ed8fdbf5fb82fc4c5f2e6bc14e6" dependencies = [ "arrow", "datafusion-common", @@ -2654,27 +2679,27 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21d94141ea5043e98793f170798e9c1887095813b8291c5260599341e383a38" +checksum = "0acf0ad6b6924c6b1aa7d213b181e012e2d3ec0a64ff5b10ee6282ab0f8532ac" dependencies = [ "ahash", "arrow", "arrow-ord", "arrow-schema", "async-trait", + "chrono", "datafusion-common", "datafusion-common-runtime", "datafusion-execution", "datafusion-expr", - "datafusion-functions", "datafusion-functions-aggregate-common", "datafusion-functions-window-common", "datafusion-physical-expr", "datafusion-physical-expr-common", "futures", "half", - "hashbrown 0.16.1", + "hashbrown 0.14.5", "indexmap", "itertools 0.14.0", "log", @@ -2685,9 +2710,9 @@ dependencies = [ [[package]] name = "datafusion-pruning" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a68cce43d18c0dfac95cacd74e70565f7e2fb12b9ed41e2d312f0fa837626b1" +checksum = "ac2c2498a1f134a9e11a9f5ed202a2a7d7e9774bd9249295593053ea3be999db" dependencies = [ "arrow", "datafusion-common", @@ -2702,9 +2727,9 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4e1c40a0b1896aed4a4504145c2eb7fa9b9da13c2d04b40a4767a09f076199" +checksum = "8f96eebd17555386f459037c65ab73aae8df09f464524c709d6a3134ad4f4776" dependencies = [ "async-trait", "datafusion-common", @@ -2716,9 +2741,9 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1891e5b106d1d73c7fe403bd8a265d19c3977edc17f60808daf26c2fe65ffb" +checksum = "3fc195fe60634b2c6ccfd131b487de46dc30eccae8a3c35a13f136e7f440414f" dependencies = [ "arrow", "bigdecimal", @@ -2733,9 +2758,9 @@ dependencies = [ [[package]] name = "datafusion-substrait" -version = "52.4.0" +version = "51.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2379388ecab67079eeb1185c953fb9c5ed4b283fa3cb81417538378a30545957" +checksum = "2505af06d103a55b4e8ded0c6aeb6c72a771948da939c0bd3f8eee67af475a9c" dependencies = [ "async-recursion", "async-trait", @@ -2749,6 +2774,7 @@ dependencies = [ "substrait", "tokio", "url", + "uuid", ] [[package]] @@ -2798,6 +2824,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "der" version = "0.7.10" @@ -2811,9 +2847,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" dependencies = [ "powerfmt", "serde_core", @@ -2858,7 +2894,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2878,7 +2914,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core 0.20.2", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2949,7 +2985,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -2995,12 +3031,44 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ecdsa" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +dependencies = [ + "der 0.6.1", + "elliptic-curve", + "rfc6979", + "signature 1.6.4", +] + [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "elliptic-curve" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +dependencies = [ + "base16ct", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest", + "ff", + "generic-array", + "group", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encode_unicode" version = "1.0.0" @@ -3091,9 +3159,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "1.0.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -3101,9 +3169,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.10" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ "anstream", "anstyle", @@ -3129,7 +3197,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -3217,6 +3285,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "ff" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "filetime" version = "0.2.27" @@ -3258,7 +3336,7 @@ version = "25.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "rustc_version", ] @@ -3345,7 +3423,7 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "fsst" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-array", "lance-datagen", @@ -3372,9 +3450,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -3387,9 +3465,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -3397,15 +3475,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -3414,9 +3492,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -3448,26 +3526,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -3477,9 +3555,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -3489,6 +3567,7 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", + "pin-utils", "slab", ] @@ -3602,9 +3681,9 @@ dependencies = [ [[package]] name = "geodatafusion" -version = "0.3.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cb8faa9b3bf4ae9f49b1f023b82d20626826f6448a7055498376146c10c4ead" +checksum = "773cfa1fb0d7f7661b76b3fde00f3ffd8e0ff7b3635096f0ff6294fe5ca62a2b" dependencies = [ "arrow-arith", "arrow-array", @@ -3622,9 +3701,9 @@ dependencies = [ [[package]] name = "geographiclib-rs" -version = "0.2.7" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a7f08910fd98737a6eda7568e7c5e645093e073328eeef49758cfe8b0489c7" +checksum = "f611040a2bb37eaa29a78a128d1e92a378a03e0b6e66ae27398d42b1ba9a7841" dependencies = [ "libm", ] @@ -3672,24 +3751,11 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi 5.3.0", + "r-efi", "wasip2", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "wasip2", - "wasip3", -] - [[package]] name = "gimli" version = "0.32.3" @@ -3725,7 +3791,7 @@ dependencies = [ "derive_builder 0.20.2", "http 1.4.0", "reqwest", - "rustls", + "rustls 0.23.36", "rustls-pemfile", "serde", "serde_json", @@ -3734,6 +3800,36 @@ dependencies = [ "tokio", ] +[[package]] +name = "group" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.13" @@ -3779,6 +3875,10 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] [[package]] name = "hashbrown" @@ -3971,6 +4071,30 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.8.1" @@ -3981,7 +4105,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", + "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "httparse", @@ -3994,6 +4118,21 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "log", + "rustls 0.21.12", + "tokio", + "tokio-rustls 0.24.1", +] + [[package]] name = "hyper-rustls" version = "0.27.7" @@ -4001,13 +4140,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.4.0", - "hyper", + "hyper 1.8.1", "hyper-util", - "rustls", + "rustls 0.23.36", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.4", "tower-service", "webpki-roots 1.0.6", ] @@ -4020,7 +4159,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-util", "native-tls", "tokio", @@ -4040,12 +4179,12 @@ dependencies = [ "futures-util", "http 1.4.0", "http-body 1.0.1", - "hyper", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.2", "system-configuration", "tokio", "tower-service", @@ -4210,12 +4349,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -4245,32 +4378,36 @@ dependencies = [ [[package]] name = "include-flate" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a05fb00d9abc625268e0573a519506b264a7d6965de09bac13201bfb44e723d" +checksum = "e01b7cb6ca682a621e7cda1c358c9724b53a7b4409be9be1dd443b7f3a26f998" dependencies = [ "include-flate-codegen", "include-flate-compress", + "libflate", + "zstd", ] [[package]] name = "include-flate-codegen" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c3c319a7527668538a8530c541e74e881e94c4f41e1425622d0a41c16468af" +checksum = "4f49bf5274aebe468d6e6eba14a977eaf1efa481dc173f361020de70c1c48050" dependencies = [ "include-flate-compress", - "proc-macro-error2", + "libflate", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", + "zstd", ] [[package]] name = "include-flate-compress" -version = "0.3.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0bd9ea81b94169d61c5a397e9faef02153d3711fc62d3270bcde3ac85380d9" +checksum = "eae6a40e716bcd5931f5dbb79cd921512a4f647e2e9413fded3171fca3824dbc" dependencies = [ "libflate", "zstd", @@ -4284,8 +4421,6 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", - "serde", - "serde_core", ] [[package]] @@ -4350,17 +4485,28 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +[[package]] +name = "io-uring" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" -version = "2.12.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.12" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -4430,9 +4576,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.18" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jieba-macros" @@ -4459,9 +4605,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "d89a5b5e10d5a9ad6e5d1f4bd58225f655d6fe9767575a5e8ac5a6fe64e04495" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -4474,20 +4620,20 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.23" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "ff7a39c8862fc1369215ccf0a8f12dd4598c7f6484704359f0351bd617034dbf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "jiff-tzdb" -version = "0.1.6" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" +checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" [[package]] name = "jiff-tzdb-platform" @@ -4510,21 +4656,19 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.92" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc4c90f45aa2e6eacbe8645f77fdea542ac97a494bcd117a67df9ff4d611f995" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ - "cfg-if", - "futures-util", "once_cell", "wasm-bindgen", ] [[package]] name = "jsonb" -version = "0.5.6" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb98fb29636087c40ad0d1274d9a30c0c1e83e03ae93f6e7e89247b37fcc6953" +checksum = "2a901f06163d352fbe41c3c2ff5e08b75330a003cc941e988fb501022f5421e6" dependencies = [ "byteorder", "ethnum", @@ -4533,11 +4677,11 @@ dependencies = [ "jiff", "nom 8.0.0", "num-traits", - "ordered-float 5.3.0", + "ordered-float 5.1.0", "rand 0.9.2", + "ryu", "serde", "serde_json", - "zmij", ] [[package]] @@ -4566,7 +4710,7 @@ dependencies = [ [[package]] name = "lance" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "all_asserts", "approx", @@ -4639,9 +4783,8 @@ dependencies = [ "prost", "prost-types", "rand 0.9.2", - "rand_distr 0.5.1", "roaring", - "rstest", + "rstest 0.23.0", "semver", "serde", "serde_json", @@ -4662,7 +4805,7 @@ dependencies = [ [[package]] name = "lance-arrow" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-array", "arrow-buffer", @@ -4672,7 +4815,6 @@ dependencies = [ "arrow-schema", "arrow-select", "bytes", - "futures", "getrandom 0.2.17", "half", "jsonb", @@ -4680,25 +4822,9 @@ dependencies = [ "rand 0.9.2", ] -[[package]] -name = "lance-arrow-scalar" -version = "57.0.0" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-data", - "arrow-ord", - "arrow-row", - "arrow-schema", - "half", - "proptest", - "rstest", -] - [[package]] name = "lance-bitpacking" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrayref", "paste", @@ -4707,7 +4833,7 @@ dependencies = [ [[package]] name = "lance-core" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-array", "arrow-buffer", @@ -4734,7 +4860,7 @@ dependencies = [ "prost", "rand 0.9.2", "roaring", - "rstest", + "rstest 0.23.0", "serde_json", "snafu", "tempfile", @@ -4747,7 +4873,7 @@ dependencies = [ [[package]] name = "lance-datafusion" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -4771,17 +4897,14 @@ dependencies = [ "log", "pin-project", "prost", - "prost-build", - "protobuf-src", "snafu", - "substrait", "tokio", "tracing", ] [[package]] name = "lance-datagen" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -4801,7 +4924,7 @@ dependencies = [ [[package]] name = "lance-encoding" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-arith", "arrow-array", @@ -4836,8 +4959,7 @@ dependencies = [ "protobuf-src", "rand 0.9.2", "rand_xoshiro", - "rstest", - "serial_test", + "rstest 0.23.0", "snafu", "strum 0.26.3", "test-log", @@ -4849,7 +4971,7 @@ dependencies = [ [[package]] name = "lance-examples" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "all_asserts", "arrow", @@ -4875,7 +4997,7 @@ dependencies = [ [[package]] name = "lance-file" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-arith", "arrow-array", @@ -4909,7 +5031,7 @@ dependencies = [ "prost-types", "protobuf-src", "rand 0.9.2", - "rstest", + "rstest 0.23.0", "snafu", "test-log", "tokio", @@ -4918,7 +5040,7 @@ dependencies = [ [[package]] name = "lance-geo" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "datafusion", "geo-traits", @@ -4932,7 +5054,7 @@ dependencies = [ [[package]] name = "lance-index" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "approx", "arrow", @@ -4979,7 +5101,6 @@ dependencies = [ "lance-linalg", "lance-table", "lance-testing", - "libc", "libm", "lindera", "lindera-tantivy", @@ -4997,7 +5118,7 @@ dependencies = [ "rangemap", "rayon", "roaring", - "rstest", + "rstest 0.23.0", "serde", "serde_json", "smallvec", @@ -5013,7 +5134,7 @@ dependencies = [ [[package]] name = "lance-io" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-arith", @@ -5033,13 +5154,15 @@ dependencies = [ "criterion", "deepsize", "futures", - "http 1.4.0", + "io-uring", "lance-arrow", "lance-core", "lance-namespace", + "libc", "log", "mock_instant", "mockall", + "moka", "object_store", "object_store_opendal", "opendal", @@ -5048,20 +5171,20 @@ dependencies = [ "pprof", "prost", "rand 0.9.2", - "rstest", + "rstest 0.23.0", "serde", + "shellexpand", "snafu", "tempfile", "test-log", "tokio", "tracing", - "tracing-mock", "url", ] [[package]] name = "lance-linalg" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "approx", "arrow-array", @@ -5082,14 +5205,13 @@ dependencies = [ [[package]] name = "lance-namespace" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "async-trait", "bytes", "lance-core", "lance-namespace-reqwest-client", - "serde", "snafu", "tempfile", "tokio", @@ -5097,7 +5219,7 @@ dependencies = [ [[package]] name = "lance-namespace-datafusion" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -5115,7 +5237,7 @@ dependencies = [ [[package]] name = "lance-namespace-impls" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-ipc", @@ -5138,14 +5260,12 @@ dependencies = [ "lance-core", "lance-index", "lance-io", - "lance-linalg", "lance-namespace", - "lance-table", "log", "object_store", "rand 0.9.2", "reqwest", - "rstest", + "rstest 0.23.0", "serde", "serde_json", "sha2", @@ -5161,9 +5281,9 @@ dependencies = [ [[package]] name = "lance-namespace-reqwest-client" -version = "0.6.1" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2e48de899e2931afb67fcddd0a08e439bf5d8b6ea2a2ed9cb8f4df669bd5cc" +checksum = "a2acdba67f84190067532fce07b51a435dd390d7cdc1129a05003e5cb3274cf0" dependencies = [ "reqwest", "serde", @@ -5174,7 +5294,7 @@ dependencies = [ [[package]] name = "lance-table" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -5207,7 +5327,7 @@ dependencies = [ "rand 0.9.2", "rangemap", "roaring", - "rstest", + "rstest 0.23.0", "semver", "serde", "serde_json", @@ -5220,16 +5340,16 @@ dependencies = [ [[package]] name = "lance-test-macros" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "lance-testing" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "arrow-array", "arrow-schema", @@ -5240,7 +5360,7 @@ dependencies = [ [[package]] name = "lance-tools" -version = "5.0.0-beta.2" +version = "3.0.0-beta.2" dependencies = [ "clap", "lance-core", @@ -5281,12 +5401,6 @@ dependencies = [ "spin 0.9.8", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "levenshtein_automata" version = "0.2.1" @@ -5352,9 +5466,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.183" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libflate" @@ -5388,14 +5502,13 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "libc", - "plain", - "redox_syscall 0.7.3", + "redox_syscall 0.7.0", ] [[package]] @@ -5541,9 +5654,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.12.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -5624,15 +5737,15 @@ dependencies = [ [[package]] name = "lz4_flex" -version = "0.11.6" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" +checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" [[package]] name = "lz4_flex" -version = "0.12.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c23545df7ecf1b16c303910a69b079e8e251d60f7dd2cc9b4177f2afaf1746" +checksum = "ab6473172471198271ff72e9379150e9dfd70d8e533e0752a27e515b48dd375e" dependencies = [ "twox-hash", ] @@ -5719,15 +5832,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -5766,9 +5879,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi 0.11.1+wasi-snapshot-preview1", @@ -5804,14 +5917,14 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "moka" -version = "0.12.15" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" dependencies = [ "async-lock", "crossbeam-channel", @@ -5846,7 +5959,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -5863,17 +5976,17 @@ checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" [[package]] name = "native-tls" -version = "0.2.18" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ "libc", "log", "openssl", - "openssl-probe", + "openssl-probe 0.1.6", "openssl-sys", "schannel", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "tempfile", ] @@ -5969,9 +6082,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-format" @@ -6025,9 +6138,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -6035,14 +6148,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -6104,7 +6217,7 @@ dependencies = [ "http-body-util", "httparse", "humantime", - "hyper", + "hyper 1.8.1", "itertools 0.14.0", "md-5", "parking_lot", @@ -6144,9 +6257,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.4" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" @@ -6166,7 +6279,7 @@ version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "libc", "once_cell", "onig_sys", @@ -6220,11 +6333,11 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.76" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -6241,9 +6354,15 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + [[package]] name = "openssl-probe" version = "0.2.1" @@ -6252,9 +6371,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.112" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -6279,9 +6398,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.3.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", ] @@ -6311,6 +6430,17 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "p256" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" +dependencies = [ + "ecdsa", + "elliptic-curve", + "sha2", +] + [[package]] name = "parking" version = "2.2.1" @@ -6342,9 +6472,9 @@ dependencies = [ [[package]] name = "parquet" -version = "57.3.0" +version = "57.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee96b29972a257b855ff2341b37e61af5f12d6af1158b6dcdb5b31ea07bb3cb" +checksum = "5f6a2926a30477c0b95fea6c28c3072712b139337a242c2cc64817bdc20a8854" dependencies = [ "ahash", "arrow-array", @@ -6362,7 +6492,7 @@ dependencies = [ "futures", "half", "hashbrown 0.16.1", - "lz4_flex 0.12.1", + "lz4_flex 0.12.0", "num-bigint", "num-integer", "num-traits", @@ -6544,29 +6674,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "pin-project-lite" -version = "0.2.17" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -6576,9 +6706,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand 2.3.0", @@ -6591,9 +6721,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der", - "pkcs8", - "spki", + "der 0.7.10", + "pkcs8 0.10.2", + "spki 0.7.3", ] [[package]] @@ -6604,11 +6734,21 @@ checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" dependencies = [ "aes", "cbc", - "der", + "der 0.7.10", "pbkdf2", "scrypt", "sha2", - "spki", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", ] [[package]] @@ -6617,10 +6757,10 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der", + "der 0.7.10", "pkcs5", "rand_core 0.6.4", - "spki", + "spki 0.7.3", ] [[package]] @@ -6629,12 +6769,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "plotters" version = "0.3.7" @@ -6673,7 +6807,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.4", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -6685,9 +6819,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" dependencies = [ "portable-atomic", ] @@ -6741,9 +6875,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.4" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" dependencies = [ "anstyle", "predicates-core", @@ -6751,15 +6885,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.10" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" [[package]] name = "predicates-tree" -version = "1.0.13" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" dependencies = [ "predicates-core", "termtree", @@ -6782,38 +6916,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "proc-macro-crate" -version = "3.5.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ + "proc-macro-error-attr", "proc-macro2", "quote", + "syn 1.0.109", + "version_check", ] [[package]] -name = "proc-macro-error2" -version = "2.0.1" +name = "proc-macro-error-attr" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.117", + "version_check", ] [[package]] @@ -6827,13 +6963,13 @@ dependencies = [ [[package]] name = "proptest" -version = "1.11.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.11.0", + "bitflags 2.10.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", @@ -6869,7 +7005,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.117", + "syn 2.0.114", "tempfile", ] @@ -6883,7 +7019,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -6961,8 +7097,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls", - "socket2", + "rustls 0.23.36", + "socket2 0.6.2", "thiserror 2.0.18", "tokio", "tracing", @@ -6971,9 +7107,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.4", @@ -6981,7 +7117,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls", + "rustls 0.23.36", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -6999,16 +7135,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.6.2", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.45" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -7019,12 +7155,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - [[package]] name = "radium" version = "0.7.0" @@ -7231,16 +7361,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", ] [[package]] name = "redox_syscall" -version = "0.7.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", ] [[package]] @@ -7296,9 +7426,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "regress" @@ -7359,12 +7489,12 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.4.13", "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-rustls", + "hyper 1.8.1", + "hyper-rustls 0.27.7", "hyper-tls", "hyper-util", "js-sys", @@ -7375,7 +7505,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls", + "rustls 0.23.36", "rustls-native-certs", "rustls-pki-types", "serde", @@ -7384,7 +7514,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.26.4", "tokio-util", "tower", "tower-http 0.6.8", @@ -7397,11 +7527,22 @@ dependencies = [ "webpki-roots 1.0.6", ] +[[package]] +name = "rfc6979" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" +dependencies = [ + "crypto-bigint 0.4.9", + "hmac", + "zeroize", +] + [[package]] name = "rgb" -version = "0.8.53" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" dependencies = [ "bytemuck", ] @@ -7428,9 +7569,9 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "roaring" -version = "0.11.3" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba9ce64a8f45d7fc86358410bb1a82e8c987504c0d4900e9141d69a9f26c885" +checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" dependencies = [ "bytemuck", "byteorder", @@ -7454,11 +7595,11 @@ dependencies = [ "num-integer", "num-traits", "pkcs1", - "pkcs8", + "pkcs8 0.10.2", "rand_core 0.6.4", "sha2", - "signature", - "spki", + "signature 2.2.0", + "spki 0.7.3", "subtle", "zeroize", ] @@ -7482,10 +7623,21 @@ checksum = "0a2c585be59b6b5dd66a9d2084aa1d8bd52fbdb806eafdeffb52791147862035" dependencies = [ "futures", "futures-timer", - "rstest_macros", + "rstest_macros 0.23.0", "rustc_version", ] +[[package]] +name = "rstest" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +dependencies = [ + "futures-timer", + "futures-util", + "rstest_macros 0.26.1", +] + [[package]] name = "rstest_macros" version = "0.23.0" @@ -7500,7 +7652,25 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.117", + "syn 2.0.114", + "unicode-ident", +] + +[[package]] +name = "rstest_macros" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.114", "unicode-ident", ] @@ -7532,9 +7702,9 @@ checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -7551,7 +7721,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -7560,29 +7730,41 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys 0.11.0", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.37" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.9", "subtle", "zeroize", ] @@ -7593,10 +7775,10 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe", + "openssl-probe 0.2.1", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.5.1", ] [[package]] @@ -7620,9 +7802,19 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.10" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -7650,9 +7842,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "salsa20" @@ -7672,20 +7864,11 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "scc" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" -dependencies = [ - "sdd", -] - [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ "windows-sys 0.61.2", ] @@ -7711,7 +7894,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -7738,18 +7921,49 @@ dependencies = [ ] [[package]] -name = "sdd" -version = "3.0.10" +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der 0.6.1", + "generic-array", + "pkcs8 0.9.0", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] [[package]] name = "security-framework" -version = "3.7.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -7758,9 +7972,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.17.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -7809,7 +8023,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -7820,7 +8034,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -7866,19 +8080,19 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "serde_tokenstream" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c49585c52c01f13c5c2ebb333f14f6885d76daa768d8a037d28017ec538c69" +checksum = "64060d864397305347a78851c51588fd283767e7e7589829e8121d65512340f1" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -7906,32 +8120,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "serial_test" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" -dependencies = [ - "futures-executor", - "futures-util", - "log", - "once_cell", - "parking_lot", - "scc", - "serial_test_derive", -] - -[[package]] -name = "serial_test_derive" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "sha1" version = "0.10.6" @@ -7939,7 +8127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] @@ -7950,7 +8138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] @@ -7963,6 +8151,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shellexpand" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +dependencies = [ + "dirs 6.0.0", +] + [[package]] name = "shlex" version = "1.3.0" @@ -7979,6 +8176,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "signature" version = "2.2.0" @@ -7991,9 +8198,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simdutf8" @@ -8003,9 +8210,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple_asn1" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint", "num-traits", @@ -8021,9 +8228,9 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sketches-ddsketch" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" +checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" dependencies = [ "serde", ] @@ -8042,23 +8249,23 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "snafu" -version = "0.9.0" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1d4bced6a69f90b2056c03dcff2c4737f98d6fb9e0853493996e1d253ca29c6" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.9.0" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54254b8531cafa275c5e096f62d48c81435d1015405a91198ddb11e967301d40" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8069,12 +8276,22 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "socket2" -version = "0.6.3" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +dependencies = [ + "libc", + "windows-sys 0.60.2", ] [[package]] @@ -8090,11 +8307,11 @@ dependencies = [ [[package]] name = "spade" -version = "2.15.1" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9699399fd9349b00b184f5635b074f9ec93afffef30c853f8c875b32c0f8c7fa" +checksum = "fb313e1c8afee5b5647e00ee0fe6855e3d529eb863a0fdae1d60006c4d1e9990" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.15.5", "num-traits", "robust", "smallvec", @@ -8115,6 +8332,16 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + [[package]] name = "spki" version = "0.7.3" @@ -8122,7 +8349,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der", + "der 0.7.10", ] [[package]] @@ -8155,7 +8382,7 @@ checksum = "da5fc6819faabb412da764b99d3b713bb55083c11e7e0c00144d386cd6a1939c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8222,7 +8449,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8234,7 +8461,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8257,7 +8484,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "syn 2.0.117", + "syn 2.0.114", "typify", "walkdir", ] @@ -8270,9 +8497,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.17.3" +version = "12.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ca086c1eb5c7ee74b151ba83c6487d5d33f8c08ad991b86f3f58f6629e68d5" +checksum = "751a2823d606b5d0a7616499e4130a516ebd01a44f39811be2b9600936509c23" dependencies = [ "debugid", "memmap2", @@ -8282,9 +8509,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.17.3" +version = "12.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa911a28a62823aaf2cc2e074212492a3ee69d0d926cc8f5b12b4a108ff5c0c" +checksum = "79b237cfbe320601dd24b4ac817a5b68bb28f5508e33f08d42be0682cadc8ac9" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -8304,9 +8531,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -8330,7 +8557,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8339,7 +8566,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -8385,7 +8612,7 @@ dependencies = [ "levenshtein_automata", "log", "lru 0.12.5", - "lz4_flex 0.11.6", + "lz4_flex 0.11.5", "measure_time", "memmap2", "once_cell", @@ -8514,9 +8741,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.45" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" +checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" dependencies = [ "filetime", "libc", @@ -8525,14 +8752,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.27.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand 2.3.0", - "getrandom 0.4.2", + "getrandom 0.3.4", "once_cell", - "rustix 1.1.4", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -8561,7 +8788,7 @@ checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8590,7 +8817,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8601,7 +8828,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8698,9 +8925,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -8746,9 +8973,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.50.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -8756,20 +8983,20 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.6.2", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.6.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8782,13 +9009,23 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls", + "rustls 0.23.36", "tokio", ] @@ -8818,18 +9055,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.0+spec-1.1.0" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.25.8+spec-1.1.0" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -8839,9 +9076,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.0+spec-1.1.0" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -8868,7 +9105,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.10.0", "bytes", "http 1.4.0", "http-body 1.0.1", @@ -8886,7 +9123,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "async-compression", - "bitflags 2.11.0", + "bitflags 2.10.0", "bytes", "futures-core", "futures-util", @@ -8934,7 +9171,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -8969,21 +9206,11 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-mock" -version = "0.1.0-beta.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a31739d4ff16a8634c5463c75d5bf9e500596958a245d1ee5b6b98ac37658d" -dependencies = [ - "tracing", - "tracing-core", -] - [[package]] name = "tracing-subscriber" -version = "0.3.23" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -9053,7 +9280,7 @@ dependencies = [ "semver", "serde", "serde_json", - "syn 2.0.117", + "syn 2.0.114", "thiserror 2.0.18", "unicode-ident", ] @@ -9071,7 +9298,7 @@ dependencies = [ "serde", "serde_json", "serde_tokenstream", - "syn 2.0.117", + "syn 2.0.114", "typify-impl", ] @@ -9104,9 +9331,9 @@ checksum = "6b12e05d9e06373163a9bb6bb8c263c261b396643a99445fe6b9811fd376581b" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-normalization" @@ -9128,9 +9355,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" @@ -9138,12 +9365,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unicode_categories" version = "0.1.1" @@ -9179,7 +9400,7 @@ dependencies = [ "log", "native-tls", "once_cell", - "rustls", + "rustls 0.23.36", "rustls-pki-types", "serde", "serde_json", @@ -9227,11 +9448,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.3.4", "js-sys", "serde_core", "wasm-bindgen", @@ -9322,20 +9543,11 @@ dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen", -] - [[package]] name = "wasm-bindgen" -version = "0.2.115" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6523d69017b7633e396a89c5efab138161ed5aafcbc8d3e5c5a42ae38f50495a" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -9346,19 +9558,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.65" +version = "0.4.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1faf851e778dfa54db7cd438b70758eba9755cb47403f3496edd7c8fc212f0" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" dependencies = [ + "cfg-if", + "futures-util", "js-sys", + "once_cell", "wasm-bindgen", + "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.115" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3a6c758eb2f701ed3d052ff5737f5bfe6614326ea7f3bbac7156192dc32e67" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9366,48 +9582,26 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.115" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "921de2737904886b52bcbb237301552d05969a6f9c40d261eb0533c8b055fedf" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.115" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93e946af942b58934c604527337bad9ae33ba1d5c6900bbb41c2c07c2364a93" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - [[package]] name = "wasm-streams" version = "0.4.2" @@ -9421,23 +9615,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.11.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "web-sys" -version = "0.3.92" +version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84cde8507f4d7cfcb1185b8cb5890c494ffea65edbe1ba82cfd63661c805ed94" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" dependencies = [ "js-sys", "wasm-bindgen", @@ -9523,7 +9705,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -9534,7 +9716,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -9805,9 +9987,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "1.0.1" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -9824,7 +10006,7 @@ dependencies = [ "futures", "http 1.4.0", "http-body-util", - "hyper", + "hyper 1.8.1", "hyper-util", "log", "once_cell", @@ -9840,88 +10022,6 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn 2.0.117", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn 2.0.117", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.11.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] [[package]] name = "wkb" @@ -9970,7 +10070,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.4", + "rustix 1.1.3", ] [[package]] @@ -10016,28 +10116,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] @@ -10057,7 +10157,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", "synstructure", ] @@ -10097,20 +10197,20 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.114", ] [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index c922eff6b8b..527ad080889 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -146,6 +146,7 @@ geo-types = "0.7.16" http = "1.1.0" humantime = "2.2.0" hyperloglogplus = { version = "0.4.1", features = ["const-loop"] } +io-uring = "0.7" itertools = "0.13" jieba-rs = { version = "0.8.1", default-features = false } jsonb = { version = "0.5.3", default-features = false, features = ["databend"] } diff --git a/rust/lance-io/Cargo.toml b/rust/lance-io/Cargo.toml index 3aa0e1dab96..e1cbfd70f2b 100644 --- a/rust/lance-io/Cargo.toml +++ b/rust/lance-io/Cargo.toml @@ -38,6 +38,7 @@ deepsize.workspace = true futures.workspace = true http.workspace = true log.workspace = true +moka.workspace = true pin-project.workspace = true prost.workspace = true serde.workspace = true @@ -49,6 +50,10 @@ path_abs.workspace = true rand.workspace = true tempfile.workspace = true +[target.'cfg(target_os = "linux")'.dependencies] +libc = { workspace = true } +io-uring = { workspace = true } + [dev-dependencies] criterion.workspace = true test-log.workspace = true diff --git a/rust/lance-io/src/lib.rs b/rust/lance-io/src/lib.rs index e1729db73be..fabdffb7f01 100644 --- a/rust/lance-io/src/lib.rs +++ b/rust/lance-io/src/lib.rs @@ -21,6 +21,8 @@ pub mod stream; #[cfg(test)] pub mod testing; pub mod traits; +#[cfg(all(target_os = "linux"))] +pub mod uring; pub mod utils; pub use scheduler::{bytes_read_counter, iops_counter}; diff --git a/rust/lance-io/src/object_store.rs b/rust/lance-io/src/object_store.rs index 4eb1e4ff403..24ad15c4eab 100644 --- a/rust/lance-io/src/object_store.rs +++ b/rust/lance-io/src/object_store.rs @@ -32,6 +32,8 @@ use tokio::io::AsyncWriteExt; use url::Url; use super::local::LocalObjectReader; +#[cfg(all(target_os = "linux"))] +use crate::uring::{UringCurrentThreadReader, UringReader}; mod list_retry; pub mod providers; pub mod storage_options; @@ -597,6 +599,31 @@ impl ObjectStore { ) .await } + #[cfg(all(target_os = "linux"))] + "file+uring" => { + // Check if current-thread mode enabled + let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") + .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + + if use_current_thread { + UringCurrentThreadReader::open( + path, + self.block_size, + None, + Arc::new(self.io_tracker.clone()), + ) + .await + } else { + UringReader::open( + path, + self.block_size, + None, + Arc::new(self.io_tracker.clone()), + ) + .await + } + } _ => Ok(Box::new(CloudObjectReader::new( self.inner.clone(), path.clone(), @@ -634,6 +661,31 @@ impl ObjectStore { ) .await } + #[cfg(all(target_os = "linux"))] + "file+uring" => { + // Check if current-thread mode enabled + let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") + .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + + if use_current_thread { + UringCurrentThreadReader::open( + path, + self.block_size, + Some(known_size), + Arc::new(self.io_tracker.clone()), + ) + .await + } else { + UringReader::open( + path, + self.block_size, + Some(known_size), + Arc::new(self.io_tracker.clone()), + ) + .await + } + } _ => Ok(Box::new(CloudObjectReader::new( self.inner.clone(), path.clone(), diff --git a/rust/lance-io/src/object_store/providers.rs b/rust/lance-io/src/object_store/providers.rs index 3583b27b288..c9f955f22d2 100644 --- a/rust/lance-io/src/object_store/providers.rs +++ b/rust/lance-io/src/object_store/providers.rs @@ -89,6 +89,7 @@ pub struct ObjectStoreRegistryStats { /// - `file`: A local file object store, with optimized code paths. /// - `file-object-store`: A local file object store that uses the ObjectStore API, /// for all operations. Used for testing with ObjectStore wrappers. +/// - `file+uring`: A local file object store using io_uring (Linux only). /// - `s3`: An S3 object store. /// - `s3+ddb`: An S3 object store with DynamoDB for metadata. /// - `az`: An Azure Blob Storage object store. @@ -301,6 +302,8 @@ impl Default for ObjectStoreRegistry { "file-object-store".into(), Arc::new(local::FileStoreProvider), ); + #[cfg(all(target_os = "linux"))] + providers.insert("file+uring".into(), Arc::new(local::FileStoreProvider)); #[cfg(feature = "aws")] { diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs new file mode 100644 index 00000000000..9f10303b801 --- /dev/null +++ b/rust/lance-io/src/uring/current_thread.rs @@ -0,0 +1,372 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Thread-local io_uring implementation for current-thread runtimes. +//! +//! This implementation creates a thread-local IoUring instance per thread +//! and directly processes completions during future polling, eliminating +//! the need for background threads and MPSC channels. + +use super::requests::{IoRequest, RequestState}; +use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM}; +use crate::local::to_local_path; +use crate::traits::Reader; +use crate::utils::tracking_store::IOTracker; +use bytes::{Bytes, BytesMut}; +use deepsize::DeepSizeOf; +use futures::future::BoxFuture; +use futures::{FutureExt, TryFutureExt}; +use io_uring::{opcode, types, IoUring}; +use lance_core::{Error, Result}; +use object_store::path::Path; +use snafu::location; +use std::cell::RefCell; +use std::collections::HashMap; +use std::fs::File; +use std::future::Future; +use std::io::{self, ErrorKind}; +use std::ops::Range; +use std::pin::Pin; +use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::{Arc, Mutex}; +use tracing::instrument; + +// Re-use file handle types from reader.rs +use super::reader::{CacheKey, CachedReaderData, UringFileHandle, HANDLE_CACHE}; + +const DEFAULT_QUEUE_DEPTH: usize = 1024; + +/// Global counter for generating unique user_data values +static USER_DATA_COUNTER: AtomicU64 = AtomicU64::new(1); + +/// Thread-local io_uring instance with pending requests +struct ThreadLocalUring { + ring: IoUring, + pending: HashMap>, + pending_count: usize, +} + +thread_local! { + static URING: RefCell> = RefCell::new(None); +} + +/// Ensure the thread-local IoUring instance is initialized +fn ensure_uring_initialized( + opt: &mut Option, +) -> io::Result<&mut ThreadLocalUring> { + // Check if exists + if opt.is_none() { + // Create new IoUring + let queue_depth = std::env::var("LANCE_URING_QUEUE_DEPTH") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_QUEUE_DEPTH); + + let ring = IoUring::builder() + .setup_defer_taskrun() + .setup_single_issuer() + .build(queue_depth as u32) + .map_err(|e| { + io::Error::new( + io::ErrorKind::Other, + format!("Failed to create io_uring: {}", e), + ) + })?; + + log::debug!( + "Created thread-local io_uring with queue depth {}", + queue_depth + ); + + *opt = Some(ThreadLocalUring { + ring, + pending: HashMap::new(), + pending_count: 0, + }); + } + + Ok(opt.as_mut().unwrap()) +} + +/// Push request to thread-local submission queue +pub(super) fn push_request(request: Arc) -> io::Result<()> { + URING.with(|cell| { + let mut opt = cell.borrow_mut(); + + let uring = ensure_uring_initialized(&mut opt)?; + + // Generate unique user_data + let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); + + // Get buffer pointer from request state + let buffer_ptr = { + let state = request.state.lock().unwrap(); + state.buffer.as_ptr() as *mut u8 + }; + + // Prepare read operation + let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, request.length as u32) + .offset(request.offset); + + // Get submission queue + let mut sq = uring.ring.submission(); + + // Check if SQ has space + if sq.is_full() { + drop(sq); + return Err(io::Error::new( + io::ErrorKind::WouldBlock, + "io_uring submission queue full", + )); + } + + // Push to SQ + unsafe { + sq.push(&read_op.build().user_data(user_data)) + .map_err(|_| io::Error::new(io::ErrorKind::Other, "Failed to push to SQ"))?; + } + drop(sq); + + // Track request in pending map + uring.pending.insert(user_data, request); + uring.pending_count += 1; + + // Don't submit here - let the future handle submission + + Ok(()) + }) +} + +/// Process completions from thread-local IoUring +pub(super) fn process_thread_local_completions() -> io::Result { + URING.with(|cell| { + let mut opt = cell.borrow_mut(); + if let Some(ref mut uring) = *opt { + let mut completed = 0; + + // Process all available completions + for cqe in uring.ring.completion() { + let user_data = cqe.user_data(); + let result = cqe.result(); + + if let Some(request) = uring.pending.remove(&user_data) { + let mut state = request.state.lock().unwrap(); + state.completed = true; + + if result < 0 { + state.err = Some(io::Error::from_raw_os_error(-result)); + } + + // Wake waiting future + if let Some(waker) = state.waker.take() { + drop(state); + waker.wake(); + } + + completed += 1; + uring.pending_count -= 1; + } else { + log::warn!("Received completion for unknown user_data: {}", user_data); + } + } + + if completed > 0 { + log::trace!("Processed {} completions", completed); + } + + Ok(completed) + } else { + Ok(0) + } + }) +} + +/// Submit all pending requests and wait with timeout 0 (non-blocking) +pub(super) fn submit_and_wait_thread_local() -> io::Result<()> { + URING.with(|cell| { + let mut opt = cell.borrow_mut(); + if let Some(ref mut uring) = *opt { + // Submit with wait=1 (do at least some work) + uring.ring.submit_and_wait(1)?; + } + Ok(()) + }) +} + +/// Thread-local io_uring-based reader for current-thread runtimes +#[derive(Debug)] +pub struct UringCurrentThreadReader { + /// File handle + handle: Arc, + + /// Block size for I/O operations + block_size: usize, + + /// File size (determined at open time) + size: usize, + + /// I/O tracker for monitoring operations + io_tracker: Arc, +} + +impl DeepSizeOf for UringCurrentThreadReader { + fn deep_size_of_children(&self, context: &mut deepsize::Context) -> usize { + // Skip file handle (just a system resource) + // Only count the path's deep size + self.handle.path.as_ref().deep_size_of_children(context) + } +} + +impl UringCurrentThreadReader { + /// Open a file with thread-local io_uring + /// + /// This reuses the file handle caching infrastructure from UringReader + #[instrument(level = "debug")] + pub(crate) async fn open( + path: &Path, + block_size: usize, + known_size: Option, + io_tracker: Arc, + ) -> Result> { + // Determine block size with environment variable override + let block_size = std::env::var("LANCE_URING_BLOCK_SIZE") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); + + let cache_key = CacheKey::new(path, block_size); + + // Try to get from cache first + if let Some(data) = HANDLE_CACHE.get(&cache_key).await { + // Use known_size if provided, otherwise use cached size + let size = known_size.unwrap_or(data.size); + return Ok(Box::new(UringCurrentThreadReader { + handle: data.handle.clone(), + block_size, + size, + io_tracker, + }) as Box); + } + + // Cache miss - open file and get size + let path_clone = path.clone(); + let local_path = to_local_path(&path); + + let data = tokio::task::spawn_blocking(move || { + let file = File::open(&local_path).map_err(|e| match e.kind() { + ErrorKind::NotFound => Error::NotFound { + uri: path_clone.to_string(), + location: location!(), + }, + _ => e.into(), + })?; + + // Get size from known_size or file metadata + let size = match known_size { + Some(s) => s, + None => file.metadata()?.len() as usize, + }; + + Ok::<_, Error>(CachedReaderData { + handle: Arc::new(UringFileHandle::new(file, path_clone)), + size, + }) + }) + .await??; + + // Insert into cache + HANDLE_CACHE.insert(cache_key, data.clone()).await; + + // Return new reader instance + Ok(Box::new(UringCurrentThreadReader { + handle: data.handle.clone(), + block_size, + size: data.size, + io_tracker, + }) as Box) + } + + /// Submit a read request and return a future + fn submit_read( + &self, + offset: u64, + length: usize, + ) -> Pin> + Send>> { + let mut buffer = BytesMut::with_capacity(length); + unsafe { + buffer.set_len(length); + } + + let request = Arc::new(IoRequest { + fd: self.handle.fd, + offset, + length, + thread_id: std::thread::current().id(), + state: Mutex::new(RequestState { + completed: false, + waker: None, + err: None, + buffer, + }), + }); + + push_request(request.clone()).unwrap(); + + Box::pin(super::current_thread_future::UringCurrentThreadFuture::new( + request, + )) + } +} + +impl Reader for UringCurrentThreadReader { + fn path(&self) -> &Path { + &self.handle.path + } + + fn block_size(&self) -> usize { + self.block_size + } + + fn io_parallelism(&self) -> usize { + std::env::var("LANCE_URING_IO_PARALLELISM") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_URING_IO_PARALLELISM) + } + + /// Returns the file size + fn size(&self) -> BoxFuture<'_, object_store::Result> { + Box::pin(async move { Ok(self.size) }) + } + + /// Read a range of bytes using thread-local io_uring + #[instrument(level = "debug", skip(self))] + fn get_range(&self, range: Range) -> BoxFuture<'static, object_store::Result> { + let io_tracker = self.io_tracker.clone(); + let path = self.handle.path.clone(); + let num_bytes = range.len() as u64; + let range_u64 = (range.start as u64)..(range.end as u64); + + self.submit_read(range.start as u64, range.len()) + .map_ok(move |bytes| { + io_tracker.record_read("get_range", path, num_bytes, Some(range_u64)); + bytes + }) + .boxed() + } + + /// Read the entire file using thread-local io_uring + #[instrument(level = "debug", skip(self))] + fn get_all(&self) -> BoxFuture<'static, object_store::Result> { + let size = self.size; + let io_tracker = self.io_tracker.clone(); + let path = self.handle.path.clone(); + + self.submit_read(0, size) + .map_ok(move |bytes| { + io_tracker.record_read("get_all", path, bytes.len() as u64, None); + bytes + }) + .boxed() + } +} diff --git a/rust/lance-io/src/uring/current_thread_future.rs b/rust/lance-io/src/uring/current_thread_future.rs new file mode 100644 index 00000000000..0a4641fd1fb --- /dev/null +++ b/rust/lance-io/src/uring/current_thread_future.rs @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Future implementation for thread-local io_uring operations. +//! +//! This future actively processes completions during polling instead of +//! relying on background threads to wake it up. + +use super::current_thread::{process_thread_local_completions, submit_and_wait_thread_local}; +use super::requests::IoRequest; +use bytes::Bytes; +use std::future::Future; +use std::pin::Pin; +use std::sync::Arc; +use std::task::{Context, Poll}; + +/// Future that awaits completion of a thread-local io_uring read operation +pub struct UringCurrentThreadFuture { + request: Arc, +} + +impl UringCurrentThreadFuture { + pub(super) fn new(request: Arc) -> Self { + Self { request } + } +} + +impl Future for UringCurrentThreadFuture { + type Output = object_store::Result; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + // Check thread safety + if self.request.thread_id != std::thread::current().id() { + panic!("Request thread ID does not match current thread ID"); + } + + // First, check if we've been completed by some other future polling for completions. + let mut state = self.request.state.lock().unwrap(); + + if state.completed { + // Take result and return Ready + match state.err.take() { + Some(err) => { + return Poll::Ready(Err(object_store::Error::Generic { + store: "io_uring_ct", + source: Box::new(err), + })); + } + None => { + let bytes = std::mem::take(&mut state.buffer).freeze(); + return Poll::Ready(Ok(bytes)); + } + } + } + + drop(state); + + // If not, then we should do any available work and the process completions. + if let Err(e) = submit_and_wait_thread_local() { + log::debug!("Submit and wait error: {:?}", e); + } + + // Process completions + if let Err(e) = process_thread_local_completions() { + log::warn!("Error processing completions: {:?}", e); + } + + // Check if our request completed + let mut state = self.request.state.lock().unwrap(); + + if state.completed { + // Take result and return Ready + match state.err.take() { + Some(err) => { + return Poll::Ready(Err(object_store::Error::Generic { + store: "io_uring_ct", + source: Box::new(err), + })); + } + None => { + let bytes = std::mem::take(&mut state.buffer).freeze(); + return Poll::Ready(Ok(bytes)); + } + } + } + + // Not done yet - immediately wake and return Pending (don't store waker) + drop(state); + cx.waker().wake_by_ref(); + Poll::Pending + } +} diff --git a/rust/lance-io/src/uring/future.rs b/rust/lance-io/src/uring/future.rs new file mode 100644 index 00000000000..af647d24e85 --- /dev/null +++ b/rust/lance-io/src/uring/future.rs @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Future implementation for io_uring read operations. + +use super::requests::IoRequest; +use bytes::Bytes; +use std::future::Future; +use std::pin::Pin; +use std::sync::Arc; +use std::task::{Context, Poll}; + +/// Future that awaits completion of an io_uring read operation. +/// +/// This future is woken by the io_uring thread when the operation completes. +pub(super) struct UringReadFuture { + pub(super) request: Arc, +} + +impl Future for UringReadFuture { + type Output = object_store::Result; + + fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { + let mut state = self.request.state.lock().unwrap(); + + if state.completed { + // Operation completed - take the result + match state.err.take() { + Some(err) => { + return Poll::Ready(Err(object_store::Error::Generic { + store: "io_uring", + source: Box::new(err), + })); + } + None => { + let bytes = std::mem::take(&mut state.buffer).freeze(); + return Poll::Ready(Ok(bytes)); + } + } + } else { + // Operation not yet complete - store waker and return Pending + state.waker = Some(cx.waker().clone()); + Poll::Pending + } + } +} diff --git a/rust/lance-io/src/uring/mod.rs b/rust/lance-io/src/uring/mod.rs new file mode 100644 index 00000000000..34e3a4bb289 --- /dev/null +++ b/rust/lance-io/src/uring/mod.rs @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! io_uring-based I/O for high-performance local file access. +//! +//! This module provides a [`UringReader`] that implements the [`Reader`](crate::traits::Reader) trait +//! using Linux's io_uring interface for asynchronous I/O. It uses a dedicated background thread +//! that owns an io_uring instance and processes read requests from a channel. +//! +//! # Architecture +//! +//! - A dedicated background thread owns a local io_uring instance +//! - Readers submit requests via an MPSC channel to the thread +//! - The thread submits requests to io_uring and processes completions +//! - Futures are woken by the thread when operations complete +//! - Proper async integration using wakers (no busy-looping) +//! +//! # Configuration +//! +//! The io_uring reader is enabled by using the `file+uring://` URI scheme instead of `file://`. +//! Additional tuning parameters are controlled by environment variables: +//! +//! - `LANCE_URING_BLOCK_SIZE` - Block size in bytes (default: 64KB) +//! - `LANCE_URING_IO_PARALLELISM` - Max concurrent operations (default: 32) +//! - `LANCE_URING_QUEUE_DEPTH` - io_uring queue depth (default: 16K) +//! - `LANCE_URING_CORE` - Pin io_uring thread to specific CPU core (optional) +//! - `LANCE_URING_POLL_TIMEOUT_MS` - Thread poll timeout in milliseconds (default: 10) +//! +//! # Platform Support +//! +//! This module is only available on Linux and requires kernel 5.1 or newer. +//! On other platforms, the code falls back to [`LocalObjectReader`](crate::local::LocalObjectReader). +//! +//! # Example +//! +//! ```no_run +//! # use lance_io::object_store::ObjectStore; +//! # async fn example() -> lance_core::Result<()> { +//! // Enable io_uring by using the file+uring:// scheme +//! let uri = "file+uring:///path/to/file.dat"; +//! let (store, path) = ObjectStore::from_uri(uri).await?; +//! let reader = store.open(&path).await?; +//! +//! // Reader will use io_uring +//! let data = reader.get_range(0..1024).await?; +//! # Ok(()) +//! # } +//! ``` + +mod future; +mod reader; +mod requests; +mod thread; + +// Thread-local io_uring implementation for current-thread runtimes +pub(crate) mod current_thread; +pub(crate) mod current_thread_future; + +#[cfg(test)] +mod tests; + +pub(crate) use current_thread::UringCurrentThreadReader; +pub use reader::UringReader; + +/// Default block size for io_uring reads (64KB) +pub const DEFAULT_URING_BLOCK_SIZE: usize = 64 * 1024; + +/// Default I/O parallelism for io_uring (32 concurrent operations) +pub const DEFAULT_URING_IO_PARALLELISM: usize = 32; + +/// Default io_uring queue depth (16K entries) +pub const DEFAULT_URING_QUEUE_DEPTH: usize = 16 * 1024; diff --git a/rust/lance-io/src/uring/reader.rs b/rust/lance-io/src/uring/reader.rs new file mode 100644 index 00000000000..ca44cdfd4f4 --- /dev/null +++ b/rust/lance-io/src/uring/reader.rs @@ -0,0 +1,298 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! UringReader implementation. + +use super::future::UringReadFuture; +use super::requests::IoRequest; +use super::thread::{SUBMITTED_COUNTER, THREAD_SELECTOR, URING_THREADS}; +use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM}; +use crate::local::to_local_path; +use crate::traits::Reader; +use crate::uring::requests::RequestState; +use crate::utils::tracking_store::IOTracker; +use bytes::{Bytes, BytesMut}; +use deepsize::DeepSizeOf; +use futures::future::BoxFuture; +use futures::{FutureExt, TryFutureExt}; +use lance_core::{Error, Result}; +use object_store::path::Path; +use snafu::location; +use std::fs::File; +use std::future::Future; +use std::io::{self, ErrorKind}; +use std::ops::Range; +use std::os::unix::io::{AsRawFd, RawFd}; +use std::pin::Pin; +use std::sync::atomic::Ordering; +use std::sync::{Arc, LazyLock, Mutex}; +use std::time::Duration; +use tracing::instrument; + +/// Cache key for UringReader instances. +/// We cache by (path, block_size) because block_size affects reader behavior. +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub(super) struct CacheKey { + path: String, + block_size: usize, +} + +impl CacheKey { + pub(super) fn new(path: &Path, block_size: usize) -> Self { + Self { + path: path.to_string(), + block_size, + } + } +} + +/// Data stored in the cache for each opened file. +#[derive(Clone)] +pub(super) struct CachedReaderData { + pub(super) handle: Arc, + pub(super) size: usize, +} + +/// Global cache of open file handles. +/// Entries expire after 60 seconds to ensure files are eventually closed. +pub(super) static HANDLE_CACHE: LazyLock> = + LazyLock::new(|| { + moka::future::Cache::builder() + .time_to_live(Duration::from_secs(60)) + .max_capacity(10_000) + .build() + }); + +/// File handle for io_uring operations. +/// +/// Keeps the file alive and provides the raw file descriptor. +#[derive(Debug)] +pub(super) struct UringFileHandle { + /// The file (kept alive via Arc) + #[allow(unused)] + file: Arc, + + /// Raw file descriptor for io_uring + pub(super) fd: RawFd, + + /// Object store path + pub(super) path: Path, +} + +impl UringFileHandle { + pub(super) fn new(file: File, path: Path) -> Self { + let fd = file.as_raw_fd(); + Self { + file: Arc::new(file), + fd, + path, + } + } +} + +/// io_uring-based reader for local files. +/// +/// This reader uses a dedicated process-wide thread running an io_uring event loop +/// for high-performance asynchronous I/O. +#[derive(Debug)] +pub struct UringReader { + /// File handle + handle: Arc, + + /// Block size for I/O operations + block_size: usize, + + /// File size (determined at open time) + size: usize, + + /// I/O tracker for monitoring operations + io_tracker: Arc, +} + +impl DeepSizeOf for UringReader { + fn deep_size_of_children(&self, context: &mut deepsize::Context) -> usize { + // Skip file handle (just a system resource) + // Only count the path's deep size + self.handle.path.as_ref().deep_size_of_children(context) + } +} + +impl UringReader { + /// Open a file with io_uring. + /// + /// This is the internal constructor used by ObjectStore. + #[instrument(level = "debug")] + pub(crate) async fn open( + path: &Path, + block_size: usize, + known_size: Option, + io_tracker: Arc, + ) -> Result> { + // Determine block size with environment variable override + let block_size = std::env::var("LANCE_URING_BLOCK_SIZE") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); + + let cache_key = CacheKey::new(path, block_size); + + // Try to get from cache first + if let Some(data) = HANDLE_CACHE.get(&cache_key).await { + // Use known_size if provided, otherwise use cached size + let size = known_size.unwrap_or(data.size); + return Ok(Box::new(UringReader { + handle: data.handle.clone(), + block_size, + size, + io_tracker, + }) as Box); + } + + // Cache miss - open file and get size + let path_clone = path.clone(); + let local_path = to_local_path(&path); + + let data = tokio::task::spawn_blocking(move || { + let file = File::open(&local_path).map_err(|e| match e.kind() { + ErrorKind::NotFound => Error::NotFound { + uri: path_clone.to_string(), + location: location!(), + }, + _ => e.into(), + })?; + + // Get size from known_size or file metadata + let size = match known_size { + Some(s) => s, + None => file.metadata()?.len() as usize, + }; + + Ok::<_, Error>(CachedReaderData { + handle: Arc::new(UringFileHandle::new(file, path_clone)), + size, + }) + }) + .await??; + + // Insert into cache + HANDLE_CACHE.insert(cache_key, data.clone()).await; + + // Return new reader instance + Ok(Box::new(UringReader { + handle: data.handle.clone(), + block_size, + size: data.size, + io_tracker, + }) as Box) + } + + /// Submit a read request to the io_uring thread via channel and return a future. + fn submit_read( + &self, + offset: u64, + length: usize, + ) -> Pin> + Send>> { + let mut buffer = BytesMut::with_capacity(length); + unsafe { + buffer.set_len(length); + } + + // Create IoRequest with all data + let request = Arc::new(IoRequest { + fd: self.handle.fd, + offset, + length, + thread_id: std::thread::current().id(), + state: Mutex::new(RequestState { + completed: false, + waker: None, + err: None, + buffer, + }), + }); + + // Increment submitted counter before sending to channel + SUBMITTED_COUNTER.fetch_add(1, Ordering::Relaxed); + + // Select thread in round-robin fashion + let thread_idx = + (THREAD_SELECTOR.fetch_add(1, Ordering::Relaxed) as usize) % URING_THREADS.len(); + + // Send to selected thread via channel + match URING_THREADS[thread_idx] + .request_tx + .send(Arc::clone(&request)) + { + Ok(()) => { + // Return future that will be woken when operation completes + Box::pin(UringReadFuture { request }) + } + Err(_) => { + // Thread died - decrement counter and return error future + SUBMITTED_COUNTER.fetch_sub(1, Ordering::Relaxed); + Box::pin(async move { + Err(object_store::Error::Generic { + store: "UringReader", + source: Box::new(io::Error::new( + io::ErrorKind::BrokenPipe, + "io_uring thread died", + )), + }) + }) + } + } + } +} + +impl Reader for UringReader { + fn path(&self) -> &Path { + &self.handle.path + } + + fn block_size(&self) -> usize { + self.block_size + } + + fn io_parallelism(&self) -> usize { + std::env::var("LANCE_URING_IO_PARALLELISM") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_URING_IO_PARALLELISM) + } + + /// Returns the file size. + fn size(&self) -> BoxFuture<'_, object_store::Result> { + Box::pin(async move { Ok(self.size) }) + } + + /// Read a range of bytes using io_uring. + #[instrument(level = "debug", skip(self))] + fn get_range(&self, range: Range) -> BoxFuture<'static, object_store::Result> { + let io_tracker = self.io_tracker.clone(); + let path = self.handle.path.clone(); + let num_bytes = range.len() as u64; + let range_u64 = (range.start as u64)..(range.end as u64); + + self.submit_read(range.start as u64, range.len()) + .map_ok(move |bytes| { + io_tracker.record_read("get_range", path, num_bytes, Some(range_u64)); + bytes + }) + .boxed() + } + + /// Read the entire file using io_uring. + #[instrument(level = "debug", skip(self))] + fn get_all(&self) -> BoxFuture<'static, object_store::Result> { + let size = self.size; + let io_tracker = self.io_tracker.clone(); + let path = self.handle.path.clone(); + + self.submit_read(0, size) + .map_ok(move |bytes| { + io_tracker.record_read("get_all", path, bytes.len() as u64, None); + bytes + }) + .boxed() + } +} diff --git a/rust/lance-io/src/uring/requests.rs b/rust/lance-io/src/uring/requests.rs new file mode 100644 index 00000000000..4064743823e --- /dev/null +++ b/rust/lance-io/src/uring/requests.rs @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Protocol types for communication between UringReader and the io_uring thread. + +use bytes::BytesMut; +use std::io; +use std::os::unix::io::RawFd; +use std::sync::Mutex; +use std::task::Waker; +use std::thread::ThreadId; + +pub(super) struct RequestState { + pub completed: bool, + pub waker: Option, + pub err: Option, + pub buffer: BytesMut, +} + +/// I/O request object that contains all state for a single read operation. +/// This is shared between the submitter, uring thread, and future via Arc. +pub(super) struct IoRequest { + /// File descriptor to read from. + pub fd: RawFd, + + /// Byte offset to start reading from. + pub offset: u64, + + /// Number of bytes to read. + pub length: usize, + + pub thread_id: ThreadId, + + /// Completion flag - set to true when operation completes. + pub state: Mutex, +} diff --git a/rust/lance-io/src/uring/tests.rs b/rust/lance-io/src/uring/tests.rs new file mode 100644 index 00000000000..4fad3ff292f --- /dev/null +++ b/rust/lance-io/src/uring/tests.rs @@ -0,0 +1,215 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Tests for io_uring reader implementation. + +use crate::object_store::ObjectStore; +use lance_core::Result; +use std::io::Write; +use tempfile::NamedTempFile; + +/// Helper to create a temporary file with test data +fn create_test_file(size: usize) -> Result<(NamedTempFile, Vec)> { + let mut file = NamedTempFile::new()?; + let data: Vec = (0..size).map(|i| (i % 256) as u8).collect(); + file.write_all(&data)?; + file.flush()?; + Ok((file, data)) +} + +#[tokio::test] +async fn test_read_small_file() -> Result<()> { + let (file, expected_data) = create_test_file(1024)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Read entire file + let data = reader.get_all().await.unwrap(); + assert_eq!(data.as_ref(), expected_data.as_slice()); + + Ok(()) +} + +#[tokio::test] +async fn test_read_range() -> Result<()> { + let (file, expected_data) = create_test_file(4096)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Read a range in the middle + let range = 1000..2000; + let data = reader.get_range(range.clone()).await.unwrap(); + assert_eq!(data.as_ref(), &expected_data[range]); + + Ok(()) +} + +#[tokio::test] +async fn test_read_multiple_ranges() -> Result<()> { + let (file, expected_data) = create_test_file(8192)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Read multiple ranges + let ranges = vec![0..100, 500..600, 2000..3000]; + for range in ranges { + let data = reader.get_range(range.clone()).await.unwrap(); + assert_eq!(data.as_ref(), &expected_data[range]); + } + + Ok(()) +} + +#[tokio::test] +async fn test_file_size() -> Result<()> { + let size = 5000; + let (file, _) = create_test_file(size)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + assert_eq!(reader.size().await.unwrap(), size); + + Ok(()) +} + +#[tokio::test] +async fn test_concurrent_reads() -> Result<()> { + let (file, expected_data) = create_test_file(16384)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + + // Perform multiple concurrent reads + let mut tasks = vec![]; + for i in 0..10 { + let reader_clone = store.open(&path).await?; + let expected = expected_data.clone(); + tasks.push(tokio::spawn(async move { + let range = (i * 1000)..((i + 1) * 1000); + let data = reader_clone.get_range(range.clone()).await.unwrap(); + assert_eq!(data.as_ref(), &expected[range]); + })); + } + + // Wait for all tasks + for task in tasks { + task.await.unwrap(); + } + + Ok(()) +} + +#[tokio::test] +async fn test_large_file_read() -> Result<()> { + // Test with a larger file (1MB) + let size = 1024 * 1024; + let (file, expected_data) = create_test_file(size)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Read entire file + let data = reader.get_all().await.unwrap(); + assert_eq!(data.len(), size); + assert_eq!(data.as_ref(), expected_data.as_slice()); + + Ok(()) +} + +#[tokio::test] +async fn test_read_edge_cases() -> Result<()> { + let (file, expected_data) = create_test_file(4096)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Read from start + let data = reader.get_range(0..100).await.unwrap(); + assert_eq!(data.as_ref(), &expected_data[0..100]); + + // Read to end + let data = reader.get_range(4000..4096).await.unwrap(); + assert_eq!(data.as_ref(), &expected_data[4000..4096]); + + // Read single byte + let data = reader.get_range(2000..2001).await.unwrap(); + assert_eq!(data.as_ref(), &expected_data[2000..2001]); + + Ok(()) +} + +#[tokio::test] +async fn test_file_not_found() { + let uri = "file+uring:///nonexistent/file.dat"; + let (store, path) = ObjectStore::from_uri(uri).await.unwrap(); + + // Should fail to open non-existent file + let result = store.open(&path).await; + assert!(result.is_err()); +} + +#[tokio::test] +async fn test_block_size_and_parallelism() -> Result<()> { + let (file, _) = create_test_file(1024)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Check default values (or configured values) + assert!(reader.block_size() > 0); + assert!(reader.io_parallelism() > 0); + + Ok(()) +} + +#[tokio::test] +async fn test_path() -> Result<()> { + let (file, _) = create_test_file(1024)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Verify path is preserved + assert_eq!(reader.path(), &path); + + Ok(()) +} + +#[tokio::test] +async fn test_uring_not_enabled_with_file_scheme() -> Result<()> { + // Verify that files opened with file:// don't use uring + let (file, expected_data) = create_test_file(1024)?; + let file_path = file.path().to_str().unwrap(); + // Use regular file:// scheme, should NOT use uring + let uri = format!("file://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Should still be able to read, just won't use uring + let data = reader.get_all().await.unwrap(); + assert_eq!(data.as_ref(), expected_data.as_slice()); + + Ok(()) +} diff --git a/rust/lance-io/src/uring/thread.rs b/rust/lance-io/src/uring/thread.rs new file mode 100644 index 00000000000..831fcc30360 --- /dev/null +++ b/rust/lance-io/src/uring/thread.rs @@ -0,0 +1,398 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: Copyright The Lance Authors + +//! Dedicated thread for io_uring operations. +//! +//! This module provides a background thread that owns an io_uring instance +//! and processes read requests from a channel. Readers send requests via +//! an MPSC channel, and the thread handles submission and completion processing. + +use super::requests::IoRequest; +use super::DEFAULT_URING_QUEUE_DEPTH; +use io_uring::{opcode, types, IoUring}; +use std::collections::HashMap; +use std::io; +use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::mpsc::{sync_channel, Receiver, RecvTimeoutError, SyncSender}; +use std::sync::{Arc, LazyLock}; +use std::time::{Duration, Instant}; + +/// Handle to the io_uring background thread. +/// +/// This provides a channel sender for submitting read requests to the thread. +pub(super) struct UringThreadHandle { + pub request_tx: SyncSender>, +} + +/// Lazy-initialized io_uring thread pool. +/// +/// Multiple threads are spawned on first access and run until process exit. +pub(super) static URING_THREADS: LazyLock> = LazyLock::new(|| { + let queue_depth = get_queue_depth(); + let thread_count = get_thread_count(); + + let mut threads = Vec::with_capacity(thread_count); + + for i in 0..thread_count { + let (tx, rx) = sync_channel(queue_depth); + + std::thread::Builder::new() + .name(format!("lance-uring-{}", i)) + .spawn(move || run_uring_thread(rx, queue_depth, i)) + .expect("Failed to spawn io_uring thread"); + + threads.push(UringThreadHandle { request_tx: tx }); + } + + log::info!( + "io_uring thread pool spawned ({} threads, queue_depth={})", + thread_count, + queue_depth + ); + + threads +}); + +/// Atomic counter for round-robin thread selection. +pub(super) static THREAD_SELECTOR: AtomicU64 = AtomicU64::new(0); + +/// Counter for generating unique user_data values. +/// +/// Each io_uring operation needs a unique user_data ID to match completions +/// with their corresponding requests. +static USER_DATA_COUNTER: AtomicU64 = AtomicU64::new(1); + +/// Counter for requests that have been submitted to the thread but not yet received. +/// +/// This tracks requests sitting in the channel queue waiting to be received by the thread. +pub(super) static SUBMITTED_COUNTER: AtomicU64 = AtomicU64::new(0); + +/// Default batch size for submission - how many requests to batch before calling submit(). +const DEFAULT_SUBMIT_BATCH_SIZE: usize = 128; + +/// Default number of io_uring threads. +const DEFAULT_URING_THREAD_COUNT: usize = 2; + +/// Get the configured queue depth from environment variable. +fn get_queue_depth() -> usize { + std::env::var("LANCE_URING_QUEUE_DEPTH") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_URING_QUEUE_DEPTH) +} + +/// Get the configured poll timeout from environment variable. +fn get_poll_timeout() -> Duration { + let timeout_ms = std::env::var("LANCE_URING_POLL_TIMEOUT_MS") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(10); + + Duration::from_millis(timeout_ms) +} + +/// Get the configured submit batch size from environment variable. +fn get_submit_batch_size() -> usize { + std::env::var("LANCE_URING_SUBMIT_BATCH_SIZE") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_SUBMIT_BATCH_SIZE) +} + +/// Get the configured number of uring threads from environment variable. +fn get_thread_count() -> usize { + std::env::var("LANCE_URING_THREAD_COUNT") + .ok() + .and_then(|s| s.parse().ok()) + .unwrap_or(DEFAULT_URING_THREAD_COUNT) +} + +/// Main loop for the io_uring thread. +/// +/// This thread: +/// 1. Receives requests from the channel +/// 2. Submits them to io_uring +/// 3. Processes completions +/// 4. Wakes futures via their wakers +fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, thread_id: usize) { + // Pin to core if configured + // Format: LANCE_URING_CORE=0,1,2 or LANCE_URING_CORE=0 (applies to thread 0 only) + if let Ok(core_str) = std::env::var("LANCE_URING_CORE") { + let cores: Vec<&str> = core_str.split(',').collect(); + if let Some(core_str) = cores.get(thread_id).or_else(|| cores.first()) { + if let Ok(core) = core_str.parse() { + if let Err(e) = pin_to_core(core) { + log::warn!( + "Failed to pin io_uring thread {} to core {}: {}", + thread_id, + core, + e + ); + } else { + log::info!("io_uring thread {} pinned to core {}", thread_id, core); + } + } + } + } + + // Create local io_uring instance + let mut ring = IoUring::builder() + // .setup_sqpoll(100) + .build(queue_depth as u32) + .expect("Failed to create io_uring"); + + let mut pending: HashMap> = HashMap::with_capacity(queue_depth); + let poll_timeout = get_poll_timeout(); + let submit_batch_size = get_submit_batch_size(); + let mut last_log = Instant::now(); + let log_interval = Duration::from_millis(100); + let mut completed_iops = 0usize; + let mut completed_sectors = 0usize; + let mut min_in_flight = usize::MAX; + + loop { + // Track minimum in-flight count + let in_flight = pending.len(); + min_in_flight = min_in_flight.min(in_flight); + + // Log in-flight requests every 100ms + let now = Instant::now(); + if now.duration_since(last_log) >= log_interval { + let submitted = SUBMITTED_COUNTER.load(Ordering::Relaxed); + log::info!( + "io_uring[{}]: {} submitted, {} in flight (min {}), {} iops completed, {} sectors completed", + thread_id, + submitted, + in_flight, + min_in_flight, + completed_iops, + completed_sectors + ); + last_log = now; + completed_iops = 0; // Reset counter after logging + completed_sectors = 0; // Reset counter after logging + min_in_flight = usize::MAX; // Reset min tracker + } + + // Process all available completions first + let completions = process_completions(&mut ring, &mut pending); + match completions { + Ok(count) => { + completed_iops += count.iops; + completed_sectors += count.sectors; + } + Err(e) => { + log::error!("Error processing io_uring completions: {}", e); + } + } + + min_in_flight = min_in_flight.min(pending.len()); + + // Batch submit requests - keep pulling from channel and pushing to SQ + // until we hit batch size or channel is empty + let mut batch_count = 0; + loop { + // Try to receive new request + // Use recv_timeout only when pending is empty, otherwise use try_recv + let recv_result = if pending.is_empty() && batch_count == 0 { + // No operations in flight and no batch started - we can afford to wait with timeout + request_rx.recv_timeout(poll_timeout).map_err(|e| match e { + RecvTimeoutError::Timeout => std::sync::mpsc::TryRecvError::Empty, + RecvTimeoutError::Disconnected => std::sync::mpsc::TryRecvError::Disconnected, + }) + } else { + // Operations in flight or batch in progress - busy loop with try_recv + request_rx.try_recv() + }; + + match recv_result { + Ok(request) => { + // Decrement submitted counter when we receive the request from channel + SUBMITTED_COUNTER.fetch_sub(1, Ordering::Relaxed); + + // Push to submission queue (but don't submit yet) + if let Err(e) = push_to_sq(&mut ring, &mut pending, request) { + log::error!("Failed to push to io_uring SQ: {}", e); + } else { + batch_count += 1; + } + + // Break if we've hit the batch size limit + if batch_count >= submit_batch_size { + break; + } + } + Err(std::sync::mpsc::TryRecvError::Empty) => { + // No more requests in channel - break to submit the batch + break; + } + Err(std::sync::mpsc::TryRecvError::Disconnected) => { + // All senders dropped - submit batch and shutdown + if batch_count > 0 { + if let Err(e) = ring.submit() { + log::error!( + "io_uring[{}]: Failed to submit io_uring batch: {}", + thread_id, + e + ); + } + } + log::info!( + "io_uring thread {} shutting down (channel disconnected)", + thread_id + ); + return; + } + } + } + + // Submit the batch if we have any requests + if batch_count > 0 { + if let Err(e) = ring.submit() { + log::error!( + "Failed to submit io_uring batch of {} requests: {}", + batch_count, + e + ); + } + } + } +} + +/// Push a read request to the io_uring submission queue (without submitting). +/// +/// This generates a unique user_data ID, prepares the read operation, +/// and pushes it to the SQ. The caller is responsible for calling ring.submit(). +fn push_to_sq( + ring: &mut IoUring, + pending: &mut HashMap>, + request: Arc, +) -> io::Result<()> { + // Generate unique user_data + let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); + + // Get buffer pointer from request state + let buffer_ptr = { + let state = request.state.lock().unwrap(); + state.buffer.as_ptr() as *mut u8 + }; + + // Prepare read operation + let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, request.length as u32) + .offset(request.offset); + + // Get submission queue + let mut sq = ring.submission(); + + // Check if SQ has space + if sq.is_full() { + drop(sq); + return Err(io::Error::new( + io::ErrorKind::WouldBlock, + "io_uring submission queue full", + )); + } + + // Push to SQ + unsafe { + sq.push(&read_op.build().user_data(user_data)) + .map_err(|_| io::Error::new(io::ErrorKind::Other, "Failed to push to SQ"))?; + } + drop(sq); + + // Track request in pending map + pending.insert(user_data, request); + + Ok(()) +} + +struct CompletionStats { + iops: usize, + sectors: usize, +} + +/// Process all available completions from the io_uring. +/// +/// This iterates through the completion queue, matches completions to requests, +/// updates their state, and wakes any waiting futures. +/// +/// Returns the number of completions processed. +fn process_completions( + ring: &mut IoUring, + pending: &mut HashMap>, +) -> io::Result { + let mut iops = 0; + let mut sectors = 0; + + // Process all available completions + for cqe in ring.completion() { + let user_data = cqe.user_data(); + let result = cqe.result(); + + // Look up request + if let Some(request) = pending.remove(&user_data) { + let mut state = request.state.lock().unwrap(); + state.completed = true; + + // Handle result + if result < 0 { + state.err = Some(io::Error::from_raw_os_error(-result)); + } else if request.length > 0 { + let first_sector = request.offset / 4096; + let last_sector = (request.offset + request.length as u64 - 1) / 4096; + let num_sectors = (last_sector - first_sector + 1) as usize; + sectors += num_sectors; + } + + // Wake the future if it's waiting + if let Some(waker) = state.waker.take() { + drop(state); // Release lock before waking + waker.wake(); + } + + iops += 1; + } else { + log::warn!("Received completion for unknown user_data: {}", user_data); + } + } + + Ok(CompletionStats { iops, sectors }) +} + +/// Pin the current thread to a specific CPU core. +/// +/// This uses Linux's sched_setaffinity to improve cache locality. +fn pin_to_core(core: usize) -> io::Result<()> { + #[cfg(target_os = "linux")] + { + use libc::{cpu_set_t, sched_setaffinity, CPU_SET, CPU_ZERO}; + use std::mem; + + unsafe { + let mut cpuset: cpu_set_t = mem::zeroed(); + CPU_ZERO(&mut cpuset); + CPU_SET(core, &mut cpuset); + + let result = sched_setaffinity( + 0, // current thread + mem::size_of::(), + &cpuset, + ); + + if result != 0 { + return Err(io::Error::last_os_error()); + } + } + + Ok(()) + } + + #[cfg(not(target_os = "linux"))] + { + let _ = core; + Err(io::Error::new( + io::ErrorKind::Unsupported, + "CPU pinning only supported on Linux", + )) + } +} From b8867e2e5d8dba848aa400850602f0c162248ab6 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Fri, 13 Feb 2026 09:54:54 -0800 Subject: [PATCH 02/13] Cleanup and address clippy warnings --- rust/lance-io/src/lib.rs | 2 +- rust/lance-io/src/object_store.rs | 6 +- rust/lance-io/src/object_store/providers.rs | 2 +- rust/lance-io/src/{uring/mod.rs => uring.rs} | 37 ++++++------ rust/lance-io/src/uring/current_thread.rs | 26 ++++---- .../src/uring/current_thread_future.rs | 12 +++- rust/lance-io/src/uring/future.rs | 12 ++-- rust/lance-io/src/uring/reader.rs | 8 +-- rust/lance-io/src/uring/thread.rs | 60 +------------------ 9 files changed, 55 insertions(+), 110 deletions(-) rename rust/lance-io/src/{uring/mod.rs => uring.rs} (54%) diff --git a/rust/lance-io/src/lib.rs b/rust/lance-io/src/lib.rs index fabdffb7f01..f3c772e9b01 100644 --- a/rust/lance-io/src/lib.rs +++ b/rust/lance-io/src/lib.rs @@ -21,7 +21,7 @@ pub mod stream; #[cfg(test)] pub mod testing; pub mod traits; -#[cfg(all(target_os = "linux"))] +#[cfg(target_os = "linux")] pub mod uring; pub mod utils; diff --git a/rust/lance-io/src/object_store.rs b/rust/lance-io/src/object_store.rs index 24ad15c4eab..24d27b3ad9f 100644 --- a/rust/lance-io/src/object_store.rs +++ b/rust/lance-io/src/object_store.rs @@ -32,7 +32,7 @@ use tokio::io::AsyncWriteExt; use url::Url; use super::local::LocalObjectReader; -#[cfg(all(target_os = "linux"))] +#[cfg(target_os = "linux")] use crate::uring::{UringCurrentThreadReader, UringReader}; mod list_retry; pub mod providers; @@ -599,7 +599,7 @@ impl ObjectStore { ) .await } - #[cfg(all(target_os = "linux"))] + #[cfg(target_os = "linux")] "file+uring" => { // Check if current-thread mode enabled let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") @@ -661,7 +661,7 @@ impl ObjectStore { ) .await } - #[cfg(all(target_os = "linux"))] + #[cfg(target_os = "linux")] "file+uring" => { // Check if current-thread mode enabled let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") diff --git a/rust/lance-io/src/object_store/providers.rs b/rust/lance-io/src/object_store/providers.rs index c9f955f22d2..03efa281e01 100644 --- a/rust/lance-io/src/object_store/providers.rs +++ b/rust/lance-io/src/object_store/providers.rs @@ -302,7 +302,7 @@ impl Default for ObjectStoreRegistry { "file-object-store".into(), Arc::new(local::FileStoreProvider), ); - #[cfg(all(target_os = "linux"))] + #[cfg(target_os = "linux")] providers.insert("file+uring".into(), Arc::new(local::FileStoreProvider)); #[cfg(feature = "aws")] diff --git a/rust/lance-io/src/uring/mod.rs b/rust/lance-io/src/uring.rs similarity index 54% rename from rust/lance-io/src/uring/mod.rs rename to rust/lance-io/src/uring.rs index 34e3a4bb289..f3476f67a0a 100644 --- a/rust/lance-io/src/uring/mod.rs +++ b/rust/lance-io/src/uring.rs @@ -1,31 +1,34 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: Copyright The Lance Authors -//! io_uring-based I/O for high-performance local file access. +//! io_uring-based I/O for disks with high IOPS capacity (e.g. NVMe) //! -//! This module provides a [`UringReader`] that implements the [`Reader`](crate::traits::Reader) trait -//! using Linux's io_uring interface for asynchronous I/O. It uses a dedicated background thread -//! that owns an io_uring instance and processes read requests from a channel. +//! This module provides two implementations of the [`Reader`](crate::traits::Reader) trait +//! using Linux's io_uring interface for asynchronous I/O. //! -//! # Architecture +//! One of these uses a pool of dedicated background threads which each own an io_uring instance. +//! Read requests are submitted to a background thread's pool. //! -//! - A dedicated background thread owns a local io_uring instance -//! - Readers submit requests via an MPSC channel to the thread -//! - The thread submits requests to io_uring and processes completions -//! - Futures are woken by the thread when operations complete -//! - Proper async integration using wakers (no busy-looping) +//! The other implementation uses a thread-local io_uring instance. This only works if the future +//! is polled by the same thread that submitted the request. This means that the runtime must be +//! a single-threaded runtime. //! //! # Configuration //! //! The io_uring reader is enabled by using the `file+uring://` URI scheme instead of `file://`. //! Additional tuning parameters are controlled by environment variables: //! -//! - `LANCE_URING_BLOCK_SIZE` - Block size in bytes (default: 64KB) -//! - `LANCE_URING_IO_PARALLELISM` - Max concurrent operations (default: 32) +//! - `LANCE_URING_CURRENT_THREAD` - Use thread-local io_uring (default: false) +//! - `LANCE_URING_BLOCK_SIZE` - Block size in bytes (default: 4KB) +//! - `LANCE_URING_IO_PARALLELISM` - Max concurrent operations (default: 128) //! - `LANCE_URING_QUEUE_DEPTH` - io_uring queue depth (default: 16K) -//! - `LANCE_URING_CORE` - Pin io_uring thread to specific CPU core (optional) +//! - `LANCE_URING_THREAD_COUNT` - Number of io_uring threads to use (default: 2) +//! - `LANCE_URING_SUBMIT_BATCH_SIZE` - Number of requests to batch before submitting (default: 128) //! - `LANCE_URING_POLL_TIMEOUT_MS` - Thread poll timeout in milliseconds (default: 10) //! +//! Note: the block size and io parallelism are not actually used by the io_uring implementation. These +//! variables just control what the filesystem reports up to Lance. +//! //! # Platform Support //! //! This module is only available on Linux and requires kernel 5.1 or newer. @@ -62,11 +65,11 @@ mod tests; pub(crate) use current_thread::UringCurrentThreadReader; pub use reader::UringReader; -/// Default block size for io_uring reads (64KB) -pub const DEFAULT_URING_BLOCK_SIZE: usize = 64 * 1024; +/// Default block size for io_uring reads (4KB) +pub const DEFAULT_URING_BLOCK_SIZE: usize = 4 * 1024; -/// Default I/O parallelism for io_uring (32 concurrent operations) -pub const DEFAULT_URING_IO_PARALLELISM: usize = 32; +/// Default I/O parallelism for io_uring (128 concurrent operations) +pub const DEFAULT_URING_IO_PARALLELISM: usize = 128; /// Default io_uring queue depth (16K entries) pub const DEFAULT_URING_QUEUE_DEPTH: usize = 16 * 1024; diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 9f10303b801..5f81e402762 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -11,6 +11,7 @@ use super::requests::{IoRequest, RequestState}; use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM}; use crate::local::to_local_path; use crate::traits::Reader; +use crate::uring::DEFAULT_URING_QUEUE_DEPTH; use crate::utils::tracking_store::IOTracker; use bytes::{Bytes, BytesMut}; use deepsize::DeepSizeOf; @@ -34,8 +35,6 @@ use tracing::instrument; // Re-use file handle types from reader.rs use super::reader::{CacheKey, CachedReaderData, UringFileHandle, HANDLE_CACHE}; -const DEFAULT_QUEUE_DEPTH: usize = 1024; - /// Global counter for generating unique user_data values static USER_DATA_COUNTER: AtomicU64 = AtomicU64::new(1); @@ -47,7 +46,7 @@ struct ThreadLocalUring { } thread_local! { - static URING: RefCell> = RefCell::new(None); + static URING: RefCell> = const { RefCell::new(None) }; } /// Ensure the thread-local IoUring instance is initialized @@ -60,18 +59,15 @@ fn ensure_uring_initialized( let queue_depth = std::env::var("LANCE_URING_QUEUE_DEPTH") .ok() .and_then(|s| s.parse().ok()) - .unwrap_or(DEFAULT_QUEUE_DEPTH); + .unwrap_or(DEFAULT_URING_QUEUE_DEPTH); let ring = IoUring::builder() + // Ensures work is only done in submit_and_wait .setup_defer_taskrun() + // Enable perf. optimization when there is only one issuer thread .setup_single_issuer() .build(queue_depth as u32) - .map_err(|e| { - io::Error::new( - io::ErrorKind::Other, - format!("Failed to create io_uring: {}", e), - ) - })?; + .map_err(|e| io::Error::other(format!("Failed to create io_uring: {}", e)))?; log::debug!( "Created thread-local io_uring with queue depth {}", @@ -123,7 +119,7 @@ pub(super) fn push_request(request: Arc) -> io::Result<()> { // Push to SQ unsafe { sq.push(&read_op.build().user_data(user_data)) - .map_err(|_| io::Error::new(io::ErrorKind::Other, "Failed to push to SQ"))?; + .map_err(|_| io::Error::other("Failed to push to SQ"))?; } drop(sq); @@ -240,8 +236,8 @@ impl UringCurrentThreadReader { if let Some(data) = HANDLE_CACHE.get(&cache_key).await { // Use known_size if provided, otherwise use cached size let size = known_size.unwrap_or(data.size); - return Ok(Box::new(UringCurrentThreadReader { - handle: data.handle.clone(), + return Ok(Box::new(Self { + handle: data.handle, block_size, size, io_tracker, @@ -250,7 +246,7 @@ impl UringCurrentThreadReader { // Cache miss - open file and get size let path_clone = path.clone(); - let local_path = to_local_path(&path); + let local_path = to_local_path(path); let data = tokio::task::spawn_blocking(move || { let file = File::open(&local_path).map_err(|e| match e.kind() { @@ -278,7 +274,7 @@ impl UringCurrentThreadReader { HANDLE_CACHE.insert(cache_key, data.clone()).await; // Return new reader instance - Ok(Box::new(UringCurrentThreadReader { + Ok(Box::new(Self { handle: data.handle.clone(), block_size, size: data.size, diff --git a/rust/lance-io/src/uring/current_thread_future.rs b/rust/lance-io/src/uring/current_thread_future.rs index 0a4641fd1fb..bb2d8927ea7 100644 --- a/rust/lance-io/src/uring/current_thread_future.rs +++ b/rust/lance-io/src/uring/current_thread_future.rs @@ -4,7 +4,7 @@ //! Future implementation for thread-local io_uring operations. //! //! This future actively processes completions during polling instead of -//! relying on background threads to wake it up. +//! relying on background tasks. use super::current_thread::{process_thread_local_completions, submit_and_wait_thread_local}; use super::requests::IoRequest; @@ -55,12 +55,11 @@ impl Future for UringCurrentThreadFuture { drop(state); - // If not, then we should do any available work and the process completions. + // If not, then we should do any available work and then process completions. if let Err(e) = submit_and_wait_thread_local() { log::debug!("Submit and wait error: {:?}", e); } - // Process completions if let Err(e) = process_thread_local_completions() { log::warn!("Error processing completions: {:?}", e); } @@ -85,6 +84,13 @@ impl Future for UringCurrentThreadFuture { } // Not done yet - immediately wake and return Pending (don't store waker) + // which will force the future to be polled again. This is intentionally + // a busy loop. io_uring is intended for fast disks where read latency is + // so small that the cost of a true context switch (parking and unparking) + // would be too high. + // + // We are effectively doing a "yield" here while we wait for + // the io_uring thread to complete the request. drop(state); cx.waker().wake_by_ref(); Poll::Pending diff --git a/rust/lance-io/src/uring/future.rs b/rust/lance-io/src/uring/future.rs index af647d24e85..e4205a5d660 100644 --- a/rust/lance-io/src/uring/future.rs +++ b/rust/lance-io/src/uring/future.rs @@ -26,15 +26,13 @@ impl Future for UringReadFuture { if state.completed { // Operation completed - take the result match state.err.take() { - Some(err) => { - return Poll::Ready(Err(object_store::Error::Generic { - store: "io_uring", - source: Box::new(err), - })); - } + Some(err) => Poll::Ready(Err(object_store::Error::Generic { + store: "io_uring", + source: Box::new(err), + })), None => { let bytes = std::mem::take(&mut state.buffer).freeze(); - return Poll::Ready(Ok(bytes)); + Poll::Ready(Ok(bytes)) } } } else { diff --git a/rust/lance-io/src/uring/reader.rs b/rust/lance-io/src/uring/reader.rs index ca44cdfd4f4..8df43abd48b 100644 --- a/rust/lance-io/src/uring/reader.rs +++ b/rust/lance-io/src/uring/reader.rs @@ -140,8 +140,8 @@ impl UringReader { if let Some(data) = HANDLE_CACHE.get(&cache_key).await { // Use known_size if provided, otherwise use cached size let size = known_size.unwrap_or(data.size); - return Ok(Box::new(UringReader { - handle: data.handle.clone(), + return Ok(Box::new(Self { + handle: data.handle, block_size, size, io_tracker, @@ -150,7 +150,7 @@ impl UringReader { // Cache miss - open file and get size let path_clone = path.clone(); - let local_path = to_local_path(&path); + let local_path = to_local_path(path); let data = tokio::task::spawn_blocking(move || { let file = File::open(&local_path).map_err(|e| match e.kind() { @@ -178,7 +178,7 @@ impl UringReader { HANDLE_CACHE.insert(cache_key, data.clone()).await; // Return new reader instance - Ok(Box::new(UringReader { + Ok(Box::new(Self { handle: data.handle.clone(), block_size, size: data.size, diff --git a/rust/lance-io/src/uring/thread.rs b/rust/lance-io/src/uring/thread.rs index 831fcc30360..d4639b4fe1b 100644 --- a/rust/lance-io/src/uring/thread.rs +++ b/rust/lance-io/src/uring/thread.rs @@ -115,26 +115,6 @@ fn get_thread_count() -> usize { /// 3. Processes completions /// 4. Wakes futures via their wakers fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, thread_id: usize) { - // Pin to core if configured - // Format: LANCE_URING_CORE=0,1,2 or LANCE_URING_CORE=0 (applies to thread 0 only) - if let Ok(core_str) = std::env::var("LANCE_URING_CORE") { - let cores: Vec<&str> = core_str.split(',').collect(); - if let Some(core_str) = cores.get(thread_id).or_else(|| cores.first()) { - if let Ok(core) = core_str.parse() { - if let Err(e) = pin_to_core(core) { - log::warn!( - "Failed to pin io_uring thread {} to core {}: {}", - thread_id, - core, - e - ); - } else { - log::info!("io_uring thread {} pinned to core {}", thread_id, core); - } - } - } - } - // Create local io_uring instance let mut ring = IoUring::builder() // .setup_sqpoll(100) @@ -296,7 +276,7 @@ fn push_to_sq( // Push to SQ unsafe { sq.push(&read_op.build().user_data(user_data)) - .map_err(|_| io::Error::new(io::ErrorKind::Other, "Failed to push to SQ"))?; + .map_err(|_| io::Error::other("Failed to push to SQ"))?; } drop(sq); @@ -358,41 +338,3 @@ fn process_completions( Ok(CompletionStats { iops, sectors }) } - -/// Pin the current thread to a specific CPU core. -/// -/// This uses Linux's sched_setaffinity to improve cache locality. -fn pin_to_core(core: usize) -> io::Result<()> { - #[cfg(target_os = "linux")] - { - use libc::{cpu_set_t, sched_setaffinity, CPU_SET, CPU_ZERO}; - use std::mem; - - unsafe { - let mut cpuset: cpu_set_t = mem::zeroed(); - CPU_ZERO(&mut cpuset); - CPU_SET(core, &mut cpuset); - - let result = sched_setaffinity( - 0, // current thread - mem::size_of::(), - &cpuset, - ); - - if result != 0 { - return Err(io::Error::last_os_error()); - } - } - - Ok(()) - } - - #[cfg(not(target_os = "linux"))] - { - let _ = core; - Err(io::Error::new( - io::ErrorKind::Unsupported, - "CPU pinning only supported on Linux", - )) - } -} From 26609257c6ad0798d8b1627b000d989f931d1b5c Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Thu, 26 Mar 2026 14:05:41 -0700 Subject: [PATCH 03/13] Handle io_uring short reads with retry and EOF detection The completion handlers previously ignored the positive return value from cqe.result(), which is the number of bytes actually read. On a short read (e.g. signal interruption), the full pre-allocated buffer was returned with uninitialized tail bytes. Reading past EOF returned garbage data instead of an error. Now partial reads accumulate bytes and resubmit for the remainder, while EOF (result == 0) before the full read completes returns an UnexpectedEof error. Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/uring/current_thread.rs | 85 ++++++++++-- .../src/uring/current_thread_future.rs | 4 + rust/lance-io/src/uring/future.rs | 2 + rust/lance-io/src/uring/reader.rs | 1 + rust/lance-io/src/uring/requests.rs | 2 + rust/lance-io/src/uring/tests.rs | 49 +++++++ rust/lance-io/src/uring/thread.rs | 129 ++++++++++++------ 7 files changed, 224 insertions(+), 48 deletions(-) diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 5f81e402762..57f264b65c4 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -17,7 +17,7 @@ use bytes::{Bytes, BytesMut}; use deepsize::DeepSizeOf; use futures::future::BoxFuture; use futures::{FutureExt, TryFutureExt}; -use io_uring::{opcode, types, IoUring}; +use io_uring::{IoUring, opcode, types}; use lance_core::{Error, Result}; use object_store::path::Path; use snafu::location; @@ -33,7 +33,7 @@ use std::sync::{Arc, Mutex}; use tracing::instrument; // Re-use file handle types from reader.rs -use super::reader::{CacheKey, CachedReaderData, UringFileHandle, HANDLE_CACHE}; +use super::reader::{CacheKey, CachedReaderData, HANDLE_CACHE, UringFileHandle}; /// Global counter for generating unique user_data values static USER_DATA_COUNTER: AtomicU64 = AtomicU64::new(1); @@ -94,15 +94,20 @@ pub(super) fn push_request(request: Arc) -> io::Result<()> { // Generate unique user_data let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); - // Get buffer pointer from request state - let buffer_ptr = { + // Get buffer pointer, adjusting for any bytes already read (short read retry) + let (buffer_ptr, read_offset, read_length) = { let state = request.state.lock().unwrap(); - state.buffer.as_ptr() as *mut u8 + let br = state.bytes_read; + ( + unsafe { state.buffer.as_ptr().add(br) as *mut u8 }, + request.offset + br as u64, + (request.length - br) as u32, + ) }; // Prepare read operation - let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, request.length as u32) - .offset(request.offset); + let read_op = + opcode::Read::new(types::Fd(request.fd), buffer_ptr, read_length).offset(read_offset); // Get submission queue let mut sq = uring.ring.submission(); @@ -139,6 +144,7 @@ pub(super) fn process_thread_local_completions() -> io::Result { let mut opt = cell.borrow_mut(); if let Some(ref mut uring) = *opt { let mut completed = 0; + let mut retries: Vec> = Vec::new(); // Process all available completions for cqe in uring.ring.completion() { @@ -147,10 +153,36 @@ pub(super) fn process_thread_local_completions() -> io::Result { if let Some(request) = uring.pending.remove(&user_data) { let mut state = request.state.lock().unwrap(); - state.completed = true; if result < 0 { + // Kernel error state.err = Some(io::Error::from_raw_os_error(-result)); + state.completed = true; + } else if result == 0 { + // EOF before full read completed + let br = state.bytes_read; + state.err = Some(io::Error::new( + io::ErrorKind::UnexpectedEof, + format!("unexpected EOF: read {} of {} bytes", br, request.length), + )); + state.buffer.truncate(br); + state.completed = true; + } else { + // Positive result: n bytes read + let n = result as usize; + state.bytes_read += n; + let br = state.bytes_read; + + if br >= request.length { + // Full read complete + state.buffer.truncate(br); + state.completed = true; + } else { + // Short read — need retry; don't mark completed or wake + drop(state); + retries.push(request); + continue; + } } // Wake waiting future @@ -166,6 +198,42 @@ pub(super) fn process_thread_local_completions() -> io::Result { } } + // Resubmit short-read retries + for request in retries { + // Generate unique user_data + let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); + + let (buffer_ptr, read_offset, read_length) = { + let state = request.state.lock().unwrap(); + let br = state.bytes_read; + ( + unsafe { state.buffer.as_ptr().add(br) as *mut u8 }, + request.offset + br as u64, + (request.length - br) as u32, + ) + }; + + let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, read_length) + .offset(read_offset); + + let mut sq = uring.ring.submission(); + if sq.is_full() { + drop(sq); + log::error!("Failed to resubmit short read: SQ full"); + continue; + } + + unsafe { + if sq.push(&read_op.build().user_data(user_data)).is_err() { + log::error!("Failed to push short-read retry to SQ"); + continue; + } + } + drop(sq); + + uring.pending.insert(user_data, request); + } + if completed > 0 { log::trace!("Processed {} completions", completed); } @@ -303,6 +371,7 @@ impl UringCurrentThreadReader { waker: None, err: None, buffer, + bytes_read: 0, }), }); diff --git a/rust/lance-io/src/uring/current_thread_future.rs b/rust/lance-io/src/uring/current_thread_future.rs index bb2d8927ea7..dbcf2242673 100644 --- a/rust/lance-io/src/uring/current_thread_future.rs +++ b/rust/lance-io/src/uring/current_thread_future.rs @@ -47,6 +47,8 @@ impl Future for UringCurrentThreadFuture { })); } None => { + let br = state.bytes_read; + state.buffer.truncate(br); let bytes = std::mem::take(&mut state.buffer).freeze(); return Poll::Ready(Ok(bytes)); } @@ -77,6 +79,8 @@ impl Future for UringCurrentThreadFuture { })); } None => { + let br = state.bytes_read; + state.buffer.truncate(br); let bytes = std::mem::take(&mut state.buffer).freeze(); return Poll::Ready(Ok(bytes)); } diff --git a/rust/lance-io/src/uring/future.rs b/rust/lance-io/src/uring/future.rs index e4205a5d660..64b38993683 100644 --- a/rust/lance-io/src/uring/future.rs +++ b/rust/lance-io/src/uring/future.rs @@ -31,6 +31,8 @@ impl Future for UringReadFuture { source: Box::new(err), })), None => { + let br = state.bytes_read; + state.buffer.truncate(br); let bytes = std::mem::take(&mut state.buffer).freeze(); Poll::Ready(Ok(bytes)) } diff --git a/rust/lance-io/src/uring/reader.rs b/rust/lance-io/src/uring/reader.rs index 8df43abd48b..75bd7ce17f5 100644 --- a/rust/lance-io/src/uring/reader.rs +++ b/rust/lance-io/src/uring/reader.rs @@ -208,6 +208,7 @@ impl UringReader { waker: None, err: None, buffer, + bytes_read: 0, }), }); diff --git a/rust/lance-io/src/uring/requests.rs b/rust/lance-io/src/uring/requests.rs index 4064743823e..f75d62d19bf 100644 --- a/rust/lance-io/src/uring/requests.rs +++ b/rust/lance-io/src/uring/requests.rs @@ -15,6 +15,8 @@ pub(super) struct RequestState { pub waker: Option, pub err: Option, pub buffer: BytesMut, + /// Accumulated bytes read across retries (for handling short reads). + pub bytes_read: usize, } /// I/O request object that contains all state for a single read operation. diff --git a/rust/lance-io/src/uring/tests.rs b/rust/lance-io/src/uring/tests.rs index 4fad3ff292f..ab768ec379b 100644 --- a/rust/lance-io/src/uring/tests.rs +++ b/rust/lance-io/src/uring/tests.rs @@ -196,6 +196,55 @@ async fn test_path() -> Result<()> { Ok(()) } +/// Test that reading past EOF returns an error. +/// +/// This exercises the case where `known_size` passed to `open_with_size` is larger +/// than the actual file, causing io_uring to hit EOF before the full read completes. +#[tokio::test] +async fn test_short_read_get_all() -> Result<()> { + let actual_size: usize = 8192; + let (file, _expected_data) = create_test_file(actual_size)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + + // Open with inflated known_size — the reader will think the file is 2x its real size + let inflated_size = actual_size * 2; + let reader = store.open_with_size(&path, inflated_size).await?; + + // get_all() will submit a read for inflated_size bytes from an actual_size file. + // The kernel reads actual_size bytes then returns 0 (EOF) — this should be an error. + let result = reader.get_all().await; + assert!(result.is_err(), "reading past EOF should return an error"); + + Ok(()) +} + +/// Test that a range read extending past EOF returns an error. +#[tokio::test] +async fn test_short_read_get_range_past_eof() -> Result<()> { + let actual_size: usize = 8192; + let (file, _expected_data) = create_test_file(actual_size)?; + let file_path = file.path().to_str().unwrap(); + let uri = format!("file+uring://{}", file_path); + + let (store, path) = ObjectStore::from_uri(&uri).await?; + let reader = store.open(&path).await?; + + // Request a range that starts inside the file but extends past EOF. + // File is 8192 bytes; reading 4096..16384 hits EOF — this should be an error. + let range_start = 4096; + let range_end = actual_size * 2; // 16384, well past EOF + let result = reader.get_range(range_start..range_end).await; + assert!( + result.is_err(), + "range extending past EOF should return an error" + ); + + Ok(()) +} + #[tokio::test] async fn test_uring_not_enabled_with_file_scheme() -> Result<()> { // Verify that files opened with file:// don't use uring diff --git a/rust/lance-io/src/uring/thread.rs b/rust/lance-io/src/uring/thread.rs index d4639b4fe1b..141bd3e2e34 100644 --- a/rust/lance-io/src/uring/thread.rs +++ b/rust/lance-io/src/uring/thread.rs @@ -7,13 +7,13 @@ //! and processes read requests from a channel. Readers send requests via //! an MPSC channel, and the thread handles submission and completion processing. -use super::requests::IoRequest; use super::DEFAULT_URING_QUEUE_DEPTH; -use io_uring::{opcode, types, IoUring}; +use super::requests::IoRequest; +use io_uring::{IoUring, opcode, types}; use std::collections::HashMap; use std::io; use std::sync::atomic::{AtomicU64, Ordering}; -use std::sync::mpsc::{sync_channel, Receiver, RecvTimeoutError, SyncSender}; +use std::sync::mpsc::{Receiver, RecvTimeoutError, SyncSender, sync_channel}; use std::sync::{Arc, LazyLock}; use std::time::{Duration, Instant}; @@ -155,11 +155,21 @@ fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, th } // Process all available completions first + let mut needs_submit = false; let completions = process_completions(&mut ring, &mut pending); match completions { - Ok(count) => { - completed_iops += count.iops; - completed_sectors += count.sectors; + Ok(result) => { + completed_iops += result.iops; + completed_sectors += result.sectors; + + // Resubmit any short-read retries + for request in result.retries { + if let Err(e) = push_to_sq(&mut ring, &mut pending, request) { + log::error!("Failed to resubmit short read: {}", e); + } else { + needs_submit = true; + } + } } Err(e) => { log::error!("Error processing io_uring completions: {}", e); @@ -208,14 +218,14 @@ fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, th } Err(std::sync::mpsc::TryRecvError::Disconnected) => { // All senders dropped - submit batch and shutdown - if batch_count > 0 { - if let Err(e) = ring.submit() { - log::error!( - "io_uring[{}]: Failed to submit io_uring batch: {}", - thread_id, - e - ); - } + if batch_count > 0 + && let Err(e) = ring.submit() + { + log::error!( + "io_uring[{}]: Failed to submit io_uring batch: {}", + thread_id, + e + ); } log::info!( "io_uring thread {} shutting down (channel disconnected)", @@ -226,15 +236,15 @@ fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, th } } - // Submit the batch if we have any requests - if batch_count > 0 { - if let Err(e) = ring.submit() { - log::error!( - "Failed to submit io_uring batch of {} requests: {}", - batch_count, - e - ); - } + // Submit if we have any requests (from channel or retries) + if (batch_count > 0 || needs_submit) + && let Err(e) = ring.submit() + { + log::error!( + "Failed to submit io_uring batch of {} requests: {}", + batch_count, + e + ); } } } @@ -251,15 +261,20 @@ fn push_to_sq( // Generate unique user_data let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); - // Get buffer pointer from request state - let buffer_ptr = { + // Get buffer pointer, adjusting for any bytes already read (short read retry) + let (buffer_ptr, read_offset, read_length) = { let state = request.state.lock().unwrap(); - state.buffer.as_ptr() as *mut u8 + let br = state.bytes_read; + ( + unsafe { state.buffer.as_ptr().add(br) as *mut u8 }, + request.offset + br as u64, + (request.length - br) as u32, + ) }; // Prepare read operation - let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, request.length as u32) - .offset(request.offset); + let read_op = + opcode::Read::new(types::Fd(request.fd), buffer_ptr, read_length).offset(read_offset); // Get submission queue let mut sq = ring.submission(); @@ -286,23 +301,26 @@ fn push_to_sq( Ok(()) } -struct CompletionStats { +struct CompletionResult { iops: usize, sectors: usize, + retries: Vec>, } /// Process all available completions from the io_uring. /// /// This iterates through the completion queue, matches completions to requests, -/// updates their state, and wakes any waiting futures. +/// updates their state, and wakes any waiting futures. Short reads are collected +/// into `retries` for resubmission; EOF before a full read is an error. /// -/// Returns the number of completions processed. +/// Returns completion stats and a list of requests needing resubmission. fn process_completions( ring: &mut IoUring, pending: &mut HashMap>, -) -> io::Result { +) -> io::Result { let mut iops = 0; let mut sectors = 0; + let mut retries = Vec::new(); // Process all available completions for cqe in ring.completion() { @@ -312,16 +330,43 @@ fn process_completions( // Look up request if let Some(request) = pending.remove(&user_data) { let mut state = request.state.lock().unwrap(); - state.completed = true; - // Handle result if result < 0 { + // Kernel error state.err = Some(io::Error::from_raw_os_error(-result)); - } else if request.length > 0 { - let first_sector = request.offset / 4096; - let last_sector = (request.offset + request.length as u64 - 1) / 4096; - let num_sectors = (last_sector - first_sector + 1) as usize; - sectors += num_sectors; + state.completed = true; + } else if result == 0 { + // EOF before full read completed + let br = state.bytes_read; + state.err = Some(io::Error::new( + io::ErrorKind::UnexpectedEof, + format!("unexpected EOF: read {} of {} bytes", br, request.length), + )); + state.buffer.truncate(br); + state.completed = true; + } else { + // Positive result: n bytes read + let n = result as usize; + state.bytes_read += n; + let br = state.bytes_read; + + if br >= request.length { + // Full read complete + state.buffer.truncate(br); + state.completed = true; + + if request.length > 0 { + let first_sector = request.offset / 4096; + let last_sector = (request.offset + request.length as u64 - 1) / 4096; + let num_sectors = (last_sector - first_sector + 1) as usize; + sectors += num_sectors; + } + } else { + // Short read — need retry; don't mark completed or wake + drop(state); + retries.push(request); + continue; + } } // Wake the future if it's waiting @@ -336,5 +381,9 @@ fn process_completions( } } - Ok(CompletionStats { iops, sectors }) + Ok(CompletionResult { + iops, + sectors, + retries, + }) } From 45c59521a27c795112cc5531d1fb05e04f669a06 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Thu, 26 Mar 2026 16:44:16 -0700 Subject: [PATCH 04/13] Fix SQ-full push failure silently dropping requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When push_to_sq failed (submission queue full), the request was silently dropped — no error was set, completed was never marked true, and no waker was called. The future would hang forever waiting for a completion that could never arrive. Add IoRequest::fail() to centralize the "complete with error" pattern, and call it from push_to_sq on both failure paths (SQ full and push error). Also fix the current_thread retry resubmission to fail the request and fix pending_count bookkeeping on retry failure. Add unit tests that create a tiny IoUring (queue_depth=2), fill the SQ, and verify the 3rd request's future returns an error within a 2-second timeout instead of hanging. Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/uring/current_thread.rs | 9 +- rust/lance-io/src/uring/requests.rs | 16 +++ rust/lance-io/src/uring/tests.rs | 128 ++++++++++++++++++++++ rust/lance-io/src/uring/thread.rs | 13 ++- 4 files changed, 161 insertions(+), 5 deletions(-) diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 57f264b65c4..1dc8935c8ec 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -219,13 +219,18 @@ pub(super) fn process_thread_local_completions() -> io::Result { let mut sq = uring.ring.submission(); if sq.is_full() { drop(sq); - log::error!("Failed to resubmit short read: SQ full"); + request.fail(io::Error::new( + io::ErrorKind::WouldBlock, + "io_uring submission queue full during retry", + )); + uring.pending_count -= 1; continue; } unsafe { if sq.push(&read_op.build().user_data(user_data)).is_err() { - log::error!("Failed to push short-read retry to SQ"); + request.fail(io::Error::other("Failed to push short-read retry to SQ")); + uring.pending_count -= 1; continue; } } diff --git a/rust/lance-io/src/uring/requests.rs b/rust/lance-io/src/uring/requests.rs index f75d62d19bf..fa257507dc1 100644 --- a/rust/lance-io/src/uring/requests.rs +++ b/rust/lance-io/src/uring/requests.rs @@ -36,3 +36,19 @@ pub(super) struct IoRequest { /// Completion flag - set to true when operation completes. pub state: Mutex, } + +impl IoRequest { + /// Mark this request as failed with the given error. + /// + /// Sets the error, marks completed, and wakes any waiting future. + /// Used when a request cannot be submitted (e.g. SQ full). + pub(super) fn fail(&self, err: io::Error) { + let mut state = self.state.lock().unwrap(); + state.err = Some(err); + state.completed = true; + if let Some(waker) = state.waker.take() { + drop(state); + waker.wake(); + } + } +} diff --git a/rust/lance-io/src/uring/tests.rs b/rust/lance-io/src/uring/tests.rs index ab768ec379b..19d931da629 100644 --- a/rust/lance-io/src/uring/tests.rs +++ b/rust/lance-io/src/uring/tests.rs @@ -6,6 +6,7 @@ use crate::object_store::ObjectStore; use lance_core::Result; use std::io::Write; +use std::time::Duration; use tempfile::NamedTempFile; /// Helper to create a temporary file with test data @@ -245,6 +246,133 @@ async fn test_short_read_get_range_past_eof() -> Result<()> { Ok(()) } +/// Test that when push_to_sq fails (SQ full), the request's future returns +/// an error instead of hanging forever. +/// +/// This directly tests the thread-path scenario: create an IoUring with +/// queue_depth=2, fill the SQ, then try to push a 3rd request. The 3rd +/// request's future should return an error within the timeout. +/// +/// BUG: currently the failed push silently drops the request, so the +/// future hangs and the timeout fires. +#[tokio::test] +async fn test_retry_sq_full_thread() -> Result<()> { + use super::future::UringReadFuture; + use super::requests::{IoRequest, RequestState}; + use super::thread::push_to_sq; + use bytes::BytesMut; + use io_uring::IoUring; + use std::collections::HashMap; + use std::os::unix::io::AsRawFd; + use std::sync::{Arc, Mutex}; + + let (file, _) = create_test_file(4096)?; + let fd = file.as_file().as_raw_fd(); + + // Create a tiny ring with queue_depth=2 + let mut ring = IoUring::new(2).unwrap(); + let mut pending: HashMap> = HashMap::new(); + + // Helper to create a request + let make_request = || { + Arc::new(IoRequest { + fd, + offset: 0, + length: 4096, + thread_id: std::thread::current().id(), + state: Mutex::new(RequestState { + completed: false, + waker: None, + err: None, + buffer: BytesMut::zeroed(4096), + bytes_read: 0, + }), + }) + }; + + // Fill the SQ (capacity=2) + let _r1 = make_request(); + let _r2 = make_request(); + push_to_sq(&mut ring, &mut pending, _r1).unwrap(); + push_to_sq(&mut ring, &mut pending, _r2).unwrap(); + + // 3rd push should fail — SQ is full + let r3 = make_request(); + let push_result = push_to_sq(&mut ring, &mut pending, r3.clone()); + assert!(push_result.is_err(), "3rd push should fail (SQ full)"); + + // r3's future should return an error, not hang forever. + // BUG: currently nobody sets completed=true or err on r3, so the future hangs. + let future = UringReadFuture { request: r3 }; + let result = tokio::time::timeout(Duration::from_secs(2), future).await; + assert!( + result.is_ok(), + "future timed out — request was dropped without error on SQ-full push failure" + ); + + Ok(()) +} + +/// Test that when push_to_sq fails (SQ full) on the current-thread path, +/// the request's future returns an error instead of hanging forever. +/// +/// Uses UringCurrentThreadFuture (which will be a no-op poller since the +/// thread-local URING has no knowledge of this request) after push_to_sq +/// has already completed the request with an error. +#[tokio::test(flavor = "current_thread")] +async fn test_retry_sq_full_current_thread() -> Result<()> { + use super::current_thread_future::UringCurrentThreadFuture; + use super::requests::{IoRequest, RequestState}; + use super::thread::push_to_sq; + use bytes::BytesMut; + use io_uring::IoUring; + use std::collections::HashMap; + use std::os::unix::io::AsRawFd; + use std::sync::{Arc, Mutex}; + + let (file, _) = create_test_file(4096)?; + let fd = file.as_file().as_raw_fd(); + + // Create a tiny ring with queue_depth=2 + let mut ring = IoUring::new(2).unwrap(); + let mut pending: HashMap> = HashMap::new(); + + let make_request = || { + Arc::new(IoRequest { + fd, + offset: 0, + length: 4096, + thread_id: std::thread::current().id(), + state: Mutex::new(RequestState { + completed: false, + waker: None, + err: None, + buffer: BytesMut::zeroed(4096), + bytes_read: 0, + }), + }) + }; + + // Fill the SQ (capacity=2) + push_to_sq(&mut ring, &mut pending, make_request()).unwrap(); + push_to_sq(&mut ring, &mut pending, make_request()).unwrap(); + + // 3rd push should fail — SQ is full + let r3 = make_request(); + let push_result = push_to_sq(&mut ring, &mut pending, r3.clone()); + assert!(push_result.is_err(), "3rd push should fail (SQ full)"); + + // r3's future should return an error, not hang forever. + let future = UringCurrentThreadFuture::new(r3); + let result = tokio::time::timeout(Duration::from_secs(2), future).await; + assert!( + result.is_ok(), + "future timed out — request was dropped without error on SQ-full push failure" + ); + + Ok(()) +} + #[tokio::test] async fn test_uring_not_enabled_with_file_scheme() -> Result<()> { // Verify that files opened with file:// don't use uring diff --git a/rust/lance-io/src/uring/thread.rs b/rust/lance-io/src/uring/thread.rs index 141bd3e2e34..d2ef197947d 100644 --- a/rust/lance-io/src/uring/thread.rs +++ b/rust/lance-io/src/uring/thread.rs @@ -253,7 +253,7 @@ fn run_uring_thread(request_rx: Receiver>, queue_depth: usize, th /// /// This generates a unique user_data ID, prepares the read operation, /// and pushes it to the SQ. The caller is responsible for calling ring.submit(). -fn push_to_sq( +pub(super) fn push_to_sq( ring: &mut IoUring, pending: &mut HashMap>, request: Arc, @@ -282,6 +282,10 @@ fn push_to_sq( // Check if SQ has space if sq.is_full() { drop(sq); + request.fail(io::Error::new( + io::ErrorKind::WouldBlock, + "io_uring submission queue full", + )); return Err(io::Error::new( io::ErrorKind::WouldBlock, "io_uring submission queue full", @@ -290,8 +294,11 @@ fn push_to_sq( // Push to SQ unsafe { - sq.push(&read_op.build().user_data(user_data)) - .map_err(|_| io::Error::other("Failed to push to SQ"))?; + if sq.push(&read_op.build().user_data(user_data)).is_err() { + drop(sq); + request.fail(io::Error::other("Failed to push to SQ")); + return Err(io::Error::other("Failed to push to SQ")); + } } drop(sq); From fae94114a008a4ea4bb1b05f2d799f6c28f42943 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Thu, 26 Mar 2026 16:48:00 -0700 Subject: [PATCH 05/13] Remove unused pending_count field from ThreadLocalUring The field was never read, only written. Its bookkeeping was also incorrect on the short-read retry path. Remove it entirely rather than fixing dead code. Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/uring/current_thread.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 1dc8935c8ec..b2e0abb9712 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -42,7 +42,6 @@ static USER_DATA_COUNTER: AtomicU64 = AtomicU64::new(1); struct ThreadLocalUring { ring: IoUring, pending: HashMap>, - pending_count: usize, } thread_local! { @@ -77,7 +76,6 @@ fn ensure_uring_initialized( *opt = Some(ThreadLocalUring { ring, pending: HashMap::new(), - pending_count: 0, }); } @@ -130,7 +128,6 @@ pub(super) fn push_request(request: Arc) -> io::Result<()> { // Track request in pending map uring.pending.insert(user_data, request); - uring.pending_count += 1; // Don't submit here - let the future handle submission @@ -181,6 +178,7 @@ pub(super) fn process_thread_local_completions() -> io::Result { // Short read — need retry; don't mark completed or wake drop(state); retries.push(request); + continue; } } @@ -192,7 +190,6 @@ pub(super) fn process_thread_local_completions() -> io::Result { } completed += 1; - uring.pending_count -= 1; } else { log::warn!("Received completion for unknown user_data: {}", user_data); } @@ -223,14 +220,12 @@ pub(super) fn process_thread_local_completions() -> io::Result { io::ErrorKind::WouldBlock, "io_uring submission queue full during retry", )); - uring.pending_count -= 1; continue; } unsafe { if sq.push(&read_op.build().user_data(user_data)).is_err() { request.fail(io::Error::other("Failed to push short-read retry to SQ")); - uring.pending_count -= 1; continue; } } From e8a28b233a4dc57efe48e678d61122f73e8fdbf0 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Thu, 26 Mar 2026 16:51:36 -0700 Subject: [PATCH 06/13] Return error instead of panicking on SQ full in current_thread submit submit_read previously called push_request().unwrap(), which panics if the submission queue is full. Return an error future instead, matching the pattern used by the thread-based UringReader. Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/uring/current_thread.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index b2e0abb9712..7aca3d1d5ff 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -375,11 +375,17 @@ impl UringCurrentThreadReader { }), }); - push_request(request.clone()).unwrap(); - - Box::pin(super::current_thread_future::UringCurrentThreadFuture::new( - request, - )) + match push_request(request.clone()) { + Ok(()) => Box::pin(super::current_thread_future::UringCurrentThreadFuture::new( + request, + )), + Err(e) => Box::pin(async move { + Err(object_store::Error::Generic { + store: "io_uring_ct", + source: Box::new(e), + }) + }), + } } } From aa2c82f3d71afd33765c1014640af17cfb0e7fa1 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Fri, 27 Mar 2026 07:02:00 -0700 Subject: [PATCH 07/13] Update Cargo.lock files Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 665 +++++++++++++--------------------------------- python/Cargo.lock | 14 + 2 files changed, 206 insertions(+), 473 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ce493d14609..94dd2b0f679 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -827,20 +827,15 @@ dependencies = [ "aws-smithy-runtime-api", "aws-smithy-types", "bytes", - "crypto-bigint 0.5.5", "form_urlencoded", "hex", "hmac", "http 0.2.12", "http 1.4.0", - "p256", "percent-encoding", - "ring", "sha2", - "subtle", "time", "tracing", - "zeroize", ] [[package]] @@ -917,23 +912,17 @@ dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", "aws-smithy-types", - "h2 0.3.27", - "h2 0.4.13", - "http 0.2.12", + "h2", "http 1.4.0", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper 1.8.1", - "hyper-rustls 0.24.2", - "hyper-rustls 0.27.7", + "hyper", + "hyper-rustls", "hyper-util", "pin-project-lite", - "rustls 0.21.12", - "rustls 0.23.36", + "rustls", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower", "tracing", ] @@ -1070,7 +1059,7 @@ dependencies = [ "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.8.1", + "hyper", "hyper-util", "itoa", "matchit", @@ -1245,12 +1234,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "base16ct" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" - [[package]] name = "base64" version = "0.13.1" @@ -1946,28 +1929,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-bigint" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "crypto-common" version = "0.1.7" @@ -2125,9 +2086,9 @@ dependencies = [ [[package]] name = "datafusion" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba7cb113e9c0bedf9e9765926031e132fa05a1b09ba6e93a6d1a4d7044457b8" +checksum = "43c18ba387f9c05ac1f3be32a73f8f3cc6c1cfc43e5d4b7a8e5b0d3a5eb48dc7" dependencies = [ "arrow", "arrow-schema", @@ -2167,7 +2128,6 @@ dependencies = [ "parquet", "rand 0.9.2", "regex", - "rstest 0.26.1", "sqlparser", "tempfile", "tokio", @@ -2177,9 +2137,9 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a3a799f914a59b1ea343906a0486f17061f39509af74e874a866428951130d" +checksum = "3c75a4ce672b27fb8423810efb92a3600027717a1664d06a2c307eeeabcec694" dependencies = [ "arrow", "async-trait", @@ -2202,9 +2162,9 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db1b113c80d7a0febcd901476a57aef378e717c54517a163ed51417d87621b0" +checksum = "2c8b9a3795ffb46bf4957a34c67d89a67558b311ae455c8d4295ff2115eeea50" dependencies = [ "arrow", "async-trait", @@ -2221,21 +2181,20 @@ dependencies = [ "itertools 0.14.0", "log", "object_store", - "tokio", ] [[package]] name = "datafusion-common" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c10f7659e96127d25e8366be7c8be4109595d6a2c3eac70421f380a7006a1b0" +checksum = "205dc1e20441973f470e6b7ef87626a3b9187970e5106058fef1b713047f770c" dependencies = [ "ahash", "arrow", "arrow-ipc", "chrono", "half", - "hashbrown 0.14.5", + "hashbrown 0.16.1", "indexmap", "libc", "log", @@ -2249,9 +2208,9 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b92065bbc6532c6651e2f7dd30b55cba0c7a14f860c7e1d15f165c41a1868d95" +checksum = "8cf5880c02ff6f5f11fb5bc19211789fb32fd3c53d79b7d6cb2b12e401312ba0" dependencies = [ "futures", "log", @@ -2260,9 +2219,9 @@ dependencies = [ [[package]] name = "datafusion-datasource" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde13794244bc7581cd82f6fff217068ed79cdc344cafe4ab2c3a1c3510b38d6" +checksum = "bc614d6e709450e29b7b032a42c1bdb705f166a6b2edef7bed7c7897eb905499" dependencies = [ "arrow", "async-trait", @@ -2289,9 +2248,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-arrow" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804fa9b4ecf3157982021770617200ef7c1b2979d57bec9044748314775a9aea" +checksum = "6e497d5fc48dac7ce86f6b4fb09a3a494385774af301ff20ec91aebfae9b05b4" dependencies = [ "arrow", "arrow-ipc", @@ -2313,9 +2272,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-csv" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a1641a40b259bab38131c5e6f48fac0717bedb7dc93690e604142a849e0568" +checksum = "0dfc250cad940d0327ca2e9109dc98830892d17a3d6b2ca11d68570e872cf379" dependencies = [ "arrow", "async-trait", @@ -2336,9 +2295,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-json" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adeacdb00c1d37271176f8fb6a1d8ce096baba16ea7a4b2671840c5c9c64fe85" +checksum = "c91e9677ed62833b0e8129dec0d1a8f3c9bb7590bd6dd714a43e4c3b663e4aa0" dependencies = [ "arrow", "async-trait", @@ -2358,9 +2317,9 @@ dependencies = [ [[package]] name = "datafusion-datasource-parquet" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d0b60ffd66f28bfb026565d62b0a6cbc416da09814766a3797bba7d85a3cd9" +checksum = "23798383465e0c569bd442d1453b50691261f8ad6511d840c48457b3bf51ae21" dependencies = [ "arrow", "async-trait", @@ -2388,18 +2347,19 @@ dependencies = [ [[package]] name = "datafusion-doc" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b99e13947667b36ad713549237362afb054b2d8f8cc447751e23ec61202db07" +checksum = "3e13e5fe3447baa0584b61ee8644086e007e1ef6e58f4be48bc8a72417854729" [[package]] name = "datafusion-execution" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63695643190679037bc946ad46a263b62016931547bf119859c511f7ff2f5178" +checksum = "48a6cc03e34899a54546b229235f7b192634c8e832f78a267f0989b18216c56d" dependencies = [ "arrow", "async-trait", + "chrono", "dashmap", "datafusion-common", "datafusion-expr", @@ -2414,9 +2374,9 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a4787cbf5feb1ab351f789063398f67654a6df75c4d37d7f637dc96f951a91" +checksum = "ee3315d87eca7a7df58e52a1fb43b4c4171b545fd30ffc3102945c162a9f6ddb" dependencies = [ "arrow", "async-trait", @@ -2436,9 +2396,9 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce2fb1b8c15c9ac45b0863c30b268c69dc9ee7a1ee13ecf5d067738338173dc" +checksum = "98c6d83feae0753799f933a2c47dfd15980c6947960cb95ed60f5c1f885548b3" dependencies = [ "arrow", "datafusion-common", @@ -2449,9 +2409,9 @@ dependencies = [ [[package]] name = "datafusion-functions" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794a9db7f7b96b3346fc007ff25e994f09b8f0511b4cf7dff651fadfe3ebb28f" +checksum = "49b82962015cc3db4d7662459c9f7fcda0591b5edacb8af1cf3bc3031f274800" dependencies = [ "arrow", "arrow-buffer", @@ -2459,6 +2419,7 @@ dependencies = [ "blake2", "blake3", "chrono", + "chrono-tz", "datafusion-common", "datafusion-doc", "datafusion-execution", @@ -2479,9 +2440,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c25210520a9dcf9c2b2cbbce31ebd4131ef5af7fc60ee92b266dc7d159cb305" +checksum = "4e42c227d9e55a6c8041785d4a8a117e4de531033d480aae10984247ac62e27e" dependencies = [ "ahash", "arrow", @@ -2500,9 +2461,9 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f4a66f3b87300bb70f4124b55434d2ae3fe80455f3574701d0348da040b55d" +checksum = "cead3cfed825b0b688700f4338d281cd7857e4907775a5b9554c083edd5f3f95" dependencies = [ "ahash", "arrow", @@ -2513,9 +2474,9 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae5c06eed03918dc7fe7a9f082a284050f0e9ecf95d72f57712d1496da03b8c4" +checksum = "62ea99612970aebab8cf864d02eb3d296bbab7f4881e1023d282b57fe431b201" dependencies = [ "arrow", "arrow-ord", @@ -2536,9 +2497,9 @@ dependencies = [ [[package]] name = "datafusion-functions-table" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4fed1d71738fbe22e2712d71396db04c25de4111f1ec252b8f4c6d3b25d7f5" +checksum = "d83dbf3ab8b9af6f209b068825a7adbd3b88bf276f2a1ec14ba09567b97f5674" dependencies = [ "arrow", "async-trait", @@ -2552,9 +2513,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d92206aa5ae21892f1552b4d61758a862a70956e6fd7a95cb85db1de74bc6d1" +checksum = "732edabe07496e2fc5a1e57a284d7a36edcea445a2821119770a0dea624b472c" dependencies = [ "arrow", "datafusion-common", @@ -2570,9 +2531,9 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53ae9bcc39800820d53a22d758b3b8726ff84a5a3e24cecef04ef4e5fdf1c7cc" +checksum = "e0c6e30e09700799bd52adce8c377ab03dda96e73a623e4803a31ad94fe7ce14" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -2580,9 +2541,9 @@ dependencies = [ [[package]] name = "datafusion-macros" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1063ad4c9e094b3f798acee16d9a47bd7372d9699be2de21b05c3bd3f34ab848" +checksum = "402f2a8ed70fb99a18f71580a1fe338604222a3d32ddeac6e72c5b34feea2d4d" dependencies = [ "datafusion-doc", "quote", @@ -2591,9 +2552,9 @@ dependencies = [ [[package]] name = "datafusion-optimizer" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35f9ec5d08b87fd1893a30c2929f2559c2f9806ca072d8fefca5009dc0f06a" +checksum = "99f32edb8ba12f08138f86c09b80fae3d4a320551262fa06b91d8a8cb3065a5b" dependencies = [ "arrow", "chrono", @@ -2610,9 +2571,9 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30cc8012e9eedcb48bbe112c6eff4ae5ed19cf3003cb0f505662e88b7014c5d" +checksum = "987c5e29e96186589301b42e25aa7d11bbe319a73eb02ef8d755edc55b5b89fc" dependencies = [ "ahash", "arrow", @@ -2622,19 +2583,20 @@ dependencies = [ "datafusion-functions-aggregate-common", "datafusion-physical-expr-common", "half", - "hashbrown 0.14.5", + "hashbrown 0.16.1", "indexmap", "itertools 0.14.0", "parking_lot", "paste", "petgraph", + "tokio", ] [[package]] name = "datafusion-physical-expr-adapter" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9ff2dbd476221b1f67337699eff432781c4e6e1713d2aefdaa517dfbf79768" +checksum = "1de89d0afa08b6686697bd8a6bac4ba2cd44c7003356e1bce6114d5a93f94b5c" dependencies = [ "arrow", "datafusion-common", @@ -2647,23 +2609,26 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90da43e1ec550b172f34c87ec68161986ced70fd05c8d2a2add66eef9c276f03" +checksum = "602d1970c0fe87f1c3a36665d131fbfe1c4379d35f8fc5ec43a362229ad2954d" dependencies = [ "ahash", "arrow", + "chrono", "datafusion-common", "datafusion-expr-common", - "hashbrown 0.14.5", + "hashbrown 0.16.1", + "indexmap", "itertools 0.14.0", + "parking_lot", ] [[package]] name = "datafusion-physical-optimizer" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9804f799acd7daef3be7aaffe77c0033768ed8fdbf5fb82fc4c5f2e6bc14e6" +checksum = "b24d704b6385ebe27c756a12e5ba15684576d3b47aeca79cc9fb09480236dc32" dependencies = [ "arrow", "datafusion-common", @@ -2679,27 +2644,27 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0acf0ad6b6924c6b1aa7d213b181e012e2d3ec0a64ff5b10ee6282ab0f8532ac" +checksum = "c21d94141ea5043e98793f170798e9c1887095813b8291c5260599341e383a38" dependencies = [ "ahash", "arrow", "arrow-ord", "arrow-schema", "async-trait", - "chrono", "datafusion-common", "datafusion-common-runtime", "datafusion-execution", "datafusion-expr", + "datafusion-functions", "datafusion-functions-aggregate-common", "datafusion-functions-window-common", "datafusion-physical-expr", "datafusion-physical-expr-common", "futures", "half", - "hashbrown 0.14.5", + "hashbrown 0.16.1", "indexmap", "itertools 0.14.0", "log", @@ -2710,9 +2675,9 @@ dependencies = [ [[package]] name = "datafusion-pruning" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2c2498a1f134a9e11a9f5ed202a2a7d7e9774bd9249295593053ea3be999db" +checksum = "1a68cce43d18c0dfac95cacd74e70565f7e2fb12b9ed41e2d312f0fa837626b1" dependencies = [ "arrow", "datafusion-common", @@ -2727,9 +2692,9 @@ dependencies = [ [[package]] name = "datafusion-session" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f96eebd17555386f459037c65ab73aae8df09f464524c709d6a3134ad4f4776" +checksum = "6b4e1c40a0b1896aed4a4504145c2eb7fa9b9da13c2d04b40a4767a09f076199" dependencies = [ "async-trait", "datafusion-common", @@ -2741,9 +2706,9 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc195fe60634b2c6ccfd131b487de46dc30eccae8a3c35a13f136e7f440414f" +checksum = "2f1891e5b106d1d73c7fe403bd8a265d19c3977edc17f60808daf26c2fe65ffb" dependencies = [ "arrow", "bigdecimal", @@ -2758,9 +2723,9 @@ dependencies = [ [[package]] name = "datafusion-substrait" -version = "51.0.0" +version = "52.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2505af06d103a55b4e8ded0c6aeb6c72a771948da939c0bd3f8eee67af475a9c" +checksum = "2379388ecab67079eeb1185c953fb9c5ed4b283fa3cb81417538378a30545957" dependencies = [ "async-recursion", "async-trait", @@ -2774,7 +2739,6 @@ dependencies = [ "substrait", "tokio", "url", - "uuid", ] [[package]] @@ -2824,16 +2788,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "der" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "zeroize", -] - [[package]] name = "der" version = "0.7.10" @@ -3031,44 +2985,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ecdsa" -version = "0.14.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" -dependencies = [ - "der 0.6.1", - "elliptic-curve", - "rfc6979", - "signature 1.6.4", -] - [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elliptic-curve" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" -dependencies = [ - "base16ct", - "crypto-bigint 0.4.9", - "der 0.6.1", - "digest", - "ff", - "generic-array", - "group", - "pkcs8 0.9.0", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - [[package]] name = "encode_unicode" version = "1.0.0" @@ -3285,16 +3207,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "ff" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "filetime" version = "0.2.27" @@ -3423,7 +3335,7 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "fsst" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-array", "lance-datagen", @@ -3681,9 +3593,9 @@ dependencies = [ [[package]] name = "geodatafusion" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773cfa1fb0d7f7661b76b3fde00f3ffd8e0ff7b3635096f0ff6294fe5ca62a2b" +checksum = "4cb8faa9b3bf4ae9f49b1f023b82d20626826f6448a7055498376146c10c4ead" dependencies = [ "arrow-arith", "arrow-array", @@ -3791,7 +3703,7 @@ dependencies = [ "derive_builder 0.20.2", "http 1.4.0", "reqwest", - "rustls 0.23.36", + "rustls", "rustls-pemfile", "serde", "serde_json", @@ -3800,36 +3712,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "group" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - -[[package]] -name = "h2" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.13" @@ -3875,10 +3757,6 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] [[package]] name = "hashbrown" @@ -4071,30 +3949,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.27", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.10", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.8.1" @@ -4105,7 +3959,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.13", + "h2", "http 1.4.0", "http-body 1.0.1", "httparse", @@ -4118,21 +3972,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.7" @@ -4140,13 +3979,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.4.0", - "hyper 1.8.1", + "hyper", "hyper-util", - "rustls 0.23.36", + "rustls", "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", "webpki-roots 1.0.6", ] @@ -4159,7 +3998,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.8.1", + "hyper", "hyper-util", "native-tls", "tokio", @@ -4179,12 +4018,12 @@ dependencies = [ "futures-util", "http 1.4.0", "http-body 1.0.1", - "hyper 1.8.1", + "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.2", + "socket2", "system-configuration", "tokio", "tower-service", @@ -4710,7 +4549,7 @@ dependencies = [ [[package]] name = "lance" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "all_asserts", "approx", @@ -4783,8 +4622,9 @@ dependencies = [ "prost", "prost-types", "rand 0.9.2", + "rand_distr 0.5.1", "roaring", - "rstest 0.23.0", + "rstest", "semver", "serde", "serde_json", @@ -4805,7 +4645,7 @@ dependencies = [ [[package]] name = "lance-arrow" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-array", "arrow-buffer", @@ -4815,6 +4655,7 @@ dependencies = [ "arrow-schema", "arrow-select", "bytes", + "futures", "getrandom 0.2.17", "half", "jsonb", @@ -4822,9 +4663,25 @@ dependencies = [ "rand 0.9.2", ] +[[package]] +name = "lance-arrow-scalar" +version = "57.0.0" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ord", + "arrow-row", + "arrow-schema", + "half", + "proptest", + "rstest", +] + [[package]] name = "lance-bitpacking" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrayref", "paste", @@ -4833,7 +4690,7 @@ dependencies = [ [[package]] name = "lance-core" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-array", "arrow-buffer", @@ -4860,7 +4717,7 @@ dependencies = [ "prost", "rand 0.9.2", "roaring", - "rstest 0.23.0", + "rstest", "serde_json", "snafu", "tempfile", @@ -4873,7 +4730,7 @@ dependencies = [ [[package]] name = "lance-datafusion" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-array", @@ -4897,14 +4754,17 @@ dependencies = [ "log", "pin-project", "prost", + "prost-build", + "protobuf-src", "snafu", + "substrait", "tokio", "tracing", ] [[package]] name = "lance-datagen" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-array", @@ -4924,7 +4784,7 @@ dependencies = [ [[package]] name = "lance-encoding" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-arith", "arrow-array", @@ -4959,7 +4819,7 @@ dependencies = [ "protobuf-src", "rand 0.9.2", "rand_xoshiro", - "rstest 0.23.0", + "rstest", "snafu", "strum 0.26.3", "test-log", @@ -4971,7 +4831,7 @@ dependencies = [ [[package]] name = "lance-examples" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "all_asserts", "arrow", @@ -4997,7 +4857,7 @@ dependencies = [ [[package]] name = "lance-file" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-arith", "arrow-array", @@ -5031,7 +4891,7 @@ dependencies = [ "prost-types", "protobuf-src", "rand 0.9.2", - "rstest 0.23.0", + "rstest", "snafu", "test-log", "tokio", @@ -5040,7 +4900,7 @@ dependencies = [ [[package]] name = "lance-geo" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "datafusion", "geo-traits", @@ -5054,7 +4914,7 @@ dependencies = [ [[package]] name = "lance-index" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "approx", "arrow", @@ -5101,6 +4961,7 @@ dependencies = [ "lance-linalg", "lance-table", "lance-testing", + "libc", "libm", "lindera", "lindera-tantivy", @@ -5118,7 +4979,7 @@ dependencies = [ "rangemap", "rayon", "roaring", - "rstest 0.23.0", + "rstest", "serde", "serde_json", "smallvec", @@ -5134,7 +4995,7 @@ dependencies = [ [[package]] name = "lance-io" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-arith", @@ -5154,6 +5015,7 @@ dependencies = [ "criterion", "deepsize", "futures", + "http 1.4.0", "io-uring", "lance-arrow", "lance-core", @@ -5171,20 +5033,20 @@ dependencies = [ "pprof", "prost", "rand 0.9.2", - "rstest 0.23.0", + "rstest", "serde", - "shellexpand", "snafu", "tempfile", "test-log", "tokio", "tracing", + "tracing-mock", "url", ] [[package]] name = "lance-linalg" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "approx", "arrow-array", @@ -5205,13 +5067,14 @@ dependencies = [ [[package]] name = "lance-namespace" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "async-trait", "bytes", "lance-core", "lance-namespace-reqwest-client", + "serde", "snafu", "tempfile", "tokio", @@ -5219,7 +5082,7 @@ dependencies = [ [[package]] name = "lance-namespace-datafusion" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-array", @@ -5237,7 +5100,7 @@ dependencies = [ [[package]] name = "lance-namespace-impls" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-ipc", @@ -5260,12 +5123,14 @@ dependencies = [ "lance-core", "lance-index", "lance-io", + "lance-linalg", "lance-namespace", + "lance-table", "log", "object_store", "rand 0.9.2", "reqwest", - "rstest 0.23.0", + "rstest", "serde", "serde_json", "sha2", @@ -5281,9 +5146,9 @@ dependencies = [ [[package]] name = "lance-namespace-reqwest-client" -version = "0.4.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2acdba67f84190067532fce07b51a435dd390d7cdc1129a05003e5cb3274cf0" +checksum = "ee2e48de899e2931afb67fcddd0a08e439bf5d8b6ea2a2ed9cb8f4df669bd5cc" dependencies = [ "reqwest", "serde", @@ -5294,7 +5159,7 @@ dependencies = [ [[package]] name = "lance-table" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow", "arrow-array", @@ -5327,7 +5192,7 @@ dependencies = [ "rand 0.9.2", "rangemap", "roaring", - "rstest 0.23.0", + "rstest", "semver", "serde", "serde_json", @@ -5340,7 +5205,7 @@ dependencies = [ [[package]] name = "lance-test-macros" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "proc-macro2", "quote", @@ -5349,7 +5214,7 @@ dependencies = [ [[package]] name = "lance-testing" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "arrow-array", "arrow-schema", @@ -5360,7 +5225,7 @@ dependencies = [ [[package]] name = "lance-tools" -version = "3.0.0-beta.2" +version = "4.1.0-beta.3" dependencies = [ "clap", "lance-core", @@ -6217,7 +6082,7 @@ dependencies = [ "http-body-util", "httparse", "humantime", - "hyper 1.8.1", + "hyper", "itertools 0.14.0", "md-5", "parking_lot", @@ -6430,17 +6295,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "p256" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" -dependencies = [ - "ecdsa", - "elliptic-curve", - "sha2", -] - [[package]] name = "parking" version = "2.2.1" @@ -6721,9 +6575,9 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "der 0.7.10", - "pkcs8 0.10.2", - "spki 0.7.3", + "der", + "pkcs8", + "spki", ] [[package]] @@ -6734,21 +6588,11 @@ checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" dependencies = [ "aes", "cbc", - "der 0.7.10", + "der", "pbkdf2", "scrypt", "sha2", - "spki 0.7.3", -] - -[[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" -dependencies = [ - "der 0.6.1", - "spki 0.6.0", + "spki", ] [[package]] @@ -6757,10 +6601,10 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "der 0.7.10", + "der", "pkcs5", "rand_core 0.6.4", - "spki 0.7.3", + "spki", ] [[package]] @@ -7097,8 +6941,8 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.36", - "socket2 0.6.2", + "rustls", + "socket2", "thiserror 2.0.18", "tokio", "tracing", @@ -7117,7 +6961,7 @@ dependencies = [ "rand 0.9.2", "ring", "rustc-hash", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.18", @@ -7135,7 +6979,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.2", + "socket2", "tracing", "windows-sys 0.60.2", ] @@ -7489,12 +7333,12 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.13", + "h2", "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.8.1", - "hyper-rustls 0.27.7", + "hyper", + "hyper-rustls", "hyper-tls", "hyper-util", "js-sys", @@ -7505,7 +7349,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.36", + "rustls", "rustls-native-certs", "rustls-pki-types", "serde", @@ -7514,7 +7358,7 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-native-tls", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tower", "tower-http 0.6.8", @@ -7527,17 +7371,6 @@ dependencies = [ "webpki-roots 1.0.6", ] -[[package]] -name = "rfc6979" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" -dependencies = [ - "crypto-bigint 0.4.9", - "hmac", - "zeroize", -] - [[package]] name = "rgb" version = "0.8.52" @@ -7569,9 +7402,9 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "roaring" -version = "0.10.12" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e8d2cfa184d94d0726d650a9f4a1be7f9b76ac9fdb954219878dc00c1c1e7b" +checksum = "8ba9ce64a8f45d7fc86358410bb1a82e8c987504c0d4900e9141d69a9f26c885" dependencies = [ "bytemuck", "byteorder", @@ -7595,11 +7428,11 @@ dependencies = [ "num-integer", "num-traits", "pkcs1", - "pkcs8 0.10.2", + "pkcs8", "rand_core 0.6.4", "sha2", - "signature 2.2.0", - "spki 0.7.3", + "signature", + "spki", "subtle", "zeroize", ] @@ -7623,21 +7456,10 @@ checksum = "0a2c585be59b6b5dd66a9d2084aa1d8bd52fbdb806eafdeffb52791147862035" dependencies = [ "futures", "futures-timer", - "rstest_macros 0.23.0", + "rstest_macros", "rustc_version", ] -[[package]] -name = "rstest" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" -dependencies = [ - "futures-timer", - "futures-util", - "rstest_macros 0.26.1", -] - [[package]] name = "rstest_macros" version = "0.23.0" @@ -7656,24 +7478,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "rstest_macros" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" -dependencies = [ - "cfg-if", - "glob", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "relative-path", - "rustc_version", - "syn 2.0.114", - "unicode-ident", -] - [[package]] name = "rust-ini" version = "0.21.3" @@ -7741,18 +7545,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.36" @@ -7764,7 +7556,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.9", + "rustls-webpki", "subtle", "zeroize", ] @@ -7800,16 +7592,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.103.9" @@ -7920,30 +7702,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "sec1" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" -dependencies = [ - "base16ct", - "der 0.6.1", - "generic-array", - "pkcs8 0.9.0", - "subtle", - "zeroize", -] - [[package]] name = "security-framework" version = "2.11.1" @@ -8151,15 +7909,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shellexpand" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" -dependencies = [ - "dirs 6.0.0", -] - [[package]] name = "shlex" version = "1.3.0" @@ -8176,16 +7925,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" -dependencies = [ - "digest", - "rand_core 0.6.4", -] - [[package]] name = "signature" version = "2.2.0" @@ -8249,18 +7988,18 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "snafu" -version = "0.8.9" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" +checksum = "d1d4bced6a69f90b2056c03dcff2c4737f98d6fb9e0853493996e1d253ca29c6" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.9" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" +checksum = "54254b8531cafa275c5e096f62d48c81435d1015405a91198ddb11e967301d40" dependencies = [ "heck", "proc-macro2", @@ -8274,16 +8013,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.2" @@ -8332,16 +8061,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spki" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" -dependencies = [ - "base64ct", - "der 0.6.1", -] - [[package]] name = "spki" version = "0.7.3" @@ -8349,7 +8068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", - "der 0.7.10", + "der", ] [[package]] @@ -8983,7 +8702,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.2", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] @@ -9009,23 +8728,13 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.36", + "rustls", "tokio", ] @@ -9206,6 +8915,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-mock" +version = "0.1.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a31739d4ff16a8634c5463c75d5bf9e500596958a245d1ee5b6b98ac37658d" +dependencies = [ + "tracing", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.22" @@ -9400,7 +9119,7 @@ dependencies = [ "log", "native-tls", "once_cell", - "rustls 0.23.36", + "rustls", "rustls-pki-types", "serde", "serde_json", @@ -10006,7 +9725,7 @@ dependencies = [ "futures", "http 1.4.0", "http-body-util", - "hyper 1.8.1", + "hyper", "hyper-util", "log", "once_cell", diff --git a/python/Cargo.lock b/python/Cargo.lock index 4507a617872..a090f245765 100644 --- a/python/Cargo.lock +++ b/python/Cargo.lock @@ -3667,6 +3667,17 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +[[package]] +name = "io-uring" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" +dependencies = [ + "bitflags 2.11.0", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.12.0" @@ -4212,10 +4223,13 @@ dependencies = [ "deepsize", "futures", "http 1.4.0", + "io-uring", "lance-arrow", "lance-core", "lance-namespace", + "libc", "log", + "moka", "object_store", "object_store_opendal", "opendal", From 2510c8eb9632067d37ff28aa587e8b41ed9d2162 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Fri, 27 Mar 2026 13:03:32 -0700 Subject: [PATCH 08/13] Fix clippy CI failure: replace disallowed snafu::location!() macro Replace disallowed snafu::location!() macro with Error::not_found() in uring reader modules. Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/uring/current_thread.rs | 7 ++----- rust/lance-io/src/uring/reader.rs | 6 +----- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 7aca3d1d5ff..6662e83c6c3 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -20,7 +20,7 @@ use futures::{FutureExt, TryFutureExt}; use io_uring::{IoUring, opcode, types}; use lance_core::{Error, Result}; use object_store::path::Path; -use snafu::location; + use std::cell::RefCell; use std::collections::HashMap; use std::fs::File; @@ -318,10 +318,7 @@ impl UringCurrentThreadReader { let data = tokio::task::spawn_blocking(move || { let file = File::open(&local_path).map_err(|e| match e.kind() { - ErrorKind::NotFound => Error::NotFound { - uri: path_clone.to_string(), - location: location!(), - }, + ErrorKind::NotFound => Error::not_found(path_clone.to_string()), _ => e.into(), })?; diff --git a/rust/lance-io/src/uring/reader.rs b/rust/lance-io/src/uring/reader.rs index 75bd7ce17f5..b7d4bcfa2b3 100644 --- a/rust/lance-io/src/uring/reader.rs +++ b/rust/lance-io/src/uring/reader.rs @@ -17,7 +17,6 @@ use futures::future::BoxFuture; use futures::{FutureExt, TryFutureExt}; use lance_core::{Error, Result}; use object_store::path::Path; -use snafu::location; use std::fs::File; use std::future::Future; use std::io::{self, ErrorKind}; @@ -154,10 +153,7 @@ impl UringReader { let data = tokio::task::spawn_blocking(move || { let file = File::open(&local_path).map_err(|e| match e.kind() { - ErrorKind::NotFound => Error::NotFound { - uri: path_clone.to_string(), - location: location!(), - }, + ErrorKind::NotFound => Error::not_found(path_clone.to_string()), _ => e.into(), })?; From 67e3d3f42ead7b2ae03ce5c0eea8a54d14d89efd Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Fri, 27 Mar 2026 13:41:27 -0700 Subject: [PATCH 09/13] Update Cargo.lock files Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 1000 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 578 insertions(+), 422 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 94dd2b0f679..951c11ddf37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -121,7 +121,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", - "anstyle-parse", + "anstyle-parse 0.2.7", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse 1.0.0", "anstyle-query", "anstyle-wincon", "colorchoice", @@ -131,9 +146,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" @@ -144,6 +159,15 @@ dependencies = [ "utf8parse", ] +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + [[package]] name = "anstyle-query" version = "1.1.5" @@ -166,9 +190,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "approx" @@ -181,9 +205,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ded5f9a03ac8f24d1b8a25101ee812cd32cdc8c50a4c50237de2c4915850e73" +checksum = "a07d1f37ff60921c83bdfc7407723bdefe89b44b98a9b772f225c8f9d67141a6" dependencies = [ "rustversion", ] @@ -202,9 +226,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2b10dcb159faf30d3f81f6d56c1211a5bea2ca424eabe477648a44b993320e" +checksum = "e4754a624e5ae42081f464514be454b39711daae0458906dacde5f4c632f33a8" dependencies = [ "arrow-arith", "arrow-array", @@ -223,9 +247,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288015089e7931843c80ed4032c5274f02b37bcb720c4a42096d50b390e70372" +checksum = "f7b3141e0ec5145a22d8694ea8b6d6f69305971c4fa1c1a13ef0195aef2d678b" dependencies = [ "arrow-array", "arrow-buffer", @@ -237,9 +261,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ca404ea6191e06bf30956394173337fa9c35f445bd447fe6c21ab944e1a23c" +checksum = "4c8955af33b25f3b175ee10af580577280b4bd01f7e823d94c7cdef7cf8c9aef" dependencies = [ "ahash", "arrow-buffer", @@ -256,9 +280,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36356383099be0151dacc4245309895f16ba7917d79bdb71a7148659c9206c56" +checksum = "c697ddca96183182f35b3a18e50b9110b11e916d7b7799cbfd4d34662f2c56c2" dependencies = [ "bytes", "half", @@ -268,9 +292,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8e372ed52bd4ee88cc1e6c3859aa7ecea204158ac640b10e187936e7e87074" +checksum = "646bbb821e86fd57189c10b4fcdaa941deaf4181924917b0daa92735baa6ada5" dependencies = [ "arrow-array", "arrow-buffer", @@ -290,9 +314,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e4100b729fe656f2e4fb32bc5884f14acf9118d4ad532b7b33c1132e4dce896" +checksum = "8da746f4180004e3ce7b83c977daf6394d768332349d3d913998b10a120b790a" dependencies = [ "arrow-array", "arrow-cast", @@ -305,9 +329,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf87f4ff5fc13290aa47e499a8b669a82c5977c6a1fedce22c7f542c1fd5a597" +checksum = "1fdd994a9d28e6365aa78e15da3f3950c0fdcea6b963a12fa1c391afb637b304" dependencies = [ "arrow-buffer", "arrow-schema", @@ -318,9 +342,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3ca63edd2073fcb42ba112f8ae165df1de935627ead6e203d07c99445f2081" +checksum = "abf7df950701ab528bf7c0cf7eeadc0445d03ef5d6ffc151eaae6b38a58feff1" dependencies = [ "arrow-array", "arrow-buffer", @@ -328,15 +352,15 @@ dependencies = [ "arrow-schema", "arrow-select", "flatbuffers", - "lz4_flex 0.12.0", + "lz4_flex 0.12.1", "zstd", ] [[package]] name = "arrow-json" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a36b2332559d3310ebe3e173f75b29989b4412df4029a26a30cc3f7da0869297" +checksum = "0ff8357658bedc49792b13e2e862b80df908171275f8e6e075c460da5ee4bf86" dependencies = [ "arrow-array", "arrow-buffer", @@ -358,9 +382,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c4e0530272ca755d6814218dffd04425c5b7854b87fa741d5ff848bf50aa39" +checksum = "f7d8f1870e03d4cbed632959498bcc84083b5a24bded52905ae1695bd29da45b" dependencies = [ "arrow-array", "arrow-buffer", @@ -371,9 +395,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f52788744cc71c4628567ad834cadbaeb9f09026ff1d7a4120f69edf7abd3" +checksum = "18228633bad92bff92a95746bbeb16e5fc318e8382b75619dec26db79e4de4c0" dependencies = [ "arrow-array", "arrow-buffer", @@ -384,20 +408,20 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb63203e8e0e54b288d0d8043ca8fa1013820822a27692ef1b78a977d879f2c" +checksum = "8c872d36b7bf2a6a6a2b40de9156265f0242910791db366a2c17476ba8330d68" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "serde_core", "serde_json", ] [[package]] name = "arrow-select" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96d8a1c180b44ecf2e66c9a2f2bbcb8b1b6f14e165ce46ac8bde211a363411b" +checksum = "68bf3e3efbd1278f770d67e5dc410257300b161b93baedb3aae836144edcaf4b" dependencies = [ "ahash", "arrow-array", @@ -409,9 +433,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ad6a81add9d3ea30bf8374ee8329992c7fd246ffd8b7e2f48a3cea5aa0cc9a" +checksum = "85e968097061b3c0e9fe3079cf2e703e487890700546b5b0647f60fca1b5a8d8" dependencies = [ "arrow-array", "arrow-buffer", @@ -459,9 +483,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.37" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" +checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1" dependencies = [ "compression-codecs", "compression-core", @@ -482,7 +506,7 @@ dependencies = [ "futures-lite 2.6.1", "parking", "polling", - "rustix 1.1.3", + "rustix 1.1.4", "slab", "windows-sys 0.61.2", ] @@ -513,7 +537,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.1.3", + "rustix 1.1.4", ] [[package]] @@ -524,7 +548,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -539,7 +563,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.3", + "rustix 1.1.4", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -559,7 +583,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -594,9 +618,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-config" -version = "1.8.13" +version = "1.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c456581cb3c77fafcc8c67204a70680d40b61112d6da78c77bd31d945b65f1b5" +checksum = "8a8fc176d53d6fe85017f230405e3255cedb4a02221cb55ed6d76dccbbb099b2" dependencies = [ "aws-credential-types", "aws-runtime", @@ -624,9 +648,9 @@ dependencies = [ [[package]] name = "aws-credential-types" -version = "1.2.11" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cd362783681b15d136480ad555a099e82ecd8e2d10a841e14dfd0078d67fee3" +checksum = "6d203b0bf2626dcba8665f5cd0871d7c2c0930223d6b6be9097592fea21242d0" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -636,9 +660,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.15.4" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b7b6141e96a8c160799cc2d5adecd5cbbe5054cb8c7c4af53da0f83bb7ad256" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ "aws-lc-sys", "zeroize", @@ -646,9 +670,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c34dda4df7017c8db52132f0f8a2e0f8161649d15723ed63fc00c82d0f2081a" +checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" dependencies = [ "cc", "cmake", @@ -658,9 +682,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c635c2dc792cb4a11ce1a4f392a925340d1bdf499289b5ec1ec6810954eb43f5" +checksum = "ede2ddc593e6c8acc6ce3358c28d6677a6dc49b65ba4b37a2befe14a11297e75" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -672,6 +696,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", + "bytes-utils", "fastrand 2.3.0", "http 0.2.12", "http 1.4.0", @@ -685,9 +710,9 @@ dependencies = [ [[package]] name = "aws-sdk-dynamodb" -version = "1.104.0" +version = "1.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04c47115cc8d46dcc94a9a81e7a3384cea859283c1a737729691d4221f11584" +checksum = "561bf86e858a2759c6876b517b13f3f4051a6484abbb0d8a1f4dfc5d902cc85a" dependencies = [ "aws-credential-types", "aws-runtime", @@ -709,9 +734,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.122.0" +version = "1.124.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c2ca0cba97e8e279eb6c0b2d0aa10db5959000e602ab2b7c02de6b85d4c19b" +checksum = "744c09d75dfec039a05cf8e117c995ded3b0baffa6eb83f3ed7075a01d8d8947" dependencies = [ "aws-credential-types", "aws-runtime", @@ -744,9 +769,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.93.0" +version = "1.95.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcb38bb33fc0a11f1ffc3e3e85669e0a11a37690b86f77e75306d8f369146a0" +checksum = "00c5ff27c6ba2cbd95e6e26e2e736676fdf6bcf96495b187733f521cfe4ce448" dependencies = [ "aws-credential-types", "aws-runtime", @@ -768,9 +793,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.95.0" +version = "1.97.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ada8ffbea7bd1be1f53df1dadb0f8fdb04badb13185b3321b929d1ee3caad09" +checksum = "4d186f1e5a3694a188e5a0640b3115ccc6e084d104e16fd6ba968dca072ffef8" dependencies = [ "aws-credential-types", "aws-runtime", @@ -792,9 +817,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.97.0" +version = "1.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6443ccadc777095d5ed13e21f5c364878c9f5bad4e35187a6cdbd863b0afcad" +checksum = "9acba7c62f3d4e2408fa998a3a8caacd8b9a5b5549cf36e2372fbdae329d5449" dependencies = [ "aws-credential-types", "aws-runtime", @@ -817,9 +842,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.3.8" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa49f3c607b92daae0c078d48a4571f599f966dce3caee5f1ea55c4d9073f99" +checksum = "37411f8e0f4bea0c3ca0958ce7f18f6439db24d555dbd809787262cd00926aa9" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -840,9 +865,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.11" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52eec3db979d18cb807fc1070961cc51d87d069abe9ab57917769687368a8c6c" +checksum = "5cc50d0f63e714784b84223abd7abbc8577de8c35d699e0edd19f0a88a08ae13" dependencies = [ "futures-util", "pin-project-lite", @@ -851,9 +876,9 @@ dependencies = [ [[package]] name = "aws-smithy-checksums" -version = "0.64.3" +version = "0.64.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddcf418858f9f3edd228acb8759d77394fed7531cce78d02bdda499025368439" +checksum = "180dddf5ef0f52a2f99e2fada10e16ea610e507ef6148a42bdc4d5867596aa00" dependencies = [ "aws-smithy-http", "aws-smithy-types", @@ -872,9 +897,9 @@ dependencies = [ [[package]] name = "aws-smithy-eventstream" -version = "0.60.18" +version = "0.60.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35b9c7354a3b13c66f60fe4616d6d1969c9fd36b1b5333a5dfb3ee716b33c588" +checksum = "1c0b3e587fbaa5d7f7e870544508af8ce82ea47cd30376e69e1e37c4ac746f79" dependencies = [ "aws-smithy-types", "bytes", @@ -883,9 +908,9 @@ dependencies = [ [[package]] name = "aws-smithy-http" -version = "0.63.3" +version = "0.63.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630e67f2a31094ffa51b210ae030855cb8f3b7ee1329bdd8d085aaf61e8b97fc" +checksum = "d619373d490ad70966994801bc126846afaa0d1ee920697a031f0cf63f2568e7" dependencies = [ "aws-smithy-eventstream", "aws-smithy-runtime-api", @@ -905,9 +930,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.1.9" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fb0abf49ff0cab20fd31ac1215ed7ce0ea92286ba09e2854b42ba5cabe7525" +checksum = "00ccbb08c10f6bcf912f398188e42ee2eab5f1767ce215a02a73bc5df1bbdd95" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -929,27 +954,27 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.3" +version = "0.62.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb96aa208d62ee94104645f7b2ecaf77bf27edf161590b6224bfbac2832f979" +checksum = "27b3a779093e18cad88bbae08dc4261e1d95018c4c5b9356a52bcae7c0b6e9bb" dependencies = [ "aws-smithy-types", ] [[package]] name = "aws-smithy-observability" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a46543fbc94621080b3cf553eb4cbbdc41dd9780a30c4756400f0139440a1d" +checksum = "4d3f39d5bb871aaf461d59144557f16d5927a5248a983a40654d9cf3b9ba183b" dependencies = [ "aws-smithy-runtime-api", ] [[package]] name = "aws-smithy-query" -version = "0.60.13" +version = "0.60.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cebbddb6f3a5bd81553643e9c7daf3cc3dc5b0b5f398ac668630e8a84e6fff0" +checksum = "05f76a580e3d8f8961e5d48763214025a2af65c2fa4cd1fb7f270a0e107a71b0" dependencies = [ "aws-smithy-types", "urlencoding", @@ -957,9 +982,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.10.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3df87c14f0127a0d77eb261c3bc45d5b4833e2a1f63583ebfb728e4852134ee" +checksum = "22ccf7f6eba8b2dcf8ce9b74806c6c185659c311665c4bf8d6e71ebd454db6bf" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -982,9 +1007,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.3" +version = "1.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49952c52f7eebb72ce2a754d3866cc0f87b97d2a46146b79f80f3a93fb2b3716" +checksum = "b4af6e5def28be846479bbeac55aa4603d6f7986fc5da4601ba324dd5d377516" dependencies = [ "aws-smithy-async", "aws-smithy-types", @@ -999,9 +1024,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.4.3" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3a26048eeab0ddeba4b4f9d51654c79af8c3b32357dc5f336cee85ab331c33" +checksum = "8ca2734c16913a45343b37313605d84e7d8b34a4611598ce1d25b35860a2bed3" dependencies = [ "base64-simd", "bytes", @@ -1025,18 +1050,18 @@ dependencies = [ [[package]] name = "aws-smithy-xml" -version = "0.60.13" +version = "0.60.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b2f670422ff42bf7065031e72b45bc52a3508bd089f743ea90731ca2b6ea57" +checksum = "b53543b4b86ed43f051644f704a98c7291b3618b67adf057ee77a366fa52fcaa" dependencies = [ "xmlparser", ] [[package]] name = "aws-types" -version = "1.3.11" +version = "1.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d980627d2dd7bfc32a3c025685a033eeab8d365cc840c631ef59d1b8f428164" +checksum = "0470cc047657c6e286346bdf10a8719d26efd6a91626992e0e64481e44323e96" dependencies = [ "aws-credential-types", "aws-smithy-async", @@ -1318,9 +1343,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitpacking" @@ -1399,9 +1424,9 @@ dependencies = [ [[package]] name = "bon" -version = "3.8.2" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c" +checksum = "f47dbe92550676ee653353c310dfb9cf6ba17ee70396e1f7cf0a2020ad49b2fe" dependencies = [ "bon-macros", "rustversion", @@ -1409,9 +1434,9 @@ dependencies = [ [[package]] name = "bon-macros" -version = "3.8.2" +version = "3.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365" +checksum = "519bd3116aeeb42d5372c29d982d16d0170d3d4a5ed85fc7dd91642ffff3c67c" dependencies = [ "darling 0.23.0", "ident_case", @@ -1419,7 +1444,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -1445,9 +1470,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytemuck" @@ -1494,9 +1519,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.55" +version = "1.2.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" dependencies = [ "find-msvc-tools", "jobserver", @@ -1533,9 +1558,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -1594,9 +1619,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.57" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -1604,11 +1629,11 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.57" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ - "anstream", + "anstream 1.0.0", "anstyle", "clap_lex", "strsim 0.11.1", @@ -1616,21 +1641,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.55" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cmake" @@ -1643,9 +1668,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "comfy-table" @@ -1659,9 +1684,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.36" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00828ba6fd27b45a448e57dbfe84f1029d4c9f26b368157e9a448a5f49a2ec2a" +checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" dependencies = [ "compression-core", "flate2", @@ -1724,9 +1749,9 @@ dependencies = [ [[package]] name = "const_fn" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f8a2ca5ac02d09563609681103aada9e1777d54fc57a5acd7a41404f9c93b6e" +checksum = "413d67b29ef1021b4d60f4aa1e925ca031751e213832b4b1d588fae623c05c60" [[package]] name = "constant_time_eq" @@ -2015,7 +2040,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2028,7 +2053,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2050,7 +2075,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2061,7 +2086,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2547,7 +2572,7 @@ checksum = "402f2a8ed70fb99a18f71580a1fe338604222a3d32ddeac6e72c5b34feea2d4d" dependencies = [ "datafusion-doc", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2801,9 +2826,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -2848,7 +2873,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2868,7 +2893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core 0.20.2", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -2939,7 +2964,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -3081,9 +3106,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", "regex", @@ -3091,11 +3116,11 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ - "anstream", + "anstream 0.6.21", "anstyle", "env_filter", "jiff", @@ -3119,7 +3144,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -3248,7 +3273,7 @@ version = "25.12.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35f6839d7b3b98adde531effaf34f0c2badc6f4735d26fe74709d8e513a96ef3" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "rustc_version", ] @@ -3362,9 +3387,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -3377,9 +3402,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -3387,15 +3412,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -3404,9 +3429,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -3438,26 +3463,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -3467,9 +3492,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -3479,7 +3504,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -3613,9 +3637,9 @@ dependencies = [ [[package]] name = "geographiclib-rs" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f611040a2bb37eaa29a78a128d1e92a378a03e0b6e66ae27398d42b1ba9a7841" +checksum = "c5a7f08910fd98737a6eda7568e7c5e645093e073328eeef49758cfe8b0489c7" dependencies = [ "libm", ] @@ -3663,11 +3687,24 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + [[package]] name = "gimli" version = "0.32.3" @@ -4188,6 +4225,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -4217,36 +4260,32 @@ dependencies = [ [[package]] name = "include-flate" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01b7cb6ca682a621e7cda1c358c9724b53a7b4409be9be1dd443b7f3a26f998" +checksum = "8a05fb00d9abc625268e0573a519506b264a7d6965de09bac13201bfb44e723d" dependencies = [ "include-flate-codegen", "include-flate-compress", - "libflate", - "zstd", ] [[package]] name = "include-flate-codegen" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f49bf5274aebe468d6e6eba14a977eaf1efa481dc173f361020de70c1c48050" +checksum = "92c3c319a7527668538a8530c541e74e881e94c4f41e1425622d0a41c16468af" dependencies = [ "include-flate-compress", - "libflate", - "proc-macro-error", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.114", - "zstd", + "syn 2.0.117", ] [[package]] name = "include-flate-compress" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae6a40e716bcd5931f5dbb79cd921512a4f647e2e9413fded3171fca3824dbc" +checksum = "ed0bd9ea81b94169d61c5a397e9faef02153d3711fc62d3270bcde3ac85380d9" dependencies = [ "libflate", "zstd", @@ -4260,6 +4299,8 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -4324,28 +4365,17 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" -[[package]] -name = "io-uring" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" dependencies = [ "memchr", "serde", @@ -4415,9 +4445,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jieba-macros" @@ -4444,9 +4474,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.19" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89a5b5e10d5a9ad6e5d1f4bd58225f655d6fe9767575a5e8ac5a6fe64e04495" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -4459,20 +4489,20 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.19" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff7a39c8862fc1369215ccf0a8f12dd4598c7f6484704359f0351bd617034dbf" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "jiff-tzdb" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" +checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" [[package]] name = "jiff-tzdb-platform" @@ -4495,9 +4525,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -5016,15 +5046,12 @@ dependencies = [ "deepsize", "futures", "http 1.4.0", - "io-uring", "lance-arrow", "lance-core", "lance-namespace", - "libc", "log", "mock_instant", "mockall", - "moka", "object_store", "object_store_opendal", "opendal", @@ -5209,7 +5236,7 @@ version = "4.1.0-beta.3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5266,6 +5293,12 @@ dependencies = [ "spin 0.9.8", ] +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "levenshtein_automata" version = "0.2.1" @@ -5331,9 +5364,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.180" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libflate" @@ -5367,13 +5400,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "libc", - "redox_syscall 0.7.0", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -5519,9 +5553,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -5602,15 +5636,15 @@ dependencies = [ [[package]] name = "lz4_flex" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" +checksum = "373f5eceeeab7925e0c1098212f2fbc4d416adec9d35051a6ab251e824c1854a" [[package]] name = "lz4_flex" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab6473172471198271ff72e9379150e9dfd70d8e533e0752a27e515b48dd375e" +checksum = "98c23545df7ecf1b16c303910a69b079e8e251d60f7dd2cc9b4177f2afaf1746" dependencies = [ "twox-hash", ] @@ -5697,15 +5731,15 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] @@ -5782,14 +5816,14 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "moka" -version = "0.12.13" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac832c50ced444ef6be0767a008b02c106a909ba79d1d830501e94b96f6b7e" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ "async-lock", "crossbeam-channel", @@ -5824,7 +5858,7 @@ checksum = "e4db6d5580af57bf992f59068d4ea26fd518574ff48d7639b255a36f9de6e7e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -5841,17 +5875,17 @@ checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", - "openssl-probe 0.1.6", + "openssl-probe", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework", "security-framework-sys", "tempfile", ] @@ -6003,9 +6037,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -6013,14 +6047,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -6122,9 +6156,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -6144,7 +6178,7 @@ version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "336b9c63443aceef14bea841b899035ae3abe89b7c486aaf4c5bd8aafedac3f0" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "libc", "once_cell", "onig_sys", @@ -6198,11 +6232,11 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.75" +version = "0.10.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "cfg-if", "foreign-types", "libc", @@ -6219,15 +6253,9 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "openssl-probe" version = "0.2.1" @@ -6236,9 +6264,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.111" +version = "0.9.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" dependencies = [ "cc", "libc", @@ -6326,9 +6354,9 @@ dependencies = [ [[package]] name = "parquet" -version = "57.2.0" +version = "57.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6a2926a30477c0b95fea6c28c3072712b139337a242c2cc64817bdc20a8854" +checksum = "6ee96b29972a257b855ff2341b37e61af5f12d6af1158b6dcdb5b31ea07bb3cb" dependencies = [ "ahash", "arrow-array", @@ -6346,7 +6374,7 @@ dependencies = [ "futures", "half", "hashbrown 0.16.1", - "lz4_flex 0.12.0", + "lz4_flex 0.12.1", "num-bigint", "num-integer", "num-traits", @@ -6528,29 +6556,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -6560,9 +6588,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", "fastrand 2.3.0", @@ -6613,6 +6641,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "plotters" version = "0.3.7" @@ -6651,7 +6685,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -6663,9 +6697,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" dependencies = [ "portable-atomic", ] @@ -6719,9 +6753,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "predicates-core", @@ -6729,15 +6763,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -6760,40 +6794,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", - "version_check", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ + "proc-macro-error-attr2", "proc-macro2", "quote", - "version_check", + "syn 2.0.117", ] [[package]] @@ -6813,7 +6845,7 @@ checksum = "37566cb3fdacef14c0737f9546df7cfeadbfbc9fef10991038bf5015d0c80532" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.10.0", + "bitflags 2.11.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", @@ -6849,7 +6881,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.114", + "syn 2.0.117", "tempfile", ] @@ -6863,7 +6895,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -6951,9 +6983,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", "getrandom 0.3.4", @@ -6986,9 +7018,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -6999,6 +7031,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "radium" version = "0.7.0" @@ -7205,16 +7243,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] name = "redox_syscall" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", ] [[package]] @@ -7270,9 +7308,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "regress" @@ -7373,9 +7411,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.52" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" dependencies = [ "bytemuck", ] @@ -7474,7 +7512,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.114", + "syn 2.0.117", "unicode-ident", ] @@ -7525,7 +7563,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -7534,22 +7572,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.36" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "log", @@ -7567,10 +7605,10 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ - "openssl-probe 0.2.1", + "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.5.1", + "security-framework", ] [[package]] @@ -7594,9 +7632,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.9" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ "aws-lc-rs", "ring", @@ -7624,9 +7662,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa20" @@ -7648,9 +7686,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -7676,7 +7714,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -7704,24 +7742,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags 2.10.0", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -7730,9 +7755,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -7781,7 +7806,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -7792,7 +7817,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -7838,19 +7863,19 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "serde_tokenstream" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64060d864397305347a78851c51588fd283767e7e7589829e8121d65512340f1" +checksum = "d7c49585c52c01f13c5c2ebb333f14f6885d76daa768d8a037d28017ec538c69" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -7949,9 +7974,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple_asn1" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", @@ -7967,9 +7992,9 @@ checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sketches-ddsketch" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" +checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" dependencies = [ "serde", ] @@ -8004,7 +8029,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8015,12 +8040,12 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -8101,7 +8126,7 @@ checksum = "da5fc6819faabb412da764b99d3b713bb55083c11e7e0c00144d386cd6a1939c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8168,7 +8193,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8180,7 +8205,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8203,7 +8228,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "syn 2.0.114", + "syn 2.0.117", "typify", "walkdir", ] @@ -8216,9 +8241,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.17.2" +version = "12.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "751a2823d606b5d0a7616499e4130a516ebd01a44f39811be2b9600936509c23" +checksum = "52ca086c1eb5c7ee74b151ba83c6487d5d33f8c08ad991b86f3f58f6629e68d5" dependencies = [ "debugid", "memmap2", @@ -8228,9 +8253,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.17.2" +version = "12.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b237cfbe320601dd24b4ac817a5b68bb28f5508e33f08d42be0682cadc8ac9" +checksum = "baa911a28a62823aaf2cc2e074212492a3ee69d0d926cc8f5b12b4a108ff5c0c" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -8250,9 +8275,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.114" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -8276,7 +8301,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8285,7 +8310,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -8331,7 +8356,7 @@ dependencies = [ "levenshtein_automata", "log", "lru 0.12.5", - "lz4_flex 0.11.5", + "lz4_flex 0.11.6", "measure_time", "memmap2", "once_cell", @@ -8460,9 +8485,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" +checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" dependencies = [ "filetime", "libc", @@ -8471,14 +8496,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.24.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand 2.3.0", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -8507,7 +8532,7 @@ checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8536,7 +8561,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8547,7 +8572,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8644,9 +8669,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -8692,9 +8717,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -8709,13 +8734,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8764,18 +8789,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "97251a7c317e03ad83774a8752a7e81fb6067740609f75ea2b585b569a59198f" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.7+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "d15b06e6c39068c203e7c1d0bc3944796d867449e7668ef7fa5ea43727cb846e" dependencies = [ "indexmap", "toml_datetime", @@ -8785,9 +8810,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011" dependencies = [ "winnow", ] @@ -8814,7 +8839,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "http 1.4.0", "http-body 1.0.1", @@ -8832,7 +8857,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "async-compression", - "bitflags 2.10.0", + "bitflags 2.11.0", "bytes", "futures-core", "futures-util", @@ -8880,7 +8905,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -8927,9 +8952,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -8999,7 +9024,7 @@ dependencies = [ "semver", "serde", "serde_json", - "syn 2.0.114", + "syn 2.0.117", "thiserror 2.0.18", "unicode-ident", ] @@ -9017,7 +9042,7 @@ dependencies = [ "serde", "serde_json", "serde_tokenstream", - "syn 2.0.114", + "syn 2.0.117", "typify-impl", ] @@ -9050,9 +9075,9 @@ checksum = "6b12e05d9e06373163a9bb6bb8c263c261b396643a99445fe6b9811fd376581b" [[package]] name = "unicode-ident" -version = "1.0.22" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -9084,6 +9109,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "unicode_categories" version = "0.1.1" @@ -9167,11 +9198,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.20.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", "serde_core", "wasm-bindgen", @@ -9262,11 +9293,20 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -9277,9 +9317,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", "futures-util", @@ -9291,9 +9331,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -9301,26 +9341,48 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -9334,11 +9396,23 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -9424,7 +9498,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -9435,7 +9509,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -9706,9 +9780,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.14" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "a90e88e4667264a994d34e6d1ab2d26d398dcdca8b7f52bec8668957517fc7d8" dependencies = [ "memchr", ] @@ -9741,6 +9815,88 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "wkb" @@ -9789,7 +9945,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.1.3", + "rustix 1.1.4", ] [[package]] @@ -9835,28 +9991,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.38" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" +checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.38" +version = "0.8.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" +checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] @@ -9876,7 +10032,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", "synstructure", ] @@ -9916,20 +10072,20 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn 2.0.117", ] [[package]] name = "zlib-rs" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7948af682ccbc3342b6e9420e8c51c1fe5d7bf7756002b4a3c6cabfe96a7e3c" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" [[package]] name = "zmij" -version = "1.0.19" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zstd" From 39e3f17c4129d596e37da97a89dc192d650e3ff3 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Fri, 27 Mar 2026 13:44:07 -0700 Subject: [PATCH 10/13] Simplify lockfile changes --- Cargo.lock | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 951c11ddf37..1654b57679b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4365,6 +4365,17 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +[[package]] +name = "io-uring" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" +dependencies = [ + "bitflags 2.11.0", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.12.0" @@ -5046,12 +5057,15 @@ dependencies = [ "deepsize", "futures", "http 1.4.0", + "io-uring", "lance-arrow", "lance-core", "lance-namespace", + "libc", "log", "mock_instant", "mockall", + "moka", "object_store", "object_store_opendal", "opendal", From 84939a18ef77dfb8beda1905f6682e13b3738c54 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Mon, 30 Mar 2026 05:41:09 -0700 Subject: [PATCH 11/13] Address PR review feedback - Use LazyCell for thread-local io_uring initialization (panics on failure instead of propagating errors, per reviewer suggestion) - Cache LANCE_URING_BLOCK_SIZE env var in a LazyLock static - Use str_is_truthy for LANCE_URING_CURRENT_THREAD parsing Co-Authored-By: Claude Opus 4.6 --- rust/lance-io/src/object_store.rs | 4 +- rust/lance-io/src/uring.rs | 9 + rust/lance-io/src/uring/current_thread.rs | 215 ++++++++++------------ rust/lance-io/src/uring/reader.rs | 7 +- 4 files changed, 111 insertions(+), 124 deletions(-) diff --git a/rust/lance-io/src/object_store.rs b/rust/lance-io/src/object_store.rs index 24d27b3ad9f..6fe5c152046 100644 --- a/rust/lance-io/src/object_store.rs +++ b/rust/lance-io/src/object_store.rs @@ -603,7 +603,7 @@ impl ObjectStore { "file+uring" => { // Check if current-thread mode enabled let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") - .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) + .map(|v| str_is_truthy(&v)) .unwrap_or(false); if use_current_thread { @@ -665,7 +665,7 @@ impl ObjectStore { "file+uring" => { // Check if current-thread mode enabled let use_current_thread = std::env::var("LANCE_URING_CURRENT_THREAD") - .map(|v| v == "1" || v.eq_ignore_ascii_case("true")) + .map(|v| str_is_truthy(&v)) .unwrap_or(false); if use_current_thread { diff --git a/rust/lance-io/src/uring.rs b/rust/lance-io/src/uring.rs index f3476f67a0a..06786178164 100644 --- a/rust/lance-io/src/uring.rs +++ b/rust/lance-io/src/uring.rs @@ -62,6 +62,8 @@ pub(crate) mod current_thread_future; #[cfg(test)] mod tests; +use std::sync::LazyLock; + pub(crate) use current_thread::UringCurrentThreadReader; pub use reader::UringReader; @@ -73,3 +75,10 @@ pub const DEFAULT_URING_IO_PARALLELISM: usize = 128; /// Default io_uring queue depth (16K entries) pub const DEFAULT_URING_QUEUE_DEPTH: usize = 16 * 1024; + +/// Cached `LANCE_URING_BLOCK_SIZE` env var, read once at first access. +pub(crate) static URING_BLOCK_SIZE: LazyLock> = LazyLock::new(|| { + std::env::var("LANCE_URING_BLOCK_SIZE") + .ok() + .and_then(|s| s.parse().ok()) +}); diff --git a/rust/lance-io/src/uring/current_thread.rs b/rust/lance-io/src/uring/current_thread.rs index 6662e83c6c3..bc09af058e6 100644 --- a/rust/lance-io/src/uring/current_thread.rs +++ b/rust/lance-io/src/uring/current_thread.rs @@ -8,7 +8,7 @@ //! the need for background threads and MPSC channels. use super::requests::{IoRequest, RequestState}; -use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM}; +use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM, URING_BLOCK_SIZE}; use crate::local::to_local_path; use crate::traits::Reader; use crate::uring::DEFAULT_URING_QUEUE_DEPTH; @@ -21,7 +21,7 @@ use io_uring::{IoUring, opcode, types}; use lance_core::{Error, Result}; use object_store::path::Path; -use std::cell::RefCell; +use std::cell::{LazyCell, RefCell}; use std::collections::HashMap; use std::fs::File; use std::future::Future; @@ -45,16 +45,7 @@ struct ThreadLocalUring { } thread_local! { - static URING: RefCell> = const { RefCell::new(None) }; -} - -/// Ensure the thread-local IoUring instance is initialized -fn ensure_uring_initialized( - opt: &mut Option, -) -> io::Result<&mut ThreadLocalUring> { - // Check if exists - if opt.is_none() { - // Create new IoUring + static URING: LazyCell> = LazyCell::new(|| { let queue_depth = std::env::var("LANCE_URING_QUEUE_DEPTH") .ok() .and_then(|s| s.parse().ok()) @@ -66,28 +57,24 @@ fn ensure_uring_initialized( // Enable perf. optimization when there is only one issuer thread .setup_single_issuer() .build(queue_depth as u32) - .map_err(|e| io::Error::other(format!("Failed to create io_uring: {}", e)))?; + .expect("Failed to create io_uring"); log::debug!( "Created thread-local io_uring with queue depth {}", queue_depth ); - *opt = Some(ThreadLocalUring { + RefCell::new(ThreadLocalUring { ring, pending: HashMap::new(), - }); - } - - Ok(opt.as_mut().unwrap()) + }) + }); } /// Push request to thread-local submission queue pub(super) fn push_request(request: Arc) -> io::Result<()> { URING.with(|cell| { - let mut opt = cell.borrow_mut(); - - let uring = ensure_uring_initialized(&mut opt)?; + let mut uring = cell.borrow_mut(); // Generate unique user_data let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); @@ -138,121 +125,118 @@ pub(super) fn push_request(request: Arc) -> io::Result<()> { /// Process completions from thread-local IoUring pub(super) fn process_thread_local_completions() -> io::Result { URING.with(|cell| { - let mut opt = cell.borrow_mut(); - if let Some(ref mut uring) = *opt { - let mut completed = 0; - let mut retries: Vec> = Vec::new(); - - // Process all available completions - for cqe in uring.ring.completion() { - let user_data = cqe.user_data(); - let result = cqe.result(); - - if let Some(request) = uring.pending.remove(&user_data) { - let mut state = request.state.lock().unwrap(); - - if result < 0 { - // Kernel error - state.err = Some(io::Error::from_raw_os_error(-result)); - state.completed = true; - } else if result == 0 { - // EOF before full read completed - let br = state.bytes_read; - state.err = Some(io::Error::new( - io::ErrorKind::UnexpectedEof, - format!("unexpected EOF: read {} of {} bytes", br, request.length), - )); + let mut uring = cell.borrow_mut(); + let mut completed = 0; + let mut retries: Vec> = Vec::new(); + + // Collect completions first to avoid borrowing ring and pending simultaneously + let cqes: Vec<_> = uring + .ring + .completion() + .map(|cqe| (cqe.user_data(), cqe.result())) + .collect(); + + for (user_data, result) in cqes { + if let Some(request) = uring.pending.remove(&user_data) { + let mut state = request.state.lock().unwrap(); + + if result < 0 { + // Kernel error + state.err = Some(io::Error::from_raw_os_error(-result)); + state.completed = true; + } else if result == 0 { + // EOF before full read completed + let br = state.bytes_read; + state.err = Some(io::Error::new( + io::ErrorKind::UnexpectedEof, + format!("unexpected EOF: read {} of {} bytes", br, request.length), + )); + state.buffer.truncate(br); + state.completed = true; + } else { + // Positive result: n bytes read + let n = result as usize; + state.bytes_read += n; + let br = state.bytes_read; + + if br >= request.length { + // Full read complete state.buffer.truncate(br); state.completed = true; } else { - // Positive result: n bytes read - let n = result as usize; - state.bytes_read += n; - let br = state.bytes_read; - - if br >= request.length { - // Full read complete - state.buffer.truncate(br); - state.completed = true; - } else { - // Short read — need retry; don't mark completed or wake - drop(state); - retries.push(request); - - continue; - } - } - - // Wake waiting future - if let Some(waker) = state.waker.take() { + // Short read — need retry; don't mark completed or wake drop(state); - waker.wake(); + retries.push(request); + + continue; } + } - completed += 1; - } else { - log::warn!("Received completion for unknown user_data: {}", user_data); + // Wake waiting future + if let Some(waker) = state.waker.take() { + drop(state); + waker.wake(); } + + completed += 1; + } else { + log::warn!("Received completion for unknown user_data: {}", user_data); } + } - // Resubmit short-read retries - for request in retries { - // Generate unique user_data - let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); + // Resubmit short-read retries + for request in retries { + // Generate unique user_data + let user_data = USER_DATA_COUNTER.fetch_add(1, Ordering::Relaxed); + + let (buffer_ptr, read_offset, read_length) = { + let state = request.state.lock().unwrap(); + let br = state.bytes_read; + ( + unsafe { state.buffer.as_ptr().add(br) as *mut u8 }, + request.offset + br as u64, + (request.length - br) as u32, + ) + }; - let (buffer_ptr, read_offset, read_length) = { - let state = request.state.lock().unwrap(); - let br = state.bytes_read; - ( - unsafe { state.buffer.as_ptr().add(br) as *mut u8 }, - request.offset + br as u64, - (request.length - br) as u32, - ) - }; - - let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, read_length) - .offset(read_offset); - - let mut sq = uring.ring.submission(); - if sq.is_full() { - drop(sq); - request.fail(io::Error::new( - io::ErrorKind::WouldBlock, - "io_uring submission queue full during retry", - )); - continue; - } + let read_op = opcode::Read::new(types::Fd(request.fd), buffer_ptr, read_length) + .offset(read_offset); - unsafe { - if sq.push(&read_op.build().user_data(user_data)).is_err() { - request.fail(io::Error::other("Failed to push short-read retry to SQ")); - continue; - } - } + let mut sq = uring.ring.submission(); + if sq.is_full() { drop(sq); - - uring.pending.insert(user_data, request); + request.fail(io::Error::new( + io::ErrorKind::WouldBlock, + "io_uring submission queue full during retry", + )); + continue; } - if completed > 0 { - log::trace!("Processed {} completions", completed); + unsafe { + if sq.push(&read_op.build().user_data(user_data)).is_err() { + request.fail(io::Error::other("Failed to push short-read retry to SQ")); + continue; + } } + drop(sq); + + uring.pending.insert(user_data, request); + } - Ok(completed) - } else { - Ok(0) + if completed > 0 { + log::trace!("Processed {} completions", completed); } + + Ok(completed) }) } /// Submit all pending requests and wait with timeout 0 (non-blocking) pub(super) fn submit_and_wait_thread_local() -> io::Result<()> { URING.with(|cell| { - let mut opt = cell.borrow_mut(); - if let Some(ref mut uring) = *opt { - // Submit with wait=1 (do at least some work) - uring.ring.submit_and_wait(1)?; - } + let uring = cell.borrow_mut(); + // Submit with wait=1 (do at least some work) + uring.ring.submit_and_wait(1)?; Ok(()) }) } @@ -293,10 +277,7 @@ impl UringCurrentThreadReader { io_tracker: Arc, ) -> Result> { // Determine block size with environment variable override - let block_size = std::env::var("LANCE_URING_BLOCK_SIZE") - .ok() - .and_then(|s| s.parse().ok()) - .unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); + let block_size = URING_BLOCK_SIZE.unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); let cache_key = CacheKey::new(path, block_size); diff --git a/rust/lance-io/src/uring/reader.rs b/rust/lance-io/src/uring/reader.rs index b7d4bcfa2b3..0e7b0101ba8 100644 --- a/rust/lance-io/src/uring/reader.rs +++ b/rust/lance-io/src/uring/reader.rs @@ -6,7 +6,7 @@ use super::future::UringReadFuture; use super::requests::IoRequest; use super::thread::{SUBMITTED_COUNTER, THREAD_SELECTOR, URING_THREADS}; -use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM}; +use super::{DEFAULT_URING_BLOCK_SIZE, DEFAULT_URING_IO_PARALLELISM, URING_BLOCK_SIZE}; use crate::local::to_local_path; use crate::traits::Reader; use crate::uring::requests::RequestState; @@ -128,10 +128,7 @@ impl UringReader { io_tracker: Arc, ) -> Result> { // Determine block size with environment variable override - let block_size = std::env::var("LANCE_URING_BLOCK_SIZE") - .ok() - .and_then(|s| s.parse().ok()) - .unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); + let block_size = URING_BLOCK_SIZE.unwrap_or(block_size.max(DEFAULT_URING_BLOCK_SIZE)); let cache_key = CacheKey::new(path, block_size); From 55b745a80b178595195806ea0500c92a1969a741 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Mon, 30 Mar 2026 15:22:51 -0700 Subject: [PATCH 12/13] Fix compiler recursion depth overflow in IvfIndexBuilder::build() Box deep async sub-futures in build() to break the type-level recursion chain that exceeded the default recursion_limit of 128. The io_uring wrappers added in this PR made I/O futures slightly larger, pushing the compiler's query depth from ~128 to 130 when computing the async state machine layout. Co-Authored-By: Claude Opus 4.6 --- rust/lance/src/index/vector/builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/lance/src/index/vector/builder.rs b/rust/lance/src/index/vector/builder.rs index c2d6427b251..54fa9f6ac96 100644 --- a/rust/lance/src/index/vector/builder.rs +++ b/rust/lance/src/index/vector/builder.rs @@ -259,7 +259,7 @@ impl IvfIndexBuilder progress .stage_start("train_ivf", max_iters, "iterations") .await?; - self.with_ivf(self.load_or_build_ivf().await?); + self.with_ivf(self.load_or_build_ivf().boxed().await?); progress.stage_complete("train_ivf").await?; progress.stage_start("train_quantizer", None, "").await?; @@ -270,7 +270,7 @@ impl IvfIndexBuilder if self.shuffle_reader.is_none() { let num_rows = self.num_rows_to_shuffle().await?; progress.stage_start("shuffle", num_rows, "rows").await?; - self.shuffle_dataset().await?; + self.shuffle_dataset().boxed().await?; progress.stage_complete("shuffle").await?; } From abbdbadacc9133f1ff6fcd67d220a0597df13d24 Mon Sep 17 00:00:00 2001 From: Weston Pace Date: Tue, 31 Mar 2026 13:19:53 -0700 Subject: [PATCH 13/13] Update Cargo.lock after rebase Co-Authored-By: Claude Opus 4.6 --- Cargo.lock | 84 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1654b57679b..1389b0f6a97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3360,7 +3360,7 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "fsst" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-array", "lance-datagen", @@ -4590,7 +4590,7 @@ dependencies = [ [[package]] name = "lance" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "all_asserts", "approx", @@ -4686,7 +4686,7 @@ dependencies = [ [[package]] name = "lance-arrow" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-array", "arrow-buffer", @@ -4722,7 +4722,7 @@ dependencies = [ [[package]] name = "lance-bitpacking" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrayref", "paste", @@ -4731,7 +4731,7 @@ dependencies = [ [[package]] name = "lance-core" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-array", "arrow-buffer", @@ -4771,7 +4771,7 @@ dependencies = [ [[package]] name = "lance-datafusion" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -4805,7 +4805,7 @@ dependencies = [ [[package]] name = "lance-datagen" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -4825,7 +4825,7 @@ dependencies = [ [[package]] name = "lance-encoding" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-arith", "arrow-array", @@ -4861,6 +4861,7 @@ dependencies = [ "rand 0.9.2", "rand_xoshiro", "rstest", + "serial_test", "snafu", "strum 0.26.3", "test-log", @@ -4872,7 +4873,7 @@ dependencies = [ [[package]] name = "lance-examples" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "all_asserts", "arrow", @@ -4898,7 +4899,7 @@ dependencies = [ [[package]] name = "lance-file" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-arith", "arrow-array", @@ -4941,7 +4942,7 @@ dependencies = [ [[package]] name = "lance-geo" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "datafusion", "geo-traits", @@ -4955,7 +4956,7 @@ dependencies = [ [[package]] name = "lance-index" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "approx", "arrow", @@ -5036,7 +5037,7 @@ dependencies = [ [[package]] name = "lance-io" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-arith", @@ -5087,7 +5088,7 @@ dependencies = [ [[package]] name = "lance-linalg" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "approx", "arrow-array", @@ -5108,7 +5109,7 @@ dependencies = [ [[package]] name = "lance-namespace" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "async-trait", @@ -5123,7 +5124,7 @@ dependencies = [ [[package]] name = "lance-namespace-datafusion" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -5141,7 +5142,7 @@ dependencies = [ [[package]] name = "lance-namespace-impls" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-ipc", @@ -5200,7 +5201,7 @@ dependencies = [ [[package]] name = "lance-table" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow", "arrow-array", @@ -5246,7 +5247,7 @@ dependencies = [ [[package]] name = "lance-test-macros" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "proc-macro2", "quote", @@ -5255,7 +5256,7 @@ dependencies = [ [[package]] name = "lance-testing" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "arrow-array", "arrow-schema", @@ -5266,7 +5267,7 @@ dependencies = [ [[package]] name = "lance-tools" -version = "4.1.0-beta.3" +version = "5.0.0-beta.2" dependencies = [ "clap", "lance-core", @@ -7698,6 +7699,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scc" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" +dependencies = [ + "sdd", +] + [[package]] name = "schannel" version = "0.1.29" @@ -7754,6 +7764,12 @@ dependencies = [ "sha2", ] +[[package]] +name = "sdd" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" + [[package]] name = "security-framework" version = "3.7.0" @@ -7917,6 +7933,32 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "serial_test" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f" +dependencies = [ + "futures-executor", + "futures-util", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "sha1" version = "0.10.6"