mirror of
https://github.com/tiennm99/DocsGPT.git
synced 2026-10-18 20:14:28 +00:00
Write chat traces off the stream's thread
The OTel replay and the trace INSERT ran in the stream's finally, so a slow database held the SSE connection open after the last event. The trace is still frozen when the stream ends, but written on a small writer pool.
This commit is contained in:
1 parent
0591580014
commit
778830208b
7 files changed
+91
-19
No files matched your search
@@ -22,7 +22,7 @@ def flushed():
|
||||
"""Capture flushed traces instead of writing them."""
|
||||
captured = []
|
||||
|
||||
def _fake_flush(trace, status=None):
|
||||
def _fake_flush(trace, status=None, **_kwargs):
|
||||
if trace is None or trace.flushed:
|
||||
return
|
||||
trace.flushed = True
|
||||
|
||||
@@ -98,3 +98,31 @@ class TestDiscard:
|
||||
tracing.discard(trace)
|
||||
tracing.flush(trace)
|
||||
repo.insert.assert_not_called()
|
||||
|
||||
|
||||
class TestBackgroundFlush:
|
||||
def test_background_flush_writes_off_the_calling_thread(self):
|
||||
import threading
|
||||
|
||||
trace = _trace_with_span()
|
||||
seen = {}
|
||||
|
||||
def _insert(record):
|
||||
seen["thread"] = threading.current_thread().name
|
||||
return True
|
||||
|
||||
with _patched_store() as repo:
|
||||
repo.insert.side_effect = _insert
|
||||
future = tracing.flush(trace, background=True)
|
||||
assert trace.finished # frozen at once, written later
|
||||
future.result(timeout=5)
|
||||
assert seen["thread"].startswith("trace-writer")
|
||||
assert repo.insert.call_count == 1
|
||||
|
||||
def test_background_flush_is_still_once(self):
|
||||
trace = _trace_with_span()
|
||||
with _patched_store() as repo:
|
||||
future = tracing.flush(trace, background=True)
|
||||
assert tracing.flush(trace, background=True) is None
|
||||
future.result(timeout=5)
|
||||
assert repo.insert.call_count == 1
|
||||
Reference in new issue
Block a user