diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index 721a46d8b..ef1e8b101 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -47,108 +47,160 @@ concurrency: env: CARGO_TERM_COLOR: always CARGO_BUILD_TARGET: x86_64-unknown-linux-gnu + RUSTFLAGS: "--cfg tokio_unstable -C target-feature=-crt-static" jobs: + # ────────────────────────────────────────────────────────────── + # Phase 1: Build all fuzz harness binaries once. + # ────────────────────────────────────────────────────────────── + fuzz-build: + name: Build Fuzz Harness + if: > + github.event_name == 'pull_request' || + github.event_name == 'schedule' || + github.event_name == 'workflow_dispatch' + runs-on: ubicloud-standard-4 + timeout-minutes: 45 + env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" + steps: + - name: Checkout repository + uses: actions/checkout@v7 + + - name: Setup Rust environment + uses: ./.github/actions/setup + with: + rust-version: nightly + cache-shared-key: fuzz-${{ hashFiles('fuzz/Cargo.lock') }} + github-token: ${{ secrets.GITHUB_TOKEN }} + cache-save-if: ${{ github.ref == 'refs/heads/main' || github.event_name == 'schedule' }} + + - name: Install cargo-fuzz + uses: taiki-e/install-action@v2 + with: + tool: cargo-fuzz + + - name: Build all fuzz targets + run: BUILD_ONLY=1 ./scripts/fuzz/run.sh + + - name: Stage prebuilt fuzz binaries + run: | + binary_root="fuzz/prebuilt/${CARGO_BUILD_TARGET}/release" + mkdir -p "${binary_root}" + for target in path_containment bucket_validation local_metadata; do + install -Dm755 "fuzz/target/${CARGO_BUILD_TARGET}/release/${target}" "${binary_root}/${target}" + done + + - name: Upload prebuilt fuzz binaries + uses: actions/upload-artifact@v6 + with: + name: fuzz-prebuilt-binaries-${{ github.run_number }} + path: | + fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release/path_containment + fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release/bucket_validation + fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release/local_metadata + if-no-files-found: error + retention-days: 1 + compression-level: 0 + + # ────────────────────────────────────────────────────────────── + # Phase 2 (PR): Run smoke targets in parallel via matrix. + # ────────────────────────────────────────────────────────────── pr-fuzz-smoke: - name: PR Fuzz Smoke + name: "Smoke / ${{ matrix.target }}" + needs: fuzz-build if: > github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && (github.event.inputs.profile == 'smoke' || github.event.inputs.profile == 'both')) runs-on: ubicloud-standard-4 - timeout-minutes: 120 + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + target: [path_containment, bucket_validation, local_metadata] env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - MAX_TOTAL_TIME: 60 - ARTIFACT_ROOT: artifacts - RUSTFLAGS: "--cfg tokio_unstable -C target-feature=-crt-static" steps: - name: Checkout repository uses: actions/checkout@v7 - - name: Setup Rust environment - uses: ./.github/actions/setup + - name: Download prebuilt fuzz binaries + uses: actions/download-artifact@v7 with: - rust-version: nightly - cache-shared-key: fuzz-smoke-${{ hashFiles('fuzz/Cargo.lock') }} - github-token: ${{ secrets.GITHUB_TOKEN }} - cache-save-if: ${{ github.ref == 'refs/heads/main' }} + name: fuzz-prebuilt-binaries-${{ github.run_number }} + path: fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release - - name: Install cargo-fuzz - uses: taiki-e/install-action@v2 - with: - tool: cargo-fuzz + - name: Restore executable bit + run: chmod +x "fuzz/prebuilt/${CARGO_BUILD_TARGET}/release/${{ matrix.target }}" - - name: Run path_containment smoke target + - name: Run ${{ matrix.target }} env: - FUZZ_TARGET: path_containment - run: ./scripts/fuzz/run_ci_targets.sh - - - name: Run bucket_validation smoke target - env: - FUZZ_TARGET: bucket_validation - run: ./scripts/fuzz/run_ci_targets.sh - - - name: Run local_metadata smoke target - env: - FUZZ_TARGET: local_metadata - run: ./scripts/fuzz/run_ci_targets.sh - - - name: Run bounded fuzz smoke targets - if: ${{ false }} - run: ./scripts/fuzz/run_ci_targets.sh + FUZZ_TARGET: ${{ matrix.target }} + MAX_TOTAL_TIME: 60 + SKIP_BUILD: 1 + USE_PREBUILT_BINARY: 1 + PREBUILT_BINARY_DIR: ${{ github.workspace }}/fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release + run: ./scripts/fuzz/run.sh - name: Upload fuzz smoke artifacts if: always() uses: actions/upload-artifact@v6 with: - name: fuzz-smoke-${{ github.run_number }} + name: fuzz-smoke-${{ matrix.target }}-${{ github.run_number }} path: | fuzz/artifacts/** - fuzz/corpus/** + fuzz/corpus/${{ matrix.target }}/** if-no-files-found: ignore retention-days: 7 + # ────────────────────────────────────────────────────────────── + # Phase 2 (Nightly): Run all targets in parallel via matrix. + # ────────────────────────────────────────────────────────────── nightly-fuzz-corpus: - name: Nightly Fuzz Corpus + name: "Nightly / ${{ matrix.target }}" + needs: fuzz-build if: > github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && (github.event.inputs.profile == 'nightly' || github.event.inputs.profile == 'both')) runs-on: ubicloud-standard-4 - timeout-minutes: 180 + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + target: [path_containment, bucket_validation, local_metadata] env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" - MAX_TOTAL_TIME: 300 - ARTIFACT_ROOT: artifacts - RUSTFLAGS: "--cfg tokio_unstable -C target-feature=-crt-static" steps: - name: Checkout repository uses: actions/checkout@v7 - - name: Setup Rust environment - uses: ./.github/actions/setup + - name: Download prebuilt fuzz binaries + uses: actions/download-artifact@v7 with: - rust-version: nightly - cache-shared-key: fuzz-nightly-${{ hashFiles('fuzz/Cargo.lock') }} - github-token: ${{ secrets.GITHUB_TOKEN }} - cache-save-if: ${{ github.ref == 'refs/heads/main' }} + name: fuzz-prebuilt-binaries-${{ github.run_number }} + path: fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release - - name: Install cargo-fuzz - uses: taiki-e/install-action@v2 - with: - tool: cargo-fuzz + - name: Restore executable bit + run: chmod +x "fuzz/prebuilt/${CARGO_BUILD_TARGET}/release/${{ matrix.target }}" - - name: Run nightly fuzz targets - run: ./scripts/fuzz/run_nightly_targets.sh + - name: Run ${{ matrix.target }} + env: + FUZZ_TARGET: ${{ matrix.target }} + MAX_TOTAL_TIME: 300 + SKIP_BUILD: 1 + USE_PREBUILT_BINARY: 1 + PREBUILT_BINARY_DIR: ${{ github.workspace }}/fuzz/prebuilt/${{ env.CARGO_BUILD_TARGET }}/release + run: ./scripts/fuzz/run.sh - name: Upload nightly fuzz artifacts if: always() uses: actions/upload-artifact@v6 with: - name: fuzz-nightly-${{ github.run_number }} + name: fuzz-nightly-${{ matrix.target }}-${{ github.run_number }} path: | fuzz/artifacts/** - fuzz/corpus/** + fuzz/corpus/${{ matrix.target }}/** if-no-files-found: ignore retention-days: 30 diff --git a/Cargo.lock b/Cargo.lock index 5c8c22440..4589e35b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7830,9 +7830,9 @@ dependencies = [ [[package]] name = "primefield" -version = "0.14.0-rc.12" +version = "0.14.0-rc.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8675564771a62f69a0af716b03e89b917b963c7b173b5855575e84fd4f605ca0" +checksum = "2db02b39ea98560a1fec81df6266f3c1ef7fdde06ac5ef17f69aee6101602630" dependencies = [ "crypto-bigint 0.7.5", "crypto-common 0.2.2", @@ -8250,9 +8250,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.9" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8" dependencies = [ "bytes", "cfg_aliases", @@ -8270,9 +8270,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ "aws-lc-rs", "bytes", @@ -8306,9 +8306,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -9347,7 +9347,6 @@ dependencies = [ "rmp-serde", "rustfs-checksums", "rustfs-common", - "rustfs-concurrency", "rustfs-config", "rustfs-credentials", "rustfs-data-usage", @@ -9628,7 +9627,6 @@ dependencies = [ "rustfs-utils", "serde", "serde_json", - "sha2 0.11.0", "temp-env", "tempfile", "thiserror 2.0.18", @@ -9694,14 +9692,12 @@ dependencies = [ "rustfs-ecstore", "rustfs-s3-ops", "rustfs-s3-types", - "rustfs-storage-api", "rustfs-targets", "rustfs-utils", "serde", "serde_json", "starshard", "thiserror 2.0.18", - "time", "tokio", "tracing", "tracing-subscriber", @@ -9966,7 +9962,6 @@ dependencies = [ "futures-core", "http 1.4.2", "metrics", - "object_store", "parking_lot", "pin-project-lite", "rustfs-common", @@ -10282,9 +10277,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", @@ -11454,9 +11449,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.4" +version = "0.39.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a71c821502e2786cc74c965f86561090a2b08fea91507cb599b5da291486a2aa" +checksum = "2c8bd2130a9b60bee2581bf82cfe89ee836424d1f37dcfa4ce21509611684673" dependencies = [ "libc", "memchr", @@ -11666,9 +11661,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.49" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", "js-sys", @@ -11689,9 +11684,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", diff --git a/Cargo.toml b/Cargo.toml index 63527b8d3..075d8c32c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -185,7 +185,7 @@ jsonwebtoken = { version = "10.4.0", features = ["aws_lc_rs"] } openidconnect = { version = "4.0", default-features = false } pbkdf2 = "0.13.0" rsa = { version = "0.10.0-rc.18" } -rustls = { version = "0.23.40", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] } +rustls = { version = "0.23.41", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] } rustls-native-certs = "0.8" rustls-pki-types = "1.14.1" sha1 = "0.11.0" @@ -197,7 +197,7 @@ zeroize = { version = "1.9.0", features = ["derive"] } chrono = { version = "0.4.45", features = ["serde"] } humantime = "2.3.0" jiff = { version = "0.2.29", features = ["serde"] } -time = { version = "0.3.49", features = ["std", "parsing", "formatting", "macros", "serde"] } +time = { version = "0.3.51", features = ["std", "parsing", "formatting", "macros", "serde"] } # Database deadpool-postgres = { version = "0.14", features = ["rt_tokio_1"] } @@ -253,7 +253,6 @@ moka = { version = "0.12.15", features = ["future"] } netif = "0.1.6" num_cpus = { version = "1.17.0" } nvml-wrapper = "0.12.1" -object_store = "0.13.2" parking_lot = "0.12.5" path-absolutize = "3.1.1" path-clean = "1.0.1" @@ -282,7 +281,7 @@ snafu = "0.9.1" snap = "1.1.1" starshard = { version = "2.2.1", features = ["rayon", "async", "serde"] } strum = { version = "0.28.0", features = ["derive"] } -sysinfo = "0.39.4" +sysinfo = "0.39.5" temp-env = "0.3.6" tempfile = "3.27.0" test-case = "3.3.1" diff --git a/crates/ecstore/Cargo.toml b/crates/ecstore/Cargo.toml index 558c831da..5f820a4f8 100644 --- a/crates/ecstore/Cargo.toml +++ b/crates/ecstore/Cargo.toml @@ -110,7 +110,6 @@ memmap2 = { workspace = true } libc.workspace = true rustix = { workspace = true } rustfs-madmin.workspace = true -rustfs-concurrency.workspace = true reqwest = { workspace = true } aes-gcm.workspace = true chacha20poly1305.workspace = true diff --git a/crates/ecstore/src/set_disk.rs b/crates/ecstore/src/set_disk.rs index 172991888..9b4a9c15b 100644 --- a/crates/ecstore/src/set_disk.rs +++ b/crates/ecstore/src/set_disk.rs @@ -148,6 +148,7 @@ const EVENT_SET_DISK_MULTIPART: &str = "set_disk_multipart"; const EVENT_SET_DISK_WRITE: &str = "set_disk_write"; const EVENT_SET_DISK_HEAL: &str = "set_disk_heal"; const EVENT_SET_DISK_COMMIT_TAIL_SLOW: &str = "set_disk_commit_tail_slow"; +const EVENT_SET_DISK_PUT_OBJECT_STAGE_SUMMARY: &str = "set_disk_put_object_stage_summary"; const SET_DISK_COMMIT_TAIL_WARN_THRESHOLD_MS: u128 = 5_000; use crate::rio::{EtagResolvable, HashReader, HashReaderMut, TryGetIndex as _}; @@ -1138,10 +1139,8 @@ impl rustfs_storage_api::ObjectIO for SetDisks { writers.push(w); errors.push(e); } - rustfs_io_metrics::record_put_object_stage_duration( - "set_disk_writer_setup", - writer_setup_stage_start.elapsed().as_secs_f64() * 1000.0, - ); + let writer_setup_ms = writer_setup_stage_start.elapsed().as_millis() as u64; + rustfs_io_metrics::record_put_object_stage_duration("set_disk_writer_setup", writer_setup_ms as f64); let nil_count = errors.iter().filter(|&e| e.is_none()).count(); if nil_count < write_quorum { @@ -1202,10 +1201,8 @@ impl rustfs_storage_api::ObjectIO for SetDisks { } }, }; - rustfs_io_metrics::record_put_object_stage_duration( - "set_disk_encode", - encode_stage_start.elapsed().as_secs_f64() * 1000.0, - ); + let encode_ms = encode_stage_start.elapsed().as_millis() as u64; + rustfs_io_metrics::record_put_object_stage_duration("set_disk_encode", encode_ms as f64); let _ = mem::replace(&mut data.stream, reader); // if let Err(err) = close_bitrot_writers(&mut writers).await { @@ -1314,12 +1311,9 @@ impl rustfs_storage_api::ObjectIO for SetDisks { write_quorum, ) .await?; - rustfs_io_metrics::record_put_object_stage_duration( - "set_disk_rename", - rename_stage_start.elapsed().as_secs_f64() * 1000.0, - ); - let rename_stage_ms = rename_stage_start.elapsed().as_millis(); - if rename_stage_ms >= SET_DISK_COMMIT_TAIL_WARN_THRESHOLD_MS { + let rename_stage_ms = rename_stage_start.elapsed().as_millis() as u64; + rustfs_io_metrics::record_put_object_stage_duration("set_disk_rename", rename_stage_ms as f64); + if (rename_stage_ms as u128) >= SET_DISK_COMMIT_TAIL_WARN_THRESHOLD_MS { warn!( event = EVENT_SET_DISK_COMMIT_TAIL_SLOW, component = LOG_COMPONENT_ECSTORE, @@ -1328,23 +1322,22 @@ impl rustfs_storage_api::ObjectIO for SetDisks { bucket = %bucket, object = %object, tmp_dir = %tmp_dir, - duration_ms = rename_stage_ms as u64, + duration_ms = { rename_stage_ms }, write_quorum, state = "slow", "SetDisk commit tail stage is slow" ); } + let mut cleanup_stage_ms: Option = None; if let Some(old_dir) = op_old_dir { let cleanup_stage_start = Instant::now(); self.commit_rename_data_dir(&cleanup_disks, bucket, object, &old_dir.to_string(), write_quorum) .await?; - rustfs_io_metrics::record_put_object_stage_duration( - "set_disk_old_data_cleanup", - cleanup_stage_start.elapsed().as_secs_f64() * 1000.0, - ); - let cleanup_stage_ms = cleanup_stage_start.elapsed().as_millis(); - if cleanup_stage_ms >= SET_DISK_COMMIT_TAIL_WARN_THRESHOLD_MS { + let cleanup_ms = cleanup_stage_start.elapsed().as_millis() as u64; + cleanup_stage_ms = Some(cleanup_ms); + rustfs_io_metrics::record_put_object_stage_duration("set_disk_old_data_cleanup", cleanup_ms as f64); + if (cleanup_ms as u128) >= SET_DISK_COMMIT_TAIL_WARN_THRESHOLD_MS { warn!( event = EVENT_SET_DISK_COMMIT_TAIL_SLOW, component = LOG_COMPONENT_ECSTORE, @@ -1354,7 +1347,7 @@ impl rustfs_storage_api::ObjectIO for SetDisks { object = %object, tmp_dir = %tmp_dir, old_dir = %old_dir, - duration_ms = cleanup_stage_ms as u64, + duration_ms = cleanup_ms, write_quorum, state = "slow", "SetDisk commit tail stage is slow" @@ -1411,10 +1404,51 @@ impl rustfs_storage_api::ObjectIO for SetDisks { ); } + if issue3031_diag_enabled() { + warn!( + event = EVENT_SET_DISK_PUT_OBJECT_STAGE_SUMMARY, + component = LOG_COMPONENT_ECSTORE, + subsystem = LOG_SUBSYSTEM_SET_DISK, + bucket = %bucket, + object = %object, + write_quorum, + write_path = write_path.metric_label(), + writer_setup_ms, + encode_ms, + rename_ms = rename_stage_ms, + cleanup_ms = cleanup_stage_ms.unwrap_or_default(), + cleanup_present = cleanup_stage_ms.is_some(), + commit_tail_ms = total_commit_tail_ms as u64, + result = "success", + "SetDisk put_object stage summary" + ); + } + Ok(ObjectInfo::from_file_info(&fi, bucket, object, opts.versioned || opts.version_suspended)) } .await; + if issue3031_diag_enabled() + && let Err(err) = &result + { + let stage_hint = if err.to_string().contains("not enough disks to write") { + "writer_setup_or_quorum" + } else { + "unknown" + }; + warn!( + event = EVENT_SET_DISK_PUT_OBJECT_STAGE_SUMMARY, + component = LOG_COMPONENT_ECSTORE, + subsystem = LOG_SUBSYSTEM_SET_DISK, + bucket = %bucket, + object = %object, + result = "error", + stage_hint, + error = %err, + "SetDisk put_object stage summary" + ); + } + if issue3031_diag_enabled() { warn!( target: "rustfs_ecstore::set_disk", diff --git a/crates/io-metrics/src/internode_metrics.rs b/crates/io-metrics/src/internode_metrics.rs index 2482f140b..1593a8c50 100644 --- a/crates/io-metrics/src/internode_metrics.rs +++ b/crates/io-metrics/src/internode_metrics.rs @@ -38,6 +38,7 @@ const INTERNODE_OPERATION_RECV_BYTES_TOTAL: &str = "rustfs_system_network_intern const INTERNODE_OPERATION_REQUESTS_OUTGOING_TOTAL: &str = "rustfs_system_network_internode_operation_requests_outgoing_total"; const INTERNODE_OPERATION_REQUESTS_INCOMING_TOTAL: &str = "rustfs_system_network_internode_operation_requests_incoming_total"; const INTERNODE_OPERATION_ERRORS_TOTAL: &str = "rustfs_system_network_internode_operation_errors_total"; +const INTERNODE_OPERATION_DURATION_MS: &str = "rustfs_system_network_internode_operation_duration_ms"; const INTERNODE_OPERATION_CLASSIFIED_ERRORS_TOTAL: &str = "rustfs_system_network_internode_operation_classified_errors_total"; const INTERNODE_OPERATION_RETRIES_TOTAL: &str = "rustfs_system_network_internode_operation_retries_total"; const INTERNODE_OPERATION_RETRY_SUCCESSES_TOTAL: &str = "rustfs_system_network_internode_operation_retry_successes_total"; @@ -74,6 +75,10 @@ pub const INTERNODE_OPERATION_METRICS: &[InternodeOperationMetricDescriptor] = & name: INTERNODE_OPERATION_ERRORS_TOTAL, labels: OPERATION_BACKEND_LABELS, }, + InternodeOperationMetricDescriptor { + name: INTERNODE_OPERATION_DURATION_MS, + labels: OPERATION_BACKEND_LABELS, + }, InternodeOperationMetricDescriptor { name: INTERNODE_OPERATION_CLASSIFIED_ERRORS_TOTAL, labels: OPERATION_BACKEND_CLASSIFICATION_LABELS, @@ -208,6 +213,12 @@ impl InternodeMetrics { counter!(INTERNODE_OPERATION_ERRORS_TOTAL, OPERATION_LABEL => operation, BACKEND_LABEL => backend).increment(1); } + pub fn record_duration_for_operation_and_backend(&self, operation: &'static str, backend: &'static str, duration: Duration) { + let duration_ms = duration.as_secs_f64() * 1000.0; + metrics::histogram!(INTERNODE_OPERATION_DURATION_MS, OPERATION_LABEL => operation, BACKEND_LABEL => backend) + .record(duration_ms); + } + pub fn record_classified_error_for_operation_and_backend( &self, operation: &'static str, @@ -382,14 +393,14 @@ mod tests { #[test] fn operation_metric_descriptors_include_backend_and_operation_labels() { - assert_eq!(INTERNODE_OPERATION_METRICS.len(), 9); - for metric in &INTERNODE_OPERATION_METRICS[..5] { + assert_eq!(INTERNODE_OPERATION_METRICS.len(), 10); + for metric in &INTERNODE_OPERATION_METRICS[..6] { assert_eq!(metric.labels, &[OPERATION_LABEL, BACKEND_LABEL]); } - for metric in &INTERNODE_OPERATION_METRICS[5..8] { + for metric in &INTERNODE_OPERATION_METRICS[6..9] { assert_eq!(metric.labels, &[OPERATION_LABEL, BACKEND_LABEL, CLASSIFICATION_LABEL]); } - assert_eq!(INTERNODE_OPERATION_METRICS[8].labels, &[STAGE_LABEL, DOMINANT_ERROR_LABEL]); + assert_eq!(INTERNODE_OPERATION_METRICS[9].labels, &[STAGE_LABEL, DOMINANT_ERROR_LABEL]); } #[test] @@ -406,18 +417,22 @@ mod tests { assert_eq!( INTERNODE_OPERATION_METRICS[5].name, - "rustfs_system_network_internode_operation_classified_errors_total" + "rustfs_system_network_internode_operation_duration_ms" ); assert_eq!( INTERNODE_OPERATION_METRICS[6].name, - "rustfs_system_network_internode_operation_retries_total" + "rustfs_system_network_internode_operation_classified_errors_total" ); assert_eq!( INTERNODE_OPERATION_METRICS[7].name, - "rustfs_system_network_internode_operation_retry_successes_total" + "rustfs_system_network_internode_operation_retries_total" ); assert_eq!( INTERNODE_OPERATION_METRICS[8].name, + "rustfs_system_network_internode_operation_retry_successes_total" + ); + assert_eq!( + INTERNODE_OPERATION_METRICS[9].name, "rustfs_system_storage_erasure_write_quorum_failures_total" ); } diff --git a/crates/kms/Cargo.toml b/crates/kms/Cargo.toml index f45a5973d..59810d014 100644 --- a/crates/kms/Cargo.toml +++ b/crates/kms/Cargo.toml @@ -43,7 +43,6 @@ aes-gcm = { workspace = true } argon2 = { workspace = true } chacha20poly1305 = { workspace = true } rand = { workspace = true } -sha2 = { workspace = true } base64 = { workspace = true } zeroize = { workspace = true, features = ["derive"] } diff --git a/crates/notify/Cargo.toml b/crates/notify/Cargo.toml index 19fb5816b..efa9ba475 100644 --- a/crates/notify/Cargo.toml +++ b/crates/notify/Cargo.toml @@ -60,10 +60,8 @@ quick-xml = { workspace = true, features = ["serialize", "serde-types", "encodin tokio = { workspace = true, features = ["test-util"] } tracing-subscriber = { workspace = true, features = ["env-filter"] } axum = { workspace = true } -rustfs-storage-api = { workspace = true } rustfs-utils = { workspace = true, features = ["path"] } serde_json = { workspace = true } -time = { workspace = true } criterion = { workspace = true } [lints] diff --git a/crates/s3select-api/Cargo.toml b/crates/s3select-api/Cargo.toml index 13420b7e0..c0f15cc81 100644 --- a/crates/s3select-api/Cargo.toml +++ b/crates/s3select-api/Cargo.toml @@ -37,7 +37,6 @@ rustfs-storage-api.workspace = true futures = { workspace = true } futures-core = { workspace = true } http.workspace = true -object_store = { workspace = true } pin-project-lite.workspace = true s3s.workspace = true serde_json = { workspace = true } diff --git a/crates/s3select-api/src/object_store.rs b/crates/s3select-api/src/object_store.rs index 0057b03a2..bcbdfb7ad 100644 --- a/crates/s3select-api/src/object_store.rs +++ b/crates/s3select-api/src/object_store.rs @@ -20,14 +20,14 @@ use crate::{ use async_trait::async_trait; use bytes::Bytes; use chrono::Utc; +use datafusion::object_store::{ + Attributes, CopyOptions, Error as o_Error, GetOptions, GetRange, GetResult, GetResultPayload, ListResult, MultipartUpload, + ObjectMeta, ObjectStore, PutMultipartOptions, PutOptions, PutPayload, PutResult, Result, path::Path, +}; use futures::pin_mut; use futures::{Stream, StreamExt, future::ready, stream}; use futures_core::stream::BoxStream; use http::{HeaderMap, HeaderValue, header::HeaderName}; -use object_store::{ - Attributes, CopyOptions, Error as o_Error, GetOptions, GetRange, GetResult, GetResultPayload, ListResult, MultipartUpload, - ObjectMeta, ObjectStore, PutMultipartOptions, PutOptions, PutPayload, PutResult, Result, path::Path, -}; use pin_project_lite::pin_project; use rustfs_common::DEFAULT_DELIMITER; use rustfs_storage_api::{HTTPRangeSpec, ObjectIO as _, ObjectOperations as _}; @@ -1080,8 +1080,8 @@ mod test { scan_range_read_start, scan_range_stream, select_read_headers, }; use bytes::Bytes; + use datafusion::object_store::{self, GetRange}; use futures::{StreamExt, TryStreamExt, stream}; - use object_store::GetRange; use s3s::dto::{ CSVInput, CSVOutput, ExpressionType, InputSerialization, OutputSerialization, SelectObjectContentInput, SelectObjectContentRequest, diff --git a/crates/s3select-api/src/query/session.rs b/crates/s3select-api/src/query/session.rs index 7410bacd1..1a354d9f5 100644 --- a/crates/s3select-api/src/query/session.rs +++ b/crates/s3select-api/src/query/session.rs @@ -21,10 +21,10 @@ use datafusion::{ record_batch::RecordBatch, }, execution::{SessionStateBuilder, context::SessionState, runtime_env::RuntimeEnvBuilder}, + object_store::{ObjectStore, ObjectStoreExt, memory::InMemory, path::Path}, parquet::arrow::ArrowWriter, prelude::SessionContext, }; -use object_store::{ObjectStore, ObjectStoreExt, memory::InMemory, path::Path}; use std::sync::Arc; use tracing::error; @@ -110,7 +110,7 @@ impl SessionCtxFactory { QueryError::StoreError { e: e.to_string() } })?; - df_session_state.with_object_store(&store_url, Arc::new(store)).build() + df_session_state.with_object_store(&store_url, store).build() } else { let store: EcObjectStore = EcObjectStore::new(context.input.clone()).map_err(|_| QueryError::NotImplemented { err: String::new() })?; diff --git a/crates/utils/src/path.rs b/crates/utils/src/path.rs index bd6df8530..138ed4ecd 100644 --- a/crates/utils/src/path.rs +++ b/crates/utils/src/path.rs @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +use std::path::Component; use std::path::Path; use std::path::PathBuf; @@ -550,6 +551,52 @@ pub fn trim_etag(etag: &str) -> String { etag.trim_matches('"').to_string() } +/// Returns `true` if `path` contains a `..` component (parent directory traversal). +fn contains_parent_dir_component(path: &str) -> bool { + path.split(['/', '\\']).any(|component| component == "..") +} + +/// Validates that an archive entry path does not escape the target bucket. +/// +/// Rejects paths containing `..` components, root prefixes, or device/prefix +/// components that would allow path traversal outside the extraction root. +/// +/// Returns `Ok(())` if the path is safe, or `Err(message)` describing the violation. +pub fn validate_extract_relative_path(path: &str) -> Result<(), String> { + let p = Path::new(path); + if p.components() + .any(|c| matches!(c, Component::Prefix(_) | Component::RootDir | Component::ParentDir)) + || contains_parent_dir_component(p.to_string_lossy().as_ref()) + { + return Err("archive entry path must stay within the target bucket".to_string()); + } + Ok(()) +} + +/// Normalizes an archive entry key by applying a prefix, trimming slashes, +/// and ensuring directory entries end with `/`. +/// +/// Validates both the raw path and the final key against path traversal. +/// +/// Returns `Ok(normalized_key)` or `Err(message)` if the path is unsafe. +pub fn normalize_extract_entry_key(path: &str, prefix: Option<&str>, is_dir: bool) -> Result { + validate_extract_relative_path(path)?; + let path = path.trim_matches('/'); + let mut key = match prefix { + Some(prefix) if !path.is_empty() => format!("{prefix}/{path}"), + Some(prefix) => prefix.to_string(), + None => path.to_string(), + }; + + if is_dir && !key.ends_with('/') { + key.push('/'); + } + + validate_extract_relative_path(&key)?; + + Ok(key) +} + #[cfg(test)] mod tests { use super::*; @@ -918,4 +965,36 @@ mod tests { } } } + + #[test] + fn test_validate_extract_relative_path_accepts_safe_paths() { + assert!(validate_extract_relative_path("file.txt").is_ok()); + assert!(validate_extract_relative_path("dir/file.txt").is_ok()); + assert!(validate_extract_relative_path("a/b/c").is_ok()); + assert!(validate_extract_relative_path("").is_ok()); + } + + #[test] + fn test_validate_extract_relative_path_rejects_traversal() { + assert!(validate_extract_relative_path("../escape.txt").is_err()); + assert!(validate_extract_relative_path("dir/../../../escape.txt").is_err()); + assert!(validate_extract_relative_path("/absolute/path").is_err()); + assert!(validate_extract_relative_path("dir/..").is_err()); + assert!(validate_extract_relative_path("..").is_err()); + } + + #[test] + fn test_normalize_extract_entry_key_basic() { + assert_eq!(normalize_extract_entry_key("file.txt", None, false).unwrap(), "file.txt"); + assert_eq!(normalize_extract_entry_key("file.txt", Some("prefix"), false).unwrap(), "prefix/file.txt"); + assert_eq!(normalize_extract_entry_key("dir", None, true).unwrap(), "dir/"); + assert_eq!(normalize_extract_entry_key("", Some("prefix"), false).unwrap(), "prefix"); + } + + #[test] + fn test_normalize_extract_entry_key_rejects_traversal() { + assert!(normalize_extract_entry_key("../escape.txt", None, false).is_err()); + assert!(normalize_extract_entry_key("file.txt", Some("../bad"), false).is_err()); + assert!(normalize_extract_entry_key("/absolute", None, false).is_err()); + } } diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 115d90f30..806c9ded9 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -2,25 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -34,18 +15,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef60ac202874e574ce7a7158cc8bca7313dd344322482e4fadee288bf4a306b8" dependencies = [ "crypto-common 0.2.2", - "inout 0.2.2", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures 0.2.17", + "inout", ] [[package]] @@ -54,7 +24,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" dependencies = [ - "cipher 0.5.2", + "cipher", "cpubits", "cpufeatures 0.3.0", ] @@ -66,38 +36,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da8c919c118108f144adecad74b425b804ad075580d605d9b33c2d6d1c62a2f8" dependencies = [ "aead", - "aes 0.9.1", - "cipher 0.5.2", + "aes", + "cipher", "ctr", "ghash", "subtle", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "const-random", - "getrandom 0.3.4", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -107,15 +52,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aligned-vec" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" -dependencies = [ - "equator", -] - [[package]] name = "alloc-no-stdlib" version = "2.0.4" @@ -137,56 +73,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "amq-protocol" -version = "10.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eab68e8836c5812a01b34c5364d28db50bf686b442e902d9d93e4472318d86e" -dependencies = [ - "amq-protocol-tcp", - "amq-protocol-types", - "amq-protocol-uri", - "cookie-factory", - "nom 8.0.0", - "serde", -] - -[[package]] -name = "amq-protocol-tcp" -version = "10.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8689f976dbd9864922f4f53e01ad2b43700ed3eb1bb5667b260522f291434dae" -dependencies = [ - "amq-protocol-uri", - "async-rs", - "cfg-if", - "tcp-stream", - "tracing", -] - -[[package]] -name = "amq-protocol-types" -version = "10.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27894e9e57d07f701251aeee3d2ab3d7d114bc830bf722d6626027eb55f3b222" -dependencies = [ - "cookie-factory", - "nom 8.0.0", - "serde", - "serde_json", -] - -[[package]] -name = "amq-protocol-uri" -version = "10.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64fd5ca63f1b8cba2309aaec8595483c36f3a671225d5ab9fe8265adb9213514" -dependencies = [ - "amq-protocol-types", - "percent-encoding", - "url", -] - [[package]] name = "android_system_properties" version = "0.1.5" @@ -196,95 +82,12 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - [[package]] name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" -[[package]] -name = "apache-avro" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36fa98bc79671c7981272d91a8753a928ff6a1cd8e4f20a44c45bd5d313840bf" -dependencies = [ - "bigdecimal", - "bon", - "digest 0.10.7", - "log", - "miniz_oxide", - "num-bigint", - "quad-rand", - "rand 0.9.4", - "regex-lite", - "serde", - "serde_bytes", - "serde_json", - "strum 0.27.2", - "strum_macros 0.27.2", - "thiserror 2.0.18", - "uuid", -] - -[[package]] -name = "ar_archive_writer" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4087686b4b0a3427190bae57a1d9a478dbb2d40c5dc1bd6e2b6d797913bdd348" -dependencies = [ - "object", -] - [[package]] name = "arbitrary" version = "1.4.2" @@ -300,12 +103,6 @@ dependencies = [ "rustversion", ] -[[package]] -name = "arcstr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03918c3dbd7701a85c6b9887732e2921175f26c350b4563841d0958c21d57e6d" - [[package]] name = "argon2" version = "0.6.0-rc.8" @@ -313,302 +110,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7af50940b73bf4e16c15c448a2b121c63f2d68e3e54b6a8731673cb4aa0cdff5" dependencies = [ "base64ct", - "blake2 0.11.0-rc.6", + "blake2", "cpufeatures 0.3.0", "password-hash", ] -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "arrow" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "378530e55cd479eda3c14eb345310799717e6f76d0c332041e8487022166b471" -dependencies = [ - "arrow-arith", - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-csv", - "arrow-data", - "arrow-ipc", - "arrow-json", - "arrow-ord", - "arrow-row", - "arrow-schema", - "arrow-select", - "arrow-string", -] - -[[package]] -name = "arrow-arith" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ab212d2c1886e802f51c5212d78ebbcbb0bec980fff9dadc1eb8d45cd0b738" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "num-traits", -] - -[[package]] -name = "arrow-array" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd33d3e92f207444098c75b42de99d329562be0cf686b307b097cc52b4e999e" -dependencies = [ - "ahash 0.8.12", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "chrono", - "chrono-tz", - "half", - "hashbrown 0.17.1", - "num-complex", - "num-integer", - "num-traits", -] - -[[package]] -name = "arrow-buffer" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6cd424c2693bcdbc150d843dc9d4d137dd2de4782ce6df491ad11a3a0416c0" -dependencies = [ - "bytes", - "half", - "num-bigint", - "num-traits", -] - -[[package]] -name = "arrow-cast" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c5aefb56a2c02e9e2b30746241058b85f8983f0fcff2ba0c6d09006e1cded7f" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-ord", - "arrow-schema", - "arrow-select", - "atoi 2.0.0", - "base64 0.22.1", - "chrono", - "comfy-table", - "half", - "lexical-core", - "num-traits", - "ryu", -] - -[[package]] -name = "arrow-csv" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94e8cf7e517657a52b91ea1263acf38c4ca62a84655d72458a3359b12ab97de" -dependencies = [ - "arrow-array", - "arrow-cast", - "arrow-schema", - "chrono", - "csv", - "csv-core", - "regex", -] - -[[package]] -name = "arrow-data" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c88210023a2bfee1896af366309a3028fc3bcbd6515fa29a7990ee1baa08ee0" -dependencies = [ - "arrow-buffer", - "arrow-schema", - "half", - "num-integer", - "num-traits", -] - -[[package]] -name = "arrow-ipc" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238438f0834483703d88896db6fe5a7138b2230debc31b34c0336c2996e3c64f" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "flatbuffers", - "lz4_flex", - "zstd", -] - -[[package]] -name = "arrow-json" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "205ca2119e6d679d5c133c6f30e68f027738d95ed948cf77677ea69c7800036b" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-cast", - "arrow-ord", - "arrow-schema", - "arrow-select", - "chrono", - "half", - "indexmap 2.14.0", - "itoa", - "lexical-core", - "memchr", - "num-traits", - "ryu", - "serde_core", - "serde_json", - "simdutf8", -] - -[[package]] -name = "arrow-ord" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bffd8fd2579286a5d63bac898159873e5094a79009940bcb42bbfce4f19f1d0" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", -] - -[[package]] -name = "arrow-row" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab5994731204603c73ba69267616c50f80780774c6bb0476f1f830625115e0c" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "half", -] - -[[package]] -name = "arrow-schema" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f633dbfdf39c039ada1bf9e34c694816eb71fbb7dc78f613993b7245e078a1ed" -dependencies = [ - "serde_core", - "serde_json", -] - -[[package]] -name = "arrow-select" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd065c54172ac787cf3f2f8d4107e0d3fdc26edba76fdf4f4cc170258942222" -dependencies = [ - "ahash 0.8.12", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "num-traits", -] - -[[package]] -name = "arrow-string" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29dd7cda3ab9692f43a2e4acc444d760cc17b12bb6d8232ddf64e9bab7c06b42" -dependencies = [ - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-schema", - "arrow-select", - "memchr", - "num-traits", - "regex", - "regex-syntax", -] - -[[package]] -name = "asn1-rs" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom 7.1.3", - "num-traits", - "rusticata-macros", - "thiserror 2.0.18", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", - "synstructure 0.13.2", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "astral-tokio-tar" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb50a7aae84a03bf55b067832bc376f4961b790c97e64d3eacee97d389b90277" -dependencies = [ - "filetime", - "futures-core", - "libc", - "portable-atomic", - "rustc-hash", - "tokio", - "tokio-stream", - "xattr", -] - [[package]] name = "async-channel" version = "2.5.0" @@ -621,60 +133,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compat" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ba85bc55464dcbf728b56d97e119d673f4cf9062be330a9a26f3acf504a590" -dependencies = [ - "futures-core", - "futures-io", - "once_cell", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-compression" -version = "0.4.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" -dependencies = [ - "compression-codecs", - "compression-core", - "futures-io", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "async-executor" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "pin-project-lite", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f937e26114b93193065fd44f507aa2e9169ad0cdabbb996920b1fe1ddea7ba" -dependencies = [ - "async-channel", - "async-executor", - "async-lock", - "blocking", - "futures-lite", - "tokio", -] - [[package]] name = "async-lock" version = "3.4.2" @@ -686,42 +144,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-nats" -version = "0.49.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad3cd6df81292728e2a8cb1f1dcb4d7e7a1ab59b80c14fbbcba2baf9d5cf86a" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-util", - "memchr", - "nkeys", - "nuid", - "pin-project", - "portable-atomic", - "rand 0.10.1", - "regex", - "ring", - "rustls-native-certs", - "rustls-pki-types", - "rustls-webpki", - "serde", - "serde_json", - "serde_nanos", - "serde_repr", - "thiserror 2.0.18", - "time", - "tokio", - "tokio-rustls", - "tokio-stream", - "tokio-util", - "tokio-websockets", - "tracing", - "tryhard", - "url", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -733,28 +155,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "async-rs" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cd5147201b63ba6883ffabca3a153822f71541748d7108e3e799beaeb283131" -dependencies = [ - "async-compat", - "async-global-executor", - "async-trait", - "futures-core", - "futures-io", - "hickory-resolver", - "tokio", - "tokio-stream", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.89" @@ -766,50 +166,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "async-tungstenite" -version = "0.34.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8447f02eaa65412035e2d3eeaa3fc82bbb8d7137c84c5976b4af685136012ee9" -dependencies = [ - "atomic-waker", - "futures-core", - "futures-io", - "futures-task", - "futures-util", - "log", - "pin-project-lite", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite", -] - -[[package]] -name = "async_zip" -version = "0.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c50d65ce1b0e0cb65a785ff615f78860d7754290647d3b983208daa4f85e6" -dependencies = [ - "async-compression", - "crc32fast", - "futures-lite", - "pin-project", - "thiserror 2.0.18", - "tokio", - "tokio-util", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - [[package]] name = "atoi" version = "3.0.0" @@ -825,17 +181,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "atomic_enum" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "autocfg" version = "1.5.1" @@ -938,9 +283,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.136.0" +version = "1.137.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd03e531a7d981fba45114c5813a7565dd470a1bd3ef1188ca98c98ebdfc668" +checksum = "c2dd7213994e2ff9382ff100403b78c30d1b74cdfcd8fa9d0d1dc3a94a5c4874" dependencies = [ "arc-swap", "aws-credential-types", @@ -964,7 +309,7 @@ dependencies = [ "http 0.2.12", "http 1.4.2", "http-body 1.0.1", - "lru 0.16.4", + "lru", "percent-encoding", "regex-lite", "sha2 0.11.0", @@ -1318,29 +663,21 @@ checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", - "form_urlencoded", "futures-util", "http 1.4.2", "http-body 1.0.1", "http-body-util", - "hyper", - "hyper-util", "itoa", - "matchit 0.8.4", + "matchit", "memchr", "mime", "percent-encoding", "pin-project-lite", "serde_core", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", "sync_wrapper", - "tokio", "tower", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -1359,31 +696,6 @@ dependencies = [ "sync_wrapper", "tower-layer", "tower-service", - "tracing", -] - -[[package]] -name = "backon" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" -dependencies = [ - "fastrand", -] - -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", ] [[package]] @@ -1398,12 +710,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -1426,20 +732,6 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" -[[package]] -name = "bigdecimal" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" -dependencies = [ - "autocfg", - "libm", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -1452,15 +744,6 @@ version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "blake2" version = "0.11.0-rc.6" @@ -1470,20 +753,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "blake3" -version = "1.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa83c34e62843d924f905e0f5c866eb1dd6545fc4d719e803d9ba6030371fce" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", - "cpufeatures 0.3.0", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -1500,54 +769,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", - "zeroize", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blocking" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - -[[package]] -name = "bon" -version = "3.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a602c73c7b0148ec6d12af6fd5cc7a46e2eacc8878271a999abac56eed12f561" -dependencies = [ - "bon-macros", - "rustversion", -] - -[[package]] -name = "bon-macros" -version = "3.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dee98b0db6a962de883bf5d20362dee4d7ca0d12fe39a7c6c73c844e1cd7c1f" -dependencies = [ - "darling 0.23.0", - "ident_case", - "prettyplease", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.118", ] [[package]] @@ -1580,27 +801,12 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "btoi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976" -dependencies = [ - "num-traits", -] - [[package]] name = "bumpalo" version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" -[[package]] -name = "bytemuck" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" - [[package]] name = "byteorder" version = "1.5.0" @@ -1609,9 +815,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" dependencies = [ "serde", ] @@ -1641,15 +847,6 @@ dependencies = [ "bytes", ] -[[package]] -name = "bzip2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" -dependencies = [ - "libbz2-rs-sys", -] - [[package]] name = "camino" version = "1.2.2" @@ -1683,15 +880,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher 0.4.4", -] - [[package]] name = "cc" version = "1.2.64" @@ -1723,7 +911,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", - "cipher 0.5.2", + "cipher", "cpufeatures 0.3.0", "rand_core 0.10.1", ] @@ -1736,7 +924,7 @@ checksum = "1c9ed179664f12fd6f155f6dd632edf5f3806d48c228c67ff78366f2a0eb6b5e" dependencies = [ "aead", "chacha20", - "cipher 0.5.2", + "cipher", "poly1305", ] @@ -1754,26 +942,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "chrono-tz" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" -dependencies = [ - "chrono", - "phf 0.12.1", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common 0.1.7", - "inout 0.1.4", -] - [[package]] name = "cipher" version = "0.5.2" @@ -1782,49 +950,9 @@ checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ "block-buffer 0.12.1", "crypto-common 0.2.2", - "inout 0.2.2", + "inout", ] -[[package]] -name = "clap" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - [[package]] name = "clocksource" version = "0.8.3" @@ -1851,24 +979,6 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" -[[package]] -name = "cms" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" -dependencies = [ - "const-oid 0.9.6", - "der 0.7.10", - "spki 0.7.3", - "x509-cert", -] - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - [[package]] name = "combine" version = "4.6.7" @@ -1876,45 +986,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", - "futures-core", "memchr", - "pin-project-lite", - "tokio", - "tokio-util", ] -[[package]] -name = "comfy-table" -version = "7.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47" -dependencies = [ - "unicode-segmentation", - "unicode-width", -] - -[[package]] -name = "compression-codecs" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" -dependencies = [ - "brotli", - "bzip2", - "compression-core", - "flate2", - "liblzma", - "memchr", - "zstd", - "zstd-safe", -] - -[[package]] -name = "compression-core" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1936,26 +1010,6 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" -[[package]] -name = "const-random" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom 0.2.17", - "once_cell", - "tiny-keccak", -] - [[package]] name = "const-str" version = "1.1.0" @@ -1997,12 +1051,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "constant_time_eq" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" - [[package]] name = "convert_case" version = "0.11.0" @@ -2012,12 +1060,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "cookie-factory" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" - [[package]] name = "core-foundation" version = "0.9.4" @@ -2044,15 +1086,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "cpp_demangle" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2bb79cb74d735044c972aae58ed0aaa9a837e85b01106a54c39e42e97f62253" -dependencies = [ - "cfg-if", -] - [[package]] name = "cpubits" version = "0.1.1" @@ -2077,21 +1110,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" - [[package]] name = "crc-fast" version = "1.10.0" @@ -2120,12 +1138,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -2169,12 +1181,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - [[package]] name = "crypto-bigint" version = "0.5.5" @@ -2232,34 +1238,13 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "csv" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" -dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde_core", -] - -[[package]] -name = "csv-core" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" -dependencies = [ - "memchr", -] - [[package]] name = "ctr" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" dependencies = [ - "cipher 0.5.2", + "cipher", ] [[package]] @@ -2271,39 +1256,6 @@ dependencies = [ "cmov", ] -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "curve25519-dalek" -version = "4.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "rustc_version", - "subtle", - "zeroize", -] - -[[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "darling" version = "0.20.11" @@ -2408,732 +1360,37 @@ dependencies = [ ] [[package]] -name = "dashmap" -version = "6.2.1" +name = "defmt" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" +checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.12", + "bitflags 1.3.2", + "defmt-macros", ] [[package]] -name = "data-encoding" -version = "2.11.0" +name = "defmt-macros" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" - -[[package]] -name = "datafusion" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "997a31e15872606a49478e670c58302094c97cb96abb0a7d60720f8e92170040" +checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" dependencies = [ - "arrow", - "arrow-schema", - "async-trait", - "bzip2", - "chrono", - "datafusion-catalog", - "datafusion-catalog-listing", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-datasource-arrow", - "datafusion-datasource-csv", - "datafusion-datasource-json", - "datafusion-datasource-parquet", - "datafusion-execution", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-functions", - "datafusion-functions-aggregate", - "datafusion-functions-nested", - "datafusion-functions-table", - "datafusion-functions-window", - "datafusion-optimizer", - "datafusion-physical-expr", - "datafusion-physical-expr-adapter", - "datafusion-physical-expr-common", - "datafusion-physical-optimizer", - "datafusion-physical-plan", - "datafusion-session", - "datafusion-sql", - "flate2", - "futures", - "indexmap 2.14.0", - "itertools 0.14.0", - "liblzma", - "log", - "object_store", - "parking_lot 0.12.5", - "parquet", - "sqlparser", - "tempfile", - "tokio", - "url", - "uuid", - "zstd", -] - -[[package]] -name = "datafusion-catalog" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7dd61161508f8f5fa1107774ea687bd753c22d83a32eebf963549f89de14139" -dependencies = [ - "arrow", - "async-trait", - "dashmap", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-plan", - "datafusion-session", - "futures", - "itertools 0.14.0", - "log", - "object_store", - "parking_lot 0.12.5", - "tokio", -] - -[[package]] -name = "datafusion-catalog-listing" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897c70f871277f9ce99aa38347be0d679bbe3e617156c4d2a8378cec8a2a0891" -dependencies = [ - "arrow", - "async-trait", - "datafusion-catalog", - "datafusion-common", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-expr-adapter", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "futures", - "itertools 0.14.0", - "log", - "object_store", -] - -[[package]] -name = "datafusion-common" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c9ded5d87d9172319e006f2afdb9928d72dbacd6a90a458d8acb1e3b43a65" -dependencies = [ - "arrow", - "arrow-ipc", - "arrow-schema", - "chrono", - "foldhash 0.2.0", - "half", - "hashbrown 0.17.1", - "indexmap 2.14.0", - "itertools 0.14.0", - "libc", - "log", - "object_store", - "parquet", - "recursive", - "sqlparser", - "tokio", - "uuid", - "web-time", -] - -[[package]] -name = "datafusion-common-runtime" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "981b9dae74f78ee3d9f714fb49b01919eab975461b56149510c3ba9ea11287d1" -dependencies = [ - "futures", - "log", - "tokio", -] - -[[package]] -name = "datafusion-datasource" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd7d295b2ec7c00d8a56562f41ed41062cf0af75549ed891c12a0a09eddfefe" -dependencies = [ - "arrow", - "async-compression", - "async-trait", - "bytes", - "bzip2", - "chrono", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-expr-adapter", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-session", - "flate2", - "futures", - "glob", - "itertools 0.14.0", - "liblzma", - "log", - "object_store", - "parking_lot 0.12.5", - "rand 0.9.4", - "tokio", - "tokio-util", - "url", - "zstd", -] - -[[package]] -name = "datafusion-datasource-arrow" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552b0b3f342f7ec41b3fbd70f6339dc82a30cfd0349e7f280e7852528085349f" -dependencies = [ - "arrow", - "arrow-ipc", - "async-trait", - "bytes", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-session", - "futures", - "itertools 0.14.0", - "object_store", - "tokio", -] - -[[package]] -name = "datafusion-datasource-csv" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68850aa426b897e879c8b87e512ea8124f1d0a2869a4e51808ddaaddf1bc0ada" -dependencies = [ - "arrow", - "async-trait", - "bytes", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-session", - "futures", - "object_store", - "regex", - "tokio", -] - -[[package]] -name = "datafusion-datasource-json" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402f93242ae08ef99139ee2c528a49d087efe88d5c7b2c3ff5480855a40ce54f" -dependencies = [ - "arrow", - "async-trait", - "bytes", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-session", - "futures", - "object_store", - "tokio", - "tokio-stream", -] - -[[package]] -name = "datafusion-datasource-parquet" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd2499c1bee0eeccf6a57156105700eeeb17bc701899ac719183c4e74231450" -dependencies = [ - "arrow", - "async-trait", - "bytes", - "datafusion-common", - "datafusion-common-runtime", - "datafusion-datasource", - "datafusion-execution", - "datafusion-expr", - "datafusion-functions", - "datafusion-functions-aggregate-common", - "datafusion-physical-expr", - "datafusion-physical-expr-adapter", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-pruning", - "datafusion-session", - "futures", - "itertools 0.14.0", - "log", - "object_store", - "parking_lot 0.12.5", - "parquet", - "tokio", -] - -[[package]] -name = "datafusion-doc" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9e7e5d11130c48c8bd4e80c79a9772dd28ce6dc330baca9246205d245b9e2e" - -[[package]] -name = "datafusion-execution" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a8643ab852eb68864e1b72ae789e8066282dce48eea6347ffb0aee33d1ccc0" -dependencies = [ - "arrow", - "arrow-buffer", - "async-trait", - "dashmap", - "datafusion-common", - "datafusion-expr", - "datafusion-physical-expr-common", - "futures", - "log", - "object_store", - "parking_lot 0.12.5", - "rand 0.9.4", - "tempfile", - "url", -] - -[[package]] -name = "datafusion-expr" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6932f4d71eed9c8d9341476a2b845aadfabde5495d08dbcd8fc23881f49fa7a0" -dependencies = [ - "arrow", - "arrow-schema", - "async-trait", - "chrono", - "datafusion-common", - "datafusion-doc", - "datafusion-expr-common", - "datafusion-functions-aggregate-common", - "datafusion-functions-window-common", - "datafusion-physical-expr-common", - "indexmap 2.14.0", - "itertools 0.14.0", - "recursive", - "serde_json", - "sqlparser", -] - -[[package]] -name = "datafusion-expr-common" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0225491839a31b1f7d2cb8092c2d50792e2fe1c1724e4e6d08e011f5feaf4ed2" -dependencies = [ - "arrow", - "datafusion-common", - "indexmap 2.14.0", - "itertools 0.14.0", -] - -[[package]] -name = "datafusion-functions" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14872c47bfc3d21e53ec82f57074e6987a15941c1e2f43cde4ac6ae2746634e3" -dependencies = [ - "arrow", - "arrow-buffer", - "base64 0.22.1", - "blake2 0.10.6", - "blake3", - "chrono", - "chrono-tz", - "datafusion-common", - "datafusion-doc", - "datafusion-execution", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-macros", - "datafusion-physical-expr-common", - "hex", - "itertools 0.14.0", - "log", - "md-5", - "memchr", - "num-traits", - "rand 0.9.4", - "regex", - "sha2 0.11.0", - "uuid", -] - -[[package]] -name = "datafusion-functions-aggregate" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a2ca14e1b609be21e657e2d3130b2f446456b08393b377bb721a33952d2e09" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-doc", - "datafusion-execution", - "datafusion-expr", - "datafusion-functions-aggregate-common", - "datafusion-macros", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "foldhash 0.2.0", - "half", - "log", - "num-traits", -] - -[[package]] -name = "datafusion-functions-aggregate-common" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ece74ba09092d2ef9c9b54a38445450aea292a1f8b04faf531936b723a24b3c" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-expr-common", - "datafusion-physical-expr-common", -] - -[[package]] -name = "datafusion-functions-nested" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3e3f9ee8ca59bf70518802107de6f1b88a9509efdc629fadc5de9d6b2d5ef5" -dependencies = [ - "arrow", - "arrow-ord", - "datafusion-common", - "datafusion-doc", - "datafusion-execution", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-functions", - "datafusion-functions-aggregate", - "datafusion-functions-aggregate-common", - "datafusion-macros", - "datafusion-physical-expr-common", - "hashbrown 0.17.1", - "itertools 0.14.0", - "itoa", - "log", - "memchr", -] - -[[package]] -name = "datafusion-functions-table" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89161dffc22cf2b50f9f4b1bee83b5221d3b4ed7c2e37fd7aa2b22a5297b3a26" -dependencies = [ - "arrow", - "async-trait", - "datafusion-catalog", - "datafusion-common", - "datafusion-expr", - "datafusion-physical-expr", - "datafusion-physical-plan", - "parking_lot 0.12.5", -] - -[[package]] -name = "datafusion-functions-window" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7339345b226b3874037708bf5023ba1c2de705128f8457a095aae5ae9cb9c78" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-doc", - "datafusion-expr", - "datafusion-functions-window-common", - "datafusion-macros", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "log", -] - -[[package]] -name = "datafusion-functions-window-common" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa84836dc2392df6f43d6a29d37fb56a8ebdc8b3f4e10ae8dc15861fd20278fb" -dependencies = [ - "datafusion-common", - "datafusion-physical-expr-common", -] - -[[package]] -name = "datafusion-macros" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "587164e03ad68732aa9e7bfe5686e3f25970d4c64fd4bd80790749840892dae5" -dependencies = [ - "datafusion-doc", + "defmt-parser", + "proc-macro-error2", + "proc-macro2", "quote", "syn 2.0.118", ] [[package]] -name = "datafusion-optimizer" -version = "54.0.0" +name = "defmt-parser" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f20e8cf9e8654d92f4c16b24c487353ee5bf153ffc12d5772cd399ab8cd281" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "arrow", - "chrono", - "datafusion-common", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-physical-expr", - "indexmap 2.14.0", - "itertools 0.14.0", - "log", - "recursive", - "regex", - "regex-syntax", + "thiserror 2.0.18", ] -[[package]] -name = "datafusion-physical-expr" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f015a4a82f6f7ff7e1d8d4bf3870a936752fa38b17705dfcc14adef95aa8922c" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-functions-aggregate-common", - "datafusion-physical-expr-common", - "half", - "hashbrown 0.17.1", - "indexmap 2.14.0", - "itertools 0.14.0", - "parking_lot 0.12.5", - "petgraph 0.8.3", - "recursive", - "tokio", -] - -[[package]] -name = "datafusion-physical-expr-adapter" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e6ffff8acdfe54e0ea15ccf38115c4a9184433b0439f42907637928d00a235" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-expr", - "datafusion-functions", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "itertools 0.14.0", -] - -[[package]] -name = "datafusion-physical-expr-common" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7967a3e171c6a4bf09474b3f7a14f1a3db13ed1714ba12156f33fcce2bba54e8" -dependencies = [ - "arrow", - "chrono", - "datafusion-common", - "datafusion-expr-common", - "hashbrown 0.17.1", - "indexmap 2.14.0", - "itertools 0.14.0", - "parking_lot 0.12.5", - "pin-project", -] - -[[package]] -name = "datafusion-physical-optimizer" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ff803e2a96054cb6d83f35f9e60fd4f42eac515e1932bd1b2dbc91d5fcbf36" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-expr-common", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "datafusion-pruning", - "itertools 0.14.0", - "recursive", -] - -[[package]] -name = "datafusion-physical-plan" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "776ee54d47d15bdb126452f9ca17b03761e3b004682914beaedd3f86eb507fbc" -dependencies = [ - "arrow", - "arrow-data", - "arrow-ipc", - "arrow-ord", - "arrow-schema", - "async-trait", - "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.17.1", - "indexmap 2.14.0", - "itertools 0.14.0", - "log", - "num-traits", - "parking_lot 0.12.5", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "datafusion-pruning" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fb9e5774660aa69c3ba93c610f175f75b65cb8c3776edb3626de8f3a4f4ee3" -dependencies = [ - "arrow", - "datafusion-common", - "datafusion-datasource", - "datafusion-expr-common", - "datafusion-physical-expr", - "datafusion-physical-expr-common", - "datafusion-physical-plan", - "log", -] - -[[package]] -name = "datafusion-session" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15ce715fa2a61f4623cc234bcc14a3ef6a91f189128d5b14b468a6a17cdfc417" -dependencies = [ - "async-trait", - "datafusion-common", - "datafusion-execution", - "datafusion-expr", - "datafusion-physical-plan", - "parking_lot 0.12.5", -] - -[[package]] -name = "datafusion-sql" -version = "54.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6094ad36a3ed6d7ac87b20b479b2d0b118250f66cf997603829fdc65b44a7099" -dependencies = [ - "arrow", - "bigdecimal", - "chrono", - "datafusion-common", - "datafusion-expr", - "datafusion-functions-nested", - "indexmap 2.14.0", - "log", - "recursive", - "regex", - "sqlparser", -] - -[[package]] -name = "deadpool" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" -dependencies = [ - "deadpool-runtime", - "lazy_static", - "num_cpus", - "tokio", -] - -[[package]] -name = "deadpool-postgres" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" -dependencies = [ - "async-trait", - "deadpool", - "getrandom 0.2.17", - "tokio", - "tokio-postgres", - "tracing", -] - -[[package]] -name = "deadpool-runtime" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" -dependencies = [ - "tokio", -] - -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "uuid", -] - -[[package]] -name = "deflate64" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" - [[package]] name = "der" version = "0.7.10" @@ -3141,8 +1398,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid 0.9.6", - "der_derive", - "flagset", "pem-rfc7468 0.7.0", "zeroize", ] @@ -3158,31 +1413,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "der-parser" -version = "10.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom 7.1.3", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "deranged" version = "0.5.8" @@ -3192,17 +1422,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "derive-where" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -3234,75 +1453,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "des" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" -dependencies = [ - "cipher 0.4.4", -] - -[[package]] -name = "dial9-macro" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7e31f073f2e14e5a9d338c543a0601aeaf7c43fc428cd59ce417230d0db37d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "dial9-tokio-telemetry" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226a0d823327c391d9e8234dc3ccc5810d936359ba8ea6af024d57bb15568647" -dependencies = [ - "arc-swap", - "bon", - "bytes", - "crossbeam-queue", - "dial9-macro", - "dial9-trace-format", - "flate2", - "futures-util", - "hostname", - "libc", - "metrique", - "metrique-timesource", - "metrique-writer", - "pin-project-lite", - "serde", - "serde_json", - "smallvec", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "dial9-trace-format" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3636d6ec60d94840cc414dcd6a95c77b3ba0a7b86d43fd035b89662eeb5cfa7" -dependencies = [ - "dial9-trace-format-derive", - "serde", -] - -[[package]] -name = "dial9-trace-format-derive" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff7c2855b73d0de34bc31d6dc7afbf0f6ce230a668403ac2b57b21d1ffe3928" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "digest" version = "0.10.7" @@ -3325,28 +1475,6 @@ dependencies = [ "const-oid 0.10.2", "crypto-common 0.2.2", "ctutils", - "zeroize", -] - -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.61.2", ] [[package]] @@ -3396,31 +1524,6 @@ dependencies = [ "spki 0.7.3", ] -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8 0.10.2", - "signature 2.2.0", -] - -[[package]] -name = "ed25519-dalek" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" -dependencies = [ - "curve25519-dalek", - "ed25519", - "serde", - "sha2 0.10.9", - "signature 2.2.0", - "subtle", - "zeroize", -] - [[package]] name = "either" version = "1.16.0" @@ -3439,7 +1542,6 @@ dependencies = [ "ff", "generic-array", "group", - "hkdf", "pem-rfc7468 0.7.0", "pkcs8 0.10.2", "rand_core 0.6.4", @@ -3457,12 +1559,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - [[package]] name = "enumset" version = "1.1.13" @@ -3484,45 +1580,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "env_filter" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" -dependencies = [ - "log", -] - -[[package]] -name = "env_logger" -version = "0.11.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" -dependencies = [ - "env_filter", - "log", -] - -[[package]] -name = "equator" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" -dependencies = [ - "equator-macro", -] - -[[package]] -name = "equator-macro" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -3560,12 +1617,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "faster-hex" version = "0.10.0" @@ -3592,52 +1643,18 @@ dependencies = [ "subtle", ] -[[package]] -name = "fiat-crypto" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" - -[[package]] -name = "filetime" -version = "0.2.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" -dependencies = [ - "cfg-if", - "libc", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" -[[package]] -name = "findshlibs" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" -dependencies = [ - "cc", - "lazy_static", - "libc", - "winapi", -] - [[package]] name = "fixedbitset" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" -[[package]] -name = "flagset" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" - [[package]] name = "flatbuffers" version = "25.12.19" @@ -3656,18 +1673,6 @@ checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", - "zlib-rs", -] - -[[package]] -name = "flume" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e139bc46ca777eb5efaf62df0ab8cc5fd400866427e56c68b22e414e53bd3be" -dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", ] [[package]] @@ -3751,19 +1756,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" -[[package]] -name = "futures-lite" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.32" @@ -3775,17 +1767,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "futures-rustls" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" -dependencies = [ - "futures-io", - "rustls", - "rustls-pki-types", -] - [[package]] name = "futures-sink" version = "0.3.32" @@ -3835,7 +1816,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -3860,13 +1841,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", "wasip2", "wasip3", - "wasm-bindgen", ] [[package]] @@ -3889,12 +1868,6 @@ dependencies = [ "polyval", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "glob" version = "0.3.3" @@ -3909,7 +1882,7 @@ checksum = "a300d4011cb53573eafe2419630d303ced54aab6c194a6d9e4156de375800372" dependencies = [ "async-trait", "aws-lc-rs", - "base64 0.22.1", + "base64", "bytes", "chrono", "google-cloud-gax", @@ -3972,8 +1945,8 @@ dependencies = [ "opentelemetry_sdk", "percent-encoding", "pin-project", - "prost 0.14.4", - "prost-types 0.14.4", + "prost", + "prost-types", "reqwest", "rustc_version", "serde", @@ -4059,7 +2032,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f796d8a7a5b1457ecd5ebb0451bf0502e15127cf42195591ffea90092fa82551" dependencies = [ "async-trait", - "base64 0.22.1", + "base64", "bytes", "chrono", "crc32c", @@ -4078,8 +2051,8 @@ dependencies = [ "http-body 1.0.1", "md5", "percent-encoding", - "prost 0.14.4", - "prost-types 0.14.4", + "prost", + "prost-types", "serde", "serde_json", "serde_with", @@ -4111,7 +2084,7 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88e0186e2221bf82c5296500251b4650b111172c324984159a0de9f6bcaa18a5" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "serde", "serde_json", @@ -4151,18 +2124,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" -dependencies = [ - "cfg-if", - "crunchy", - "num-traits", - "zerocopy", -] - [[package]] name = "hash32" version = "0.3.1" @@ -4177,15 +2138,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" @@ -4213,12 +2165,16 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" dependencies = [ - "allocator-api2", - "equivalent", "foldhash 0.2.0", - "rayon", - "serde", - "serde_core", +] + +[[package]] +name = "hashlink" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5081f264ed7adee96ea4b4778b6bb9da0a7228b084587aa3bd3ff05da7c5a3b" +dependencies = [ + "hashbrown 0.17.1", ] [[package]] @@ -4259,91 +2215,12 @@ dependencies = [ "vsimd", ] -[[package]] -name = "hickory-net" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2295ed2f9c31e471e1428a8f88a3f0e1f4b27c15049592138d1eebe9c35b183" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "futures-channel", - "futures-io", - "futures-util", - "hickory-proto", - "idna", - "ipnet", - "jni", - "rand 0.10.1", - "thiserror 2.0.18", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-proto" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bab31817bfb44672a252e97fe81cd0c18d1b2cf892108922f6818820df8c643" -dependencies = [ - "data-encoding", - "idna", - "ipnet", - "jni", - "once_cell", - "prefix-trie", - "rand 0.10.1", - "ring", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d58d28879ceecde6607729660c2667a081ccdc082e082675042793960f178c" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-net", - "hickory-proto", - "ipconfig", - "ipnet", - "jni", - "moka", - "ndk-context", - "once_cell", - "parking_lot 0.12.5", - "rand 0.10.1", - "resolv-conf", - "smallvec", - "system-configuration", - "thiserror 2.0.18", - "tokio", - "tracing", -] - [[package]] name = "highway" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9040319a6910b901d5d49cbada4a99db52836a1b63228a05f7e2b7f8feef89b1" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac 0.12.1", -] - [[package]] name = "hmac" version = "0.12.1" @@ -4362,26 +2239,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "home" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "hostname" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" -dependencies = [ - "cfg-if", - "libc", - "windows-link", -] - [[package]] name = "http" version = "0.2.12" @@ -4501,7 +2358,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.7", + "webpki-roots", ] [[package]] @@ -4523,7 +2380,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-util", @@ -4704,56 +2561,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "inferno" -version = "0.11.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" -dependencies = [ - "ahash 0.8.12", - "indexmap 2.14.0", - "is-terminal", - "itoa", - "log", - "num-format", - "once_cell", - "quick-xml 0.26.0", - "rgb", - "str_stack", -] - -[[package]] -name = "inferno" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90807d610575744524d9bdc69f3885d96f0e6c3354565b0828354a7ff2a262b8" -dependencies = [ - "ahash 0.8.12", - "clap", - "crossbeam-channel", - "crossbeam-utils", - "dashmap", - "env_logger", - "indexmap 2.14.0", - "itoa", - "log", - "num-format", - "once_cell", - "quick-xml 0.39.4", - "rgb", - "str_stack", -] - -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array", -] - [[package]] name = "inout" version = "0.2.2" @@ -4763,21 +2570,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - [[package]] name = "io-uring" version = "0.7.12" @@ -4789,27 +2581,11 @@ dependencies = [ "libc", ] -[[package]] -name = "ipconfig" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" -dependencies = [ - "socket2", - "widestring", - "windows-registry", - "windows-result", - "windows-sys 0.61.2", -] - [[package]] name = "ipnet" version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -dependencies = [ - "serde", -] [[package]] name = "ipnetwork" @@ -4820,38 +2596,12 @@ dependencies = [ "serde", ] -[[package]] -name = "is-terminal" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.61.2", -] - [[package]] name = "is_debug" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -4867,29 +2617,13 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "jemalloc_pprof" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d44c349cfe2654897fadcb9de4f0bfbf48288ec344f700b2bd59f152dd209" -dependencies = [ - "anyhow", - "libc", - "mappings", - "once_cell", - "pprof_util", - "tempfile", - "tikv-jemalloc-ctl", - "tokio", - "tracing", -] - [[package]] name = "jiff" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4603d3033e49e2b0e31229fcab20a5d40089c607d975cd9c80551dc69eed9102" +checksum = "34f877a98676d2fb664698d74cc6a51ce6c484ce8c770f05d0108ec9090aeb46" dependencies = [ + "defmt", "jiff-static", "jiff-tzdb-platform", "log", @@ -4901,9 +2635,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.28" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "782d32378dddf207193ac91cefb848ad41abb58195c95168e1291227a0832b47" +checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f" dependencies = [ "proc-macro2", "quote", @@ -5002,7 +2736,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ "aws-lc-rs", - "base64 0.22.1", + "base64", "getrandom 0.2.17", "js-sys", "pem", @@ -5013,30 +2747,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "kafka-protocol" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66292444a1cd4d430d450d472c30cba839d0724229aba2d79affffcf901516e2" -dependencies = [ - "anyhow", - "bytes", - "crc", - "crc32c", - "indexmap 2.14.0", - "paste", - "uuid", -] - -[[package]] -name = "keyed_priority_queue" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" -dependencies = [ - "indexmap 2.14.0", -] - [[package]] name = "konst" version = "0.2.20" @@ -5052,32 +2762,11 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" -[[package]] -name = "lapin" -version = "4.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fd20e01fd92597ca352ca7ceed3c589851ebad279dfcada48aa4d24fd3a7caa" -dependencies = [ - "amq-protocol", - "async-rs", - "async-trait", - "backon", - "cfg-if", - "event-listener", - "flume", - "futures-core", - "futures-io", - "tracing", -] - [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -dependencies = [ - "spin 0.9.8", -] [[package]] name = "leb128fmt" @@ -5085,69 +2774,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "lexical-core" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" -dependencies = [ - "lexical-parse-float", - "lexical-parse-integer", - "lexical-util", - "lexical-write-float", - "lexical-write-integer", -] - -[[package]] -name = "lexical-parse-float" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" -dependencies = [ - "lexical-parse-integer", - "lexical-util", -] - -[[package]] -name = "lexical-parse-integer" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" -dependencies = [ - "lexical-util", -] - -[[package]] -name = "lexical-util" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" - -[[package]] -name = "lexical-write-float" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" -dependencies = [ - "lexical-util", - "lexical-write-integer", -] - -[[package]] -name = "lexical-write-integer" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" -dependencies = [ - "lexical-util", -] - -[[package]] -name = "libbz2-rs-sys" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" - [[package]] name = "libc" version = "0.2.186" @@ -5164,75 +2790,12 @@ dependencies = [ "cc", ] -[[package]] -name = "liblzma" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6033b77c21d1f56deeae8014eb9fbe7bdf1765185a6c508b5ca82eeaed7f899" -dependencies = [ - "liblzma-sys", -] - -[[package]] -name = "liblzma-sys" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a60851d15cd8c5346eca4ab8babff585be2ae4bc8097c067291d3ffe2add3b6" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "libm" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" -[[package]] -name = "libmimalloc-sys" -version = "0.1.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" -dependencies = [ - "cc", - "cty", -] - -[[package]] -name = "libredox" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" -dependencies = [ - "libc", -] - -[[package]] -name = "libsystemd" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c97a761fc86953c5b885422b22c891dbf5bcb9dcc99d0110d6ce4c052759f0" -dependencies = [ - "hmac 0.12.1", - "libc", - "log", - "nix 0.29.0", - "nom 8.0.0", - "once_cell", - "serde", - "sha2 0.10.9", - "thiserror 2.0.18", - "uuid", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -5271,15 +2834,6 @@ version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" -[[package]] -name = "lru" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" -dependencies = [ - "hashbrown 0.12.3", -] - [[package]] name = "lru" version = "0.16.4" @@ -5289,15 +2843,6 @@ dependencies = [ "hashbrown 0.16.1", ] -[[package]] -name = "lru" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" -dependencies = [ - "hashbrown 0.17.1", -] - [[package]] name = "lru-slab" version = "0.1.2" @@ -5323,81 +2868,12 @@ dependencies = [ "libc", ] -[[package]] -name = "lz4_flex" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" -dependencies = [ - "twox-hash", -] - -[[package]] -name = "lzma-rust2" -version = "0.16.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce716bf1a316f47a280fc76295f6495b5bea4752bca01c3b3885e101b1c23c02" -dependencies = [ - "sha2 0.11.0", -] - -[[package]] -name = "manyhow" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" -dependencies = [ - "manyhow-macros", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "manyhow-macros" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" -dependencies = [ - "proc-macro-utils", - "proc-macro2", - "quote", -] - -[[package]] -name = "mappings" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bab1e61a4b76757edb59cd81fcaa7f3ba9018d43b527d9abfad877b4c6c60f2" -dependencies = [ - "anyhow", - "libc", - "once_cell", - "pprof_util", - "tracing", -] - -[[package]] -name = "matchers" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] - [[package]] name = "matchit" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" -[[package]] -name = "matchit" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8863b587001c1b9a8a4e36008cebc6b3612cb1226fe2de94858e06092687b608" - [[package]] name = "md-5" version = "0.11.0" @@ -5422,22 +2898,13 @@ checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "metrics" version = "0.24.6" @@ -5448,141 +2915,6 @@ dependencies = [ "rapidhash", ] -[[package]] -name = "metrics-util" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f8722f8562635f92f8ed992f26df0532266eb03d5202607c20c0d7e9745e13" -dependencies = [ - "aho-corasick", - "crossbeam-epoch", - "crossbeam-utils", - "hashbrown 0.16.1", - "indexmap 2.14.0", - "metrics", - "ordered-float 5.3.0", - "quanta", - "radix_trie", - "rand 0.9.4", - "rand_xoshiro", - "rapidhash", - "sketches-ddsketch", -] - -[[package]] -name = "metrique" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdfd0c9954a916c5e1db230cc7593569858afec7744cebfd0fbef45de7b07c7" -dependencies = [ - "itoa", - "jiff", - "metrique-core", - "metrique-macro", - "metrique-service-metrics", - "metrique-timesource", - "metrique-writer", - "metrique-writer-core", - "metrique-writer-macro", - "ryu", - "serde_json", - "tokio", -] - -[[package]] -name = "metrique-core" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56ef332b47a4d2dc14209bf9ce4334682dd2fec43a4b84e5ed063bf2f4ea29a" -dependencies = [ - "itertools 0.14.0", - "metrique-writer-core", -] - -[[package]] -name = "metrique-macro" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403c61cd847b11680ae6cf1feb384cbe06e412e4dc221f1e16ccf48038d190bb" -dependencies = [ - "Inflector", - "darling 0.23.0", - "proc-macro2", - "quote", - "syn 2.0.118", -] - -[[package]] -name = "metrique-service-metrics" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93045b7f5c8b998946b715de07523b1c6d81932512c5c27590bf73328aaf3832" -dependencies = [ - "metrique-writer", -] - -[[package]] -name = "metrique-timesource" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d607939211e4eaaa8cd35394fa5e57faffb7390d0ac513b39992edcaf3cc526c" - -[[package]] -name = "metrique-writer" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9e23184d81616fcdfcdc5768e14c2bca765096094d08e7895259fe658378e4" -dependencies = [ - "ahash 0.8.12", - "crossbeam-queue", - "crossbeam-utils", - "metrics", - "metrics-util", - "metrique-core", - "metrique-writer-core", - "metrique-writer-macro", - "rand 0.9.4", - "smallvec", - "tokio", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "metrique-writer-core" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23421d85733c0182613b32f32094080e07cd5e98be5893f1cd3baf7eed16c4d0" -dependencies = [ - "derive-where", - "itertools 0.14.0", - "serde", - "smallvec", -] - -[[package]] -name = "metrique-writer-macro" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5891f02fdba5bd734992ea074502934344e4138525bf299ee4984f16160c3e6e" -dependencies = [ - "darling 0.23.0", - "proc-macro2", - "quote", - "str_inflector", - "syn 2.0.118", - "synstructure 0.13.2", -] - -[[package]] -name = "mimalloc" -version = "0.1.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" -dependencies = [ - "libmimalloc-sys", -] - [[package]] name = "mime" version = "0.3.17" @@ -5599,12 +2931,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -5622,7 +2948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] @@ -5639,117 +2965,19 @@ dependencies = [ "equivalent", "event-listener", "futures-util", - "parking_lot 0.12.5", + "parking_lot", "portable-atomic", "smallvec", "tagptr", "uuid", ] -[[package]] -name = "mqttbytes-core-next" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9e8f1593f6a8affb39a2df042cc28df033ba18907858cde71993e5780d29a3" -dependencies = [ - "bytes", - "thiserror 2.0.18", -] - [[package]] name = "multimap" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" -[[package]] -name = "murmur3" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252111cf132ba0929b6f8e030cac2a24b507f3a4d6db6fb2896f27b354c714b" - -[[package]] -name = "mysql-common-derive" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4db8a44120571277accfaa3f3d91e7d3989d601d817c2fc01a9391b86135666" -dependencies = [ - "darling 0.23.0", - "heck", - "manyhow", - "num-bigint", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.118", - "termcolor", - "thiserror 2.0.18", -] - -[[package]] -name = "mysql_async" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3519e91b0d254ac1ffa495bc42053286cb2172ad7241d5b3b1b9f8a891f21ee2" -dependencies = [ - "bytes", - "crossbeam-queue", - "crossbeam-utils", - "flate2", - "futures-core", - "futures-sink", - "futures-util", - "keyed_priority_queue", - "lru 0.18.0", - "mysql_common", - "percent-encoding", - "rand 0.10.1", - "rustls", - "serde", - "socket2", - "thiserror 2.0.18", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "twox-hash", - "url", - "webpki-roots 1.0.7", -] - -[[package]] -name = "mysql_common" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f27695f286b461da077b8c2f72f47feaa04ce3c3f9c0976257410e90e21208a" -dependencies = [ - "base64 0.22.1", - "bitflags 2.13.0", - "btoi", - "byteorder", - "bytes", - "crc32fast", - "flate2", - "getrandom 0.3.4", - "mysql-common-derive", - "num-bigint", - "num-traits", - "regex", - "saturating", - "serde", - "serde_json", - "sha1 0.10.6", - "sha2 0.10.9", - "thiserror 2.0.18", - "uuid", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - [[package]] name = "neli" version = "0.7.4" @@ -5763,7 +2991,7 @@ dependencies = [ "libc", "log", "neli-proc-macros", - "parking_lot 0.12.5", + "parking_lot", ] [[package]] @@ -5789,64 +3017,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.13.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - -[[package]] -name = "nkeys" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879011babc47a1c7fdf5a935ae3cfe94f34645ca0cac1c7f6424b36fc743d1bf" -dependencies = [ - "data-encoding", - "ed25519", - "ed25519-dalek", - "getrandom 0.2.17", - "log", - "rand 0.8.6", - "signatory", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -5865,38 +3035,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "nuid" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc895af95856f929163a0aa20c26a78d26bfdc839f51b9d5aa7a5b79e52b7e83" -dependencies = [ - "rand 0.8.6", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -5905,32 +3043,6 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "serde", -] - -[[package]] -name = "num-bigint-dig" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.6", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", ] [[package]] @@ -5939,16 +3051,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa", -] - [[package]] name = "num-integer" version = "0.1.46" @@ -5958,28 +3060,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -5987,7 +3067,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -6000,40 +3079,12 @@ dependencies = [ "libc", ] -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - [[package]] name = "numeric_cast" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3c00a0c9600379bd32f8972de90676a7672cba3bf4886986bc05902afc1e093" -[[package]] -name = "oauth2" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" -dependencies = [ - "base64 0.22.1", - "chrono", - "getrandom 0.2.17", - "http 1.4.2", - "rand 0.8.6", - "serde", - "serde_json", - "serde_path_to_error", - "sha2 0.10.9", - "thiserror 1.0.69", - "url", -] - [[package]] name = "objc2" version = "0.6.4" @@ -6091,105 +3142,11 @@ dependencies = [ "objc2-foundation", ] -[[package]] -name = "objc2-system-configuration" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" -dependencies = [ - "objc2-core-foundation", -] - -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - -[[package]] -name = "object_store" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622acbc9100d3c10e2ee15804b0caa40e55c933d5aa53814cd520805b7958a49" -dependencies = [ - "async-trait", - "bytes", - "chrono", - "futures-channel", - "futures-core", - "futures-util", - "http 1.4.2", - "humantime", - "itertools 0.14.0", - "parking_lot 0.12.5", - "percent-encoding", - "thiserror 2.0.18", - "tokio", - "tracing", - "url", - "walkdir", - "wasm-bindgen-futures", - "web-time", -] - -[[package]] -name = "oid-registry" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" -dependencies = [ - "asn1-rs", -] - [[package]] name = "once_cell" version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" -dependencies = [ - "critical-section", - "portable-atomic", -] - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "openidconnect" -version = "4.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c6709ba2ea764bbed26bce1adf3c10517113ddea6f2d4196e4851757ef2b2" -dependencies = [ - "base64 0.21.7", - "chrono", - "dyn-clone", - "ed25519-dalek", - "hmac 0.12.1", - "http 1.4.2", - "itertools 0.10.5", - "log", - "oauth2", - "p256", - "p384", - "rand 0.8.6", - "rsa 0.9.10", - "serde", - "serde-value", - "serde_json", - "serde_path_to_error", - "serde_plain", - "serde_with", - "sha2 0.10.9", - "subtle", - "thiserror 1.0.69", - "url", -] [[package]] name = "openssl-probe" @@ -6211,77 +3168,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "opentelemetry-appender-tracing" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0080f0dc1d7c786f467cd85a4e395fcab11ee852004f39a29a18ab7c25d837" -dependencies = [ - "opentelemetry", - "tracing", - "tracing-core", - "tracing-log", - "tracing-subscriber", -] - -[[package]] -name = "opentelemetry-http" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331" -dependencies = [ - "async-trait", - "bytes", - "http 1.4.2", - "opentelemetry", - "reqwest", -] - -[[package]] -name = "opentelemetry-otlp" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35" -dependencies = [ - "flate2", - "http 1.4.2", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-proto", - "opentelemetry_sdk", - "prost 0.14.4", - "reqwest", - "thiserror 2.0.18", -] - -[[package]] -name = "opentelemetry-proto" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d658ba1faf63f7b9c492cfbe6e0ec365440a16132d3270c1065f7b33f1b638" -dependencies = [ - "opentelemetry", - "opentelemetry_sdk", - "prost 0.14.4", -] - [[package]] name = "opentelemetry-semantic-conventions" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ca2f98a0437b427b4b08f19f1caa3c44db885a202bc12cfea13d6c702243d68" -[[package]] -name = "opentelemetry-stdout" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b1c6a247d79091f0062a5f4bd058589525cf987a8d4c169440d9c1be72f0ad" -dependencies = [ - "chrono", - "opentelemetry", - "opentelemetry_sdk", -] - [[package]] name = "opentelemetry_sdk" version = "0.32.1" @@ -6296,32 +3188,6 @@ dependencies = [ "portable-atomic", "rand 0.9.4", "thiserror 2.0.18", - "tokio", - "tokio-stream", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "ordered-float" -version = "2.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ordered-float" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" -dependencies = [ - "num-traits", ] [[package]] @@ -6330,29 +3196,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" -[[package]] -name = "p12-keystore" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb9bf5222606eb712d3bb30e01bc9420545b00859970897e70c682353a034f2" -dependencies = [ - "base64 0.22.1", - "cbc", - "cms", - "der 0.7.10", - "des", - "hex", - "hmac 0.12.1", - "pkcs12", - "pkcs5", - "rand 0.10.1", - "rc2", - "sha1 0.10.6", - "sha2 0.10.9", - "thiserror 2.0.18", - "x509-parser", -] - [[package]] name = "p256" version = "0.13.2" @@ -6365,35 +3208,12 @@ dependencies = [ "sha2 0.10.9", ] -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2 0.10.9", -] - [[package]] name = "parking" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -6401,21 +3221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.12", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -6426,47 +3232,11 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] -[[package]] -name = "parquet" -version = "58.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dafa7d01085b62a47dd0c1829550a0a36710ea9c4fe358a05a85477cec8a908" -dependencies = [ - "ahash 0.8.12", - "arrow-array", - "arrow-buffer", - "arrow-data", - "arrow-ipc", - "arrow-schema", - "arrow-select", - "base64 0.22.1", - "brotli", - "bytes", - "chrono", - "flate2", - "futures", - "half", - "hashbrown 0.17.1", - "lz4_flex", - "num-bigint", - "num-integer", - "num-traits", - "object_store", - "paste", - "seq-macro", - "simdutf8", - "snap", - "thrift", - "tokio", - "twox-hash", - "zstd", -] - [[package]] name = "password-hash" version = "0.6.1" @@ -6477,12 +3247,6 @@ dependencies = [ "phc", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "path-absolutize" version = "3.1.1" @@ -6507,16 +3271,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", -] - [[package]] name = "pbkdf2" version = "0.13.0" @@ -6533,7 +3287,7 @@ version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64 0.22.1", + "base64", "serde_core", ] @@ -6561,16 +3315,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap 2.14.0", -] - [[package]] name = "petgraph" version = "0.8.3" @@ -6580,7 +3324,6 @@ dependencies = [ "fixedbitset", "hashbrown 0.15.5", "indexmap 2.14.0", - "serde", ] [[package]] @@ -6594,43 +3337,6 @@ dependencies = [ "getrandom 0.4.2", ] -[[package]] -name = "phf" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" -dependencies = [ - "phf_shared 0.12.1", -] - -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_shared 0.13.1", - "serde", -] - -[[package]] -name = "phf_shared" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project" version = "1.1.13" @@ -6663,28 +3369,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - -[[package]] -name = "pkcs1" -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", -] - [[package]] name = "pkcs1" version = "0.8.0-rc.4" @@ -6695,36 +3379,6 @@ dependencies = [ "spki 0.8.0", ] -[[package]] -name = "pkcs12" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695b3df3d3cc1015f12d70235e35b6b79befc5fa7a9b95b951eab1dd07c9efc2" -dependencies = [ - "cms", - "const-oid 0.9.6", - "der 0.7.10", - "digest 0.10.7", - "spki 0.7.3", - "x509-cert", - "zeroize", -] - -[[package]] -name = "pkcs5" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" -dependencies = [ - "aes 0.8.4", - "cbc", - "der 0.7.10", - "pbkdf2 0.12.2", - "scrypt", - "sha2 0.10.9", - "spki 0.7.3", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -6793,37 +3447,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "postgres-protocol" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08808e3c483c46e999108051c78334f473d5adb59d78bb80a1268c7e6aa6c514" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator", - "hmac 0.13.0", - "md-5", - "memchr", - "rand 0.10.1", - "sha2 0.11.0", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "851ca9db4932932d69f3ea811b1abe63087a0f740a47692619dd40d4899b68be" -dependencies = [ - "bytes", - "fallible-iterator", - "postgres-protocol", - "serde_core", - "serde_json", -] - [[package]] name = "potential_utf" version = "0.1.5" @@ -6839,51 +3462,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppmd-rust" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" - -[[package]] -name = "pprof-pyroscope-fork" -version = "0.1500.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228f0967ab4c785d2daa6afdecd844a85a08227b19bfe14f1cf3f7819bf42f43" -dependencies = [ - "aligned-vec", - "backtrace", - "cfg-if", - "findshlibs", - "inferno 0.11.21", - "libc", - "log", - "nix 0.26.4", - "once_cell", - "protobuf", - "protobuf-codegen", - "smallvec", - "spin 0.10.0", - "symbolic-demangle", - "tempfile", - "thiserror 2.0.18", -] - -[[package]] -name = "pprof_util" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea0cc524de808a6d98d192a3d99fe95617031ad4a52ec0a0f987ef4432e8fe1" -dependencies = [ - "anyhow", - "backtrace", - "flate2", - "inferno 0.12.6", - "num", - "paste", - "prost 0.14.4", -] - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -6893,17 +3471,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prefix-trie" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" -dependencies = [ - "either", - "ipnet", - "num-traits", -] - [[package]] name = "prettyplease" version = "0.2.37" @@ -6924,23 +3491,25 @@ dependencies = [ ] [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-utils" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaf08a13de400bc215877b5bdc088f241b12eb42f0a548d3390dc1c56bb7071" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ "proc-macro2", "quote", - "smallvec", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.118", ] [[package]] @@ -6952,16 +3521,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" -dependencies = [ - "bytes", - "prost-derive 0.13.5", -] - [[package]] name = "prost" version = "0.14.4" @@ -6969,27 +3528,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" dependencies = [ "bytes", - "prost-derive 0.14.4", -] - -[[package]] -name = "prost-build" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" -dependencies = [ - "heck", - "itertools 0.14.0", - "log", - "multimap", - "once_cell", - "petgraph 0.7.1", - "prettyplease", - "prost 0.13.5", - "prost-types 0.13.5", - "regex", - "syn 2.0.118", - "tempfile", + "prost-derive", ] [[package]] @@ -6999,13 +3538,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" dependencies = [ "heck", - "itertools 0.14.0", + "itertools", "log", "multimap", - "petgraph 0.8.3", + "petgraph", "prettyplease", - "prost 0.14.4", - "prost-types 0.14.4", + "prost", + "prost-types", "pulldown-cmark", "pulldown-cmark-to-cmark", "regex", @@ -7013,19 +3552,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "prost-derive" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" -dependencies = [ - "anyhow", - "itertools 0.14.0", - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "prost-derive" version = "0.14.4" @@ -7033,89 +3559,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools", "proc-macro2", "quote", "syn 2.0.118", ] -[[package]] -name = "prost-types" -version = "0.13.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" -dependencies = [ - "prost 0.13.5", -] - [[package]] name = "prost-types" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" dependencies = [ - "prost 0.14.4", -] - -[[package]] -name = "protobuf" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" -dependencies = [ - "once_cell", - "protobuf-support", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-codegen" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3976825c0014bbd2f3b34f0001876604fe87e0c86cd8fa54251530f1544ace" -dependencies = [ - "anyhow", - "once_cell", - "protobuf", - "protobuf-parse", - "regex", - "tempfile", - "thiserror 1.0.69", -] - -[[package]] -name = "protobuf-parse" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4aeaa1f2460f1d348eeaeed86aea999ce98c1bded6f089ff8514c9d9dbdc973" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "log", - "protobuf", - "protobuf-support", - "tempfile", - "thiserror 1.0.69", - "which", -] - -[[package]] -name = "protobuf-support" -version = "3.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" -dependencies = [ - "thiserror 1.0.69", -] - -[[package]] -name = "psm" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" -dependencies = [ - "ar_archive_writer", - "cc", + "prost", ] [[package]] @@ -7138,83 +3594,12 @@ dependencies = [ "pulldown-cmark", ] -[[package]] -name = "pulsar" -version = "6.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2784d3ed4cc69abf1257842f40b5ca89cfa2e6047912a9691193532c211ab13" -dependencies = [ - "async-channel", - "async-trait", - "bytes", - "chrono", - "crc", - "futures", - "log", - "murmur3", - "nom 7.1.3", - "pem", - "prost 0.13.5", - "prost-build 0.13.5", - "prost-derive 0.13.5", - "rand 0.8.6", - "regex", - "rustls", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "url", - "uuid", - "webpki-roots 1.0.7", -] - -[[package]] -name = "quad-rand" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a651516ddc9168ebd67b24afd085a718be02f8858fe406591b013d101ce2f40" - -[[package]] -name = "quanta" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", - "web-sys", - "winapi", -] - -[[package]] -name = "quick-xml" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.39.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2474bd2e5029e7ccb6abb2ba48cf2383a333851dedf495901544281590c7da7f" dependencies = [ - "encoding_rs", "memchr", "serde", "tokio", @@ -7297,34 +3682,13 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - -[[package]] -name = "rand" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.5", ] @@ -7340,16 +3704,6 @@ dependencies = [ "serde", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -7384,15 +3738,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" -[[package]] -name = "rand_xoshiro" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" -dependencies = [ - "rand_core 0.9.5", -] - [[package]] name = "rapidhash" version = "4.4.1" @@ -7409,19 +3754,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dc94ed8e3de45f6d8d052869d48c0dbeebcaa7a6c345ec7f0f917e10347428e" dependencies = [ "clocksource", - "parking_lot 0.12.5", + "parking_lot", "thiserror 2.0.18", ] -[[package]] -name = "raw-cpuid" -version = "11.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" -dependencies = [ - "bitflags 2.13.0", -] - [[package]] name = "rayon" version = "1.12.0" @@ -7442,81 +3778,12 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "rc2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62c64daa8e9438b84aaae55010a93f396f8e60e3911590fcba770d04643fc1dd" -dependencies = [ - "cipher 0.4.4", -] - [[package]] name = "readme-rustdocifier" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08ad765b21a08b1a8e5cdce052719188a23772bcbefb3c439f0baaf62c56ceac" -[[package]] -name = "recursive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0786a43debb760f491b1bc0269fe5e84155353c67482b9e60d0cfb596054b43e" -dependencies = [ - "recursive-proc-macro-impl", - "stacker", -] - -[[package]] -name = "recursive-proc-macro-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" -dependencies = [ - "quote", - "syn 2.0.118", -] - -[[package]] -name = "redis" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fd510128eda94d1d49b9f81487744d5c451422431cce41238fe2853d29f4cc" -dependencies = [ - "arc-swap", - "arcstr", - "async-lock", - "backon", - "bytes", - "cfg-if", - "combine", - "futures-channel", - "futures-util", - "itoa", - "num-bigint", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-native-certs", - "ryu", - "sha1_smol", - "socket2", - "tokio", - "tokio-rustls", - "tokio-util", - "url", - "xxhash-rust", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -7526,32 +3793,6 @@ dependencies = [ "bitflags 2.13.0", ] -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", -] - -[[package]] -name = "reed-solomon-erasure" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" -dependencies = [ - "cc", - "libc", - "libm", - "lru 0.7.8", - "parking_lot 0.11.2", - "smallvec", - "spin 0.9.8", -] - [[package]] name = "reed-solomon-simd" version = "3.1.0" @@ -7625,7 +3866,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-channel", @@ -7665,12 +3906,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "resolv-conf" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" - [[package]] name = "rfc6979" version = "0.4.0" @@ -7681,15 +3916,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "rgb" -version = "0.8.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" -dependencies = [ - "bytemuck", -] - [[package]] name = "ring" version = "0.17.14" @@ -7723,26 +3949,6 @@ dependencies = [ "serde", ] -[[package]] -name = "rsa" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid 0.9.6", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1 0.7.5", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "signature 2.2.0", - "spki 0.7.3", - "subtle", - "zeroize", -] - [[package]] name = "rsa" version = "0.10.0-rc.18" @@ -7753,7 +3959,7 @@ dependencies = [ "crypto-bigint 0.7.3", "crypto-primes", "digest 0.11.3", - "pkcs1 0.8.0-rc.4", + "pkcs1", "pkcs8 0.11.0", "rand_core 0.10.1", "sha2 0.11.0", @@ -7762,99 +3968,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rumqttc-core-next" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa975ffc1af5aac70a0e139491a1fc553ab48f378f909dad5d43fd4b2ad28db" -dependencies = [ - "async-tungstenite", - "futures-io", - "futures-util", - "http 1.4.2", - "rustls-native-certs", - "rustls-pki-types", - "rustls-webpki", - "thiserror 2.0.18", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "rumqttc-next" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df63fbd71ba5830b5bd0952ae37761e3af64aeae8f6213eb6d31d6e72a16d71e" -dependencies = [ - "rumqttc-v5-next", -] - -[[package]] -name = "rumqttc-v5-next" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6417b354aa28ad72b271e6a5cea7fdb1594d18cb040ebed35fa87bb683cf364f" -dependencies = [ - "async-tungstenite", - "bytes", - "fixedbitset", - "flume", - "futures-io", - "futures-util", - "http 1.4.2", - "log", - "mqttbytes-core-next", - "rumqttc-core-next", - "rustls-native-certs", - "rustls-pki-types", - "rustls-webpki", - "thiserror 2.0.18", - "tokio", - "tokio-rustls", - "tokio-util", -] - -[[package]] -name = "rust-embed" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "shellexpand", - "syn 2.0.118", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" -dependencies = [ - "sha2 0.10.9", - "walkdir", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" - [[package]] name = "rustc-hash" version = "2.1.2" @@ -7870,143 +3983,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustfs" -version = "1.0.0-beta.8" -dependencies = [ - "aes-gcm", - "apache-avro", - "astral-tokio-tar", - "async-trait", - "async_zip", - "atoi 3.0.0", - "atomic_enum", - "aws-sdk-s3", - "axum", - "base64 0.22.1", - "base64-simd", - "bytes", - "clap", - "const-str", - "datafusion", - "flatbuffers", - "futures", - "futures-lite", - "futures-util", - "hashbrown 0.17.1", - "hex-simd", - "hmac 0.13.0", - "http 1.4.2", - "http-body 1.0.1", - "http-body-util", - "hyper", - "hyper-util", - "jemalloc_pprof", - "jiff", - "libc", - "libmimalloc-sys", - "libsystemd", - "matchit 0.9.2", - "md5", - "metrics", - "mimalloc", - "mime_guess", - "opentelemetry", - "percent-encoding", - "pin-project-lite", - "pprof-pyroscope-fork", - "rand 0.10.1", - "reqwest", - "rmp-serde", - "rust-embed", - "rustfs-audit", - "rustfs-common", - "rustfs-concurrency", - "rustfs-config", - "rustfs-credentials", - "rustfs-crypto", - "rustfs-data-usage", - "rustfs-ecstore", - "rustfs-extension-schema", - "rustfs-filemeta", - "rustfs-heal", - "rustfs-iam", - "rustfs-io-core", - "rustfs-io-metrics", - "rustfs-keystone", - "rustfs-kms", - "rustfs-lock", - "rustfs-madmin", - "rustfs-notify", - "rustfs-object-capacity", - "rustfs-obs", - "rustfs-policy", - "rustfs-protocols", - "rustfs-protos", - "rustfs-rio", - "rustfs-s3-ops", - "rustfs-s3-types", - "rustfs-s3select-api", - "rustfs-s3select-query", - "rustfs-scanner", - "rustfs-security-governance", - "rustfs-signer", - "rustfs-storage-api", - "rustfs-targets", - "rustfs-tls-runtime", - "rustfs-trusted-proxies", - "rustfs-utils", - "rustfs-zip", - "rustls", - "rustls-pki-types", - "s3s", - "serde", - "serde_json", - "serde_urlencoded", - "sha2 0.11.0", - "shadow-rs", - "socket2", - "subtle", - "sysinfo", - "tempfile", - "thiserror 2.0.18", - "tikv-jemalloc-ctl", - "tikv-jemallocator", - "time", - "tokio", - "tokio-rustls", - "tokio-stream", - "tokio-util", - "tonic", - "tower", - "tower-http", - "tracing", - "tracing-opentelemetry", - "url", - "urlencoding", - "uuid", - "zip", -] - -[[package]] -name = "rustfs-audit" -version = "1.0.0-beta.8" -dependencies = [ - "chrono", - "const-str", - "futures", - "hashbrown 0.17.1", - "metrics", - "rustfs-config", - "rustfs-s3-types", - "rustfs-targets", - "serde", - "serde_json", - "thiserror 2.0.18", - "tokio", - "tracing", -] - [[package]] name = "rustfs-checksums" version = "1.0.0-beta.8" @@ -8035,18 +4011,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "rustfs-concurrency" -version = "1.0.0-beta.8" -dependencies = [ - "rustfs-io-core", - "rustfs-io-metrics", - "thiserror 2.0.18", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "rustfs-config" version = "1.0.0-beta.8" @@ -8078,9 +4042,9 @@ dependencies = [ "base64-simd", "chacha20poly1305", "jsonwebtoken", - "pbkdf2 0.13.0", + "pbkdf2", "rand 0.10.1", - "rsa 0.10.0-rc.18", + "rsa", "serde", "serde_json", "sha2 0.11.0", @@ -8111,11 +4075,12 @@ dependencies = [ "aws-sdk-s3", "aws-smithy-http-client", "aws-smithy-types", - "base64 0.22.1", + "base64", "base64-simd", "byteorder", "bytes", "bytesize", + "chacha20poly1305", "chrono", "enumset", "faster-hex", @@ -8140,13 +4105,12 @@ dependencies = [ "metrics", "num_cpus", "opentelemetry", - "parking_lot 0.12.5", + "parking_lot", "path-absolutize", "pin-project-lite", - "quick-xml 0.40.1", + "quick-xml", "rand 0.10.1", "ratelimit", - "reed-solomon-erasure", "reed-solomon-simd", "regex", "reqwest", @@ -8154,10 +4118,10 @@ dependencies = [ "rmp-serde", "rustfs-checksums", "rustfs-common", - "rustfs-concurrency", "rustfs-config", "rustfs-credentials", "rustfs-data-usage", + "rustfs-erasure-codec", "rustfs-filemeta", "rustfs-io-metrics", "rustfs-kms", @@ -8172,7 +4136,7 @@ dependencies = [ "rustfs-storage-api", "rustfs-tls-runtime", "rustfs-utils", - "rustix 1.1.4", + "rustix", "rustls", "rustls-pki-types", "s3s", @@ -8199,11 +4163,19 @@ dependencies = [ ] [[package]] -name = "rustfs-extension-schema" -version = "1.0.0-beta.8" +name = "rustfs-erasure-codec" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcda6886ece4bfc6917640007a6b9693dc8424a9412d18c3dda5be2431500f31" dependencies = [ - "serde", - "thiserror 2.0.18", + "cc", + "hashlink", + "libc", + "libm", + "parking_lot", + "rayon", + "smallvec", + "spin 0.12.0", ] [[package]] @@ -8234,7 +4206,6 @@ version = "0.0.0" dependencies = [ "arbitrary", "libfuzzer-sys", - "rustfs", "rustfs-ecstore", "rustfs-filemeta", "rustfs-policy", @@ -8243,73 +4214,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "rustfs-heal" -version = "1.0.0-beta.8" -dependencies = [ - "anyhow", - "async-trait", - "futures", - "metrics", - "rustfs-common", - "rustfs-config", - "rustfs-ecstore", - "rustfs-madmin", - "rustfs-storage-api", - "rustfs-utils", - "serde", - "serde_json", - "thiserror 2.0.18", - "tokio", - "tokio-util", - "tracing", - "uuid", -] - -[[package]] -name = "rustfs-iam" -version = "1.0.0-beta.8" -dependencies = [ - "arc-swap", - "async-trait", - "base64-simd", - "futures", - "http 1.4.2", - "jsonwebtoken", - "moka", - "openidconnect", - "pollster", - "reqwest", - "rustfs-config", - "rustfs-credentials", - "rustfs-crypto", - "rustfs-ecstore", - "rustfs-io-metrics", - "rustfs-madmin", - "rustfs-policy", - "rustfs-storage-api", - "rustfs-utils", - "serde", - "serde_json", - "thiserror 2.0.18", - "time", - "tokio", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "rustfs-io-core" -version = "1.0.0-beta.8" -dependencies = [ - "bytes", - "memmap2", - "rustfs-io-metrics", - "thiserror 2.0.18", - "tokio", -] - [[package]] name = "rustfs-io-metrics" version = "1.0.0-beta.8" @@ -8323,86 +4227,15 @@ dependencies = [ "tracing", ] -[[package]] -name = "rustfs-kafka" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eee0644a99743fb2f51db7fbae1a6ca2d85f064daf7595784eaa52834a68c96" -dependencies = [ - "base64 0.22.1", - "bytes", - "fnv", - "hmac 0.13.0", - "indexmap 2.14.0", - "kafka-protocol", - "metrics", - "pbkdf2 0.13.0", - "rand 0.10.1", - "rustls", - "rustls-native-certs", - "sha2 0.11.0", - "socket2", - "thiserror 2.0.18", - "tracing", - "twox-hash", - "webpki-roots 1.0.7", -] - -[[package]] -name = "rustfs-kafka-async" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd1997c3116cb94ede80d9a0b828f46dd27386cc93825fce141a92eb3aa9630" -dependencies = [ - "base64 0.22.1", - "bytes", - "hmac 0.13.0", - "kafka-protocol", - "metrics", - "pbkdf2 0.13.0", - "rand 0.10.1", - "rustfs-kafka", - "rustls", - "rustls-native-certs", - "sha2 0.11.0", - "tokio", - "tokio-rustls", - "tracing", - "webpki-roots 1.0.7", -] - -[[package]] -name = "rustfs-keystone" -version = "1.0.0-beta.8" -dependencies = [ - "bytes", - "futures", - "http 1.4.2", - "http-body 1.0.1", - "http-body-util", - "hyper", - "moka", - "reqwest", - "rustfs-credentials", - "rustfs-policy", - "rustfs-utils", - "serde", - "serde_json", - "thiserror 2.0.18", - "time", - "tokio", - "tower", - "tracing", -] - [[package]] name = "rustfs-kms" version = "1.0.0-beta.8" dependencies = [ "aes-gcm", "arc-swap", + "argon2", "async-trait", - "base64 0.22.1", + "base64", "chacha20poly1305", "jiff", "md5", @@ -8413,7 +4246,6 @@ dependencies = [ "rustfs-utils", "serde", "serde_json", - "sha2 0.11.0", "tempfile", "thiserror 2.0.18", "tokio", @@ -8431,7 +4263,7 @@ dependencies = [ "async-trait", "crossbeam-queue", "futures", - "parking_lot 0.12.5", + "parking_lot", "rustfs-io-metrics", "rustfs-utils", "serde", @@ -8457,35 +4289,6 @@ dependencies = [ "time", ] -[[package]] -name = "rustfs-notify" -version = "1.0.0-beta.8" -dependencies = [ - "arc-swap", - "async-trait", - "chrono", - "form_urlencoded", - "hashbrown 0.17.1", - "metrics", - "percent-encoding", - "quick-xml 0.40.1", - "rayon", - "rustc-hash", - "rustfs-config", - "rustfs-ecstore", - "rustfs-s3-ops", - "rustfs-s3-types", - "rustfs-targets", - "rustfs-utils", - "serde", - "starshard", - "thiserror 2.0.18", - "tokio", - "tracing", - "url", - "wildmatch", -] - [[package]] name = "rustfs-object-capacity" version = "1.0.0-beta.8" @@ -8500,51 +4303,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "rustfs-obs" -version = "1.0.0-beta.8" -dependencies = [ - "chrono", - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "dial9-tokio-telemetry", - "flate2", - "glob", - "jiff", - "metrics", - "num_cpus", - "opentelemetry", - "opentelemetry-appender-tracing", - "opentelemetry-otlp", - "opentelemetry-semantic-conventions", - "opentelemetry-stdout", - "opentelemetry_sdk", - "percent-encoding", - "rustfs-audit", - "rustfs-common", - "rustfs-config", - "rustfs-ecstore", - "rustfs-iam", - "rustfs-io-metrics", - "rustfs-notify", - "rustfs-security-governance", - "rustfs-storage-api", - "rustfs-utils", - "serde", - "serde_json", - "sysinfo", - "thiserror 2.0.18", - "tokio", - "tokio-util", - "tracing", - "tracing-appender", - "tracing-error", - "tracing-opentelemetry", - "tracing-subscriber", - "zstd", -] - [[package]] name = "rustfs-policy" version = "1.0.0-beta.8" @@ -8564,28 +4322,7 @@ dependencies = [ "rustfs-crypto", "serde", "serde_json", - "strum 0.28.0", - "thiserror 2.0.18", - "time", - "tokio", - "tracing", -] - -[[package]] -name = "rustfs-protocols" -version = "1.0.0-beta.8" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "rustfs-config", - "rustfs-credentials", - "rustfs-iam", - "rustfs-policy", - "rustfs-storage-api", - "rustfs-utils", - "s3s", - "serde_json", + "strum", "thiserror 2.0.18", "time", "tokio", @@ -8597,7 +4334,7 @@ name = "rustfs-protos" version = "1.0.0-beta.8" dependencies = [ "flatbuffers", - "prost 0.14.4", + "prost", "rustfs-common", "rustfs-config", "rustfs-io-metrics", @@ -8615,7 +4352,7 @@ name = "rustfs-rio" version = "1.0.0-beta.8" dependencies = [ "aes-gcm", - "base64 0.22.1", + "base64", "bytes", "crc-fast", "faster-hex", @@ -8657,79 +4394,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "rustfs-s3select-api" -version = "1.0.0-beta.8" -dependencies = [ - "async-trait", - "bytes", - "chrono", - "datafusion", - "futures", - "futures-core", - "http 1.4.2", - "metrics", - "object_store", - "parking_lot 0.12.5", - "pin-project-lite", - "rustfs-common", - "rustfs-ecstore", - "rustfs-storage-api", - "s3s", - "serde_json", - "snafu", - "tokio", - "tokio-util", - "tracing", - "transform-stream", - "url", -] - -[[package]] -name = "rustfs-s3select-query" -version = "1.0.0-beta.8" -dependencies = [ - "async-recursion", - "async-trait", - "datafusion", - "derive_builder", - "futures", - "parking_lot 0.12.5", - "rustfs-s3select-api", - "s3s", - "snafu", - "tokio", - "tracing", -] - -[[package]] -name = "rustfs-scanner" -version = "1.0.0-beta.8" -dependencies = [ - "async-trait", - "chrono", - "futures", - "http 1.4.2", - "metrics", - "rand 0.10.1", - "rmp-serde", - "rustfs-common", - "rustfs-config", - "rustfs-data-usage", - "rustfs-ecstore", - "rustfs-filemeta", - "rustfs-storage-api", - "rustfs-utils", - "s3s", - "serde", - "serde_json", - "thiserror 2.0.18", - "time", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "rustfs-security-governance" version = "1.0.0-beta.8" @@ -8764,51 +4428,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "rustfs-targets" -version = "1.0.0-beta.8" -dependencies = [ - "arc-swap", - "async-nats", - "async-trait", - "chrono", - "deadpool-postgres", - "hashbrown 0.17.1", - "hyper", - "hyper-rustls", - "lapin", - "libc", - "metrics", - "mysql_async", - "parking_lot 0.12.5", - "pulsar", - "redis", - "regex", - "reqwest", - "rumqttc-next", - "rustfs-config", - "rustfs-extension-schema", - "rustfs-kafka-async", - "rustfs-s3-types", - "rustfs-tls-runtime", - "rustfs-utils", - "rustls", - "rustls-native-certs", - "s3s", - "serde", - "serde_json", - "snap", - "sysinfo", - "thiserror 2.0.18", - "tokio", - "tokio-postgres", - "tokio-postgres-rustls", - "tracing", - "url", - "urlencoding", - "uuid", -] - [[package]] name = "rustfs-tls-runtime" version = "1.0.0-beta.8" @@ -8826,34 +4445,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "rustfs-trusted-proxies" -version = "1.0.0-beta.8" -dependencies = [ - "async-trait", - "axum", - "http 1.4.2", - "ipnetwork", - "metrics", - "moka", - "regex", - "reqwest", - "rustfs-config", - "rustfs-utils", - "serde", - "serde_json", - "thiserror 2.0.18", - "tokio", - "tower", - "tracing", -] - [[package]] name = "rustfs-utils" version = "1.0.0-beta.8" dependencies = [ "base64-simd", - "blake2 0.11.0-rc.6", + "blake2", "brotli", "bytes", "convert_case", @@ -8870,7 +4467,7 @@ dependencies = [ "md-5", "netif", "regex", - "rustix 1.1.4", + "rustix", "serde", "sha1 0.11.0", "sha2 0.11.0", @@ -8885,27 +4482,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "rustfs-zip" -version = "1.0.0-beta.8" -dependencies = [ - "astral-tokio-tar", - "async-compression", - "thiserror 2.0.18", - "tokio", - "tokio-stream", - "zip", -] - -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "rustify" version = "0.7.0" @@ -8940,19 +4516,6 @@ dependencies = [ "synstructure 0.12.6", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.13.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", -] - [[package]] name = "rustix" version = "1.1.4" @@ -8962,41 +4525,25 @@ dependencies = [ "bitflags 2.13.0", "errno", "libc", - "linux-raw-sys 0.12.1", + "linux-raw-sys", "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "aws-lc-rs", "log", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] -[[package]] -name = "rustls-connector" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7664e32b0ffbec386bdf1d7cbca51a89551a90d3278f135186cd6cb3cfa889c" -dependencies = [ - "futures-io", - "futures-rustls", - "log", - "rustls", - "rustls-pki-types", - "rustls-platform-verifier", - "rustls-webpki", -] - [[package]] name = "rustls-native-certs" version = "0.8.4" @@ -9072,13 +4619,13 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s3s" -version = "0.14.0-dev" -source = "git+https://github.com/rustfs/s3s?rev=c59b62f7badf29fefefec69381d13cd459f44aa8#c59b62f7badf29fefefec69381d13cd459f44aa8" +version = "0.14.0" +source = "git+https://github.com/rustfs/s3s?rev=300c657fb895b87e01e30b06e41a7996e57191f9#300c657fb895b87e01e30b06e41a7996e57191f9" dependencies = [ "arc-swap", "arrayvec", "async-trait", - "atoi 3.0.0", + "atoi", "base64-simd", "bytes", "bytestring", @@ -9097,10 +4644,10 @@ dependencies = [ "md-5", "memchr", "mime", - "nom 8.0.0", + "nom", "numeric_cast", "pin-project-lite", - "quick-xml 0.40.1", + "quick-xml", "serde", "serde_json", "serde_urlencoded", @@ -9121,15 +4668,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher 0.4.4", -] - [[package]] name = "same-file" version = "1.0.6" @@ -9139,12 +4677,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "saturating" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" - [[package]] name = "schannel" version = "0.1.29" @@ -9184,17 +4716,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scrypt" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" -dependencies = [ - "pbkdf2 0.12.2", - "salsa20", - "sha2 0.10.9", -] - [[package]] name = "sec1" version = "0.7.3" @@ -9242,12 +4763,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "seq-macro" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" - [[package]] name = "serde" version = "1.0.228" @@ -9258,26 +4773,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-value" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" -dependencies = [ - "ordered-float 2.10.1", - "serde", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - [[package]] name = "serde_core" version = "1.0.228" @@ -9311,46 +4806,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_nanos" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93142f0367a4cc53ae0fead1bcda39e85beccfad3dcd717656cacab94b12985" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" -dependencies = [ - "itoa", - "serde", - "serde_core", -] - -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -9369,7 +4824,7 @@ version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ - "base64 0.22.1", + "base64", "bs58", "chrono", "hex", @@ -9427,12 +4882,6 @@ dependencies = [ "digest 0.11.3", ] -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - [[package]] name = "sha2" version = "0.10.9" @@ -9477,15 +4926,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shellexpand" -version = "3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" -dependencies = [ - "dirs", -] - [[package]] name = "shlex" version = "2.0.1" @@ -9502,18 +4942,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signatory" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31" -dependencies = [ - "pkcs8 0.10.2", - "rand_core 0.6.4", - "signature 2.2.0", - "zeroize", -] - [[package]] name = "signature" version = "2.2.0" @@ -9574,12 +5002,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" -[[package]] -name = "sketches-ddsketch" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" - [[package]] name = "slab" version = "0.4.12" @@ -9606,27 +5028,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "snafu" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1a012328be2e3f5d5f6f3218147ca02588cea4cb865e876849ab6debcf36522" -dependencies = [ - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f103c50866b8743da9429b8a581d81a27c2d3a9c4ac7df8f8571c1dd7896eda" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "snap" version = "1.1.1" @@ -9643,23 +5044,17 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - [[package]] name = "spin" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" -dependencies = [ - "lock_api", -] + +[[package]] +name = "spin" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1527984ca054dfca79333baec451042863f485fbee01b7bf6d911de915cac865" [[package]] name = "spki" @@ -9681,62 +5076,12 @@ dependencies = [ "der 0.8.0", ] -[[package]] -name = "sqlparser" -version = "0.62.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c6d1b651dc4edf07eead2a0c6c78016ce971bc2c10da5266861b13f25e7cec" -dependencies = [ - "log", - "recursive", - "sqlparser_derive", -] - -[[package]] -name = "sqlparser_derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6dd45d8fc1c79299bfbb7190e42ccbbdf6a5f52e4a6ad98d92357ea965bd289" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" -[[package]] -name = "stacker" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" -dependencies = [ - "cc", - "cfg-if", - "libc", - "psm", - "windows-sys 0.61.2", -] - -[[package]] -name = "starshard" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dafd0cbefb050fa7a7f95ac229f7978ed4c99866a1a5b62e34a154b52d73d77" -dependencies = [ - "async-trait", - "hashbrown 0.17.1", - "rayon", - "rustc-hash", - "serde", - "tokio", - "tracing", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -9753,64 +5098,19 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "str_inflector" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b848d5a7695b33ad1be00f84a3c079fe85c9278a325ff9159e6c99cef4ef7" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "str_stack" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f446288b699d66d0fd2e30d1cfe7869194312524b3b9252594868ed26ef056a" - -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" - [[package]] name = "strum" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" dependencies = [ - "strum_macros 0.28.0", -] - -[[package]] -name = "strum_macros" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.118", + "strum_macros", ] [[package]] @@ -9831,35 +5131,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "symbolic-common" -version = "12.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332615d90111d8eeaf86a84dc9bbe9f65d0d8c5cf11b4caccedc37754eb0dcfd" -dependencies = [ - "debugid", - "memmap2", - "stable_deref_trait", - "uuid", -] - -[[package]] -name = "symbolic-demangle" -version = "12.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "912017718eb4d21930546245af9a3475c9dccf15675a5c215664e76621afc471" -dependencies = [ - "cpp_demangle", - "rustc-demangle", - "symbolic-common", -] - -[[package]] -name = "symlink" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" - [[package]] name = "syn" version = "1.0.109" @@ -9916,9 +5187,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.39.3" +version = "0.39.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21d0d938c10fcda3e897e28aaddf4ab462375d411f4378cd63b1c945f69aba96" +checksum = "2c8bd2130a9b60bee2581bf82cfe89ee836424d1f37dcfa4ce21509611684673" dependencies = [ "libc", "memchr", @@ -9926,7 +5197,6 @@ dependencies = [ "objc2-core-foundation", "objc2-io-kit", "objc2-open-directory", - "rayon", "windows", ] @@ -9957,19 +5227,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" -[[package]] -name = "tcp-stream" -version = "0.34.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d0735de48a565461c2ea14cc75b80ee5b6be3b4f5aeabe3553e4c2df8d23d" -dependencies = [ - "async-rs", - "cfg-if", - "futures-io", - "p12-keystore", - "rustls-connector", -] - [[package]] name = "tempfile" version = "3.27.0" @@ -9979,19 +5236,10 @@ dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", - "rustix 1.1.4", + "rustix", "windows-sys 0.61.2", ] -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "thiserror" version = "1.0.69" @@ -10041,59 +5289,14 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "ordered-float 2.10.1", -] - -[[package]] -name = "tikv-jemalloc-ctl" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661f1f6a57b3a36dc9174a2c10f19513b4866816e13425d3e418b11cc37bc24c" -dependencies = [ - "libc", - "paste", - "tikv-jemalloc-sys", -] - -[[package]] -name = "tikv-jemalloc-sys" -version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "tikv-jemallocator" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" -dependencies = [ - "libc", - "tikv-jemalloc-sys", -] - [[package]] name = "time" -version = "0.3.49" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" dependencies = [ "deranged", - "js-sys", - "libc", "num-conv", - "num_threads", "powerfmt", "serde_core", "time-core", @@ -10108,23 +5311,14 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.29" +version = "0.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" +checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" dependencies = [ "num-conv", "time-core", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -10150,27 +5344,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "tls_codec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de2e01245e2bb89d6f05801c564fa27624dbd7b1846859876c7dad82e90bf6b" -dependencies = [ - "tls_codec_derive", - "zeroize", -] - -[[package]] -name = "tls_codec_derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.118", -] - [[package]] name = "tokio" version = "1.52.3" @@ -10181,7 +5354,7 @@ dependencies = [ "io-uring", "libc", "mio", - "parking_lot 0.12.5", + "parking_lot", "pin-project-lite", "signal-hook-registry", "slab", @@ -10201,46 +5374,6 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "tokio-postgres" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a528f7d280f6d5b9cd149635c8705b0dd049754bc67d81d31fa25169a93809d3" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot 0.12.5", - "percent-encoding", - "phf 0.13.1", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.10.1", - "socket2", - "tokio", - "tokio-util", - "whoami", -] - -[[package]] -name = "tokio-postgres-rustls" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2ad44aa0ae96db89c4742212ed41645b2f597311ff6e1945542a4d9fadc2fb" -dependencies = [ - "rustls", - "sha2 0.11.0", - "tokio", - "tokio-postgres", - "tokio-rustls", - "x509-cert", -] - [[package]] name = "tokio-rustls" version = "0.26.4" @@ -10260,7 +5393,6 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", - "tokio-util", ] [[package]] @@ -10277,57 +5409,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-websockets" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f591660438b3038dd04d16c938271c79e7e06260ad2ea2885a4861bfb238605d" -dependencies = [ - "base64 0.22.1", - "bytes", - "futures-core", - "futures-sink", - "http 1.4.2", - "httparse", - "rand 0.8.6", - "ring", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tokio-util", - "webpki-roots 0.26.11", -] - -[[package]] -name = "toml_datetime" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.25.12+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" -dependencies = [ - "indexmap 2.14.0", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" -dependencies = [ - "winnow", -] - [[package]] name = "tonic" version = "0.14.6" @@ -10336,7 +5417,7 @@ checksum = "ac2a5518c70fa84342385732db33fb3f44bc4cc748936eb5833d2df34d6445ef" dependencies = [ "async-trait", "axum", - "base64 0.22.1", + "base64", "bytes", "flate2", "h2", @@ -10379,7 +5460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0" dependencies = [ "bytes", - "prost 0.14.4", + "prost", "tonic", ] @@ -10391,8 +5472,8 @@ checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27" dependencies = [ "prettyplease", "proc-macro2", - "prost-build 0.14.4", - "prost-types 0.14.4", + "prost-build", + "prost-types", "quote", "syn 2.0.118", "tempfile", @@ -10424,23 +5505,16 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "async-compression", "bitflags 2.13.0", "bytes", - "futures-core", "futures-util", "http 1.4.2", "http-body 1.0.1", - "http-body-util", "pin-project-lite", - "tokio", - "tokio-util", "tower", "tower-layer", "tower-service", - "tracing", "url", - "uuid", ] [[package]] @@ -10467,19 +5541,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "tracing-appender" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" -dependencies = [ - "crossbeam-channel", - "symlink", - "thiserror 2.0.18", - "time", - "tracing-subscriber", -] - [[package]] name = "tracing-attributes" version = "0.1.31" @@ -10501,16 +5562,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-error" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" -dependencies = [ - "tracing", - "tracing-subscriber", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -10538,36 +5589,15 @@ dependencies = [ "web-time", ] -[[package]] -name = "tracing-serde" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" -dependencies = [ - "serde", - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex-automata", - "serde", - "serde_json", "sharded-slab", - "smallvec", "thread_local", - "time", - "tracing", "tracing-core", - "tracing-log", - "tracing-serde", ] [[package]] @@ -10585,46 +5615,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tryhard" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fe58ebd5edd976e0fe0f8a14d2a04b7c81ef153ea9a54eebc42e67c2c23b4e5" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tungstenite" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" -dependencies = [ - "bytes", - "data-encoding", - "http 1.4.2", - "httparse", - "log", - "rand 0.9.4", - "rustls", - "rustls-pki-types", - "sha1 0.10.6", - "thiserror 2.0.18", -] - -[[package]] -name = "twox-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" - -[[package]] -name = "typed-path" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" - [[package]] name = "typenum" version = "1.20.1" @@ -10637,45 +5627,18 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-normalization" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" - [[package]] name = "unicode-segmentation" version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" -[[package]] -name = "unicode-width" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -10714,7 +5677,6 @@ dependencies = [ "idna", "percent-encoding", "serde", - "serde_derive", ] [[package]] @@ -10729,12 +5691,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - [[package]] name = "uuid" version = "1.23.3" @@ -10810,15 +5766,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.4+wasi-0.2.12" @@ -10837,15 +5784,6 @@ dependencies = [ "wit-bindgen 0.51.0", ] -[[package]] -name = "wasite" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" -dependencies = [ - "wasi 0.14.7+wasi-0.2.4", -] - [[package]] name = "wasm-bindgen" version = "0.2.125" @@ -10977,15 +5915,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.7", -] - [[package]] name = "webpki-roots" version = "1.0.7" @@ -10995,46 +5924,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", -] - -[[package]] -name = "whoami" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" -dependencies = [ - "libc", - "libredox", - "objc2-system-configuration", - "wasite", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - -[[package]] -name = "wildmatch" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29333c3ea1ba8b17211763463ff24ee84e41c78224c16b001cd907e663a38c68" -dependencies = [ - "serde", -] - [[package]] name = "winapi" version = "0.3.9" @@ -11343,15 +6232,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winnow" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" -dependencies = [ - "memchr", -] - [[package]] name = "wit-bindgen" version = "0.51.0" @@ -11452,45 +6332,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" -[[package]] -name = "x509-cert" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" -dependencies = [ - "const-oid 0.9.6", - "der 0.7.10", - "spki 0.7.3", - "tls_codec", -] - -[[package]] -name = "x509-parser" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" -dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom 7.1.3", - "oid-registry", - "rusticata-macros", - "thiserror 2.0.18", - "time", -] - -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix 1.1.4", -] - [[package]] name = "xmlparser" version = "0.13.6" @@ -11620,57 +6461,12 @@ dependencies = [ "syn 2.0.118", ] -[[package]] -name = "zip" -version = "8.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" -dependencies = [ - "aes 0.9.1", - "bzip2", - "constant_time_eq", - "crc32fast", - "deflate64", - "flate2", - "getrandom 0.4.2", - "hmac 0.13.0", - "indexmap 2.14.0", - "lzma-rust2", - "memchr", - "pbkdf2 0.13.0", - "ppmd-rust", - "sha1 0.11.0", - "time", - "typed-path", - "zeroize", - "zopfli", - "zstd", -] - -[[package]] -name = "zlib-rs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" - [[package]] name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" -[[package]] -name = "zopfli" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" -dependencies = [ - "bumpalo", - "crc32fast", - "log", - "simd-adler32", -] - [[package]] name = "zstd" version = "0.13.3" diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 4628d8aef..3fc3004a5 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -12,7 +12,6 @@ cargo-fuzz = true [dependencies] arbitrary = "1" libfuzzer-sys = "0.4" -rustfs = { path = "../rustfs", default-features = false } rustfs-ecstore = { path = "../crates/ecstore" } rustfs-filemeta = { path = "../crates/filemeta" } rustfs-policy = { path = "../crates/policy" } diff --git a/fuzz/README.md b/fuzz/README.md index 614b03fca..9d24efed5 100644 --- a/fuzz/README.md +++ b/fuzz/README.md @@ -34,7 +34,7 @@ Crash reproducers are written under `fuzz/artifacts//`. ## Targets - `bucket_validation` - - Exercises RustFS bucket-name and bucket/object argument validation without pulling in the full `rustfs` binary crate graph. + - Exercises RustFS bucket-name and bucket/object argument validation. - `archive_extract` - Exercises archive entry path normalization, prefix application, and bucket-namespace containment checks. - `path_containment` @@ -53,17 +53,34 @@ cd fuzz cargo +nightly fuzz run path_containment ``` -Run bounded smoke targets from the repository root: +Use the unified runner script from the repository root: ```bash -./scripts/fuzz/run_ci_targets.sh +# Build + run all smoke targets (60s each) +./scripts/fuzz/run.sh + +# Build only (no fuzz run) +BUILD_ONLY=1 ./scripts/fuzz/run.sh + +# Build + run a single target +FUZZ_TARGET=path_containment ./scripts/fuzz/run.sh + +# Nightly-style: 300s per target +MAX_TOTAL_TIME=300 ./scripts/fuzz/run.sh + +# Skip build (use pre-built harness) +SKIP_BUILD=1 FUZZ_TARGET=local_metadata ./scripts/fuzz/run.sh ``` -Run a longer local/nightly-style pass: +## CI Workflow -```bash -./scripts/fuzz/run_nightly_targets.sh -``` +The GitHub Actions workflow (`.github/workflows/fuzz.yml`) uses a **build/run separation** pattern: + +1. **`fuzz-build`** — compiles all fuzz targets once, then uploads only the prebuilt smoke harness binaries needed by later jobs. +2. **`pr-fuzz-smoke`** — matrix job that runs each target in parallel (60s each). Downloads the prebuilt binaries and executes them directly, so the job does not need to restore the full `fuzz/target/` tree or reinstall `cargo-fuzz`. +3. **`nightly-fuzz-corpus`** — matrix job that reuses the same prebuilt binaries and runs each target in parallel (300s each) on a daily schedule. + +This design avoids redundant compilation across targets and keeps wall-clock time low. ## Seed Corpus diff --git a/fuzz/fuzz_targets/archive_extract.rs b/fuzz/fuzz_targets/archive_extract.rs index 2ddf1313f..1597a9a83 100644 --- a/fuzz/fuzz_targets/archive_extract.rs +++ b/fuzz/fuzz_targets/archive_extract.rs @@ -1,7 +1,7 @@ #![no_main] use libfuzzer_sys::fuzz_target; -use rustfs::app::object_usecase::{normalize_extract_entry_key, validate_extract_relative_path}; +use rustfs_utils::path::{normalize_extract_entry_key, validate_extract_relative_path}; fn parse_case(data: &[u8]) -> (String, Option, bool, Vec) { let text = String::from_utf8_lossy(data); diff --git a/fuzz/fuzz_targets/local_metadata.rs b/fuzz/fuzz_targets/local_metadata.rs index 19b50e33a..b860ff496 100644 --- a/fuzz/fuzz_targets/local_metadata.rs +++ b/fuzz/fuzz_targets/local_metadata.rs @@ -3,7 +3,6 @@ use libfuzzer_sys::fuzz_target; use rustfs_filemeta::FileMeta; use rustfs_utils::compress::{CompressionAlgorithm, decompress_block}; -use std::collections::BTreeSet; fn pick_algorithm(tag: u8) -> CompressionAlgorithm { match tag % 6 { @@ -16,26 +15,42 @@ fn pick_algorithm(tag: u8) -> CompressionAlgorithm { } } -fn exercise_payload(payload: &[u8], algorithm: CompressionAlgorithm) { +/// Full exercise: all parsers + decompression on the complete payload. +fn exercise_full(payload: &[u8], algorithm: CompressionAlgorithm) { let _ = FileMeta::load(payload); let _ = FileMeta::load_or_convert(payload); let _ = FileMeta::read_format_versions(payload); let _ = decompress_block(payload, algorithm); } -fn interesting_prefix_lengths(len: usize) -> BTreeSet { - let mut lengths = BTreeSet::from([0usize, 1, 2, 4, 5, 8, 16, 32]); - lengths.insert(len); - lengths.insert(len.saturating_sub(1)); - lengths.into_iter().filter(|candidate| *candidate <= len).collect() +/// Lightweight exercise: only metadata parsers on a prefix (no decompression). +/// Prefix tests catch partial-input / truncated-header panics cheaply. +fn exercise_prefix(payload: &[u8]) { + let _ = FileMeta::load(payload); + let _ = FileMeta::read_format_versions(payload); } fuzz_target!(|data: &[u8]| { let algorithm = pick_algorithm(data.first().copied().unwrap_or_default()); - exercise_payload(data, algorithm); + // Full exercise on the complete input. + exercise_full(data, algorithm); - for prefix_len in interesting_prefix_lengths(data.len()) { - exercise_payload(&data[..prefix_len], algorithm); + // Prefix probing aligned with xl.meta binary layout: + // 4 = magic header ("XL2 ") + // 5 = magic + version byte + // 8 = magic + version + start of bin32 length field + // 12 = magic + version + bin32 length (4 bytes) + CRC start + // len-1 = truncated-at-end + // + // Only test prefixes that are strictly smaller than the full input + // (the full input is already tested above). + for prefix_len in [4usize, 5, 8, 12] { + if prefix_len < data.len() { + exercise_prefix(&data[..prefix_len]); + } + } + if data.len() > 1 { + exercise_prefix(&data[..data.len() - 1]); } }); diff --git a/rustfs/src/app/object_usecase.rs b/rustfs/src/app/object_usecase.rs index 10b148794..0252248bf 100644 --- a/rustfs/src/app/object_usecase.rs +++ b/rustfs/src/app/object_usecase.rs @@ -14,12 +14,43 @@ //! Object application use-case contracts. +use super::object_api_utils::to_s3s_etag; +use super::quota::checker::QuotaChecker; +use super::storageclass; +// Performance metrics recording (with zero-copy-metrics integration) +use super::ECStore; +use super::{AppReplicationConfigExt as _, AppVersioningConfigExt as _, predict_lifecycle_expiration, validate_restore_request}; +use super::{DiskError, is_all_buckets_not_found}; +use super::{DynReader, HashReader, WritePlan, wrap_reader}; +use super::{Error as EcstoreError, StorageError, is_err_bucket_not_found, is_err_object_not_found, is_err_version_not_found}; +use super::{MIN_DISK_COMPRESSIBLE_SIZE, is_disk_compressible}; +use super::{get_lock_acquire_timeout, is_valid_storage_class}; +use super::{ + lifecycle::{ + bucket_lifecycle_audit::LcEventSrc, + bucket_lifecycle_ops::{enqueue_transition_immediate, post_restore_opts}, + lifecycle::{self, TransitionOptions}, + }, + metadata_sys, + object_lock::{ + objectlock::{get_object_legalhold_meta, get_object_retention_meta}, + objectlock_sys::{BucketObjectLockSys, check_object_lock_for_deletion, is_retention_active}, + }, + quota::QuotaOperation, + replication::{ + DeletedObjectReplicationInfo, ObjectOpts as ReplicationObjectOpts, check_replicate_delete, get_must_replicate_options, + must_replicate, schedule_replication, schedule_replication_delete, + }, + tagging::decode_tags, + versioning_sys::BucketVersioningSys, +}; use crate::app::context::{ AppContext, get_global_app_context, resolve_notify_interface_for_context, resolve_object_store_handle_for_context, }; use crate::config::RustFSBufferConfig; use crate::delete_tail_activity::{DeleteTailActivityGuard, DeleteTailStage}; use crate::error::ApiError; +use crate::server::convert_ecstore_object_info; use crate::storage::access::{PostObjectRequestMarker, authorize_request, has_bypass_governance_header, req_info_mut}; use crate::storage::concurrency::{ ConcurrencyManager, GetObjectGuard, get_concurrency_aware_buffer_size, get_concurrency_manager, @@ -46,38 +77,6 @@ use http::{HeaderMap, HeaderValue, StatusCode}; use md5::Context as Md5Context; use metrics::{counter, histogram}; use pin_project_lite::pin_project; -use rustfs_object_capacity::capacity_manager::get_capacity_manager; -// Performance metrics recording (with zero-copy-metrics integration) -use super::ECStore; -use super::object_api_utils::to_s3s_etag; -use super::quota::checker::QuotaChecker; -use super::storageclass; -use super::{AppReplicationConfigExt as _, AppVersioningConfigExt as _, predict_lifecycle_expiration, validate_restore_request}; -use super::{DiskError, is_all_buckets_not_found}; -use super::{DynReader, HashReader, WritePlan, wrap_reader}; -use super::{Error as EcstoreError, StorageError, is_err_bucket_not_found, is_err_object_not_found, is_err_version_not_found}; -use super::{MIN_DISK_COMPRESSIBLE_SIZE, is_disk_compressible}; -use super::{get_lock_acquire_timeout, is_valid_storage_class}; -use super::{ - lifecycle::{ - bucket_lifecycle_audit::LcEventSrc, - bucket_lifecycle_ops::{enqueue_transition_immediate, post_restore_opts}, - lifecycle::{self, TransitionOptions}, - }, - metadata_sys, - object_lock::{ - objectlock::{get_object_legalhold_meta, get_object_retention_meta}, - objectlock_sys::{BucketObjectLockSys, check_object_lock_for_deletion, is_retention_active}, - }, - quota::QuotaOperation, - replication::{ - DeletedObjectReplicationInfo, ObjectOpts as ReplicationObjectOpts, check_replicate_delete, get_must_replicate_options, - must_replicate, schedule_replication, schedule_replication_delete, - }, - tagging::decode_tags, - versioning_sys::BucketVersioningSys, -}; -use crate::server::convert_ecstore_object_info; use rustfs_concurrency::GetObjectQueueSnapshot; use rustfs_filemeta::{ REPLICATE_INCOMING_DELETE, ReplicateDecision, ReplicateTargetDecision, ReplicationState, ReplicationStatusType, @@ -88,6 +87,7 @@ use rustfs_io_core::{BytesPool, PooledBuffer}; use rustfs_io_metrics; use rustfs_lock::NamespaceLockGuard; use rustfs_notify::EventArgsBuilder; +use rustfs_object_capacity::capacity_manager::get_capacity_manager; use rustfs_policy::policy::action::{Action, S3Action}; use rustfs_s3_ops::{S3Operation, delete_event_name_for_marker, put_event_name_for_post_object}; use rustfs_s3select_api::object_store::bytes_stream; @@ -119,7 +119,7 @@ use s3s::header::{X_AMZ_RESTORE, X_AMZ_RESTORE_OUTPUT_PATH}; use s3s::{S3Error, S3ErrorCode, S3Request, S3Response, S3Result, s3_error}; use std::collections::HashMap; use std::ops::Add; -use std::path::{Component, Path}; +use std::path::Path; use std::pin::Pin; use std::task::{Context, Poll}; @@ -337,14 +337,14 @@ impl MemoryTrackedBytesStream { impl futures::Stream for MemoryTrackedBytesStream { type Item = std::io::Result; - fn poll_next(self: std::pin::Pin<&mut Self>, _cx: &mut std::task::Context<'_>) -> std::task::Poll> { + fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { let this = self.project(); if *this.emitted { - return std::task::Poll::Ready(None); + return Poll::Ready(None); } *this.emitted = true; - std::task::Poll::Ready(Some(Ok(this.bytes.clone()))) + Poll::Ready(Some(Ok(this.bytes.clone()))) } } @@ -360,16 +360,12 @@ impl ExtractArchiveEtagReader { } impl AsyncRead for ExtractArchiveEtagReader { - fn poll_read( - self: std::pin::Pin<&mut Self>, - cx: &mut std::task::Context<'_>, - buf: &mut ReadBuf<'_>, - ) -> std::task::Poll> { + fn poll_read(self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>) -> Poll> { let this = self.project(); let before = buf.filled().len(); match this.inner.poll_read(cx, buf) { - std::task::Poll::Pending => std::task::Poll::Pending, - std::task::Poll::Ready(Ok(())) => { + Poll::Pending => Poll::Pending, + Poll::Ready(Ok(())) => { let filled = &buf.filled()[before..]; if !filled.is_empty() { this.md5.consume(filled); @@ -379,9 +375,9 @@ impl AsyncRead for ExtractArchiveEtagReader { *etag = Some(format!("{:x}", this.md5.clone().finalize())); } } - std::task::Poll::Ready(Ok(())) + Poll::Ready(Ok(())) } - std::task::Poll::Ready(Err(err)) => std::task::Poll::Ready(Err(err)), + Poll::Ready(Err(err)) => Poll::Ready(Err(err)), } } } @@ -988,21 +984,12 @@ fn snowball_meta_flag(headers: &HeaderMap, exact_keys: &[&str], suffix_lower: &s snowball_meta_value(headers, exact_keys, suffix_lower).is_some_and(|value| value.eq_ignore_ascii_case("true")) } -fn contains_parent_dir_component(path: &str) -> bool { - path.split(['/', '\\']).any(|component| component == "..") -} - +/// Validates that an archive entry path does not escape the target bucket. +/// +/// Delegates to [`rustfs_utils::path::validate_extract_relative_path`] and wraps +/// the result as an S3 error on failure. pub fn validate_extract_relative_path(path: &str) -> S3Result<()> { - let path = Path::new(path); - if path - .components() - .any(|component| matches!(component, Component::Prefix(_) | Component::RootDir | Component::ParentDir)) - || contains_parent_dir_component(path.to_string_lossy().as_ref()) - { - return Err(s3_error!(InvalidArgument, "archive entry path must stay within the target bucket")); - } - - Ok(()) + rustfs_utils::path::validate_extract_relative_path(path).map_err(|msg| s3_error!(InvalidArgument, "{msg}")) } fn normalize_snowball_prefix(prefix: &str) -> S3Result> { @@ -1016,22 +1003,13 @@ fn normalize_snowball_prefix(prefix: &str) -> S3Result> { Ok(Some(normalized.to_string())) } +/// Normalizes an archive entry key by applying a prefix, trimming slashes, +/// and ensuring directory entries end with `/`. +/// +/// Delegates to [`rustfs_utils::path::normalize_extract_entry_key`] and wraps +/// the result as an S3 error on failure. pub fn normalize_extract_entry_key(path: &str, prefix: Option<&str>, is_dir: bool) -> S3Result { - validate_extract_relative_path(path)?; - let path = path.trim_matches('/'); - let mut key = match prefix { - Some(prefix) if !path.is_empty() => format!("{prefix}/{path}"), - Some(prefix) => prefix.to_string(), - None => path.to_string(), - }; - - if is_dir && !key.ends_with('/') { - key.push('/'); - } - - validate_extract_relative_path(&key)?; - - Ok(key) + rustfs_utils::path::normalize_extract_entry_key(path, prefix, is_dir).map_err(|msg| s3_error!(InvalidArgument, "{msg}")) } fn map_extract_archive_error(err: impl std::fmt::Display) -> S3Error { @@ -1614,7 +1592,7 @@ impl DefaultObjectUsecase { #[allow(clippy::too_many_arguments)] async fn prepare_get_object_read( req: &S3Request, - store: &super::ECStore, + store: &ECStore, manager: &ConcurrencyManager, bucket: &str, key: &str, @@ -2895,7 +2873,6 @@ impl DefaultObjectUsecase { validate_ssec_for_read(&info.user_defined, sse_customer_key.as_ref(), sse_customer_key_md5.as_ref())?; let metadata_map = info.user_defined.clone(); - debug!( "GetObjectAttributes raw object_attributes={:?}", object_attributes.iter().map(|value| value.as_str()).collect::>() @@ -2952,7 +2929,6 @@ impl DefaultObjectUsecase { } else { None }; - let object_parts = if requested(ObjectAttributes::OBJECT_PARTS) && info.is_multipart() { let params = parse_list_parts_params(part_number_marker, max_parts)?; let mut parts = Vec::new(); diff --git a/rustfs/src/server/http.rs b/rustfs/src/server/http.rs index a2218f36f..c725f333f 100644 --- a/rustfs/src/server/http.rs +++ b/rustfs/src/server/http.rs @@ -31,11 +31,13 @@ use crate::server::{ }, }; use crate::storage; +use crate::storage::request_context::{RequestContext, extract_request_id_from_headers}; use crate::storage::rpc::InternodeRpcService; use crate::storage::tonic_service::make_server; use crate::storage::{TONIC_RPC_PREFIX, verify_rpc_signature}; use bytes::Bytes; use http::{HeaderMap, Method, Request as HttpRequest, Response}; +use hyper::body::Incoming; use hyper_util::{ rt::{TokioExecutor, TokioIo, TokioTimer}, server::conn::auto::Builder as ConnBuilder, @@ -56,12 +58,14 @@ use s3s::{host::MultiDomain, service::S3Service, service::S3ServiceBuilder}; use socket2::{SockRef, TcpKeepalive}; use std::io::{Error, Result}; use std::net::SocketAddr; +use std::pin::Pin; use std::sync::Arc; use std::sync::atomic::{AtomicU64, Ordering}; +use std::task::{Context, Poll}; use std::time::Duration; use tokio::net::{TcpListener, TcpStream}; use tonic::{Request, Status}; -use tower::ServiceBuilder; +use tower::{Service, ServiceBuilder}; use tower_http::add_extension::AddExtensionLayer; use tower_http::catch_panic::CatchPanicLayer; use tower_http::compression::CompressionLayer; @@ -220,6 +224,34 @@ pub(crate) fn active_http_requests() -> u64 { ACTIVE_HTTP_REQUESTS.load(Ordering::Relaxed) } +fn trace_on_response(response: &Response, latency: Duration, span: &Span) { + span.record("status_code", tracing::field::display(response.status())); + let _enter = span.enter(); + let status_class = status_class_label(response.status()); + record_active_http_requests(-1); + histogram!( + METRIC_HTTP_SERVER_REQUEST_DURATION_SECONDS, + LABEL_HTTP_STATUS_CLASS => status_class + ) + .record(latency.as_secs_f64()); + if response.status().is_client_error() || response.status().is_server_error() { + counter!( + METRIC_HTTP_SERVER_FAILURES_TOTAL, + LABEL_HTTP_STATUS_CLASS => status_class + ) + .increment(1); + } + if let Some(cl) = response.headers().get("content-length") + && let Some(len) = cl.to_str().ok().and_then(|s| s.parse::().ok()) + { + histogram!( + METRIC_HTTP_SERVER_RESPONSE_BODY_SIZE_BYTES, + LABEL_HTTP_STATUS_CLASS => status_class + ) + .record(len as f64); + } +} + pub async fn start_http_server(config: &config::Config, readiness: Arc) -> Result<(ShutdownHandle, SocketAddr)> { let server_addr = parse_and_resolve_address(config.address.as_str()).map_err(Error::other)?; @@ -800,6 +832,90 @@ struct ConnectionContext { trusted_proxy_layer: Option, } +#[derive(Clone)] +struct PathDispatchService { + external: A, + internode: B, +} + +#[derive(Clone, Default)] +struct InternodeRequestContextLiteLayer; + +impl tower::Layer for InternodeRequestContextLiteLayer { + type Service = InternodeRequestContextLiteService; + + fn layer(&self, inner: S) -> Self::Service { + InternodeRequestContextLiteService { inner } + } +} + +#[derive(Clone)] +struct InternodeRequestContextLiteService { + inner: S, +} + +impl Service> for InternodeRequestContextLiteService +where + S: Service> + Clone, +{ + type Response = S::Response; + type Error = S::Error; + type Future = S::Future; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + self.inner.poll_ready(cx) + } + + fn call(&mut self, mut req: HttpRequest) -> Self::Future { + let request_id = extract_request_id_from_headers(req.headers()); + req.extensions_mut().insert(RequestContext { + x_amz_request_id: request_id.clone(), + request_id, + trace_id: None, + span_id: None, + start_time: std::time::Instant::now(), + }); + self.inner.call(req) + } +} + +impl PathDispatchService { + fn new(external: A, internode: B) -> Self { + Self { external, internode } + } + + fn is_internode_path(path: &str) -> bool { + crate::server::has_path_prefix(path, crate::server::RPC_PREFIX) + } +} + +impl Service> for PathDispatchService +where + A: Service> + Clone + Send + 'static, + A::Future: Send + 'static, + B: Service, Response = A::Response, Error = A::Error> + Clone + Send + 'static, + B::Future: Send + 'static, +{ + type Response = A::Response; + type Error = A::Error; + type Future = Pin> + Send>>; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + match self.external.poll_ready(cx)? { + Poll::Ready(()) => self.internode.poll_ready(cx), + Poll::Pending => Poll::Pending, + } + } + + fn call(&mut self, req: HttpRequest) -> Self::Future { + if Self::is_internode_path(req.uri().path()) { + Box::pin(self.internode.call(req)) + } else { + Box::pin(self.external.call(req)) + } + } +} + /// Adapter that implements the OpenTelemetry [`Extractor`] trait for Hyper's /// [`HeaderMap`], enabling trace context propagation by extracting /// OpenTelemetry headers from incoming HTTP requests. @@ -912,7 +1028,8 @@ fn process_connection( let http_service = s3_service; let http_service = InternodeRpcService::new(http_service); - let service = hybrid(http_service, rpc_service); + let external_service = hybrid(http_service.clone(), rpc_service.clone()); + let internode_service = hybrid(http_service, rpc_service); let remote_addr = match socket.peer_addr() { Ok(addr) => Some(RemoteAddr(addr)), @@ -954,217 +1071,325 @@ fn process_connection( // 21. PublicHealthEndpointLayer — handles public health before s3s host parsing // 22. VirtualHostStyleHintLayer — actionable error for unroutable virtual-hosted-style (conditional) // ───────────────────────────────────────────────────────────── - let hybrid_service = ServiceBuilder::new() - // NOTE: Both extension types are intentionally inserted to maintain compatibility: - // 1. `Option` - Used by existing admin/storage handlers throughout the codebase - // 2. `std::net::SocketAddr` - Required by TrustedProxyMiddleware for proxy validation - // This dual insertion is necessary because the middleware expects the raw SocketAddr type - // while our application code uses the RemoteAddr wrapper. Consolidating these would - // require either modifying the third-party middleware or refactoring all existing handlers. - .layer(AddExtensionLayer::new(remote_addr)) - .option_layer(remote_addr.map(|ra| AddExtensionLayer::new(ra.0))) - // Add TrustedProxyLayer to handle X-Forwarded-For and other proxy headers - // This should be placed before TraceLayer so that logs reflect the real client IP - // Pre-computed in ConnectionContext to avoid per-connection is_enabled() check. - .option_layer(trusted_proxy_layer) - .layer(SetRequestIdLayer::x_request_id(MakeRequestUuid)) - .layer(RequestContextLayer) - .layer(EmptyBodyContentLengthCompatLayer) - .layer(CatchPanicLayer::new()) - // CRITICAL: Insert ReadinessGateLayer before business logic - // This stops requests from hitting IAMAuth or Storage if they are not ready. - .layer(ReadinessGateLayer::new(readiness)) - // Add Keystone authentication middleware - // This validates X-Auth-Token headers and stores credentials in task-local storage - // Must be placed AFTER ReadinessGateLayer but BEFORE business logic - // Pre-computed in ConnectionContext to avoid per-connection OnceLock read. - .layer(KeystoneAuthLayer::new(keystone_auth)) - .layer( - TraceLayer::new_for_http() - .make_span_with(|request: &HttpRequest<_>| { - let request_context = request.extensions().get::(); - let request_id = request_context - .map(|ctx| ctx.request_id.as_str()) - .unwrap_or("unknown"); - let trace_id = request_context - .and_then(|ctx| ctx.trace_id.as_deref()) - .unwrap_or("unknown"); - let span_id = request_context - .and_then(|ctx| ctx.span_id.as_deref()) - .unwrap_or("unknown"); + // Batch 1 intentionally keeps the external and internode stacks behaviorally + // identical while giving each path family a named construction boundary. + // Later batches will trim internode-only middleware without risking drift in + // the public HTTP stack. + let build_external_stack = |service| { + ServiceBuilder::new() + // NOTE: Both extension types are intentionally inserted to maintain compatibility: + // 1. `Option` - Used by existing admin/storage handlers throughout the codebase + // 2. `std::net::SocketAddr` - Required by TrustedProxyMiddleware for proxy validation + // This dual insertion is necessary because the middleware expects the raw SocketAddr type + // while our application code uses the RemoteAddr wrapper. Consolidating these would + // require either modifying the third-party middleware or refactoring all existing handlers. + .layer(AddExtensionLayer::new(remote_addr)) + .option_layer(remote_addr.map(|ra| AddExtensionLayer::new(ra.0))) + // Add TrustedProxyLayer to handle X-Forwarded-For and other proxy headers + // This should be placed before TraceLayer so that logs reflect the real client IP + // Pre-computed in ConnectionContext to avoid per-connection is_enabled() check. + .option_layer(trusted_proxy_layer.clone()) + .layer(SetRequestIdLayer::x_request_id(MakeRequestUuid)) + .layer(InternodeRequestContextLiteLayer) + .layer(EmptyBodyContentLengthCompatLayer) + .layer(CatchPanicLayer::new()) + // CRITICAL: Insert ReadinessGateLayer before business logic + // This stops requests from hitting IAMAuth or Storage if they are not ready. + .layer(ReadinessGateLayer::new(readiness.clone())) + // Add Keystone authentication middleware + // This validates X-Auth-Token headers and stores credentials in task-local storage + // Must be placed AFTER ReadinessGateLayer but BEFORE business logic + // Pre-computed in ConnectionContext to avoid per-connection OnceLock read. + .layer(KeystoneAuthLayer::new(keystone_auth.clone())) + .layer( + TraceLayer::new_for_http() + .make_span_with(|request: &HttpRequest<_>| { + let request_context = request.extensions().get::(); + let request_id = request_context + .map(|ctx| ctx.request_id.as_str()) + .unwrap_or("unknown"); + let trace_id = request_context + .and_then(|ctx| ctx.trace_id.as_deref()) + .unwrap_or("unknown"); + let span_id = request_context + .and_then(|ctx| ctx.span_id.as_deref()) + .unwrap_or("unknown"); - let parent_context = global::get_text_map_propagator(|propagator| { - propagator.extract(&HeaderMapCarrier::new(request.headers())) - }); + let parent_context = global::get_text_map_propagator(|propagator| { + propagator.extract(&HeaderMapCarrier::new(request.headers())) + }); - // Log trace context extraction for debugging distributed tracing - if parent_context.has_active_span() { - let span_ref = parent_context.span(); - trace!( - otel_trace_id = %span_ref.span_context().trace_id(), - otel_parent_span_id = %span_ref.span_context().span_id(), - sampled = span_ref.span_context().is_sampled(), - "Extracted trace context from incoming request headers" - ); - } else { - trace!("No trace context found in request headers, will create root span"); - } - // Extract real client IP from trusted proxy middleware if available - let client_info = request.extensions().get::(); - let peer_addr = client_info - .map(|info| info.real_ip.to_string()) - .or_else(|| request.extensions().get::().map(|addr| addr.0.to_string())) - .unwrap_or_else(|| "unknown".to_string()); - - let span = tracing::info_span!("http-request", - request_id = %request_id, - trace_id = %trace_id, - span_id = %span_id, - status_code = tracing::field::Empty, - method = %request.method(), - peer_addr = %peer_addr, - uri = %redact_sensitive_uri_query(request.uri()), - version = ?request.version(), - user_agent = tracing::field::Empty, - content_type = tracing::field::Empty, - content_length = tracing::field::Empty, - ); - if span.is_disabled() { - return span; - } - if let Err(e) = span.set_parent(parent_context) { - debug!(component = LOG_COMPONENT_SERVER, subsystem = LOG_SUBSYSTEM_HTTP, error = ?e, "Failed to propagate tracing context"); - } - for (header_name, header_value) in request.headers() { - let value = header_value.to_str().unwrap_or("invalid"); - if header_name == "user-agent" { - span.record("user_agent", value); - } else if header_name == "content-type" { - span.record("content_type", value); - } else if header_name == "content-length" { - span.record("content_length", value); + if parent_context.has_active_span() { + let span_ref = parent_context.span(); + trace!( + otel_trace_id = %span_ref.span_context().trace_id(), + otel_parent_span_id = %span_ref.span_context().span_id(), + sampled = span_ref.span_context().is_sampled(), + "Extracted trace context from incoming request headers" + ); + } else { + trace!("No trace context found in request headers, will create root span"); } - } + let client_info = request.extensions().get::(); + let peer_addr = client_info + .map(|info| info.real_ip.to_string()) + .or_else(|| request.extensions().get::().map(|addr| addr.0.to_string())) + .unwrap_or_else(|| "unknown".to_string()); - span - }) - .on_request(|request: &HttpRequest<_>, span: &Span| { - let _enter = span.enter(); - trace!("HTTP request started"); - let method = request_method_label(request.method()); - record_active_http_requests(1); - counter!( - METRIC_HTTP_SERVER_REQUESTS_TOTAL, - LABEL_HTTP_METHOD => method - ) - .increment(1); + let span = tracing::info_span!("http-request", + request_id = %request_id, + trace_id = %trace_id, + span_id = %span_id, + status_code = tracing::field::Empty, + method = %request.method(), + peer_addr = %peer_addr, + uri = %redact_sensitive_uri_query(request.uri()), + version = ?request.version(), + user_agent = tracing::field::Empty, + content_type = tracing::field::Empty, + content_length = tracing::field::Empty, + ); + if span.is_disabled() { + return span; + } + if let Err(e) = span.set_parent(parent_context) { + debug!(component = LOG_COMPONENT_SERVER, subsystem = LOG_SUBSYSTEM_HTTP, error = ?e, "Failed to propagate tracing context"); + } + for (header_name, header_value) in request.headers() { + let value = header_value.to_str().unwrap_or("invalid"); + if header_name == "user-agent" { + span.record("user_agent", value); + } else if header_name == "content-type" { + span.record("content_type", value); + } else if header_name == "content-length" { + span.record("content_length", value); + } + } - if let Some(cl) = request.headers().get("content-length") - && let Some(len) = cl.to_str().ok().and_then(|s| s.parse::().ok()) - { - counter!(METRIC_HTTP_SERVER_REQUEST_BODY_BYTES_TOTAL).increment(len); - histogram!( - METRIC_HTTP_SERVER_REQUEST_BODY_SIZE_BYTES, + span + }) + .on_request(|request: &HttpRequest<_>, span: &Span| { + let _enter = span.enter(); + trace!("HTTP request started"); + let method = request_method_label(request.method()); + record_active_http_requests(1); + counter!( + METRIC_HTTP_SERVER_REQUESTS_TOTAL, LABEL_HTTP_METHOD => method ) - .record(len as f64); - } - }) - .on_response(|response: &Response<_>, latency: Duration, span: &Span| { - span.record("status_code", tracing::field::display(response.status())); - let _enter = span.enter(); - let status_class = status_class_label(response.status()); - record_active_http_requests(-1); - histogram!( - METRIC_HTTP_SERVER_REQUEST_DURATION_SECONDS, - LABEL_HTTP_STATUS_CLASS => status_class - ) - .record(latency.as_secs_f64()); - if response.status().is_client_error() || response.status().is_server_error() { + .increment(1); + + if let Some(cl) = request.headers().get("content-length") + && let Some(len) = cl.to_str().ok().and_then(|s| s.parse::().ok()) + { + counter!(METRIC_HTTP_SERVER_REQUEST_BODY_BYTES_TOTAL).increment(len); + histogram!( + METRIC_HTTP_SERVER_REQUEST_BODY_SIZE_BYTES, + LABEL_HTTP_METHOD => method + ) + .record(len as f64); + } + }) + .on_response(trace_on_response) + .on_body_chunk(|chunk: &Bytes, latency: Duration, span: &Span| { + counter!(METRIC_HTTP_SERVER_RESPONSE_BODY_BYTES_TOTAL).increment(chunk.len() as u64); + #[cfg(feature = "tracing-chunk-debug")] + { + let _enter = span.enter(); + debug!(chunk_bytes = chunk.len(), duration_ms = duration_ms(latency), "HTTP response body chunk sent"); + } + #[cfg(not(feature = "tracing-chunk-debug"))] + { + let _ = (latency, span); + } + }) + .on_eos(|_trailers: Option<&HeaderMap>, stream_duration: Duration, span: &Span| { + #[cfg(feature = "tracing-chunk-debug")] + { + let _enter = span.enter(); + debug!(duration_ms = duration_ms(stream_duration), "HTTP response stream closed"); + } + #[cfg(not(feature = "tracing-chunk-debug"))] + { + let _ = (_trailers, stream_duration, span); + } + }) + .on_failure(|error, latency: Duration, span: &Span| { + let _enter = span.enter(); + record_active_http_requests(-1); counter!( METRIC_HTTP_SERVER_FAILURES_TOTAL, - LABEL_HTTP_STATUS_CLASS => status_class + LABEL_HTTP_STATUS_CLASS => "transport" ) .increment(1); - } - if let Some(cl) = response.headers().get("content-length") - && let Some(len) = cl.to_str().ok().and_then(|s| s.parse::().ok()) - { - histogram!( - METRIC_HTTP_SERVER_RESPONSE_BODY_SIZE_BYTES, - LABEL_HTTP_STATUS_CLASS => status_class + trace!(error = ?error, duration_ms = duration_ms(latency), "HTTP request failure captured by trace layer"); + }), + ) + .layer(RequestLoggingLayer) + .layer(PropagateRequestIdLayer::x_request_id()) + .layer(CompressionLayer::new().compress_when(PathAwareHttpCompressionPredicate::new(compression_config.clone()))) + .layer(PathCategoryInjectionLayer) + .layer(S3ErrorMessageCompatLayer) + .layer(ObjectAttributesEtagFixLayer) + .layer(ConditionalCorsLayer::new()) + .option_layer(if is_console { Some(RedirectLayer) } else { None }) + .layer(BodylessStatusFixLayer) + .layer(HeadRequestBodyFixLayer) + .layer(PublicHealthEndpointLayer) + .option_layer((!server_domains_configured && !is_console).then_some(VirtualHostStyleHintLayer)) + .service(service) + }; + let build_internode_stack = |service| { + ServiceBuilder::new() + .layer(AddExtensionLayer::new(remote_addr)) + .option_layer(remote_addr.map(|ra| AddExtensionLayer::new(ra.0))) + .option_layer(trusted_proxy_layer.clone()) + .layer(SetRequestIdLayer::x_request_id(MakeRequestUuid)) + .layer(RequestContextLayer) + .layer(EmptyBodyContentLengthCompatLayer) + .layer(CatchPanicLayer::new()) + .layer(ReadinessGateLayer::new(readiness.clone())) + .layer(KeystoneAuthLayer::new(keystone_auth.clone())) + .layer( + TraceLayer::new_for_http() + .make_span_with(|request: &HttpRequest<_>| { + let request_context = request.extensions().get::(); + let request_id = request_context + .map(|ctx| ctx.request_id.as_str()) + .unwrap_or("unknown"); + let trace_id = request_context + .and_then(|ctx| ctx.trace_id.as_deref()) + .unwrap_or("unknown"); + let span_id = request_context + .and_then(|ctx| ctx.span_id.as_deref()) + .unwrap_or("unknown"); + + let parent_context = global::get_text_map_propagator(|propagator| { + propagator.extract(&HeaderMapCarrier::new(request.headers())) + }); + + if parent_context.has_active_span() { + let span_ref = parent_context.span(); + trace!( + otel_trace_id = %span_ref.span_context().trace_id(), + otel_parent_span_id = %span_ref.span_context().span_id(), + sampled = span_ref.span_context().is_sampled(), + "Extracted trace context from incoming request headers" + ); + } else { + trace!("No trace context found in request headers, will create root span"); + } + let client_info = request.extensions().get::(); + let peer_addr = client_info + .map(|info| info.real_ip.to_string()) + .or_else(|| request.extensions().get::().map(|addr| addr.0.to_string())) + .unwrap_or_else(|| "unknown".to_string()); + + let span = tracing::info_span!("http-request", + request_id = %request_id, + trace_id = %trace_id, + span_id = %span_id, + status_code = tracing::field::Empty, + method = %request.method(), + peer_addr = %peer_addr, + uri = %redact_sensitive_uri_query(request.uri()), + version = ?request.version(), + user_agent = tracing::field::Empty, + content_type = tracing::field::Empty, + content_length = tracing::field::Empty, + ); + if span.is_disabled() { + return span; + } + if let Err(e) = span.set_parent(parent_context) { + debug!(component = LOG_COMPONENT_SERVER, subsystem = LOG_SUBSYSTEM_HTTP, error = ?e, "Failed to propagate tracing context"); + } + for (header_name, header_value) in request.headers() { + let value = header_value.to_str().unwrap_or("invalid"); + if header_name == "user-agent" { + span.record("user_agent", value); + } else if header_name == "content-type" { + span.record("content_type", value); + } else if header_name == "content-length" { + span.record("content_length", value); + } + } + + span + }) + .on_request(|request: &HttpRequest<_>, span: &Span| { + let _enter = span.enter(); + trace!("HTTP request started"); + let method = request_method_label(request.method()); + record_active_http_requests(1); + counter!( + METRIC_HTTP_SERVER_REQUESTS_TOTAL, + LABEL_HTTP_METHOD => method ) - .record(len as f64); - } - }) - .on_body_chunk(|chunk: &Bytes, latency: Duration, span: &Span| { - counter!(METRIC_HTTP_SERVER_RESPONSE_BODY_BYTES_TOTAL).increment(chunk.len() as u64); - #[cfg(feature = "tracing-chunk-debug")] - { + .increment(1); + + if let Some(cl) = request.headers().get("content-length") + && let Some(len) = cl.to_str().ok().and_then(|s| s.parse::().ok()) + { + counter!(METRIC_HTTP_SERVER_REQUEST_BODY_BYTES_TOTAL).increment(len); + histogram!( + METRIC_HTTP_SERVER_REQUEST_BODY_SIZE_BYTES, + LABEL_HTTP_METHOD => method + ) + .record(len as f64); + } + }) + .on_response(trace_on_response) + .on_body_chunk(|chunk: &Bytes, latency: Duration, span: &Span| { + counter!(METRIC_HTTP_SERVER_RESPONSE_BODY_BYTES_TOTAL).increment(chunk.len() as u64); + #[cfg(feature = "tracing-chunk-debug")] + { + let _enter = span.enter(); + debug!(chunk_bytes = chunk.len(), duration_ms = duration_ms(latency), "HTTP response body chunk sent"); + } + #[cfg(not(feature = "tracing-chunk-debug"))] + { + let _ = (latency, span); + } + }) + .on_eos(|_trailers: Option<&HeaderMap>, stream_duration: Duration, span: &Span| { + #[cfg(feature = "tracing-chunk-debug")] + { + let _enter = span.enter(); + debug!(duration_ms = duration_ms(stream_duration), "HTTP response stream closed"); + } + #[cfg(not(feature = "tracing-chunk-debug"))] + { + let _ = (_trailers, stream_duration, span); + } + }) + .on_failure(|error, latency: Duration, span: &Span| { let _enter = span.enter(); - debug!(chunk_bytes = chunk.len(), duration_ms = duration_ms(latency), "HTTP response body chunk sent"); - } - #[cfg(not(feature = "tracing-chunk-debug"))] - { - let _ = (latency, span); - } - }) - .on_eos(|_trailers: Option<&HeaderMap>, stream_duration: Duration, span: &Span| { - #[cfg(feature = "tracing-chunk-debug")] - { - let _enter = span.enter(); - debug!(duration_ms = duration_ms(stream_duration), "HTTP response stream closed"); - } - #[cfg(not(feature = "tracing-chunk-debug"))] - { - let _ = (_trailers, stream_duration, span); - } - }) - .on_failure(|_error, latency: Duration, span: &Span| { - let _enter = span.enter(); - record_active_http_requests(-1); - counter!( - METRIC_HTTP_SERVER_FAILURES_TOTAL, - LABEL_HTTP_STATUS_CLASS => "transport" - ) - .increment(1); - trace!(error = ?_error, duration_ms = duration_ms(latency), "HTTP request failure captured by trace layer"); - }), - ) - .layer(RequestLoggingLayer) - .layer(PropagateRequestIdLayer::x_request_id()) - // Compress responses based on whitelist configuration - // Only compresses when enabled and matches configured extensions/MIME types - .layer(CompressionLayer::new().compress_when(PathAwareHttpCompressionPredicate::new(compression_config))) - .layer(PathCategoryInjectionLayer) - .layer(S3ErrorMessageCompatLayer) - .layer(ObjectAttributesEtagFixLayer) - // Conditional CORS layer: only applies to S3 API requests (not Admin, not Console) - // Admin has its own CORS handling in router.rs - // Console has its own CORS layer in setup_console_middleware_stack() - // S3 API uses this system default CORS (RUSTFS_CORS_ALLOWED_ORIGINS) - // Bucket-level CORS takes precedence when configured (handled in router.rs for OPTIONS, and in ecfs.rs for actual requests) - .layer(ConditionalCorsLayer::new()) - .option_layer(if is_console { Some(RedirectLayer) } else { None }) - // Must run before outer response-transforming layers: clear the body and remove - // Content-Length, Content-Type, and Transfer-Encoding for statuses - // that MUST NOT carry a body (1xx/204/304). Placed inside those - // layers so they see the already-bodyless - // response and so no layer (e.g. CORS) re-adds body headers afterward. - .layer(BodylessStatusFixLayer) - // HEAD responses must not send body bytes even when the inner S3 layer - // serializes an XML error payload. - .layer(HeadRequestBodyFixLayer) - // Health probes are public admin routes, but s3s parses virtual-host - // buckets before custom routes. Handle them here so SERVER_DOMAINS - // cannot turn /health into an S3 bucket request. - .layer(PublicHealthEndpointLayer) - // Virtual-hosted-style S3 requests (the AWS SDK / Terraform default) cannot be - // routed when no server domain is configured: s3s parses them path-style and - // returns an opaque 501. When RUSTFS_SERVER_DOMAINS is unset, return an actionable - // error pointing at the fix. Inert (not installed) once domains are configured. - .option_layer((!server_domains_configured && !is_console).then_some(VirtualHostStyleHintLayer)) - .service(service); + record_active_http_requests(-1); + counter!( + METRIC_HTTP_SERVER_FAILURES_TOTAL, + LABEL_HTTP_STATUS_CLASS => "transport" + ) + .increment(1); + trace!(error = ?error, duration_ms = duration_ms(latency), "HTTP request failure captured by trace layer"); + }), + ) + .layer(PropagateRequestIdLayer::x_request_id()) + .layer(CompressionLayer::new().compress_when(PathAwareHttpCompressionPredicate::new(compression_config.clone()))) + .layer(PathCategoryInjectionLayer) + .layer(S3ErrorMessageCompatLayer) + .layer(ObjectAttributesEtagFixLayer) + .layer(ConditionalCorsLayer::new()) + .option_layer(if is_console { Some(RedirectLayer) } else { None }) + .layer(BodylessStatusFixLayer) + .layer(HeadRequestBodyFixLayer) + .layer(PublicHealthEndpointLayer) + .option_layer((!server_domains_configured && !is_console).then_some(VirtualHostStyleHintLayer)) + .service(service) + }; + let external_stack_service = build_external_stack(external_service); + let internode_stack_service = build_internode_stack(internode_service); + let hybrid_service = PathDispatchService::new(external_stack_service, internode_stack_service); let hybrid_service = TowerToHyperService::new(hybrid_service); @@ -1397,12 +1622,13 @@ mod tests { use super::*; use crate::server::compress::RequestPathCategory; use bytes::Bytes; - use http::HeaderMap; use http::Request as HttpRequest; - use http_body_util::Empty; + use http::{HeaderMap, StatusCode}; + use http_body_util::{Empty, Full}; use opentelemetry::propagation::Extractor; use std::convert::Infallible; use std::future::Ready; + use std::sync::{Arc, Mutex}; use std::task::{Context, Poll}; use tower::{Layer, Service, ServiceBuilder}; @@ -1620,6 +1846,36 @@ mod tests { } } + #[derive(Clone)] + struct MarkerService { + name: &'static str, + hits: Arc>>, + } + + impl MarkerService { + fn new(name: &'static str, hits: Arc>>) -> Self { + Self { name, hits } + } + } + + impl Service> for MarkerService { + type Response = Response>; + type Error = Infallible; + type Future = Ready>, Infallible>>; + + fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(Ok(())) + } + + fn call(&mut self, _req: HttpRequest) -> Self::Future { + self.hits.lock().expect("hits").push(self.name); + std::future::ready(Ok(Response::builder() + .status(StatusCode::OK) + .body(Full::from(Bytes::from_static(self.name.as_bytes()))) + .expect("response"))) + } + } + #[test] fn test_service_builder_order_regression_for_response_extensions() { let request = HttpRequest::builder().uri("/bucket/archive.zip").body(()).expect("request"); @@ -1648,4 +1904,21 @@ mod tests { Some("true") ); } + + #[test] + fn path_dispatch_service_identifies_rpc_prefix() { + let hits = Arc::new(Mutex::new(Vec::new())); + let service = + PathDispatchService::new(MarkerService::new("external", Arc::clone(&hits)), MarkerService::new("internode", hits)); + + assert!(PathDispatchService::::is_internode_path(&format!( + "{}/put_file_stream", + crate::server::RPC_PREFIX + ))); + assert!(!PathDispatchService::::is_internode_path( + "/bucket/object.txt" + )); + assert!(!PathDispatchService::::is_internode_path("/rustfs/rpcx")); + let _ = service; + } } diff --git a/rustfs/src/storage/rpc/http_service.rs b/rustfs/src/storage/rpc/http_service.rs index 423602774..f004983a4 100644 --- a/rustfs/src/storage/rpc/http_service.rs +++ b/rustfs/src/storage/rpc/http_service.rs @@ -38,6 +38,7 @@ use serde_urlencoded::from_bytes; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; +use std::time::Instant; use tokio::io::{self, AsyncWriteExt}; use tokio_util::io::ReaderStream; use tower::Service; @@ -280,6 +281,7 @@ fn is_internode_rpc_path(path: &str) -> bool { async fn handle_internode_rpc(req: Request) -> Response { let operation = internode_http_operation(req.uri().path()); + let started_at = Instant::now(); if let Err(response) = verify_internode_rpc_signature(req.uri(), req.method(), req.headers()) { record_internode_rpc_error(operation); return *response; @@ -299,6 +301,14 @@ async fn handle_internode_rpc(req: Request) -> Response { record_internode_rpc_error(operation); } + if let Some(operation) = operation { + resolve_internode_metrics().record_duration_for_operation_and_backend( + operation, + INTERNODE_TRANSPORT_BACKEND_TCP_HTTP, + started_at.elapsed(), + ); + } + response } diff --git a/scripts/fuzz/run.sh b/scripts/fuzz/run.sh new file mode 100755 index 000000000..3eeb8a3c1 --- /dev/null +++ b/scripts/fuzz/run.sh @@ -0,0 +1,82 @@ +#!/bin/sh + +# Unified fuzz runner script. +# +# Modes: +# ./scripts/fuzz/run.sh # build + run all smoke targets (60s each) +# BUILD_ONLY=1 ./scripts/fuzz/run.sh # build only, no fuzz run +# FUZZ_TARGET=path_containment ./scripts/fuzz/run.sh # build + run single target +# MAX_TOTAL_TIME=300 ./scripts/fuzz/run.sh # nightly-style 300s per target +# +# Environment variables: +# FUZZ_TARGET — run only this target (default: all smoke targets) +# MAX_TOTAL_TIME — seconds to fuzz per target (default: 60) +# ARTIFACT_ROOT — artifact output directory (default: artifacts) +# BUILD_ONLY — set to 1 to skip fuzz runs (default: 0) +# SKIP_BUILD — set to 1 to skip build phase (default: 0) +# USE_PREBUILT_BINARY — set to 1 to run a prebuilt fuzz binary directly +# PREBUILT_BINARY_DIR — directory containing prebuilt fuzz binaries + +set -eu + +SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +REPO_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd) +FUZZ_DIR="$REPO_ROOT/fuzz" +MAX_TOTAL_TIME=${MAX_TOTAL_TIME:-60} +ARTIFACT_ROOT=${ARTIFACT_ROOT:-artifacts} +FUZZ_TARGET=${FUZZ_TARGET:-} +BUILD_ONLY=${BUILD_ONLY:-0} +SKIP_BUILD=${SKIP_BUILD:-0} +USE_PREBUILT_BINARY=${USE_PREBUILT_BINARY:-0} +PREBUILT_BINARY_DIR=${PREBUILT_BINARY_DIR:-} + +cd "$FUZZ_DIR" +mkdir -p "$ARTIFACT_ROOT" + +targets="path_containment bucket_validation local_metadata" +if [ -n "$FUZZ_TARGET" ]; then + targets="$FUZZ_TARGET" +fi + +# Phase 1: build (unless skipped) +if [ "$SKIP_BUILD" != "1" ]; then + for target in $targets; do + echo "==> cargo +nightly fuzz build $target" + cargo +nightly fuzz build "$target" + done +fi + +if [ "$BUILD_ONLY" = "1" ]; then + echo "==> Build-only mode; skipping fuzz runs." + exit 0 +fi + +# Phase 2: run each target (incremental — no recompilation if already built) +for target in $targets; do + artifact_dir="$ARTIFACT_ROOT/$target" + corpus_dir="$FUZZ_DIR/corpus/$target" + mkdir -p "$artifact_dir" + mkdir -p "$corpus_dir" + + if [ "$USE_PREBUILT_BINARY" = "1" ]; then + binary_dir="$PREBUILT_BINARY_DIR" + if [ -z "$binary_dir" ]; then + if [ -n "${CARGO_BUILD_TARGET:-}" ]; then + binary_dir="$FUZZ_DIR/target/${CARGO_BUILD_TARGET}/release" + else + binary_dir="$FUZZ_DIR/target/release" + fi + fi + binary_path="$binary_dir/$target" + if [ ! -x "$binary_path" ]; then + echo "Missing executable prebuilt fuzz binary: $binary_path" >&2 + exit 1 + fi + echo "==> $binary_path (-max_total_time=$MAX_TOTAL_TIME, -artifact_prefix=$artifact_dir/, corpus=$corpus_dir)" + "$binary_path" -max_total_time="$MAX_TOTAL_TIME" -artifact_prefix="$artifact_dir/" "$corpus_dir" + continue + fi + + echo "==> cargo +nightly fuzz run $target (-max_total_time=$MAX_TOTAL_TIME, -artifact_prefix=$artifact_dir/)" + cargo +nightly fuzz run "$target" -- -max_total_time="$MAX_TOTAL_TIME" -artifact_prefix="$artifact_dir/" +done diff --git a/scripts/fuzz/run_ci_targets.sh b/scripts/fuzz/run_ci_targets.sh deleted file mode 100755 index bfe632be6..000000000 --- a/scripts/fuzz/run_ci_targets.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -set -eu - -SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) -REPO_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd) -FUZZ_DIR="$REPO_ROOT/fuzz" -MAX_TOTAL_TIME=${MAX_TOTAL_TIME:-60} -ARTIFACT_ROOT=${ARTIFACT_ROOT:-artifacts} -FUZZ_TARGET=${FUZZ_TARGET:-} - -cd "$FUZZ_DIR" -mkdir -p "$ARTIFACT_ROOT" - -targets="path_containment bucket_validation local_metadata" -if [ -n "$FUZZ_TARGET" ]; then - targets="$FUZZ_TARGET" -fi - -for target in $targets; do - artifact_dir="$ARTIFACT_ROOT/$target" - mkdir -p "$artifact_dir" - echo "==> cargo +nightly fuzz run $target (-max_total_time=$MAX_TOTAL_TIME, -artifact_prefix=$artifact_dir/)" - cargo +nightly fuzz run "$target" -- -max_total_time="$MAX_TOTAL_TIME" -artifact_prefix="$artifact_dir/" -done diff --git a/scripts/fuzz/run_nightly_targets.sh b/scripts/fuzz/run_nightly_targets.sh deleted file mode 100755 index 78cf9fb08..000000000 --- a/scripts/fuzz/run_nightly_targets.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -set -eu - -SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) -REPO_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd) -FUZZ_DIR="$REPO_ROOT/fuzz" -MAX_TOTAL_TIME=${MAX_TOTAL_TIME:-300} -ARTIFACT_ROOT=${ARTIFACT_ROOT:-artifacts} -FUZZ_TARGET=${FUZZ_TARGET:-} - -cd "$FUZZ_DIR" -mkdir -p "$ARTIFACT_ROOT" - -targets="path_containment bucket_validation local_metadata" -if [ -n "$FUZZ_TARGET" ]; then - targets="$FUZZ_TARGET" -fi - -for target in $targets; do - artifact_dir="$ARTIFACT_ROOT/$target" - mkdir -p "$artifact_dir" - echo "==> cargo +nightly fuzz run $target (-max_total_time=$MAX_TOTAL_TIME, -artifact_prefix=$artifact_dir/)" - cargo +nightly fuzz run "$target" -- -max_total_time="$MAX_TOTAL_TIME" -artifact_prefix="$artifact_dir/" -done