[#217] storage engine: Add GC marking to Inhume operation
Add `InhumePrm.MarkAsGarbage` method which marks passed objects to be removed from local storage. Update `InhumePrm.WithTarget` doc to prevent conflicting use with the new method. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
7a4e3efa95
commit
35073fb61b
1 changed files with 18 additions and 1 deletions
|
@ -22,6 +22,7 @@ type InhumeRes struct{}
|
||||||
// as the reason for inhume operation.
|
// as the reason for inhume operation.
|
||||||
//
|
//
|
||||||
// tombstone should not be nil, addr should not be empty.
|
// tombstone should not be nil, addr should not be empty.
|
||||||
|
// Should not be called along with MarkAsGarbage.
|
||||||
func (p *InhumePrm) WithTarget(tombstone *objectSDK.Address, addrs ...*objectSDK.Address) *InhumePrm {
|
func (p *InhumePrm) WithTarget(tombstone *objectSDK.Address, addrs ...*objectSDK.Address) *InhumePrm {
|
||||||
if p != nil {
|
if p != nil {
|
||||||
p.addrs = addrs
|
p.addrs = addrs
|
||||||
|
@ -31,6 +32,18 @@ func (p *InhumePrm) WithTarget(tombstone *objectSDK.Address, addrs ...*objectSDK
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarkAsGarbage marks object to be physically removed from local storage.
|
||||||
|
//
|
||||||
|
// Should not be called along with WithTarget.
|
||||||
|
func (p *InhumePrm) MarkAsGarbage(addrs ...*objectSDK.Address) *InhumePrm {
|
||||||
|
if p != nil {
|
||||||
|
p.addrs = addrs
|
||||||
|
p.tombstone = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
var errInhumeFailure = errors.New("inhume operation failed")
|
var errInhumeFailure = errors.New("inhume operation failed")
|
||||||
|
|
||||||
// Inhume calls metabase. Inhume method to mark object as removed. It won't be
|
// Inhume calls metabase. Inhume method to mark object as removed. It won't be
|
||||||
|
@ -39,7 +52,11 @@ func (e *StorageEngine) Inhume(prm *InhumePrm) (*InhumeRes, error) {
|
||||||
shPrm := new(shard.InhumePrm)
|
shPrm := new(shard.InhumePrm)
|
||||||
|
|
||||||
for i := range prm.addrs {
|
for i := range prm.addrs {
|
||||||
shPrm.WithTarget(prm.tombstone, prm.addrs[i])
|
if prm.tombstone != nil {
|
||||||
|
shPrm.WithTarget(prm.tombstone, prm.addrs[i])
|
||||||
|
} else {
|
||||||
|
shPrm.MarkAsGarbage(prm.addrs[i])
|
||||||
|
}
|
||||||
|
|
||||||
ok := e.inhume(prm.addrs[i], shPrm, true)
|
ok := e.inhume(prm.addrs[i], shPrm, true)
|
||||||
if ok {
|
if ok {
|
||||||
|
|
Loading…
Reference in a new issue