compact: sync temporary directory

This commit is contained in:
Fabian Reinartz 2017-10-04 10:42:25 +02:00
parent bbe72dccb9
commit f04ec031eb

View file

@ -20,12 +20,12 @@ import (
"sort" "sort"
"time" "time"
"github.com/prometheus/tsdb/fileutil"
"github.com/go-kit/kit/log" "github.com/go-kit/kit/log"
"github.com/oklog/ulid" "github.com/oklog/ulid"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/tsdb/chunks" "github.com/prometheus/tsdb/chunks"
"github.com/prometheus/tsdb/fileutil"
"github.com/prometheus/tsdb/labels" "github.com/prometheus/tsdb/labels"
) )
@ -420,21 +420,20 @@ func (c *LeveledCompactor) write(dest string, meta *BlockMeta, blocks ...BlockRe
return errors.Wrap(err, "write new tombstones file") return errors.Wrap(err, "write new tombstones file")
} }
// Block successfully written, make visible and remove old ones. df, err := fileutil.OpenDir(tmp)
if err := renameFile(tmp, dir); err != nil {
return errors.Wrap(err, "rename block dir")
}
// Properly sync parent dir to ensure changes are visible.
df, err := fileutil.OpenDir(dir)
if err != nil { if err != nil {
return errors.Wrap(err, "sync block dir") return errors.Wrap(err, "open temporary block dir")
} }
defer df.Close() defer df.Close()
if err := fileutil.Fsync(df); err != nil { if err := fileutil.Fsync(df); err != nil {
return errors.Wrap(err, "sync block dir") return errors.Wrap(err, "sync temporary dir file")
} }
// Block successfully written, make visible and remove old ones.
if err := renameFile(tmp, dir); err != nil {
return errors.Wrap(err, "rename block dir")
}
return nil return nil
} }
@ -750,13 +749,10 @@ func renameFile(from, to string) error {
if err != nil { if err != nil {
return err return err
} }
defer pdir.Close()
if err = fileutil.Fsync(pdir); err != nil { if err = fileutil.Fsync(pdir); err != nil {
pdir.Close()
return err return err
} }
if err = pdir.Close(); err != nil { return pdir.Close()
return err
}
return nil
} }