fix(openviking): stop pending runtime start on shutdown

This commit is contained in:
Hao Zhe 2026-07-14 12:58:22 +08:00 committed by kshitij
parent c4d0f1c1d6
commit cf0bd5dd4c
2 changed files with 44 additions and 1 deletions

View file

@ -2201,7 +2201,8 @@ class OpenVikingMemoryProvider(MemoryProvider):
should_start_waiter = False
with self._runtime_start_lock:
if (
self._runtime_start_pending
self._shutting_down
or self._runtime_start_pending
or (self._runtime_start_thread and self._runtime_start_thread.is_alive())
):
self._client = None
@ -2234,6 +2235,8 @@ class OpenVikingMemoryProvider(MemoryProvider):
if should_start_waiter:
with self._runtime_start_lock:
self._runtime_start_pending = False
if self._shutting_down:
return
self._start_runtime_openviking_waiter(
status_callback=status_callback,
warning_callback=warning_callback,

View file

@ -68,3 +68,43 @@ def test_shutdown_waits_for_runtime_start_thread():
assert finished.is_set()
assert not t.is_alive()
def test_shutdown_during_pending_runtime_start_does_not_launch_waiter(monkeypatch):
"""A waiter reserved before shutdown must not start after shutdown returns."""
provider = OpenVikingMemoryProvider()
provider._endpoint = "http://127.0.0.1:1934"
status_entered = threading.Event()
release_status = threading.Event()
waiter_calls = []
monkeypatch.setattr(
openviking_module,
"_start_local_openviking_server",
lambda endpoint: (True, "started"),
)
monkeypatch.setattr(
provider,
"_start_runtime_openviking_waiter",
lambda **kwargs: waiter_calls.append(kwargs),
)
def status_callback(_message):
status_entered.set()
assert release_status.wait(2.0)
starter = threading.Thread(
target=provider._handle_runtime_openviking_unreachable,
kwargs={"status_callback": status_callback},
name="openviking-pending-start",
)
starter.start()
assert status_entered.wait(2.0)
provider.shutdown()
release_status.set()
starter.join(timeout=2.0)
assert not starter.is_alive()
assert provider._runtime_start_pending is False
assert waiter_calls == []