[#1461] engine, policer: Force remove objects w/o container
Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
18ec5d7c8e
commit
51afcc1182
2 changed files with 16 additions and 0 deletions
|
@ -15,6 +15,8 @@ import (
|
||||||
type InhumePrm struct {
|
type InhumePrm struct {
|
||||||
tombstone *oid.Address
|
tombstone *oid.Address
|
||||||
addrs []oid.Address
|
addrs []oid.Address
|
||||||
|
|
||||||
|
forceRemoval bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// InhumeRes encapsulates results of inhume operation.
|
// InhumeRes encapsulates results of inhume operation.
|
||||||
|
@ -42,6 +44,15 @@ func (p *InhumePrm) MarkAsGarbage(addrs ...oid.Address) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithForceRemoval inhumes objects specified via MarkAsGarbage with GC mark
|
||||||
|
// without any object restrictions checks.
|
||||||
|
func (p *InhumePrm) WithForceRemoval() {
|
||||||
|
if p != nil {
|
||||||
|
p.forceRemoval = true
|
||||||
|
p.tombstone = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var errInhumeFailure = errors.New("inhume operation failed")
|
var errInhumeFailure = errors.New("inhume operation failed")
|
||||||
|
|
||||||
// Inhume calls metabase. Inhume method to mark an object as removed. It won't be
|
// Inhume calls metabase. Inhume method to mark an object as removed. It won't be
|
||||||
|
@ -66,6 +77,9 @@ func (e *StorageEngine) inhume(prm InhumePrm) (InhumeRes, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var shPrm shard.InhumePrm
|
var shPrm shard.InhumePrm
|
||||||
|
if prm.forceRemoval {
|
||||||
|
shPrm.ForceRemoval()
|
||||||
|
}
|
||||||
|
|
||||||
for i := range prm.addrs {
|
for i := range prm.addrs {
|
||||||
if prm.tombstone != nil {
|
if prm.tombstone != nil {
|
||||||
|
|
|
@ -31,6 +31,8 @@ func (p *Policer) processObject(ctx context.Context, addr oid.Address) {
|
||||||
if container.IsErrNotFound(err) {
|
if container.IsErrNotFound(err) {
|
||||||
var prm engine.InhumePrm
|
var prm engine.InhumePrm
|
||||||
prm.MarkAsGarbage(addr)
|
prm.MarkAsGarbage(addr)
|
||||||
|
prm.WithForceRemoval()
|
||||||
|
|
||||||
_, err := p.jobQueue.localStorage.Inhume(prm)
|
_, err := p.jobQueue.localStorage.Inhume(prm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
p.log.Error("could not inhume object with missing container",
|
p.log.Error("could not inhume object with missing container",
|
||||||
|
|
Loading…
Reference in a new issue