From afe46c01e7677ede5db9cb609f8818ec4e94f279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Fri, 19 Jun 2026 21:33:00 +0800 Subject: [PATCH] refactor: prune consumer ecstore object aliases (#3622) --- crates/heal/src/heal/storage_compat.rs | 6 +- crates/protocols/src/swift/storage_compat.rs | 9 +- crates/s3select-api/src/storage_compat.rs | 6 +- crates/scanner/src/storage_compat.rs | 12 +-- docs/architecture/migration-progress.md | 85 +++++++++++++++---- .../profiling-numa-capability-inventory.md | 3 + docs/architecture/startup-timeline.md | 4 +- rustfs/src/lib.rs | 1 + rustfs/src/startup_profiling.rs | 71 ++++++++++++++++ rustfs/src/startup_runtime.rs | 2 +- rustfs/src/startup_services.rs | 2 +- rustfs/src/storage/storage_compat.rs | 8 +- scripts/check_architecture_migration_rules.sh | 18 ---- 13 files changed, 169 insertions(+), 58 deletions(-) create mode 100644 rustfs/src/startup_profiling.rs diff --git a/crates/heal/src/heal/storage_compat.rs b/crates/heal/src/heal/storage_compat.rs index d1ed254d9..e3536010d 100644 --- a/crates/heal/src/heal/storage_compat.rs +++ b/crates/heal/src/heal/storage_compat.rs @@ -29,6 +29,6 @@ pub(crate) use rustfs_ecstore::global::GLOBAL_LOCAL_DISK_MAP; #[cfg(test)] pub(crate) use rustfs_ecstore::disk::{DiskOption, new_disk}; -pub type HealObjectInfo = rustfs_ecstore::object_api::ObjectInfo; -pub type HealObjectOptions = rustfs_ecstore::object_api::ObjectOptions; -pub type HealPutObjReader = rustfs_ecstore::object_api::PutObjReader; +pub type HealObjectInfo = ::ObjectInfo; +pub type HealObjectOptions = ::ObjectOptions; +pub type HealPutObjReader = ::PutObjectReader; diff --git a/crates/protocols/src/swift/storage_compat.rs b/crates/protocols/src/swift/storage_compat.rs index baa076acf..d71cb08da 100644 --- a/crates/protocols/src/swift/storage_compat.rs +++ b/crates/protocols/src/swift/storage_compat.rs @@ -17,11 +17,10 @@ use std::sync::Arc; pub(super) type SwiftBucketMetadata = rustfs_ecstore::bucket::metadata::BucketMetadata; pub(super) type SwiftStorageResult = rustfs_ecstore::error::Result; pub(super) type SwiftStore = rustfs_ecstore::store::ECStore; - -pub type SwiftGetObjectReader = rustfs_ecstore::object_api::GetObjectReader; -pub type SwiftObjectInfo = rustfs_ecstore::object_api::ObjectInfo; -pub type SwiftObjectOptions = rustfs_ecstore::object_api::ObjectOptions; -pub type SwiftPutObjReader = rustfs_ecstore::object_api::PutObjReader; +pub type SwiftGetObjectReader = ::GetObjectReader; +pub type SwiftObjectInfo = ::ObjectInfo; +pub type SwiftObjectOptions = ::ObjectOptions; +pub type SwiftPutObjReader = ::PutObjectReader; pub fn resolve_swift_object_store_handle() -> Option> { rustfs_ecstore::resolve_object_store_handle() diff --git a/crates/s3select-api/src/storage_compat.rs b/crates/s3select-api/src/storage_compat.rs index a80e75d36..7491c2196 100644 --- a/crates/s3select-api/src/storage_compat.rs +++ b/crates/s3select-api/src/storage_compat.rs @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -pub(crate) type SelectGetObjectReader = rustfs_ecstore::object_api::GetObjectReader; -pub(crate) type SelectObjectInfo = rustfs_ecstore::object_api::ObjectInfo; -pub(crate) type SelectObjectOptions = rustfs_ecstore::object_api::ObjectOptions; pub(crate) type SelectStorageError = rustfs_ecstore::error::StorageError; pub(crate) type SelectStore = rustfs_ecstore::store::ECStore; +pub(crate) type SelectGetObjectReader = ::GetObjectReader; +pub(crate) type SelectObjectInfo = ::ObjectInfo; +pub(crate) type SelectObjectOptions = ::ObjectOptions; pub(crate) const SELECT_DEFAULT_READ_BUFFER_SIZE: usize = rustfs_ecstore::set_disk::DEFAULT_READ_BUFFER_SIZE; diff --git a/crates/scanner/src/storage_compat.rs b/crates/scanner/src/storage_compat.rs index 1ee36b309..110816413 100644 --- a/crates/scanner/src/storage_compat.rs +++ b/crates/scanner/src/storage_compat.rs @@ -47,6 +47,12 @@ pub(crate) use rustfs_ecstore::bucket::{ pub(crate) use rustfs_ecstore::disk::{DiskAPI, DiskInfoOptions}; pub(crate) use rustfs_ecstore::global::GLOBAL_TierConfigMgr; +pub type ScannerGetObjectReader = ::GetObjectReader; +pub type ScannerObjectInfo = ::ObjectInfo; +pub type ScannerObjectOptions = ::ObjectOptions; +pub type ScannerObjectToDelete = ObjectToDelete; +pub type ScannerPutObjReader = ::PutObjectReader; + pub(crate) mod storageclass { pub(crate) const RRS: &str = rustfs_ecstore::config::storageclass::RRS; pub(crate) const STANDARD: &str = rustfs_ecstore::config::storageclass::STANDARD; @@ -58,12 +64,6 @@ pub(crate) use rustfs_ecstore::config::init as init_ecstore_config_for_scanner_t #[cfg(test)] pub(crate) use rustfs_ecstore::disk::{DiskOption, endpoint::Endpoint, new_disk}; -pub type ScannerGetObjectReader = rustfs_ecstore::object_api::GetObjectReader; -pub type ScannerObjectInfo = rustfs_ecstore::object_api::ObjectInfo; -pub type ScannerObjectOptions = rustfs_ecstore::object_api::ObjectOptions; -pub type ScannerObjectToDelete = ObjectToDelete; -pub type ScannerPutObjReader = rustfs_ecstore::object_api::PutObjReader; - pub(crate) fn resolve_scanner_object_store_handle() -> Option> { rustfs_ecstore::resolve_object_store_handle() } diff --git a/docs/architecture/migration-progress.md b/docs/architecture/migration-progress.md index 88a8ee318..caf03cb52 100644 --- a/docs/architecture/migration-progress.md +++ b/docs/architecture/migration-progress.md @@ -5,16 +5,16 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block ## Current Context - Issue: [`rustfs/backlog#660`](https://github.com/rustfs/backlog/issues/660) -- Branch: `overtrue/arch-iam-object-boundary-prune` -- Baseline: stacked after `rustfs/rustfs#3620` - (`c7bee5de904c9a1ea70f73ad6621895a30b3c387`). +- Branch: `overtrue/arch-final-object-boundary-prune` +- Baseline: stacked after `rustfs/rustfs#3622` + (`4300bf04f3a82ef4cc2605f417f89e7b4643b99e`). - PR type for this branch: `consumer-migration` - Runtime behavior changes: none. -- Rust code changes: route IAM config/store object metadata and options aliases - through `rustfs_storage_api::ObjectOperations` associated types. +- Rust code changes: route heal and RustFS storage object reader, writer, + metadata, and options aliases through `rustfs_storage_api` associated types. - CI/script changes: shrink the remaining external `rustfs_ecstore::object_api` - compatibility alias snapshot by removing IAM object-info/options aliases. -- Docs changes: record the API-069 IAM object boundary prune slice. + compatibility alias snapshot to empty. +- Docs changes: record the API-071 final object boundary prune slice. ## Phase 0 Tasks @@ -360,6 +360,36 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block - Verification: focused IAM compile/tests, migration and layer guards, formatting, diff hygiene, full pre-commit, and three-expert review. +- [x] `API-070` Prune consumer direct ECStore object aliases. + - Completed slice: replace scanner, s3select, and Swift + `GetObjectReader`/`ObjectInfo`/`ObjectOptions`/`PutObjReader` + compatibility aliases with concrete store `rustfs_storage_api` associated + types. + - Acceptance: scanner, s3select, and Swift no longer name + `rustfs_ecstore::object_api::{GetObjectReader,ObjectInfo,ObjectOptions,PutObjReader}` + directly, and the remaining object-api alias allowlist shrinks by eleven + entries. + - Must preserve: scanner lifecycle/replication IO bounds and config helpers, + s3select read buffer/object error handling, Swift bucket metadata helpers, + and object reader/writer concrete types exposed through each local + compatibility boundary. + - Verification: focused consumer compile/tests, migration and layer guards, + formatting, diff hygiene, full pre-commit, and three-expert review. + +- [x] `API-071` Prune final direct ECStore object aliases. + - Completed slice: replace heal and RustFS storage + `GetObjectReader`/`ObjectInfo`/`ObjectOptions`/`PutObjReader` + compatibility aliases with concrete store `rustfs_storage_api` associated + types. + - Acceptance: no external `storage_compat.rs` module names + `rustfs_ecstore::object_api::{GetObjectReader,ObjectInfo,ObjectOptions,PutObjReader}` + directly, and the external object-api alias allowlist is empty. + - Must preserve: heal object metadata and rewrite reader construction, + RustFS storage object read/write paths, S3 response metadata semantics, + SSE/encryption handling, and storage object option behavior. + - Verification: focused heal/storage compile/tests, migration and layer + guards, formatting, diff hygiene, full pre-commit, and three-expert review. + - [x] `TEST-PRTYPE-001` Check PR type enum consistency. - Acceptance: `./scripts/check_architecture_migration_rules.sh` parses the allowed PR types from [`crate-boundaries.md`](crate-boundaries.md) and fails @@ -1940,27 +1970,52 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block binary/lib compile checks, formatting, migration guards, Rust risk scan, branch freshness check, and pre-commit quality gate. +- [x] `R-020` Isolate profiling lifecycle hooks. + - Do: route BOOT-006 profiling initialization and STOP-004 profiling shutdown + through `startup_profiling` hook functions while keeping `profiling.rs` as + the CPU/memory profiling implementation and admin dump API owner. + - Acceptance: startup still initializes profiling before trusted proxies and + outbound TLS material; shutdown still stops profiling after notifier/audit + shutdown and before HTTP shutdown; unsupported targets and disabled + profiling keep their existing no-op behavior. + - Must preserve: profiling env flags, CPU/memory mode handling, target gates, + cancellation-token ownership, admin pprof routes, non-fatal startup + behavior, and shutdown ordering. + - Verification: focused startup profiling hook tests, binary/lib compile + checks, formatting, migration guards, Rust risk scan, branch freshness + check, and pre-commit quality gate. + ## Next PRs -1. `consumer-migration`: connect additional scanner, repair, replication, and - metadata admission owners to the workload registry only after each owner has - dedicated preservation coverage. -2. `pure-move`/`consumer-migration`: continue larger cleanup slices with the +1. `pure-move`: continue larger lifecycle hook slices for optional runtime + sidecars while preserving startup and shutdown ordering. +2. `consumer-migration`: continue larger cleanup slices with the loss-prevention guards active for remaining ECStore compatibility contracts - now that broad compatibility passthroughs are fully closed. + that still have dedicated preservation coverage. ## Pre-Push Review Log | Expert | Status | Notes | |---|---|---| -| Quality/architecture | passed | S-015 removes obsolete KMS admin policy action variants after the handler fallback cleanup; API-042/API-043/API-044/API-045/API-046/API-047/API-048/API-049/API-050/API-051/API-052/API-053/API-054 narrow notify, S3 Select, OBS, IAM, Swift, heal, scanner, RustFS runtime, test, fuzz, lifecycle helper, harness, and RustFS runtime compatibility contracts without moving ECStore storage metadata ownership; G-011/G-012/G-013 add docs-only baselines for scheduler, placement/repair, and profiling/NUMA work; Issue #660 PR-08/PR-09 add read-only observability and topology contracts in storage-api only; PR-05/PR-07 add scheduler preservation tests and workload contracts; API-055/SCH-001 adds a local storage concurrency provider; current API-056/R-016 wires runtime observability and endpoint topology providers without moving implementation ownership. | -| Migration preservation | passed | KMS endpoint URLs, query aliases, request bodies, response contracts, and dedicated `kms:*` authorization behavior are preserved; event builder call sites, ECStore event bridge conversion, restore event data, version IDs, metadata filtering, config read/save semantics, S3 Select store/error/buffer semantics, OBS metrics state reads, IAM config/notification/error semantics, Swift bucket metadata access, heal disk/resume/task behavior, scanner lifecycle/replication/data-usage behavior, RustFS startup/admin/app/storage runtime access, e2e/test/fuzz import behavior, lifecycle expiration/transition helper DTO field contracts, flattened harness and RustFS runtime scalar/secondary alias behavior, unchanged no-op handling, remove-event behavior, scheduler/readiness/placement/profiling runtime behavior, platform gates, missing/unknown capability states, placement/topology labels, scheduler thresholds, queue snapshot semantics, disk-read semaphore behavior, and admission behavior are preserved. | -| Testing/verification | passed | Focused compiles/tests, fuzz target compile, guards, formatting, diff hygiene, risk scan, and full `make pre-commit` passed for prior code slices; current Issue #660 API-056/R-016 slice uses runtime capability provider tests, focused RustFS library check, migration and layer guards, formatting, diff hygiene, and three-expert review. | +| Quality/architecture | passed | R-020 moves profiling init/shutdown call sites behind `startup_profiling` hook functions without moving CPU/memory profiling implementation ownership or admin pprof APIs. | +| Migration preservation | passed | BOOT-006 still initializes profiling before trusted proxies/provider/TLS setup; STOP-004 still stops profiling after notifier/audit shutdown and before HTTP shutdown; profiling env flags, platform gates, target unsupported behavior, and cancellation-token ownership remain in `profiling.rs`. | +| Testing/verification | passed | Focused startup profiling hook tests, RustFS library check, migration/layer guards, formatting, diff hygiene, Rust risk scan, and full `make pre-commit` validate the current R-020 slice. | ## Verification Notes Passed before push: +- Issue #660 R-020 current slice: + - `cargo test -p rustfs --lib startup_profiling -- --nocapture`: passed. + - `cargo check -p rustfs --lib`: passed. + - `./scripts/check_architecture_migration_rules.sh`: passed. + - `./scripts/check_layer_dependencies.sh`: passed. + - `cargo fmt --all --check`: passed. + - `git diff --check`: passed. + - Rust risk scan on changed Rust files: passed. + - `make pre-commit`: passed. + - Three-expert review: passed. + - Issue #660 API-056/R-016 current slice: - `cargo test -p rustfs --lib runtime_capabilities -- --nocapture`: passed. - `cargo check -p rustfs --lib`: passed. diff --git a/docs/architecture/profiling-numa-capability-inventory.md b/docs/architecture/profiling-numa-capability-inventory.md index a9344015e..1fbac5334 100644 --- a/docs/architecture/profiling-numa-capability-inventory.md +++ b/docs/architecture/profiling-numa-capability-inventory.md @@ -24,6 +24,9 @@ sidecars are designed. The current safe baseline is: - Profiling is opt-in through env flags and must not make startup fatal. +- Startup and shutdown call profiling through `startup_profiling` lifecycle + hooks; `profiling.rs` remains the CPU/memory profiling implementation and + admin dump API owner. - Unsupported profiling targets return structured unsupported errors or skip startup tasks. - Memory observability records process/system metrics and adds cgroup split diff --git a/docs/architecture/startup-timeline.md b/docs/architecture/startup-timeline.md index cd628bd99..7a407b6c5 100644 --- a/docs/architecture/startup-timeline.md +++ b/docs/architecture/startup-timeline.md @@ -23,7 +23,7 @@ new startup semantics. | `BOOT-003` | `rustfs/src/startup_entrypoint.rs` | Parse CLI command and dispatch non-server commands. | `info` and `tls` commands execute and return without server startup. | Command parse exits process with code 1; TLS command errors propagate. | None | | `BOOT-004` | `rustfs/src/startup_preflight.rs` | Initialize config snapshot and license state. | Publishes config snapshot for later readers and initializes runtime license state. | License init is non-fallible in this path. | None | | `BOOT-005` | `rustfs/src/startup_preflight.rs` | Initialize observability and store the global guard. | Initializes tracing/observability, stores the guard globally, and logs license/runtime telemetry status. | Fatal if observability init or guard publication fails. | None | -| `BOOT-006` | `rustfs/src/startup_runtime.rs` | Log startup logo, initialize profiling, trusted proxies, rustls provider, and outbound TLS material. | Starts optional profiling tasks, trusted proxy config, default rustls provider, outbound TLS global state, TLS generation metric, and TLS metrics when enabled. | Profiling/proxy/provider setup is non-fatal; configured TLS material load is fatal on error. | None | +| `BOOT-006` | `rustfs/src/startup_runtime.rs` and `rustfs/src/startup_profiling.rs` | Log startup logo, initialize profiling, trusted proxies, rustls provider, and outbound TLS material. | Starts optional profiling tasks, trusted proxy config, default rustls provider, outbound TLS global state, TLS generation metric, and TLS metrics when enabled. | Profiling/proxy/provider setup is non-fatal; configured TLS material load is fatal on error. | None | | `RUN-001` | `rustfs/src/startup_server.rs` | Enter startup run orchestration and create `GlobalReadiness`. | Allocates the readiness tracker shared with HTTP readiness gates. | Non-fatal. | Initial readiness state is not ready | | `RUN-002` | `rustfs/src/startup_server.rs` | Parse and publish the configured region. | Updates ECStore global region when configured. | Fatal if the configured region is invalid. | None | | `RUN-003` | `rustfs/src/startup_server.rs` | Resolve server address and warn on default credentials. | Computes server port/address and emits production credential warning when defaults are used. | Address parse is fatal; default credentials warning is non-fatal. | None | @@ -72,7 +72,7 @@ new startup semantics. | `STOP-001` | `rustfs/src/startup_services.rs` | Cancel runtime token and move service state to `Stopping`. | Notifies cancellation-aware background tasks. | Non-fatal. | Service state moves to `Stopping`; readiness stages are not cleared here | | `STOP-002` | `rustfs/src/startup_services.rs` | Stop scanner/background services and AHM services according to enable flags. | Calls ECStore background shutdown and heal/scanner shutdown helpers. | Non-fatal in this path. | No readiness-stage change | | `STOP-003` | `rustfs/src/startup_services.rs` | Signal optional FTP/FTPS/WebDAV/SFTP protocol servers. | Collects protocol shutdown futures. | Non-fatal in this path. | No readiness-stage change | -| `STOP-004` | `rustfs/src/startup_services.rs` | Stop event notifier, audit system, and profiling tasks. | Stops notifier and profiling tasks; audit stop failures are logged. | Non-fatal in this path. | No readiness-stage change | +| `STOP-004` | `rustfs/src/startup_services.rs` and `rustfs/src/startup_profiling.rs` | Stop event notifier, audit system, and profiling tasks. | Stops notifier and profiling tasks; audit stop failures are logged. | Non-fatal in this path. | No readiness-stage change | | `STOP-005` | `rustfs/src/startup_services.rs` | Stop S3 and console HTTP servers, wait for protocol shutdowns, then mark service state `Stopped`. | HTTP shutdown happens after notifier/audit/profiling shutdown in current order. | Join failures are logged by shutdown handles; this path does not return errors. | Service state moves to `Stopped`; readiness stages are not cleared here | ## Migration Rules diff --git a/rustfs/src/lib.rs b/rustfs/src/lib.rs index 8486bcd89..c76a9e84b 100644 --- a/rustfs/src/lib.rs +++ b/rustfs/src/lib.rs @@ -72,6 +72,7 @@ pub mod startup_entrypoint; pub mod startup_fs_guard; pub mod startup_iam; pub mod startup_preflight; +pub mod startup_profiling; pub mod startup_protocols; pub mod startup_runtime; pub mod startup_server; diff --git a/rustfs/src/startup_profiling.rs b/rustfs/src/startup_profiling.rs new file mode 100644 index 000000000..1e9267619 --- /dev/null +++ b/rustfs/src/startup_profiling.rs @@ -0,0 +1,71 @@ +// Copyright 2024 RustFS Team +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::future::Future; + +pub async fn init_profiling_runtime() { + init_profiling_runtime_with(crate::profiling::init_from_env).await; +} + +async fn init_profiling_runtime_with(init: InitFn) +where + InitFn: FnOnce() -> InitFuture, + InitFuture: Future, +{ + init().await; +} + +pub fn shutdown_profiling_runtime() { + shutdown_profiling_runtime_with(crate::profiling::shutdown_profiling); +} + +fn shutdown_profiling_runtime_with(shutdown: ShutdownFn) +where + ShutdownFn: FnOnce(), +{ + shutdown(); +} + +#[cfg(test)] +mod tests { + use super::{init_profiling_runtime_with, shutdown_profiling_runtime_with}; + use std::sync::{ + Arc, + atomic::{AtomicBool, Ordering}, + }; + + #[tokio::test] + async fn init_profiling_runtime_invokes_registered_hook() { + let called = Arc::new(AtomicBool::new(false)); + let hook_called = called.clone(); + + init_profiling_runtime_with(move || async move { + hook_called.store(true, Ordering::SeqCst); + }) + .await; + + assert!(called.load(Ordering::SeqCst)); + } + + #[test] + fn shutdown_profiling_runtime_invokes_registered_hook() { + let called = AtomicBool::new(false); + + shutdown_profiling_runtime_with(|| { + called.store(true, Ordering::SeqCst); + }); + + assert!(called.load(Ordering::SeqCst)); + } +} diff --git a/rustfs/src/startup_runtime.rs b/rustfs/src/startup_runtime.rs index 2003a9bc0..bf5abfd45 100644 --- a/rustfs/src/startup_runtime.rs +++ b/rustfs/src/startup_runtime.rs @@ -33,7 +33,7 @@ pub async fn init_startup_runtime_foundation(config: &Config) -> Result<()> { debug!("{}", crate::server::LOGO); - crate::profiling::init_from_env().await; + crate::startup_profiling::init_profiling_runtime().await; rustfs_trusted_proxies::init(); install_default_crypto_provider(); init_outbound_tls_material(config).await diff --git a/rustfs/src/startup_services.rs b/rustfs/src/startup_services.rs index 5021844fd..fe2122688 100644 --- a/rustfs/src/startup_services.rs +++ b/rustfs/src/startup_services.rs @@ -543,7 +543,7 @@ async fn handle_shutdown( state = "stopping", "Profiling shutdown started" ); - crate::profiling::shutdown_profiling(); + crate::startup_profiling::shutdown_profiling_runtime(); info!( target: "rustfs::main::handle_shutdown", diff --git a/rustfs/src/storage/storage_compat.rs b/rustfs/src/storage/storage_compat.rs index 1e3664fd6..cf70e0b0b 100644 --- a/rustfs/src/storage/storage_compat.rs +++ b/rustfs/src/storage/storage_compat.rs @@ -39,7 +39,7 @@ pub(crate) use rustfs_ecstore::rpc::{ pub(crate) use rustfs_ecstore::set_disk::DEFAULT_READ_BUFFER_SIZE; pub(crate) use rustfs_ecstore::store::{ECStore, all_local_disk_path, find_local_disk_by_ref}; -pub(crate) type GetObjectReader = rustfs_ecstore::object_api::GetObjectReader; -pub(crate) type ObjectInfo = rustfs_ecstore::object_api::ObjectInfo; -pub(crate) type ObjectOptions = rustfs_ecstore::object_api::ObjectOptions; -pub(crate) type PutObjReader = rustfs_ecstore::object_api::PutObjReader; +pub(crate) type GetObjectReader = ::GetObjectReader; +pub(crate) type ObjectInfo = ::ObjectInfo; +pub(crate) type ObjectOptions = ::ObjectOptions; +pub(crate) type PutObjReader = ::PutObjectReader; diff --git a/scripts/check_architecture_migration_rules.sh b/scripts/check_architecture_migration_rules.sh index 1a06e724b..f7bbef114 100755 --- a/scripts/check_architecture_migration_rules.sh +++ b/scripts/check_architecture_migration_rules.sh @@ -530,24 +530,6 @@ if [[ -s "$ECSTORE_OBJECT_API_STORAGE_ALIAS_HITS_FILE" ]]; then fi cat >"$ECSTORE_OBJECT_API_EXTERNAL_ALIAS_EXPECTED_FILE" <<'EOF' -crates/heal/src/heal/storage_compat.rs:HealObjectInfo=ObjectInfo -crates/heal/src/heal/storage_compat.rs:HealObjectOptions=ObjectOptions -crates/heal/src/heal/storage_compat.rs:HealPutObjReader=PutObjReader -crates/protocols/src/swift/storage_compat.rs:SwiftGetObjectReader=GetObjectReader -crates/protocols/src/swift/storage_compat.rs:SwiftObjectInfo=ObjectInfo -crates/protocols/src/swift/storage_compat.rs:SwiftObjectOptions=ObjectOptions -crates/protocols/src/swift/storage_compat.rs:SwiftPutObjReader=PutObjReader -crates/s3select-api/src/storage_compat.rs:SelectGetObjectReader=GetObjectReader -crates/s3select-api/src/storage_compat.rs:SelectObjectInfo=ObjectInfo -crates/s3select-api/src/storage_compat.rs:SelectObjectOptions=ObjectOptions -crates/scanner/src/storage_compat.rs:ScannerGetObjectReader=GetObjectReader -crates/scanner/src/storage_compat.rs:ScannerObjectInfo=ObjectInfo -crates/scanner/src/storage_compat.rs:ScannerObjectOptions=ObjectOptions -crates/scanner/src/storage_compat.rs:ScannerPutObjReader=PutObjReader -rustfs/src/storage/storage_compat.rs:GetObjectReader=GetObjectReader -rustfs/src/storage/storage_compat.rs:ObjectInfo=ObjectInfo -rustfs/src/storage/storage_compat.rs:ObjectOptions=ObjectOptions -rustfs/src/storage/storage_compat.rs:PutObjReader=PutObjReader EOF (