改动 / #3338

#3338 [Other] Read conversation-cache log backlogs without dropping events

open · @oscarlius · 0 评论 · 去 GitHub 看

Server & APIWindows

说明

## Problem and result

Issue #3048 can drop earlier conversation-cache events when more than one MiB arrives between monitor polls. The observer now advances through a captured end of file in bounded chunks, commits only complete lines, and retains a partial line for the next poll.

## Related discussion

Continues #3050 after the 0.2.0-beta tracker reset. The original passed the new format check, but GitHub refused to reopen the rebased branch; [the reset bot](https://github.com/Niko1221/Strata/pull/3050#issuecomment-6282596517) explicitly suggested a new linked pull request.

Fixes #3048.

## Approach

- Replace the last-MiB seek with bounded sequential chunks in `serve/server.py`.
- Commit the byte cursor only through complete lines so interrupted writes and read errors retry safely.
- Add local backlog, chunk-boundary, interrupted-read, and local HTTP regression coverage in `serve/test_cache_log_backlog.py`.

## Validation

Rebased on upstream main `e88ee39d1d6be6e3364183af3b39b62a7ed6f211` (0.2.0-beta); tested candidate `90ca8acc79242e18f954e71a4c570a4ee8887f41` on Windows, Python 3.14.3. Each test command starts a fresh local process.

**Passed:**
- `py -3.12 -m ruff check --output-format json serve/server.py serve/test_cache_log_backlog.py` (Ruff 0.2.1): 10 existing diagnostics, same as unmodified main; zero new diagnostics.
 `python -m unittest serve.test_cache_log_backlog` (7 tests); `python -m unittest serve.test_monitor serve.test_server serve.test_prometheus` (357 tests, 3 skipped); `python -m py_compile serve/server.py`; `git diff --check e88ee39d1d6be6e3364183af3b39b62a7ed6f211..HEAD`.

**Failed:** Red reproduction used `git restore --source=e88ee39d1d6be6e3364183af3b39b62a7ed6f211 -- serve/server.py`, then `python -m unittest serve.test_cache_log_backlog`, then `git restore --source=HEAD -- serve/server.py`. The test ran 7 tests and failed 8 assertions, covering lost early events, chunk crossings, partial-line retry, and local `/metrics` catch-up.

**Not run:** Native backend builds and real GPU/model tests. Only Python observer code changed. The Python 3.14.3 test environment had no Ruff; the separate Python 3.12.7 lint comparison above completed successfully.

## Limits

One poll may process a large accumulated backlog; each underlying read remains bounded by `READ_MAX`. Validation used local file fixtures and a local MockEngine HTTP server; it did not use a real engine or a production service.

本站相关内容

相关页面的快捷入口。