[#1115] shard/gc: provide parsed addresses in HandleExpiredTombstones

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2022-02-07 18:08:00 +03:00 committed by Alex Vanin
parent 7ca06aeae2
commit c1530dec5e
4 changed files with 8 additions and 22 deletions

View file

@ -135,10 +135,10 @@ func (e *StorageEngine) inhumeAddr(addr *addressSDK.Address, prm *shard.InhumePr
} }
func (e *StorageEngine) processExpiredTombstones(ctx context.Context, addrs []*addressSDK.Address) { func (e *StorageEngine) processExpiredTombstones(ctx context.Context, addrs []*addressSDK.Address) {
tss := make(map[string]struct{}, len(addrs)) tss := make(map[string]*addressSDK.Address, len(addrs))
for i := range addrs { for i := range addrs {
tss[addrs[i].String()] = struct{}{} tss[addrs[i].String()] = addrs[i]
} }
e.iterateOverUnsortedShards(func(sh hashedShard) (stop bool) { e.iterateOverUnsortedShards(func(sh hashedShard) (stop bool) {

View file

@ -120,13 +120,13 @@ func objectType(tx *bbolt.Tx, cid *cid.ID, oidBytes []byte) object.Type {
// Returns other errors of h directly. // Returns other errors of h directly.
// //
// Does not modify tss. // Does not modify tss.
func (db *DB) IterateCoveredByTombstones(tss map[string]struct{}, h func(*addressSDK.Address) error) error { func (db *DB) IterateCoveredByTombstones(tss map[string]*addressSDK.Address, h func(*addressSDK.Address) error) error {
return db.boltDB.View(func(tx *bbolt.Tx) error { return db.boltDB.View(func(tx *bbolt.Tx) error {
return db.iterateCoveredByTombstones(tx, tss, h) return db.iterateCoveredByTombstones(tx, tss, h)
}) })
} }
func (db *DB) iterateCoveredByTombstones(tx *bbolt.Tx, tss map[string]struct{}, h func(*addressSDK.Address) error) error { func (db *DB) iterateCoveredByTombstones(tx *bbolt.Tx, tss map[string]*addressSDK.Address, h func(*addressSDK.Address) error) error {
bktGraveyard := tx.Bucket(graveyardBucketName) bktGraveyard := tx.Bucket(graveyardBucketName)
if bktGraveyard == nil { if bktGraveyard == nil {
return nil return nil

View file

@ -82,8 +82,8 @@ func TestDB_IterateCoveredByTombstones(t *testing.T) {
var handled []*addressSDK.Address var handled []*addressSDK.Address
tss := map[string]struct{}{ tss := map[string]*addressSDK.Address{
ts.String(): {}, ts.String(): ts,
} }
err = db.IterateCoveredByTombstones(tss, func(addr *addressSDK.Address) error { err = db.IterateCoveredByTombstones(tss, func(addr *addressSDK.Address) error {

View file

@ -276,7 +276,7 @@ func (s *Shard) getExpiredObjects(ctx context.Context, epoch uint64, collectTomb
// If successful, marks tombstones themselves as garbage. // If successful, marks tombstones themselves as garbage.
// //
// Does not modify tss. // Does not modify tss.
func (s *Shard) HandleExpiredTombstones(tss map[string]struct{}) { func (s *Shard) HandleExpiredTombstones(tss map[string]*addressSDK.Address) {
inhume := make([]*addressSDK.Address, 0, len(tss)) inhume := make([]*addressSDK.Address, 0, len(tss))
// Collect all objects covered by the tombstones. // Collect all objects covered by the tombstones.
@ -317,21 +317,7 @@ func (s *Shard) HandleExpiredTombstones(tss map[string]struct{}) {
inhume = inhume[:0] inhume = inhume[:0]
for strAddr := range tss { for _, addr := range tss {
// parse address
// TODO: make type of map values *object.Address since keys are calculated from addresses
addr := addressSDK.NewAddress()
err = addr.Parse(strAddr)
if err != nil {
s.log.Error("could not parse tombstone address",
zap.String("text", strAddr),
zap.String("error", err.Error()),
)
continue // try process other tombstones
}
inhume = append(inhume, addr) inhume = append(inhume, addr)
} }