package blobovnicza import ( "context" "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "go.etcd.io/bbolt" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" ) // Exists check if object with the specified address is stored in b. func (b *Blobovnicza) Exists(ctx context.Context, addr oid.Address) (bool, error) { exists := false _, span := tracing.StartSpanFromContext(ctx, "Blobovnicza.Exists", trace.WithAttributes( attribute.String("path", b.path), attribute.String("address", addr.EncodeToString()), )) defer span.End() b.controlMtx.RLock() defer b.controlMtx.RUnlock() addrKey := addressKey(addr) err := b.boltDB.View(func(tx *bbolt.Tx) error { return tx.ForEach(func(bucketName []byte, buck *bbolt.Bucket) error { if isNonDataBucket(bucketName) { return nil } exists = buck.Get(addrKey) != nil if exists { return errInterruptForEach } return nil }) }) if err == errInterruptForEach { err = nil } return exists, err }