check / check (push) Successful in 1m57s
When a report would take the report files past DATA_DIR_MAX_BYTES, reportbuf now deletes the oldest report files until it fits, and does the same at start when files left by an earlier run are already past it. A file joins the files that may be deleted, at its place by name, only once it is completely written, so a file still being written is never deleted. A report is refused with 507 only when the reports waiting to be written fill the cap on their own, and then no file is deleted. The reports of a failed write stop counting, and the part of its file written is removed. A file whose deletion fails keeps counting; one already deleted by hand counts as freed. Model: opus-5-5
30 lines
847 B
Go
30 lines
847 B
Go
package reportbuf
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
// FlushSizeThreshold exposes the buffer size at which Append starts
|
|
// writing a report file to the external tests.
|
|
const FlushSizeThreshold = flushSizeThreshold
|
|
|
|
// Flush writes the buffered reports to a file now, as the periodic
|
|
// flush does, so tests need not wait a minute for it.
|
|
func (b *Buffer) Flush() error {
|
|
return b.flushLocked()
|
|
}
|
|
|
|
// StopClock makes every report file the buffer writes from now on
|
|
// carry the timestamp at, as if all were written in one millisecond.
|
|
func (b *Buffer) StopClock(at time.Time) {
|
|
b.now = func() time.Time { return at }
|
|
}
|
|
|
|
// OnFileCreated makes the buffer call fn with each report file it
|
|
// writes from now on, once the file is created and before anything is
|
|
// written to it.
|
|
func (b *Buffer) OnFileCreated(fn func(f *os.File)) {
|
|
b.fileCreated = fn
|
|
}
|