fix: check same peer id for sync pieces (#1525)

Signed-off-by: Jim Ma <majinjing3@gmail.com>
This commit is contained in:
Jim Ma 2022-08-04 13:56:28 +08:00 committed by Gaius
parent f8252cba04
commit 4984cdfbbc
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
2 changed files with 12 additions and 3 deletions

View File

@ -168,9 +168,9 @@ func New(opt *config.DaemonOption, d dfpath.Dfpath) (Daemon, error) {
PeerId: request.PeerID,
})
if er != nil {
logger.Errorf("step 4:leave task %s/%s, error: %v", request.TaskID, request.PeerID, er)
logger.Errorf("step 4: leave task %s/%s, error: %v", request.TaskID, request.PeerID, er)
} else {
logger.Infof("step 4:leave task %s/%s state ok", request.TaskID, request.PeerID)
logger.Infof("step 4: leave task %s/%s state ok", request.TaskID, request.PeerID)
}
}
storageManager, err := storage.NewStorageManager(opt.Storage.StoreStrategy, &opt.Storage,

View File

@ -124,13 +124,22 @@ func (s *server) GetPieceTasks(ctx context.Context, request *commonv1.PieceTaskR
err, request.TaskId, request.SrcPid, request.DstPid, request.StartNum, request.Limit)
return nil, dferrors.New(code, err.Error())
}
// dst peer is not running
// check whether dst peer is not running
task, ok := s.peerTaskManager.IsPeerTaskRunning(request.TaskId)
if !ok {
// 1. no running task
code = commonv1.Code_PeerTaskNotFound
logger.Errorf("get piece tasks error: target peer task not found, task id: %s, src peer: %s, dst peer: %s, piece num: %d, limit: %d",
request.TaskId, request.SrcPid, request.DstPid, request.StartNum, request.Limit)
return nil, dferrors.New(code, err.Error())
} else if task.GetPeerID() == request.GetSrcPid() {
// 2. scheduler schedules same peer host, and the running peer is the source peer (schedulers misses the old peer leaved event)
code = commonv1.Code_PeerTaskNotFound
logger.Errorf("get piece tasks error: target peer task not found, task id: %s, the src peer is same with running peer,"+
" src peer: %s, dst peer: %s, piece num: %d, limit: %d",
request.TaskId, request.SrcPid, request.DstPid, request.StartNum, request.Limit)
return nil, dferrors.New(code, err.Error())
}
if task.GetPeerID() != request.GetDstPid() {