mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 23:47:28 +00:00
8f0d4a20d1
The storage engine embedded a ~8.4K-line hand-written S3 HTTP client under crates/ecstore/src/client (rustfs/backlog#1842). That client is a legitimate engine capability — it consumes remote S3-compatible endpoints for ILM tier warm backends and transition targets — but it was misfiled inside the engine, dragging s3s/hyper wire types into ecstore and blocking ARCHITECTURE.md invariant 4. This PR is the pure-move step: 21 modules move verbatim to the new crates/s3-client crate (rustfs-s3-client), and crates/ecstore/src/client/mod.rs becomes a re-export shim so every in-crate crate::client:: path keeps working. The two server-side modules that were historically misfiled under client/ — object_api_utils.rs and object_handlers_common.rs — stay in ecstore. Three reverse dependencies from the client into engine internals are severed so the move can be pure: - transition_api::ReaderImpl::ObjectBody held ecstore's GetObjectReader; the client only ever reads the body, so the variant now holds an ObjectReader newtype over Box<dyn AsyncRead + Send + Sync + Unpin> with the same read_all() surface. The single production construction site (set_disk transition upload) and the two engine-side consumers were adjusted. - api_list/api_remove used ecstore's storage_api_contracts / object_api types; api_list now imports BucketInfo from rustfs-storage-api directly, and api_remove uses the client's own transition_api::ObjectInfo (only .name/.version_id were read; the error-path bucket name is now threaded as a parameter instead of read from the deleted objects). - the api_put_object_streaming regression tests built a GetObjectReader by hand; they now wrap the duplex stream in ObjectReader::new. Guard updates: the s3s footprint ratchet gains an ecstore-scoped counter (42 files, shrink-only, per rustfs/backlog#1842), the ecstore module-lint-blanket register follows the moved files into crates/s3-client so the blanket ratchet keeps covering them, the logging guardrail path pin follows transition_api.rs, and the ::other(format!) baseline is regenerated (moved call sites left ecstore). Verification: cargo check -p rustfs-s3-client -p rustfs-ecstore; cargo nextest run -p rustfs-s3-client (43 passed) and -p rustfs-ecstore (4515/4523; the 8 failures reproduce identically on pristine origin/main on the same machine); cargo clippy --all-targets; scripts/check_layer_dependencies.sh, check_architecture_migration_rules.sh, check_s3s_footprint.sh, check_logging_guardrails.sh, check_error_other_format_ratchet.sh, check_doc_paths.sh, check_ci_paths_sync.sh all pass.
114 lines
6.6 KiB
Plaintext
114 lines
6.6 KiB
Plaintext
# ecstore module-level lint blanket register (backlog#1823 step 9)
|
|
#
|
|
# Each line is `path|lint` for a `#![allow(<lint>)]` at the top of an ecstore
|
|
# source file. These blankets disable the lint for a whole module, so a real
|
|
# defect introduced anywhere in the file goes unreported.
|
|
#
|
|
# The guard in scripts/check_architecture_migration_rules.sh compares this file
|
|
# against the tree and fails on ANY difference, in either direction:
|
|
#
|
|
# * a blanket not listed here -> new suppression, justify it in the PR
|
|
# * a line here with no blanket -> delete the line in the same PR
|
|
#
|
|
# Exact match is deliberate. A "no new entries" rule would let the register rot
|
|
# into an amnesty list, which is the failure mode backlog#1834 found in the
|
|
# layer-dependency baseline. Removing a blanket must cost one line here, so the
|
|
# register can only shrink.
|
|
#
|
|
# `#![allow(dead_code)]` is NOT listed: ecstore carries zero of those after the
|
|
# step 2 burn-down, and the guard asserts that count stays at zero.
|
|
crates/ecstore/src/bucket/lifecycle/tier_last_day_stats.rs|clippy::all
|
|
crates/ecstore/src/bucket/lifecycle/tier_last_day_stats.rs|unused_must_use
|
|
crates/ecstore/src/bucket/lifecycle/tier_last_day_stats.rs|unused_variables
|
|
crates/ecstore/src/bucket/lifecycle/tier_sweeper.rs|clippy::all
|
|
crates/ecstore/src/bucket/lifecycle/tier_sweeper.rs|unused_must_use
|
|
crates/ecstore/src/bucket/lifecycle/tier_sweeper.rs|unused_variables
|
|
crates/s3-client/src/api_error_response.rs|clippy::all
|
|
crates/s3-client/src/api_error_response.rs|unused_must_use
|
|
crates/s3-client/src/api_error_response.rs|unused_variables
|
|
crates/s3-client/src/api_get_object.rs|clippy::all
|
|
crates/s3-client/src/api_get_object.rs|unused_must_use
|
|
crates/s3-client/src/api_get_object.rs|unused_variables
|
|
crates/s3-client/src/api_get_options.rs|clippy::all
|
|
crates/s3-client/src/api_get_options.rs|unused_must_use
|
|
crates/s3-client/src/api_get_options.rs|unused_variables
|
|
crates/s3-client/src/api_list.rs|clippy::all
|
|
crates/s3-client/src/api_list.rs|unused_must_use
|
|
crates/s3-client/src/api_list.rs|unused_variables
|
|
crates/s3-client/src/api_put_object.rs|clippy::all
|
|
crates/s3-client/src/api_put_object.rs|unused_must_use
|
|
crates/s3-client/src/api_put_object.rs|unused_variables
|
|
crates/s3-client/src/api_put_object_common.rs|clippy::all
|
|
crates/s3-client/src/api_put_object_common.rs|unused_must_use
|
|
crates/s3-client/src/api_put_object_common.rs|unused_variables
|
|
crates/s3-client/src/api_put_object_multipart.rs|clippy::all
|
|
crates/s3-client/src/api_put_object_multipart.rs|unused_must_use
|
|
crates/s3-client/src/api_put_object_multipart.rs|unused_variables
|
|
crates/s3-client/src/api_put_object_streaming.rs|clippy::all
|
|
crates/s3-client/src/api_put_object_streaming.rs|unused_must_use
|
|
crates/s3-client/src/api_put_object_streaming.rs|unused_variables
|
|
crates/s3-client/src/api_remove.rs|clippy::all
|
|
crates/s3-client/src/api_remove.rs|unused_must_use
|
|
crates/s3-client/src/api_remove.rs|unused_variables
|
|
crates/s3-client/src/api_s3_datatypes.rs|clippy::all
|
|
crates/s3-client/src/api_s3_datatypes.rs|unused_must_use
|
|
crates/s3-client/src/api_s3_datatypes.rs|unused_variables
|
|
crates/s3-client/src/api_stat.rs|clippy::all
|
|
crates/s3-client/src/api_stat.rs|unused_must_use
|
|
crates/s3-client/src/api_stat.rs|unused_variables
|
|
crates/s3-client/src/bucket_cache.rs|clippy::all
|
|
crates/s3-client/src/bucket_cache.rs|unused_must_use
|
|
crates/s3-client/src/bucket_cache.rs|unused_variables
|
|
crates/s3-client/src/checksum.rs|clippy::all
|
|
crates/s3-client/src/checksum.rs|unused_must_use
|
|
crates/s3-client/src/checksum.rs|unused_variables
|
|
crates/s3-client/src/constants.rs|unused_must_use
|
|
crates/s3-client/src/constants.rs|unused_variables
|
|
crates/s3-client/src/credentials.rs|clippy::all
|
|
crates/s3-client/src/credentials.rs|unused_must_use
|
|
crates/s3-client/src/credentials.rs|unused_variables
|
|
crates/ecstore/src/client/object_api_utils.rs|clippy::all
|
|
crates/ecstore/src/client/object_api_utils.rs|unused_must_use
|
|
crates/ecstore/src/client/object_api_utils.rs|unused_variables
|
|
crates/s3-client/src/transition_api.rs|clippy::all
|
|
crates/s3-client/src/transition_api.rs|unused_must_use
|
|
crates/s3-client/src/transition_api.rs|unused_variables
|
|
crates/ecstore/src/services/event_notification.rs|unused_variables
|
|
crates/ecstore/src/services/tier/tier.rs|clippy::all
|
|
crates/ecstore/src/services/tier/tier.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/tier.rs|unused_variables
|
|
crates/ecstore/src/services/tier/tier_admin.rs|clippy::all
|
|
crates/ecstore/src/services/tier/tier_admin.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/tier_admin.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_aliyun.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_aliyun.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_aliyun.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_azure.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_azure.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_azure.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_gcs.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_gcs.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_gcs.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_huaweicloud.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_huaweicloud.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_huaweicloud.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_minio.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_minio.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_minio.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_r2.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_r2.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_r2.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_rustfs.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_rustfs.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_rustfs.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_s3.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_s3.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_s3.rs|unused_variables
|
|
crates/ecstore/src/services/tier/warm_backend_tencent.rs|clippy::all
|
|
crates/ecstore/src/services/tier/warm_backend_tencent.rs|unused_must_use
|
|
crates/ecstore/src/services/tier/warm_backend_tencent.rs|unused_variables
|
|
crates/ecstore/src/set_disk/mod.rs|unused_variables
|