[#1731] services/control: Replicate object over network in EvacuateShard RPC

Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
Evgenii Stratonikov 2022-09-19 13:57:59 +03:00 committed by fyrchik
parent a49137349b
commit 4e043a801c
8 changed files with 121 additions and 11 deletions

View file

@ -26,17 +26,20 @@ func (p *Replicator) HandleTask(ctx context.Context, task *Task, res TaskResult)
)
}()
obj, err := engine.Get(p.localStorage, task.addr)
if err != nil {
p.log.Error("could not get object from local storage",
zap.Stringer("object", task.addr),
zap.Error(err))
if task.obj == nil {
var err error
task.obj, err = engine.Get(p.localStorage, task.addr)
if err != nil {
p.log.Error("could not get object from local storage",
zap.Stringer("object", task.addr),
zap.Error(err))
return
return
}
}
prm := new(putsvc.RemotePutPrm).
WithObject(obj)
WithObject(task.obj)
for i := 0; task.quantity > 0 && i < len(task.nodes); i++ {
select {
@ -52,7 +55,7 @@ func (p *Replicator) HandleTask(ctx context.Context, task *Task, res TaskResult)
callCtx, cancel := context.WithTimeout(ctx, p.putTimeout)
err = p.remoteSender.PutObject(callCtx, prm.WithNodeInfo(task.nodes[i]))
err := p.remoteSender.PutObject(callCtx, prm.WithNodeInfo(task.nodes[i]))
cancel()