1 Commits
Author SHA1 Message Date
clawbot 304cf79826 fix(backend): give each report file a name of its own (closes #61)
check / check (push) Successful in 55s
Report files were named by a millisecond timestamp and created with
O_EXCL, so two flushes in the same millisecond, such as a flush for
size and the final flush at shutdown, got the same name and the second
failed, losing its reports. Each name now carries a number after the
timestamp that goes up by one for each file the server starts to
write, so names still sort by time and never repeat within a run; a
failed write leaves a gap in the numbers. The buffer reads the time
through a clock the new test stops, so its two flushes share one
timestamp on every run; the 1 ms pauses earlier tests used to dodge
the collision are gone.

Model: opus-5-5
2026-09-29 05:06:38 +00:00
2 changed files with 5 additions and 7 deletions
+2 -3
View File
@@ -27,9 +27,8 @@ latest run passes.
`reports-<timestamp>-<number>.jsonl.zst`, where the number goes up by one for `reports-<timestamp>-<number>.jsonl.zst`, where the number goes up by one for
each file the server starts to write, so two flushes in the same millisecond, each file the server starts to write, so two flushes in the same millisecond,
such as a flush for size and the final flush at shutdown, each get a file of such as a flush for size and the final flush at shutdown, each get a file of
their own instead of the second one failing. A failed write uses up its their own instead of the second one failing. A failed write leaves a gap in
number, leaving a gap if the file could not be created and otherwise a file the numbers.
under that number that may be incomplete.
- 2026-09-29: ready to run under upaas (issue #59): the image has a - 2026-09-29: ready to run under upaas (issue #59): the image has a
`HEALTHCHECK` that requests `/.well-known/healthcheck` through nginx on the `HEALTHCHECK` that requests `/.well-known/healthcheck` through nginx on the
port from `PORT`. The backend no longer reads a bad `PORT` as 0 or a bad port from `PORT`. The backend no longer reads a bad `PORT` as 0 or a bad
+3 -4
View File
@@ -110,10 +110,9 @@ Reports are written as `reports-<timestamp>-<number>.jsonl.zst` files in
`DATA_DIR`. The timestamp is in UTC to the millisecond, so the names sort by `DATA_DIR`. The timestamp is in UTC to the millisecond, so the names sort by
time. The number starts at 1 when the server starts and goes up by one for each time. The number starts at 1 when the server starts and goes up by one for each
file the server starts to write, so two files written in the same millisecond file the server starts to write, so two files written in the same millisecond
still get different names. A failed write uses up its number, leaving a gap in still get different names, and a failed write leaves a gap in the numbers. Each
the numbers if the file could not be created and otherwise a file under that file contains one JSON object per line, compressed with zstd. Files are created
number that may be incomplete. Each file contains one JSON object per line, with `O_EXCL` to prevent overwrites.
compressed with zstd. Files are created with `O_EXCL` to prevent overwrites.
### Report limits ### Report limits