mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-06 21:33:14 +00:00
47bee8b314
* perf(ecstore): read bitrot hash+data in one pass on the shard path BitrotReader::read issued two reads per block: one read_exact for the 32-byte hash, then a separate loop for the shard data. On the streaming disk reader (a raw tokio File whose every read is a spawn_blocking round-trip) that is two dispatches per block. Since the on-disk layout is a contiguous [hash][data] run, pull both in a single pass into a reused scratch buffer and split afterwards, halving the per-block dispatch count on the streaming path. The no-hash path still reads straight into the caller buffer with no extra copy, and an in-memory Cursor (inline/mmap) just does a slice copy. All existing invariants are preserved: a short read of either the hash or the data maps to UnexpectedEof before and independent of the hash check (backlog#799 B2), and the hash-mismatch / InvalidData semantics are unchanged. Correctness-only change; the per-dispatch latency win is platform dependent and its default reliance is left to the warp size-bucket benchmark gate tracked by backlog#935, per the backlog#933 acceptance note. Refs: rustfs/backlog#933 (HP-12 item 2), rustfs/backlog#936 Co-Authored-By: heihutu <heihutu@gmail.com> * docs: reword bitrot test comment to satisfy typos check Co-Authored-By: heihutu <heihutu@gmail.com> --------- Co-authored-by: heihutu <heihutu@gmail.com>