Conversation
Codecov Report❌ Patch coverage is
🚀 New features to boost your workflow:
|
|
Rationale, alternatives, and verification. One pool, not one per field. A pool per field of view would give a 96-well plate Ranges keyed on the field index. The plate already indexes its fields by One level walk. The first draft summed shard counts straight off the LOD plan and Verification. The new case was mutation-checked three ways on a CPU node: with Not addressed here. Shard files no longer recycle across fields, so the files a The deeper fix, worth doing next, is to make the pool vend a reserved range as a |
A plate shared one shard pool across every field of view but sized it for a
single field, so the slot indices aliased. Every field's multiscale started its
slot range at 0, and a shard picks its slot as the range base plus the shard
index, so two fields landed on the same slot. A slot holds the open file, so the
second field's open closed the first field's file and took its place, and the
first field's next write went into the second field's file at the first field's
offset.
The plate still shares one pool, which is what keeps it on one io queue. The
pool is now sized for every field, and each field gets the slots at its own
offset, computed from the same index the plate uses to store the field. Summing
a multiscale's slots moved into ngff_multiscale_slot_count, so the count that
spaces the ranges and the count that advances slots within a field are one
computation. The shard pool header now states that callers sharing a pool need
slot ranges that do not overlap.
A new case in test_hcs opens a shard in two fields of the same well at once,
writes different bytes through each, and reads both files back.
Closes #211