github.com/grafana/pyroscope@v1.18.0/pkg/objstore/bucket_util.go (about)

     1  // SPDX-License-Identifier: AGPL-3.0-only
     2  // Provenance-includes-location: https://github.com/cortexproject/cortex/blob/master/pkg/storage/bucket/bucket_util.go
     3  // Provenance-includes-license: Apache-2.0
     4  // Provenance-includes-copyright: The Cortex Authors.
     5  
     6  package objstore
     7  
     8  import (
     9  	"context"
    10  	"strings"
    11  
    12  	"github.com/go-kit/log"
    13  	"github.com/go-kit/log/level"
    14  	"github.com/thanos-io/objstore"
    15  )
    16  
    17  // DeletePrefix removes all objects with given prefix, recursively.
    18  // It returns number of deleted objects.
    19  // If deletion of any object fails, it returns error and stops.
    20  func DeletePrefix(ctx context.Context, bkt objstore.Bucket, prefix string, logger log.Logger) (int, error) {
    21  	result := 0
    22  	err := bkt.Iter(ctx, prefix, func(name string) error {
    23  		if strings.HasSuffix(name, objstore.DirDelim) {
    24  			deleted, err := DeletePrefix(ctx, bkt, name, logger)
    25  			result += deleted
    26  			return err
    27  		}
    28  
    29  		if err := bkt.Delete(ctx, name); err != nil {
    30  			return err
    31  		}
    32  		result++
    33  		level.Debug(logger).Log("msg", "deleted file", "file", name)
    34  		return nil
    35  	})
    36  
    37  	return result, err
    38  }