Skip to content
This repository has been archived by the owner on Aug 13, 2019. It is now read-only.

Prevent creation of block dirs with zero samples #245

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions compact.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import (
"github.com/prometheus/tsdb/labels"
)

var errNoSample = errors.New("No samples for this block")

// ExponentialBlockRanges returns the time ranges based on the stepSize
func ExponentialBlockRanges(minSize int64, steps, stepSize int) []int64 {
ranges := make([]int64, 0, steps)
Expand Down Expand Up @@ -391,10 +393,19 @@ func (c *LeveledCompactor) write(dest string, meta *BlockMeta, blocks ...BlockRe

defer func(t time.Time) {
if err != nil {
c.metrics.failed.Inc()
if err == errNoSample {
// Not an error actually
err = nil
} else {
c.metrics.failed.Inc()
}
_, err2 := os.Stat(tmp)
if os.IsNotExist(err2) {
return
}
// TODO(gouthamve): Handle error how?
if err := os.RemoveAll(tmp); err != nil {
level.Error(c.logger).Log("msg", "removed tmp folder after failed compaction", "err", err.Error())
if err2 = os.RemoveAll(tmp); err2 != nil {
level.Error(c.logger).Log("msg", "removed tmp folder after failed compaction", "err", err2.Error())
}
}
c.metrics.ran.Inc()
Expand Down Expand Up @@ -447,6 +458,12 @@ func (c *LeveledCompactor) write(dest string, meta *BlockMeta, blocks ...BlockRe
return errors.Wrap(err, "close index writer")
}

if meta.Stats.NumSamples == 0 {
// No need for this directory
err = errNoSample
return
}

// Create an empty tombstones file.
if err := writeTombstoneFile(tmp, EmptyTombstoneReader()); err != nil {
return errors.Wrap(err, "write new tombstones file")
Expand Down