[#53] object/range: Share object range traverser between services

Replace object range chain utilities to object/util package in order to
reuse it in other services.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-09-28 16:10:50 +03:00 committed by Alex Vanin
parent 759605410a
commit 8791c4f0a5
4 changed files with 126 additions and 21 deletions

View file

@ -28,7 +28,7 @@ type streamer struct {
traverser *placement.Traverser
rangeTraverser *rangeTraverser
rangeTraverser *util.RangeTraverser
ch chan []byte
}
@ -58,7 +58,7 @@ func (p *streamer) Recv() (*Response, error) {
return nil, errors.Wrapf(p.ctx.Err(), "(%T) stream is stopped by context", p)
case v, ok := <-p.ch:
if !ok {
if p.rangeTraverser.next().rng.GetLength() != 0 {
if _, rng := p.rangeTraverser.Next(); rng.GetLength() != 0 {
return nil, errors.Errorf("(%T) incomplete get payload range", p)
}
@ -135,15 +135,15 @@ loop:
default:
}
nextRange := p.rangeTraverser.next()
if nextRange.rng.GetLength() == 0 {
nextID, nextRange := p.rangeTraverser.Next()
if nextRange.GetLength() == 0 {
break
} else if err := p.switchToObject(nextRange.id); err != nil {
} else if err := p.switchToObject(nextID); err != nil {
// TODO: log error
break
}
objAddr.SetObjectID(nextRange.id)
objAddr.SetObjectID(nextID)
subloop:
for {
@ -173,7 +173,7 @@ loop:
if network.IsLocalAddress(p.localAddrSrc, addr) {
rngWriter = &localRangeWriter{
addr: objAddr,
rng: nextRange.rng,
rng: nextRange,
storage: p.localStore,
}
} else {
@ -182,7 +182,7 @@ loop:
key: p.key,
node: addr,
addr: objAddr,
rng: nextRange.rng,
rng: nextRange,
}
}
@ -194,12 +194,12 @@ loop:
// TODO: log error
}
ln := nextRange.rng.GetLength()
ln := nextRange.GetLength()
uw := uint64(written)
p.rangeTraverser.pushSuccessSize(uw)
nextRange.rng.SetLength(ln - uw)
nextRange.rng.SetOffset(nextRange.rng.GetOffset() + uw)
p.rangeTraverser.PushSuccessSize(uw)
nextRange.SetLength(ln - uw)
nextRange.SetOffset(nextRange.GetOffset() + uw)
}); err != nil {
wg.Done()
// TODO: log error
@ -208,7 +208,7 @@ loop:
wg.Wait()
if nextRange.rng.GetLength() == 0 {
if nextRange.GetLength() == 0 {
p.traverser.SubmitSuccess()
break subloop
}