forked from TrueCloudLab/frostfs-node
[#378] metabase: Implement iterator over the objects under tombstones
Implement `DB.IterateCoveredByTombstones` method that iterates over graves and handles all objects under one of the tombstones. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
b961570766
commit
3d5169c4c9
2 changed files with 82 additions and 0 deletions
|
@ -56,3 +56,44 @@ func putWithExpiration(t *testing.T, db *meta.DB, typ object.Type, expiresAt uin
|
|||
|
||||
return obj.Address()
|
||||
}
|
||||
|
||||
func TestDB_IterateCoveredByTombstones(t *testing.T) {
|
||||
db := newDB(t)
|
||||
defer releaseDB(db)
|
||||
|
||||
ts := generateAddress()
|
||||
protected1 := generateAddress()
|
||||
protected2 := generateAddress()
|
||||
garbage := generateAddress()
|
||||
|
||||
prm := new(meta.InhumePrm)
|
||||
|
||||
var err error
|
||||
|
||||
_, err = db.Inhume(prm.
|
||||
WithTombstoneAddress(ts).
|
||||
WithAddresses(protected1, protected2),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = db.Inhume(prm.
|
||||
WithAddresses(garbage).
|
||||
WithGCMark(),
|
||||
)
|
||||
|
||||
var handled []*object.Address
|
||||
|
||||
tss := map[string]struct{}{
|
||||
ts.String(): {},
|
||||
}
|
||||
|
||||
err = db.IterateCoveredByTombstones(tss, func(addr *object.Address) error {
|
||||
handled = append(handled, addr)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, handled, 2)
|
||||
require.Contains(t, handled, protected1)
|
||||
require.Contains(t, handled, protected2)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue