thanos-io/thanos · error

open temp dir

Error message

open temp dir

What it means

Wraps fileutil.OpenDir in newPartFile when opening the directory that will hold an index-header part file. It fires when the dir cannot be opened for reasons other than non-existence (permissions, symlink loop, I/O error); note the second OpenDir after MkdirAll also funnels its error here.

Solutions

  1. Verify the directory exists and is accessible
  2. Check mount health and permissions
  3. Retry after fixing filesystem state
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pkg/block/indexheader/parallel_bucket.go:162 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/5eb786db4302022b. Report an issue: GitHub.

Appendix: source

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

// partFile stores parts in temporary files.
type partFile struct {
	file       *os.File
	fileWriter *bufio.Writer
	fileReader *bufio.Reader
}

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

View on GitHub (pinned to 35b8b99117)