thanos-io/thanos · error

remove existing file

Error message

remove existing file

What it means

Wraps os.RemoveAll in newPartFile: a pre-existing part file at the target path could not be deleted before recreating it (permissions or filesystem error). Leftover files from a previous partial run are the usual cause.

Solutions

  1. Check for processes holding the old part file open
  2. Fix permissions on the temp dir
  3. Remove the stale file manually if safe
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pkg/block/indexheader/parallel_bucket.go:170 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07). Data as JSON: /api/errors/33173d130b338566. Report an issue: GitHub.

Appendix: source

Thrown at pkg/block/indexheader/parallel_bucket.go:170

func newPartFile(filename string) (*partFile, error) {
	dir := filepath.Dir(filename)
	df, err := fileutil.OpenDir(dir)
	if os.IsNotExist(err) {
		if err := os.MkdirAll(dir, os.ModePerm); err != nil {
			return nil, errors.Wrap(err, "create temp dir")
		}
		df, err = fileutil.OpenDir(dir)
	}
	if err != nil {
		return nil, errors.Wrap(err, "open temp dir")
	}

	if err := df.Sync(); err != nil {
		return nil, errors.Wrap(err, "sync dir")
	}

	if err := os.RemoveAll(filename); err != nil {
		return nil, errors.Wrap(err, "remove existing file")
	}
	f, err := os.OpenFile(filepath.Clean(filename), os.O_CREATE|os.O_RDWR, 0600)
	if err != nil {
		return nil, errors.Wrap(err, "open temp file")
	}
	return &partFile{
		file:       f,
		fileWriter: bufio.NewWriterSize(f, 32*1024),
		fileReader: bufio.NewReaderSize(f, 32*1024),
	}, nil
}

func (p *partFile) Close() error {
	if err := p.file.Close(); err != nil {
		return err
	}
	return os.Remove(p.file.Name())
}

View on GitHub (pinned to 35b8b99117)