Twin pseudo counters fails when trying to clear the buffer
The following hierarchy of pseudo-counters:
flowchart TD
rel01bis --> rel03bis
rel01bis --> rel02bis
rel04bis --> rel03bis
rel04bis --> rel02bis
rel03bis --> ct53
rel03bis --> ct54
rel02bis --> ct55
rel02bis --> ct56
fails on the second ct
execution after the Pool startup with the following error:
SardanaTP.W001 DEBUG 2022-09-08 10:48:54,388 mntgrp15.Acquisition.SoftwareAcquisition: <- (with KeyError) action_loop
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 125, in get_value_obj
return self._buffer[idx]
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 70, in on_change
value = value_buf.get_value(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 114, in get_value
return self.get_value_obj(idx).value
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 129, in get_value_obj
raise LateValueException(msg)
sardana.sardanabuffer.LateValueException: value with 0 index is not in buffer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 188, in remove
return self._buffer.pop(idx)
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/taurus/lib/taurus/core/util/log.py", line 200, in wrapper
ret = f(*args, **kwargs)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolacquisition.py", line 1260, in action_loop
acquirable.append_value_buffer(value, self._index,
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolbasechannel.py", line 358, in append_value_buffer
val_buffer.append(value, idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 154, in append
self.fire_add_event()
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 202, in fire_add_event
self.fire_event(evt_type, self.last_chunk)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 113, in fire_event
self._fire_event(event_type, event_value, listeners=listeners)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 135, in _fire_event
real_listener(self, event_type, event_value)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 80, in on_change
self.append(value, idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 154, in append
self.fire_add_event()
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 202, in fire_add_event
self.fire_event(evt_type, self.last_chunk)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 113, in fire_event
self._fire_event(event_type, event_value, listeners=listeners)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 135, in _fire_event
real_listener(self, event_type, event_value)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 74, in on_change
self.remove_physical_values(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 86, in remove_physical_values
value_buf.remove(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 191, in remove
raise KeyError(msg)
KeyError: 'value with 0 index is not in buffer'
SardanaTP.W001 ERROR 2022-09-08 10:48:54,396 SardanaTP.SardanaTP.W001: Uncaught exception running job 'run' called from thread SardanaTP.W009:
File "/homelocal/zreszela/miniconda3/envs/sardana/lib/python3.9/threading.py", line 937, in _bootstrap
self._bootstrap_inner()
File "/homelocal/zreszela/miniconda3/envs/sardana/lib/python3.9/threading.py", line 980, in _bootstrap_inner
self.run()
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanathreadpool.py", line 58, in run
Worker.run(self)
File "/homelocal/zreszela/workspace/taurus/lib/taurus/core/util/threadpool.py", line 146, in run
cmd(*args, **kw)
File "/homelocal/zreszela/workspace/sardana/src/sardana/util/funcgenerator.py", line 196, in run
self.fire_active()
File "/homelocal/zreszela/workspace/sardana/src/sardana/util/funcgenerator.py", line 261, in fire_active
self.fire_event(EventType("active"), self._id)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 113, in fire_event
self._fire_event(event_type, event_value, listeners=listeners)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 133, in _fire_event
real_listener.event_received(self, event_type, event_value)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolacquisition.py", line 357, in event_received
get_thread_pool().add(self._sw_acq.run,
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 125, in get_value_obj
return self._buffer[idx]
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 70, in on_change
value = value_buf.get_value(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 114, in get_value
return self.get_value_obj(idx).value
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 129, in get_value_obj
raise LateValueException(msg)
sardana.sardanabuffer.LateValueException: value with 0 index is not in buffer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 188, in remove
return self._buffer.pop(idx)
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/homelocal/zreszela/workspace/taurus/lib/taurus/core/util/threadpool.py", line 144, in run
callback(cmd(*args, **kw))
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolaction.py", line 347, in run
self.action_loop()
File "/homelocal/zreszela/workspace/taurus/lib/taurus/core/util/log.py", line 200, in wrapper
ret = f(*args, **kwargs)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolacquisition.py", line 1260, in action_loop
acquirable.append_value_buffer(value, self._index,
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolbasechannel.py", line 358, in append_value_buffer
val_buffer.append(value, idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 154, in append
self.fire_add_event()
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 202, in fire_add_event
self.fire_event(evt_type, self.last_chunk)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 113, in fire_event
self._fire_event(event_type, event_value, listeners=listeners)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 135, in _fire_event
real_listener(self, event_type, event_value)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 80, in on_change
self.append(value, idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 154, in append
self.fire_add_event()
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 202, in fire_add_event
self.fire_event(evt_type, self.last_chunk)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 113, in fire_event
self._fire_event(event_type, event_value, listeners=listeners)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanaevent.py", line 135, in _fire_event
real_listener(self, event_type, event_value)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 74, in on_change
self.remove_physical_values(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/pool/poolpseudocounter.py", line 86, in remove_physical_values
value_buf.remove(idx)
File "/homelocal/zreszela/workspace/sardana/src/sardana/sardanabuffer.py", line 191, in remove
raise KeyError(msg)
KeyError: 'value with 0 index is not in buffer'
It looks like both: rel01bis
and rel04bis
compete for who should clear the buffers.