forked from TrueCloudLab/frostfs-node
20ed7c0d61
Implement Delete method on DB structure that adds deleted addresses to tombstone index. Do not attach addresses from tombstone index to Select result. Return error from Get method if address is presented in tombstone index. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
31 lines
788 B
Go
31 lines
788 B
Go
package meta
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
|
"github.com/pkg/errors"
|
|
"go.etcd.io/bbolt"
|
|
)
|
|
|
|
var tombstoneBucket = []byte("tombstones")
|
|
|
|
// Delete marks object as deleted.
|
|
func (db *DB) Delete(addr *object.Address) error {
|
|
return db.boltDB.Update(func(tx *bbolt.Tx) error {
|
|
bucket, err := tx.CreateBucketIfNotExists(tombstoneBucket)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "(%T) could not create tombstone bucket", db)
|
|
}
|
|
|
|
if err := bucket.Put(addressKey(addr), nil); err != nil {
|
|
return errors.Wrapf(err, "(%T) could not put to tombstone bucket", db)
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func objectRemoved(tx *bbolt.Tx, addr []byte) bool {
|
|
tombstoneBucket := tx.Bucket(tombstoneBucket)
|
|
|
|
return tombstoneBucket != nil && tombstoneBucket.Get(addr) != nil
|
|
}
|