JuliusBrussee/caveman · error

refusing non-regular file

Error message

refusing non-regular file

What it means

Error "refusing non-regular file" thrown in JuliusBrussee/caveman.

Source

Thrown at engine/ccr/store_sqlite.go:268

	info, err := os.Lstat(path)
	if errors.Is(err, os.ErrNotExist) && create {
		file, createErr := os.OpenFile(path, os.O_CREATE|os.O_EXCL|os.O_RDWR, 0o600)
		if createErr == nil {
			return file.Close()
		}
		if !errors.Is(createErr, os.ErrExist) {
			return createErr
		}
		info, err = os.Lstat(path)
	}
	if errors.Is(err, os.ErrNotExist) && !create {
		return nil
	}
	if err != nil {
		return err
	}
	if info.Mode()&os.ModeSymlink != 0 || !info.Mode().IsRegular() {
		return fmt.Errorf("refusing non-regular file")
	}
	file, err := os.OpenFile(path, os.O_RDWR, 0)
	if errors.Is(err, os.ErrNotExist) && !create {
		// The sidecar vanished between Lstat and open — a concurrent process
		// checkpointed the WAL and removed it. Nothing left to secure.
		return nil
	}
	if err != nil {
		return err
	}
	defer file.Close()
	opened, err := file.Stat()
	if err != nil {
		return err
	}
	if !os.SameFile(info, opened) {
		return fmt.Errorf("file changed while opening")
	}

View on GitHub (pinned to 27d5a3981a)

Solutions

  1. Point the store at a regular file, not a symlink or device.

When it happens

Trigger: Thrown at engine/ccr/store_sqlite.go:268 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15). Data as JSON: /api/errors/a1f66198d8176de5. Report an issue: GitHub.