feat(format): read the other attributes when one cannot be read
attrs() read every attribute of an object through extract_attributes_full, so one attribute it could not read (a corrupt or unsupported attribute message, or a heap object it could not locate) failed all of them — the same shape as the huge-object bug, where one 8 KiB attribute hid every attribute on a NetCDF file's root group. - clawhdf5-format: new attribute::extract_attributes_tolerant returns the attributes it could read plus one error per attribute it could not. Errors in the attribute index itself (Attribute Info message, dense heap header, B-tree) still fail, since then it is unknown which attributes exist. extract_attributes_full is unchanged (strict); both share one implementation. - clawhdf5: attrs() on Group/Dataset, MmapGroup/MmapDataset and LazyGroup/LazyDataset leaves an unreadable attribute out (documented), and the new attrs_with_errors() returns the map with the per-attribute errors. A value is either returned complete or not at all. Regression test: one_unreadable_attribute_does_not_hide_the_others (h5py writes 11 dense attributes; one message's version byte is corrupted; before: attrs() failed with InvalidAttributeVersion(127), after: the 10 others come back with their values and one error is reported). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
@@ -337,6 +337,14 @@
|
||||
old-style (symbol table) groups a soft link made the listing fail. New
|
||||
`group_v2::resolve_group_children` / `resolve_path_from` and
|
||||
`group_v1::v1_soft_links` in `clawhdf5-format`.
|
||||
- `clawhdf5` — one unreadable attribute no longer fails `attrs()` for every
|
||||
attribute on its object: it is left out of the map, and the new
|
||||
`attrs_with_errors()` (on every group and dataset handle) returns the map
|
||||
plus one error per attribute left out. Returned values are always complete.
|
||||
An error in the attribute index itself (attribute info message, dense heap
|
||||
header or B-tree) still fails the call. `clawhdf5-format` gains
|
||||
`attribute::extract_attributes_tolerant`; `extract_attributes_full` stays
|
||||
strict.
|
||||
- `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