thanos-io/thanos · error

create temp dir

Error message

create temp dir

What it means

Wraps os.MkdirAll in newPartFile: the parent directory for an index-header part file does not exist and could not be created (permissions, read-only filesystem). This is the fallback branch taken when fileutil.OpenDir reported IsNotExist; part caching to temp files cannot proceed.

Solutions

  1. Check permissions on the temp directory path
  2. Free disk space if full
  3. Ensure the path is not a regular file
Defensive patterns

Strategy: try-catch

When it happens

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

Appendix: source

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

type Part interface {
	Read(buf []byte) (int, error)
	Write(buf []byte) (int, error)
	Flush() error
}

// 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")
	}

View on GitHub (pinned to 35b8b99117)