@@ -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,10 +505,8 @@ 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
@@ -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
0 commit comments