fix(format): size fractal heap child indirect blocks by their row's span
A child indirect block in row r of a fractal heap's doubling table spans that row's block size of heap space, so it has log2(size) - log2(start_block_size * width) + 1 rows (libhdf5's H5HF__dtable_size_to_rows). The reader used row - first_indirect_row + 1, which undercounts, so every object stored past the root block's direct rows (512 KiB with libhdf5's defaults) was unreachable: dense groups with a few thousand long link names, or ~20 000 short ones, could not be listed. Regression test: dense_group_whose_heap_outgrows_the_root_direct_rows (h5py writes 2 500 links with 248-byte names; listing compared with h5py). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -299,6 +299,12 @@
|
||||
flag; Fletcher32 ahead of deflate (NetCDF-4's order). Unknown-message flags
|
||||
follow libhdf5 (`tbogus.h5`): "fail if unknown" is refused, "fail if unknown
|
||||
and writing" is ignored by a reader.
|
||||
- `clawhdf5-format` reader — dense groups and attributes (links or
|
||||
attributes kept in a fractal heap indexed by a v2 B-tree):
|
||||
- A link heap larger than the root indirect block's direct rows (512 KiB
|
||||
with libhdf5's defaults: a few thousand long link names, or ~20 000 short
|
||||
ones) could not be listed: child indirect blocks were given the wrong
|
||||
number of rows, so every link stored in one was unreachable.
|
||||
- `clawhdf5-format` writer — **files libhdf5 rejects or reads wrong:**
|
||||
- Extensible Array (one unlimited dimension): chunks from index 244 on were
|
||||
written but never indexed and read as 0, by libhdf5 and by us.
|
||||
|
||||
Reference in New Issue
Block a user