Summary#
When a batch aggregates typed errors by converting the first failure to a display string, the retryable/permanent distinction encoded in the original error type is destroyed. Recovery code that inspects the aggregated error then treats all failures as permanent, causing unnecessary aborts. Preserve the recorded classification of the batch through the aggregation boundary rather than re-deriving it from the stringified message.
Problem#
In rustfs cluster/bucket heal, a batch whose exhausted objects were all retryable could stop permanently because batch aggregation converted the first typed error to display text, stripping the retryable classification before recovery inspected it.
Solution#
Honor the batch's pre-recorded error classification for the aggregate task error so that faulty-drive and throttling errors remain retryable through the aggregation step.
Failure Modes#
- Any error-wrapping boundary that calls
.to_string()orformat!before re-raising - Aggregators that pick a representative error by index without copying its type tag
- Cross-process or cross-thread error channels that serialize errors as strings
Sources#
- https://github.com/tensorflow/tensorflow/pull/127153
- https://github.com/tensorflow/tensorflow/pull/126814
- https://github.com/tensorflow/tensorflow/pull/127206
- https://github.com/tensorflow/tensorflow/pull/127242
- https://github.com/tensorflow/tensorflow/pull/126944
- https://github.com/tensorflow/tensorflow/pull/127154
- https://github.com/tensorflow/tensorflow/pull/126834
- https://github.com/tensorflow/tensorflow/pull/127194
- https://github.com/tensorflow/tensorflow/pull/127200
- https://github.com/tensorflow/tensorflow/pull/127132
- https://github.com/huggingface/transformers/pull/48429
- https://github.com/huggingface/transformers/pull/48688
- https://github.com/huggingface/transformers/pull/48515
- https://github.com/huggingface/transformers/pull/48201
- https://github.com/huggingface/transformers/pull/48589
- https://github.com/huggingface/transformers/pull/48560
- https://github.com/huggingface/transformers/pull/48640
- https://github.com/huggingface/transformers/pull/48679
- https://github.com/huggingface/transformers/pull/48653
- https://github.com/huggingface/transformers/pull/48289
- https://github.com/microsoft/ML-For-Beginners/pull/1002
- https://github.com/microsoft/ML-For-Beginners/pull/1001
- https://github.com/microsoft/ML-For-Beginners/pull/1000
- https://github.com/ClickHouse/ClickHouse/pull/115383
- https://github.com/ClickHouse/ClickHouse/pull/118672
- https://github.com/ClickHouse/ClickHouse/pull/118014
- https://github.com/ClickHouse/ClickHouse/pull/118286
- https://github.com/ClickHouse/ClickHouse/pull/114777
- https://github.com/ClickHouse/ClickHouse/pull/114562
- https://github.com/ClickHouse/ClickHouse/pull/109620
- https://github.com/ClickHouse/ClickHouse/pull/116614
- https://github.com/ClickHouse/ClickHouse/pull/110536
- https://github.com/ClickHouse/ClickHouse/pull/118071
- https://github.com/ClickHouse/ClickHouse/pull/117358
- https://github.com/rustfs/rustfs/pull/7654
- https://github.com/rustfs/rustfs/pull/7647
- https://github.com/rustfs/rustfs/pull/7652
- https://github.com/rustfs/rustfs/pull/7653
- https://github.com/rustfs/rustfs/pull/7623
- https://github.com/rustfs/rustfs/pull/7635
- https://github.com/rustfs/rustfs/pull/7648
- https://github.com/rustfs/rustfs/pull/7644
- https://github.com/rustfs/rustfs/pull/7642
- https://github.com/rustfs/rustfs/pull/7645
- https://github.com/rustfs/rustfs/pull/7639
- https://github.com/rustfs/rustfs/pull/7643
- https://github.com/rustfs/rustfs/pull/7636
- https://github.com/rustfs/rustfs/pull/7640
- mined_at: 2026-09-11T06:21:54Z
Sagwan Revalidation 2026-09-11T07:06:21Z#
- verdict:
ok - note: 에러 타입의 문자열 변환 시 분류 정보 소실이라는 원칙은 언어·런타임 무관한 불변 패턴으로 2026년에도 완전히 유효하다.
Sagwan Revalidation 2026-09-14T02:35:37Z#
- verdict:
ok - note: 에러 타입 정보가 문자열 변환으로 소실된다는 원칙은 언어·프레임워크 무관한 불변의 패턴이며, 2026년 기준에도 여전히 유효하다.