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

Commit 0ce9de1

Browse files
don't bail for missing meta.js files
1 parent bc49a66 commit 0ce9de1

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

compact.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ func (c *LeveledCompactor) Plan(dir string) ([]string, error) {
157157
for _, dir := range dirs {
158158
meta, err := readMetaFile(dir)
159159
if err != nil {
160-
return nil, err
160+
// No need to return an error as this will be deleted when reloading the db.
161+
continue
161162
}
162163
dms = append(dms, dirMeta{dir, meta})
163164
}
@@ -313,13 +314,15 @@ func (c *LeveledCompactor) Compact(dest string, dirs ...string) (uid ulid.ULID,
313314
for _, d := range dirs {
314315
b, err := OpenBlock(d, c.chunkPool)
315316
if err != nil {
316-
return uid, err
317+
level.Error(c.logger).Log("msg", "couldn't open a block", "dir", d, "err", err.Error())
318+
continue
317319
}
318320
defer b.Close()
319321

320322
meta, err := readMetaFile(d)
321323
if err != nil {
322-
return uid, err
324+
level.Error(c.logger).Log("msg", "reading meta file", "dir", d, "err", err.Error())
325+
continue
323326
}
324327

325328
metas = append(metas, meta)

db.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ func (db *DB) retentionCutoff() (b bool, err error) {
319319
last := blocks[len(db.blocks)-1]
320320

321321
mint := last.Meta().MaxTime - int64(db.opts.RetentionDuration)
322-
dirs, err := retentionCutoffDirs(db.dir, mint)
322+
dirs, err := retentionCutoffDirs(db.logger, db.dir, mint)
323323
if err != nil {
324324
return false, err
325325
}
@@ -433,7 +433,7 @@ func (db *DB) compact() (changes bool, err error) {
433433

434434
// retentionCutoffDirs returns all directories of blocks in dir that are strictly
435435
// before mint.
436-
func retentionCutoffDirs(dir string, mint int64) ([]string, error) {
436+
func retentionCutoffDirs(l log.Logger, dir string, mint int64) ([]string, error) {
437437
df, err := fileutil.OpenDir(dir)
438438
if err != nil {
439439
return nil, errors.Wrapf(err, "open directory")
@@ -450,7 +450,8 @@ func retentionCutoffDirs(dir string, mint int64) ([]string, error) {
450450
for _, dir := range dirs {
451451
meta, err := readMetaFile(dir)
452452
if err != nil {
453-
return nil, errors.Wrapf(err, "read block meta %s", dir)
453+
delDirs = append(delDirs, dir)
454+
continue
454455
}
455456
// The first block we encounter marks that we crossed the boundary
456457
// of deletable blocks.
@@ -504,18 +505,16 @@ func (db *DB) reload(deleteable ...string) (err error) {
504505
for _, dir := range dirs {
505506
meta, err := readMetaFile(dir)
506507
if err != nil {
507-
return errors.Wrapf(err, "read meta information %s", dir)
508-
}
509-
// If the block is pending for deletion, don't add it to the new block set.
510-
if stringsContain(deleteable, dir) {
508+
deleteable = append(deleteable, dir)
509+
level.Error(db.logger).Log("msg", "dir set for deletion due to error in the meta file", "dir", dir, "err", err.Error())
511510
continue
512511
}
513512

514513
b, ok := db.getBlock(meta.ULID)
515514
if !ok {
516515
b, err = OpenBlock(dir, db.chunkPool)
517516
if err != nil {
518-
return errors.Wrapf(err, "open block %s", dir)
517+
continue
519518
}
520519
}
521520

@@ -541,8 +540,14 @@ func (db *DB) reload(deleteable ...string) (err error) {
541540
if err := b.Close(); err != nil {
542541
level.Warn(db.logger).Log("msg", "closing block failed", "err", err)
543542
}
544-
if err := os.RemoveAll(b.Dir()); err != nil {
545-
level.Warn(db.logger).Log("msg", "deleting block failed", "err", err)
543+
deleteable = append(deleteable, b.Dir())
544+
}
545+
546+
for _, d := range deleteable {
547+
if _, err := os.Stat(d); err == nil {
548+
if err := os.RemoveAll(d); err != nil {
549+
level.Warn(db.logger).Log("msg", "deleting block failed", "err", err)
550+
}
546551
}
547552
}
548553

repair.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ func repairBadIndexVersion(logger log.Logger, dir string) error {
3030
continue
3131
}
3232
d = path.Join(dir, d)
33+
// Skip dirs with missing meta. These will be deleted when reloading the db.
34+
if _, err := os.Stat(filepath.Join(dir, metaFilename)); os.IsNotExist(err) {
35+
continue
36+
}
3337

3438
meta, err := readBogusMetaFile(d)
3539
if err != nil {

0 commit comments

Comments
 (0)