benbjohnson/litestream · error

truncate buffer

Error message

truncate buffer: %w

What it means

Wraps bufferFile.Truncate(0) failure in VFSFile.clearWriteBuffer, which resets the write-buffer file after a successful sync. Fires when the temporary buffer backing file cannot be truncated, leaving stale page data that would corrupt subsequent buffered writes.

Solutions

  1. Check the health and permissions of the buffer file
  2. Restart the process to re-create the buffer if the file was deleted
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at vfs.go:2237 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of benbjohnson/litestream@4ed7a308f6 (2026-09-06). Data as JSON: /api/errors/9d53b47e55aaf8eb. Report an issue: GitHub.

Appendix: source

Thrown at vfs.go:2237

		f.bufferNextOff += int64(len(data))
	}

	// Write page data (no header, just raw page data)
	if _, err := f.bufferFile.WriteAt(data, writeOffset); err != nil {
		return fmt.Errorf("write page to buffer: %w", err)
	}

	// Update dirty map with offset
	f.dirty[pgno] = writeOffset

	return nil
}

// clearWriteBuffer clears and resets the write buffer after successful sync.
func (f *VFSFile) clearWriteBuffer() error {
	// Truncate file to zero
	if err := f.bufferFile.Truncate(0); err != nil {
		return fmt.Errorf("truncate buffer: %w", err)
	}

	// Reset next write offset
	f.bufferNextOff = 0

	return nil
}

func (f *VFSFile) FileSize() (size int64, err error) {
	pageSize, err := f.pageSizeBytes()
	if err != nil {
		return 0, err
	}

	f.mu.Lock()
	for pgno := range f.index {
		if v := int64(pgno) * int64(pageSize); v > size {
			size = v

View on GitHub (pinned to 4ed7a308f6)