forked from TrueCloudLab/frostfs-node
[#71] Broadcast tombstone to container
With one tombstone for split objects we can't simply place it in container. We should inform all nodes that store split objects of removed original object. Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
9cdf7d3896
commit
11262bed4a
3 changed files with 15 additions and 4 deletions
|
@ -9,6 +9,7 @@ import (
|
||||||
headsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/head"
|
headsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/head"
|
||||||
putsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/put"
|
putsvc "github.com/nspcc-dev/neofs-node/pkg/services/object/put"
|
||||||
objutil "github.com/nspcc-dev/neofs-node/pkg/services/object/util"
|
objutil "github.com/nspcc-dev/neofs-node/pkg/services/object/util"
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/services/object_manager/placement"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -78,9 +79,14 @@ func (s *Service) Delete(ctx context.Context, prm *Prm) (*Response, error) {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not open put stream", s)
|
return nil, errors.Wrapf(err, "(%T) could not open put stream", s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// `WithoutSuccessTracking` option broadcast message to all container nodes.
|
||||||
|
// For now there is no better solution to distributed tombstones with
|
||||||
|
// content address storage (CAS) and one tombstone for several split
|
||||||
|
// objects.
|
||||||
if err := r.Init(new(putsvc.PutInitPrm).
|
if err := r.Init(new(putsvc.PutInitPrm).
|
||||||
WithObject(newTombstone(ownerID, prm.addr.GetContainerID())).
|
WithObject(newTombstone(ownerID, prm.addr.GetContainerID())).
|
||||||
WithCommonPrm(prm.common),
|
WithCommonPrm(prm.common).
|
||||||
|
WithTraverseOption(placement.WithoutSuccessTracking()), // broadcast tombstone, maybe one
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, errors.Wrapf(err, "(%T) could not initialize tombstone stream", s)
|
return nil, errors.Wrapf(err, "(%T) could not initialize tombstone stream", s)
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,14 @@ func (p *PutInitPrm) WithCommonPrm(v *util.CommonPrm) *PutInitPrm {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PutInitPrm) WithTraverseOption(opt placement.Option) *PutInitPrm {
|
||||||
|
if p != nil {
|
||||||
|
p.traverseOpts = append(p.traverseOpts, opt)
|
||||||
|
}
|
||||||
|
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PutInitPrm) WithObject(v *object.RawObject) *PutInitPrm {
|
func (p *PutInitPrm) WithObject(v *object.RawObject) *PutInitPrm {
|
||||||
if p != nil {
|
if p != nil {
|
||||||
p.hdr = v
|
p.hdr = v
|
||||||
|
|
|
@ -91,9 +91,6 @@ func (p *Streamer) preparePrm(prm *PutInitPrm) error {
|
||||||
return errors.Wrapf(err, "(%T) could not get container by ID", p)
|
return errors.Wrapf(err, "(%T) could not get container by ID", p)
|
||||||
}
|
}
|
||||||
|
|
||||||
// allocate placement traverser options
|
|
||||||
prm.traverseOpts = make([]placement.Option, 0, 4)
|
|
||||||
|
|
||||||
// add common options
|
// add common options
|
||||||
prm.traverseOpts = append(prm.traverseOpts,
|
prm.traverseOpts = append(prm.traverseOpts,
|
||||||
// set processing container
|
// set processing container
|
||||||
|
|
Loading…
Reference in a new issue