alibaba/open-code-review · error
flush session_end: %w
Error message
flush session_end: %w
What it means
Raised when jw.writer.Flush() fails while finalizing the session_end record. The record body and newline were accepted into the buffer, but pushing the buffered bytes to the underlying file failed, so the session_end line may be partially written or missing on disk.
Source
Thrown at internal/session/persist.go:409
data, err := json.Marshal(rec)
if err != nil {
if jw.writer != nil {
jw.writer.Flush()
}
if jw.file != nil {
jw.file.Close()
}
return fmt.Errorf("marshal session_end: %w", err)
}
var writeErr error
if jw.writer != nil {
if _, err := jw.writer.Write(data); err != nil {
writeErr = fmt.Errorf("write session_end: %w", err)
} else if err := jw.writer.WriteByte('\n'); err != nil {
writeErr = fmt.Errorf("write session_end: %w", err)
} else if err := jw.writer.Flush(); err != nil {
writeErr = fmt.Errorf("flush session_end: %w", err)
}
}
if jw.file != nil {
if err := jw.file.Close(); err != nil && writeErr == nil {
writeErr = fmt.Errorf("close session file: %w", err)
}
}
return writeErr
}
func (jw *jsonlWriter) flushAndClose() {
jw.mu.Lock()
defer jw.mu.Unlock()
if jw.writer != nil {
jw.writer.Flush()
}
if jw.file != nil {
jw.file.Close()View on GitHub (pinned to 5cf97d0d15)
Solutions
- Free disk space / resolve the underlying I/O condition reported by the wrapped error
- Check dmesg/mount health if on NFS or flaky storage; move ~/.opencodereview to local disk
- Inspect the tail of the session JSONL: a partial session_end line means the session was not finalized cleanly and replay (LoadResumeState) will fail parsing
- Re-run the review to produce a complete session file
Defensive patterns
Strategy: try-catch
Try / catch
if err := writer.WriteSessionEnd(); err != nil {
if strings.Contains(err.Error(), "flush session_end") {
if errors.Is(err, syscall.ENOSPC) {
log.Fatal("disk full at flush time")
}
// verify session file integrity before resuming from it
if _, err := session.LoadResumeState(repoDir, sessionID); err != nil {
log.Printf("session file corrupt, starting fresh: %v", err)
}
}
} Prevention
- Keep sessions on reliable local storage rather than NFS
- Validate the JSONL with LoadResumeState before relying on it after an error
- Free disk headroom before long-running reviews
When it happens
Trigger: WriteSessionEnd: after successful Write(data) and WriteByte('\n'), bufio.Writer.Flush() returns the error stored by the underlying write to the file (commonly ENOSPC or EIO).
Common situations: Disk quota/space exhausted at flush time; filesystem I/O error (failing disk, network mount dropped); the file was closed underneath the buffered writer.
Related errors
- close output file: %w
- create output file %s: %w
- write session_end: %w
- read background file %q: %w
- background file %q is a directory, not a file
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/673846a1e87b6f8c.
Report an issue: GitHub.