fix: client panic (#719)
* fix: client panic Signed-off-by: Jim Ma <majinjing3@gmail.com> * chore: update ginkgo version Signed-off-by: Jim Ma <majinjing3@gmail.com> * chore: avoid send failed piece hang Signed-off-by: Jim Ma <majinjing3@gmail.com>
This commit is contained in:
parent
03b0949ee8
commit
77bb686cbe
|
|
@ -369,7 +369,6 @@ func (pt *peerTask) pullSinglePiece(cleanUnfinishedFunc func()) {
|
|||
|
||||
func (pt *peerTask) pullPiecesFromPeers(cleanUnfinishedFunc func()) {
|
||||
defer func() {
|
||||
close(pt.failedPieceCh)
|
||||
cleanUnfinishedFunc()
|
||||
}()
|
||||
|
||||
|
|
@ -605,10 +604,10 @@ func (pt *peerTask) waitFailedPiece() (int32, bool) {
|
|||
// use no default branch select to wait failed piece or exit
|
||||
select {
|
||||
case <-pt.done:
|
||||
pt.Infof("peer task done, stop wait failed piece")
|
||||
pt.Infof("peer task done, stop to wait failed piece")
|
||||
return -1, false
|
||||
case <-pt.ctx.Done():
|
||||
pt.Debugf("context done due to %s, stop wait failed piece", pt.ctx.Err())
|
||||
pt.Debugf("context done due to %s, stop to wait failed piece", pt.ctx.Err())
|
||||
return -1, false
|
||||
case failed := <-pt.failedPieceCh:
|
||||
pt.Warnf("download piece/%d failed, retry", failed)
|
||||
|
|
|
|||
|
|
@ -238,8 +238,15 @@ func (pt *filePeerTask) ReportPieceResult(result *pieceTaskResult) error {
|
|||
if !result.pieceResult.Success {
|
||||
result.pieceResult.FinishedCount = pt.readyPieces.Settled()
|
||||
_ = pt.peerPacketStream.Send(result.pieceResult)
|
||||
pt.failedPieceCh <- result.pieceResult.PieceInfo.PieceNum
|
||||
pt.Errorf("%d download failed, retry later", result.piece.PieceNum)
|
||||
select {
|
||||
case <-pt.done:
|
||||
pt.Infof("peer task done, stop to send failed piece")
|
||||
case <-pt.ctx.Done():
|
||||
pt.Debugf("context done due to %s, stop to send failed piece", pt.ctx.Err())
|
||||
case pt.failedPieceCh <- result.pieceResult.PieceInfo.PieceNum:
|
||||
pt.Warnf("%d download failed, retry later", result.piece.PieceNum)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -194,7 +194,14 @@ func (s *streamPeerTask) ReportPieceResult(result *pieceTaskResult) error {
|
|||
// retry failed piece
|
||||
if !result.pieceResult.Success {
|
||||
_ = s.peerPacketStream.Send(result.pieceResult)
|
||||
s.failedPieceCh <- result.pieceResult.PieceInfo.PieceNum
|
||||
select {
|
||||
case <-s.done:
|
||||
s.Infof("peer task done, stop to send failed piece")
|
||||
case <-s.ctx.Done():
|
||||
s.Debugf("context done due to %s, stop to send failed piece", s.ctx.Err())
|
||||
case s.failedPieceCh <- result.pieceResult.PieceInfo.PieceNum:
|
||||
s.Warnf("%d download failed, retry later", result.piece.PieceNum)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
2
go.mod
2
go.mod
|
|
@ -45,7 +45,7 @@ require (
|
|||
github.com/mitchellh/mapstructure v1.4.1
|
||||
github.com/montanaflynn/stats v0.6.6
|
||||
github.com/olekukonko/tablewriter v0.0.5
|
||||
github.com/onsi/ginkgo v1.16.4
|
||||
github.com/onsi/ginkgo v1.16.5
|
||||
github.com/onsi/gomega v1.14.0
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/pborman/uuid v1.2.1
|
||||
|
|
|
|||
3
go.sum
3
go.sum
|
|
@ -647,8 +647,9 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
|
|||
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
|
||||
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
|
||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
|
|
|
|||
Loading…
Reference in New Issue