fix(simulation): cache idle worker state
This commit is contained in:
parent
bc61331604
commit
5abd07d2bf
|
|
@ -637,9 +637,8 @@ class SimulationWorkerAgent:
|
||||||
)
|
)
|
||||||
|
|
||||||
def _active_run(self) -> QualificationRun | None:
|
def _active_run(self) -> QualificationRun | None:
|
||||||
cached: QualificationRun | None = getattr(self, "_active_run_cache", None)
|
if hasattr(self, "_active_run_cache"):
|
||||||
if cached is not None:
|
return self._active_run_cache
|
||||||
return cached
|
|
||||||
active = tuple(run for run in self.store.list_runs() if run.state in ACTIVE_STATES)
|
active = tuple(run for run in self.store.list_runs() if run.state in ACTIVE_STATES)
|
||||||
if len(active) > 1:
|
if len(active) > 1:
|
||||||
raise WorkerAgentError("multiple active qualification runs violate worker authority")
|
raise WorkerAgentError("multiple active qualification runs violate worker authority")
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,28 @@ def test_worker_agent_command_dispatch_fails_closed_on_unsafe_envelope() -> None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_worker_agent_caches_the_absence_of_an_active_run() -> None:
|
||||||
|
class EmptyStore:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.list_calls = 0
|
||||||
|
|
||||||
|
def list_runs(self) -> tuple[QualificationRun, ...]:
|
||||||
|
self.list_calls += 1
|
||||||
|
return ()
|
||||||
|
|
||||||
|
agent = object.__new__(SimulationWorkerAgent)
|
||||||
|
store = EmptyStore()
|
||||||
|
agent.__dict__["store"] = store
|
||||||
|
|
||||||
|
first = agent.status()
|
||||||
|
second = agent.status()
|
||||||
|
|
||||||
|
assert first["available"] is True
|
||||||
|
assert first["active_run_id"] is None
|
||||||
|
assert second["active_run_id"] is None
|
||||||
|
assert store.list_calls == 1
|
||||||
|
|
||||||
|
|
||||||
def test_px4_adapter_maps_speed_to_stock_rover_throttle_without_direct_actuators() -> None:
|
def test_px4_adapter_maps_speed_to_stock_rover_throttle_without_direct_actuators() -> None:
|
||||||
publishers = [_Publisher() for _ in range(3)]
|
publishers = [_Publisher() for _ in range(3)]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue