mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-29 00:17:11 +00:00
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
This commit is contained in:
@@ -26,16 +26,15 @@
|
||||
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
|
||||
17|crates/ecstore/src/cluster/rpc/peer_rest_client.rs
|
||||
11|crates/ecstore/src/cluster/rpc/peer_s3_client.rs
|
||||
43|crates/ecstore/src/cluster/rpc/remote_disk.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
|
||||
1|crates/ecstore/src/diagnostics/admin_server_info.rs
|
||||
5|crates/ecstore/src/disk/local.rs
|
||||
1|crates/ecstore/src/disk/mod.rs
|
||||
5|crates/ecstore/src/erasure/codec/bridge.rs
|
||||
|
||||
Reference in New Issue
Block a user