github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/storage/bucket/bucket_util.go (about)

     1  package bucket
     2  
     3  import (
     4  	"context"
     5  	"strings"
     6  
     7  	"github.com/go-kit/log"
     8  	"github.com/go-kit/log/level"
     9  	"github.com/thanos-io/thanos/pkg/objstore"
    10  )
    11  
    12  // DeletePrefix removes all objects with given prefix, recursively.
    13  // It returns number of deleted objects.
    14  // If deletion of any object fails, it returns error and stops.
    15  func DeletePrefix(ctx context.Context, bkt objstore.Bucket, prefix string, logger log.Logger) (int, error) {
    16  	result := 0
    17  	err := bkt.Iter(ctx, prefix, func(name string) error {
    18  		if strings.HasSuffix(name, objstore.DirDelim) {
    19  			deleted, err := DeletePrefix(ctx, bkt, name, logger)
    20  			result += deleted
    21  			return err
    22  		}
    23  
    24  		if err := bkt.Delete(ctx, name); err != nil {
    25  			return err
    26  		}
    27  		result++
    28  		level.Debug(logger).Log("msg", "deleted file", "file", name)
    29  		return nil
    30  	})
    31  
    32  	return result, err
    33  }