benbjohnson/litestream · error

invalid timestamp (expected RFC3339 or relative time like '5

Error message

invalid timestamp (expected RFC3339 or relative time like '5 minutes ago'): %s

What it means

parseTimeValue rejected a timestamp string: it is neither RFC3339(Nano) nor a relative expression dateparser understands (like '5 minutes ago'). This guards VFS URI / config timestamp options such as hydration or retention points-in-time.

Source

Thrown at vfs.go:2416

// parseTimeValue parses a timestamp string, trying RFC3339 first, then relative expressions.
func parseTimeValue(value string) (time.Time, error) {
	// Try RFC3339Nano first (existing behavior)
	if t, err := time.Parse(time.RFC3339Nano, value); err == nil {
		return t, nil
	}

	// Try RFC3339 (without nanoseconds)
	if t, err := time.Parse(time.RFC3339, value); err == nil {
		return t, nil
	}

	// Fall back to dateparser for relative expressions
	cfg := &dateparser.Configuration{
		CurrentTime: time.Now().UTC(),
	}
	result, err := dateparser.Parse(cfg, value)
	if err != nil {
		return time.Time{}, fmt.Errorf("invalid timestamp (expected RFC3339 or relative time like '5 minutes ago'): %s", value)
	}
	if result.Time.IsZero() {
		return time.Time{}, fmt.Errorf("could not parse time: %s", value)
	}
	return result.Time.UTC(), nil
}

// FileControl handles file control operations, specifically PRAGMA commands for time travel.
func (f *VFSFile) FileControl(op int, pragmaName string, pragmaValue *string) (*string, error) {
	const SQLITE_FCNTL_PRAGMA = 14

	if op != SQLITE_FCNTL_PRAGMA {
		return nil, fmt.Errorf("unsupported file control op: %d", op)
	}

	name := strings.ToLower(pragmaName)

	f.logger.Debug("file control", "pragma", name, "value", pragmaValue)

View on GitHub (pinned to 4ed7a308f6)

Solutions

  1. Use RFC3339 like 2026-01-02T15:04:05Z
  2. Or a supported relative expression like '5 minutes ago'
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at vfs.go:2416 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/7b1af00099bbb1de. Report an issue: GitHub.