[#1219] object/put: Support additional container broadcast

There are several cases when we need to spread the object around the
container after its primary placement (e.g. objects of type TOMBSTONE).
It'd be convenient to support this feature in `putsvc.Service`.

Add additional stage of container broadcast after the object is stored.
This stage is carried out no more than once and does not affect the
outcome of the main PUT operation.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2022-03-05 13:32:11 +03:00 committed by LeL
parent 0bf59522f7
commit a55af18ad1
2 changed files with 78 additions and 6 deletions

View file

@ -161,9 +161,11 @@ func (p *Streamer) newCommonTarget(prm *PutInitPrm) transformer.ObjectTarget {
}
return &distributedTarget{
traverseOpts: prm.traverseOpts,
remotePool: p.remotePool,
localPool: p.localPool,
traversal: traversal{
opts: prm.traverseOpts,
},
remotePool: p.remotePool,
localPool: p.localPool,
nodeTargetInitializer: func(node nodeDesc) transformer.ObjectTarget {
if node.local {
return &localTarget{