Summary
Found during #329's gating: Swarm.save returns on non-zero ranks while rank 0 is still appending metadata to the HDF5 file. A caller that immediately reopens the file (e.g. read_timestep straight after write_timestep) hits HDF5 file locking — BlockingIOError errno 35.
A TODO(BUG) marker sits at the metadata append in swarm.py (added in #329); the new parallel read_timestep tests barrier after write_timestep to stay clear of it.
Suggested fix
Barrier before returning from save (or move the metadata append before the collective close). Regression: write-then-immediately-read at np2 without an explicit user barrier.
Underworld development team with AI support from Claude Code
Summary
Found during #329's gating:
Swarm.savereturns on non-zero ranks while rank 0 is still appending metadata to the HDF5 file. A caller that immediately reopens the file (e.g. read_timestep straight after write_timestep) hits HDF5 file locking — BlockingIOError errno 35.A TODO(BUG) marker sits at the metadata append in swarm.py (added in #329); the new parallel read_timestep tests barrier after write_timestep to stay clear of it.
Suggested fix
Barrier before returning from save (or move the metadata append before the collective close). Regression: write-then-immediately-read at np2 without an explicit user barrier.
Underworld development team with AI support from Claude Code