fix(simulation): cache idle worker state

This commit is contained in:
DCCONSTRUCTIONS 2026-07-24 23:27:51 +03:00
parent bc61331604
commit 5abd07d2bf
2 changed files with 24 additions and 3 deletions

View File

@ -637,9 +637,8 @@ class SimulationWorkerAgent:
)
def _active_run(self) -> QualificationRun | None:
cached: QualificationRun | None = getattr(self, "_active_run_cache", None)
if cached is not None:
return cached
if hasattr(self, "_active_run_cache"):
return self._active_run_cache
active = tuple(run for run in self.store.list_runs() if run.state in ACTIVE_STATES)
if len(active) > 1:
raise WorkerAgentError("multiple active qualification runs violate worker authority")

View File

@ -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:
publishers = [_Publisher() for _ in range(3)]