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
- Verify the directory exists and is accessible
- Check mount health and permissions
- 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),
}, nilView on GitHub (pinned to 35b8b99117)