trustgraph/tests
V.Sreeram d4723566cb fix: prevent duplicate dispatcher creation race condition in invoke_global_service (#715)
* fix: prevent duplicate dispatcher creation race condition in invoke_global_service

Concurrent coroutines could all pass the `if key in self.dispatchers` check
before any of them wrote the result back, because `await dispatcher.start()`
yields to the event loop. This caused multiple Pulsar consumers to be created
on the same shared subscription, distributing responses round-robin and
dropping ~2/3 of them — manifesting as a permanent spinner in the Workbench UI.

Apply a double-checked asyncio.Lock in both `invoke_global_service` and
`invoke_flow_service` so only one dispatcher is ever created per service key.

* test: add concurrent-dispatch tests for race condition fix

Add asyncio.gather-based tests that verify invoke_global_service and
invoke_flow_service create exactly one dispatcher under concurrent calls,
preventing the duplicate Pulsar consumer bug.
2026-04-06 11:14:32 +01:00
..
contract Pub/sub abstraction: decouple from Pulsar (#751) 2026-04-01 20:16:53 +01:00
integration Split Analysis into Analysis+ToolUse and Observation, add message_id (#747) 2026-03-31 17:51:22 +01:00
unit fix: prevent duplicate dispatcher creation race condition in invoke_global_service (#715) 2026-04-06 11:14:32 +01:00
utils Streaming rag responses (#568) 2025-11-26 19:47:39 +00:00
__init__.py Test suite executed from CI pipeline (#433) 2025-07-14 14:57:44 +01:00
conftest.py Fix test async warnings (#601) 2026-01-06 22:09:34 +00:00
pytest.ini Entity-centric graph (#633) 2026-02-16 13:26:43 +00:00
requirements.txt Test suite executed from CI pipeline (#433) 2025-07-14 14:57:44 +01:00