Sessions writing in the same file or other scan exists errors
In the last month we had two occurrences of the issue (ID24 and ID14): the writer is instructed to save as scan in a file and the scan already exists.
At ID14 we confirmed this was caused by multiple session writing in the same dataset file. The file name reservation in each session is supposed to prevent this https://gitlab.esrf.fr/bliss/bliss/-/blob/master/bliss/scanning/scan_saving.py?ref_type=heads#L1452. I can already see a race-condition in there when two session type newsample()
at the same time.
At ID24 I am not sure what caused the issue. The dataset was started on the 1st of March while the error in writing to that dataset happened on the 10th of April.
The ID14 proposal logs: https://data.esrf.fr/investigation/1553521716/events?search=Nexus
The ID24 proposal logs: https://data.esrf.fr/investigation/1449245236/events?search=7_exafs
ERROR 2024-04-10 10:37:38,573 blisswriter.subscribers.session_subscriber: [session_dcm (RUNNING)] [1_trigscan (FAULT)] Stop listening to Redis events due to an exception
Traceback (most recent call last):
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/subscribers/base_subscriber.py", line 116, in _main
self._run()
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/subscribers/scan_subscriber.py", line 87, in _run
with self._scan_saving_context() as saving:
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.9/contextlib.py", line 119, in __enter__
return next(self.gen)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/subscribers/scan_subscriber.py", line 102, in _scan_saving_context
if not self._writer.initialize(self._scan.info, self._scan._data_store):
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/main.py", line 84, in initialize
self._initialize_subscan(scan_info, subscan)
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.9/contextlib.py", line 126, in __exit__
next(self.gen)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/capture.py", line 21, in capture_exceptions
raise exceptions[0]
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/capture.py", line 12, in capture
yield
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/main.py", line 84, in initialize
self._initialize_subscan(scan_info, subscan)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/main.py", line 133, in _initialize_subscan
self._scan_writer._update_subscan_status(subscan, "RUNNING")
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.9/contextlib.py", line 126, in __exit__
next(self.gen)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/capture.py", line 21, in capture_exceptions
raise exceptions[0]
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/capture.py", line 12, in capture
yield
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/main.py", line 120, in _initialize_subscan
self._scan_writer._update_subscan_status(subscan, "STARTING")
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/scan.py", line 475, in _update_subscan_status
with self.nxentry(subscan) as nxentry:
File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.9/contextlib.py", line 119, in __enter__
return next(self.gen)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/scan.py", line 273, in nxentry
nxentry = self._require_nxentry(nxroot, subscan)
File "/home/blissadm/local/bliss.git/blisswriter/src/blisswriter/writer/scan.py", line 307, in _require_nxentry
raise RuntimeError(
RuntimeError: Scan 1.1 already exists in /data/visitor/ch6848/id24/20240227/RAW_DATA/7/7_exafs/7_exafs.h5