ChunkCache::chunks_for returned the chunk index's values in hash-map order, which differs between File instances (a new HashMap per open). Readers that stop at the first failing chunk therefore named different chunks on different opens of the same damaged file: whole-dataset selections here, and the indexed reader behind the storage harness's intermittent cve-2025-2310.h5 failure. The cache now also keeps the chunks in the order the index lists them (fetched or built under one lock) and returns that order, as the uncached readers use. Regression: several_damaged_chunks_report_the_same_chunk_every_time (four chunks inflating to different short lengths; before the fix two opens reported chunk [40, 0] and chunk [320, 0]). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
clawhdf5
Pure-Rust HDF5 reader/writer — no C dependencies.
Features
- Read and write HDF5 files entirely in Rust
- Memory-mapped I/O for large files (
mmapfeature, enabled by default) - Parallel chunk reads via Rayon (
parallelfeature) - Lazy dataset access for minimal memory usage
- h5py-compatible file output
Usage
use clawhdf5::File;
let file = File::open("data.h5").unwrap();
let dataset = file.dataset("/group/data").unwrap();
let values: Vec<f64> = dataset.read_1d().unwrap();
License
MIT