Files
rustfs/scripts/error-other-format-baseline.txt
T
Zhengchao An c0c208d89a feat(ecstore): type internode client-acquisition failures for quorum buckets (#6619)
* feat(ecstore): type internode client-acquisition failures for stable quorum buckets

Backlog#1845 step 3, first typed family. The largest other(format!) message family in ecstore was 'can not get client, err: {detail}' (~50 production sites): every internode RPC that fails to acquire a client wrapped the dial/auth error with per-peer detail into DiskError::other / StorageError::other, whose Io equality compares the rendered message. N disks failing for this same cause therefore counted as N distinct errors in reduce_errs, starving quorum aggregation, and remote_disk call sites double-wrapped the message on top of get_client's own wrap.

Introduce DiskError::RemoteClientUnavailable(String) (wire code 0x2B) and its StorageError twin (StorageErrorCode 0x54): equality and hashing use the wire code alone, so same-cause failures land in one quorum bucket regardless of per-peer detail, while Display keeps the detail so substring classifiers (network needles, heal recoverability) keep reading it unchanged. Wire encoding carries the rendered detail in error_info and decode restores the typed variant; old peers fall back to the legacy string form gracefully.

Call sites: remote_disk get_client/get_bulk_client/offline-bypass/recovery-probe now construct the typed variant and the ~60 redundant double-wrap map_errs are gone; peer_rest_client's three client getters and offline gates, peer_s3_client, and admin_server_info follow. The tier-config-reload connection classifier's anchored 'can not get client' substring check becomes a typed match on the variant (the string form is retired and now classifies as Terminal, pinned by test).

Ref rustfs/backlog#1845

* chore(ci): refresh error other ratchet baseline

* fix(ecstore): classify typed client network failures
2026-08-26 11:24:56 +08:00

79 lines
3.8 KiB
Plaintext

# `::other(format!` ratchet baseline for crates/ecstore/src (backlog#1845 PR2).
#
# SHRINK-ONLY: entries are `count|file`. A PR may lower a count or drop a file
# (after replacing the call sites with typed variants) by re-running
# scripts/check_error_other_format_ratchet.sh --update-baseline. A PR that
# raises a count or adds a file is introducing a new quorum-bucketing hazard
# and must carry an explicit exemption rationale in its description.
2|crates/ecstore/src/bucket/bucket_target_sys.rs
4|crates/ecstore/src/bucket/lifecycle/bucket_lifecycle_ops.rs
3|crates/ecstore/src/bucket/lifecycle/durable_namespace.rs
2|crates/ecstore/src/bucket/lifecycle/metadata_boundary.rs
4|crates/ecstore/src/bucket/lifecycle/tier_delete_journal.rs
1|crates/ecstore/src/bucket/lifecycle/transition_transaction.rs
27|crates/ecstore/src/bucket/metadata.rs
22|crates/ecstore/src/bucket/metadata_sys.rs
3|crates/ecstore/src/bucket/msgp_decode.rs
1|crates/ecstore/src/bucket/object_lock/objectlock_sys.rs
3|crates/ecstore/src/bucket/quota/reservation.rs
1|crates/ecstore/src/bucket/replication/replication_object_config.rs
2|crates/ecstore/src/bucket/replication/replication_pool.rs
2|crates/ecstore/src/bucket/replication/replication_target_boundary.rs
1|crates/ecstore/src/client/api_put_object_multipart.rs
2|crates/ecstore/src/client/api_put_object_streaming.rs
1|crates/ecstore/src/client/api_s3_datatypes.rs
1|crates/ecstore/src/client/signer_error.rs
5|crates/ecstore/src/client/transition_api.rs
3|crates/ecstore/src/cluster/rpc/http_auth.rs
2|crates/ecstore/src/cluster/rpc/internode_data_transport.rs
11|crates/ecstore/src/cluster/rpc/peer_rest_client.rs
10|crates/ecstore/src/cluster/rpc/peer_s3_client.rs
10|crates/ecstore/src/cluster/rpc/remote_disk.rs
7|crates/ecstore/src/config/com.rs
14|crates/ecstore/src/config/storageclass.rs
185|crates/ecstore/src/core/pools.rs
8|crates/ecstore/src/data_movement/mod.rs
2|crates/ecstore/src/data_usage/local_snapshot.rs
12|crates/ecstore/src/data_usage/mod.rs
5|crates/ecstore/src/disk/local.rs
1|crates/ecstore/src/disk/mod.rs
5|crates/ecstore/src/erasure/codec/bridge.rs
1|crates/ecstore/src/erasure/coding/decode_reader.rs
10|crates/ecstore/src/erasure/coding/encode.rs
25|crates/ecstore/src/erasure/coding/erasure.rs
4|crates/ecstore/src/layout/disks_layout.rs
2|crates/ecstore/src/layout/endpoint.rs
17|crates/ecstore/src/layout/endpoints.rs
1|crates/ecstore/src/layout/format.rs
1|crates/ecstore/src/layout/pool_space.rs
1|crates/ecstore/src/layout/set_layout.rs
19|crates/ecstore/src/object_api/readers.rs
1|crates/ecstore/src/object_api/types.rs
3|crates/ecstore/src/runtime/sources.rs
4|crates/ecstore/src/services/batch_processor.rs
14|crates/ecstore/src/services/notification_sys.rs
16|crates/ecstore/src/services/rebalance/control.rs
1|crates/ecstore/src/services/rebalance/entry.rs
8|crates/ecstore/src/services/rebalance/meta.rs
8|crates/ecstore/src/services/rebalance/runtime.rs
19|crates/ecstore/src/services/rebalance/worker.rs
33|crates/ecstore/src/services/tier/tier.rs
1|crates/ecstore/src/services/tier/tier_config.rs
1|crates/ecstore/src/services/tier/warm_backend_gcs.rs
1|crates/ecstore/src/services/tier/warm_backend_s3.rs
1|crates/ecstore/src/services/tier/warm_backend_wasabi.rs
7|crates/ecstore/src/set_disk/core/io_primitives.rs
1|crates/ecstore/src/set_disk/mod.rs
3|crates/ecstore/src/set_disk/ops/bitrot_self_verify.rs
2|crates/ecstore/src/set_disk/ops/heal.rs
8|crates/ecstore/src/set_disk/ops/multipart.rs
2|crates/ecstore/src/set_disk/ops/object.rs
3|crates/ecstore/src/set_disk/read.rs
5|crates/ecstore/src/store/bucket.rs
1|crates/ecstore/src/store/heal_walk.rs
12|crates/ecstore/src/store/init.rs
2|crates/ecstore/src/store/init_format.rs
3|crates/ecstore/src/store/multipart.rs
8|crates/ecstore/src/store/object.rs
5|crates/ecstore/src/store/rebalance/support.rs