Source: io4dolfinx
Version: 1.1.2-6
Severity: normal
Control: forwarded -1 
https://github.com/scientificcomputing/io4dolfinx/issues/31

There is some kind of instability in 
test_attributes.py::test_read_write_attributes,
at least when running tests with MPI. 
Test logs can be found at https://ci.debian.net/packages/i/io4dolfinx/
e.g. for amd64 https://ci.debian.net/packages/i/io4dolfinx/unstable/amd64/

debian version 1.1.2-6 ought to be passing, but
test_read_write_attributes[adios2-comm0] is failing MPI tests during
setting, with the error message
https://ci.debian.net/data/autopkgtest/unstable/amd64/i/io4dolfinx/69606892/log.gz

2260s =================================== FAILURES 
===================================
2260s ___________________ test_read_write_attributes[adios2-comm0] 
___________________
2260s 
2260s comm = <mpi4py.MPI.Intracomm object at 0x7f3336912af0>, backend = 'adios2'
2260s tmp_path = 
PosixPath('/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0')
2260s 
2260s     @pytest.mark.parametrize("comm", [MPI.COMM_SELF, MPI.COMM_WORLD])
2260s     def test_read_write_attributes(comm, backend, tmp_path):
2260s         if backend == "adios2":
2260s             import adios2
2260s     
2260s             if _v(np.__version__) >= _v("2.0.0") and 
_v(adios2.__version__) < _v("2.10.2"):
2260s                 pytest.skip(reason="Cannot use numpy>=2.0.0 and 
adios2<2.10.2")
2260s     
2260s         attributes1 = {
2260s             "a": np.array([1, 2, 3], dtype=np.uint8),
2260s             "b": np.array([4, 5], dtype=np.uint8),
2260s         }
2260s         attributes2 = {
2260s             "c": np.array([6], dtype=np.uint8),
2260s             "d": np.array([7, 8, 9, 10], dtype=np.float64),
2260s         }
2260s         fname = comm.bcast(tmp_path, root=0)
2260s         fname = fname / "attributes"
2260s         suffix = ".bp" if backend == "adios2" else ".h5"
2260s         file = fname.with_suffix(suffix)
2260s         # print(comm.size)
2260s     
2260s         io4dolfinx.write_attributes(
2260s             comm=comm, filename=file, name="group1", 
attributes=attributes1, backend=backend
2260s         )
2260s         io4dolfinx.write_attributes(
2260s             comm=comm, filename=file, name="group2", 
attributes=attributes2, backend=backend
2260s         )
2260s >       loaded_attributes1 = io4dolfinx.read_attributes(
2260s             comm=comm, filename=file, name="group1", backend=backend
2260s         )
2260s 
2260s tests/test_attributes.py:38: 
2260s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ 
2260s /usr/lib/python3/dist-packages/io4dolfinx/checkpointing.py:97: in 
read_attributes
2260s     return backend_cls.read_attributes(filename, comm, name, backend_args)
2260s            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2260s /usr/lib/python3/dist-packages/io4dolfinx/backends/adios2/backend.py:106: 
in read_attributes
2260s     with ADIOSFile(
2260s /usr/lib/python3.13/contextlib.py:141: in __enter__
2260s     return next(self.gen)
2260s            ^^^^^^^^^^^^^^
2260s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ 
2260s 
2260s adios = <adios2.bindings.adios2_bindings_mpi.ADIOS object at 
0x7f3319612db0>
2260s filename = 
PosixPath('/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0/attributes.bp')
2260s engine = 'BP4', mode = <Mode.Read: 2>, io_name = 'AttributesReader', comm 
= None
2260s 
2260s     @contextmanager
2260s     def ADIOSFile(
2260s         adios: adios2.ADIOS,
2260s         filename: Path | str,
2260s         engine: str,
2260s         mode: adios2.Mode,
2260s         io_name: str,
2260s         comm: MPI.Intracomm | None = None,
2260s     ):
2260s         io = adios.DeclareIO(io_name)
2260s         io.SetEngine(engine)
2260s         # ADIOS2 sometimes struggles with existing files/folders it 
should overwrite
2260s         if mode == adios2.Mode.Write:
2260s             filename = Path(filename)
2260s             if filename.exists() and comm is not None and comm.rank == 0:
2260s                 if filename.is_dir():
2260s                     shutil.rmtree(filename)
2260s                 else:
2260s                     filename.unlink()
2260s             if comm is not None:
2260s                 comm.Barrier()
2260s     
2260s >       file = io.Open(str(filename), mode)
2260s                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2260s E       RuntimeError: �[1;36m[Wed Mar 18 20:21:54 2026]�[1;34m [ADIOS2 
EXCEPTION]�[0m <Engine> <BP4Reader> <OpenFiles> : File 
/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0/attributes.bp
 could not be found within the 0.000000s timeout: errno=2: �[1;36m[Wed Mar 18 
20:21:54 2026]�[1;34m [ADIOS2 EXCEPTION]�[0m <Toolkit> 
<transport::file::FilePOSIX> <CheckFile> : couldn't open file 
/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0/attributes.bp/md.idx,
 in call to POSIX open: errno = 2: No such file or directory�[0m
2260s E       : iostream error�[0m
2260s E       : iostream error
2260s 
2260s /usr/lib/python3/dist-packages/io4dolfinx/backends/adios2/helpers.py:78: 
RuntimeError
2260s =========================== short test summary info 
============================
2260s FAILED tests/test_attributes.py::test_read_write_attributes[adios2-comm0] 
- RuntimeError: �[1;36m[Wed Mar 18 20:21:54 2026]�[1;34m [ADIOS2 EXCEPTION]�[0m 
<Engine> <BP4Reader> <OpenFiles> : File 
/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0/attributes.bp
 could not be found within the 0.000000s timeout: errno=2: �[1;36m[Wed Mar 18 
20:21:54 2026]�[1;34m [ADIOS2 EXCEPTION]�[0m <Toolkit> 
<transport::file::FilePOSIX> <CheckFile> : couldn't open file 
/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13/test_read_write_attributes_adi0/attributes.bp/md.idx,
 in call to POSIX open: errno = 2: No such file or directory�[0m
2260s ==== 1 failed, 1985 passed, 372 skipped, 1 deselected in 779.15s 
(0:12:59) =====
2260s 
2260s 
2260s ==================================== ERRORS 
====================================
2260s __________ ERROR at setup of test_read_write_attributes[adios2-comm0] 
__________
2260s 
2260s self = 
PosixPath('/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13')
2260s mode = 448, parents = False, exist_ok = False
2260s 
2260s     def mkdir(self, mode=0o777, parents=False, exist_ok=False):
2260s         """
2260s         Create a new directory at this given path.
2260s         """
2260s         try:
2260s >           os.mkdir(self, mode)
2260s E           FileExistsError: [Errno 17] File exists: 
'/tmp/autopkgtest-lxc.blx2i9jg/downtmp/autopkgtest_tmp/io4dolfinx_mpi_py3.13'
2260s 
2260s /usr/lib/python3.13/pathlib/_local.py:724: FileExistsError

The attributes error is not fully reproducible. Sometimes it does not fail,
https://ci.debian.net/data/autopkgtest/testing/amd64/i/io4dolfinx/69604417/log.gz

But it has been seen across many architectures, amd64, arm64, riscv64, s390x 
(with h5py, not adios2)


Reported upstream
https://github.com/scientificcomputing/io4dolfinx/issues/31

Reply via email to