From f56de57c01c0ec83f8713f449a8b5b5a64d95ebc Mon Sep 17 00:00:00 2001 From: Eryu Guan <45746212+eryugey@users.noreply.github.com> Date: Wed, 23 Feb 2022 13:49:14 +0800 Subject: [PATCH] fix: delete peer's parent on PeerEventDownloadSucceeded event (#1085) When a peer leaves, it calls scheduler's LeaveTask() interface to notify scheduler that it's leaving. And LeaveTask() will re-schedule all its children to find a new parent by calling ScheduleParent(). But some of this peer's children might be in PeerStateSucceeded state, as they have finished downloading tasks from parent. So ScheduleParent() on such children is pointless. Let's delete peer's parent on PeerEventDownloadSucceeded event, so its parent won't call ScheduleParent() on it again, when its parent is leaving. Signed-off-by: Eryu Guan --- scheduler/resource/peer.go | 1 + 1 file changed, 1 insertion(+) diff --git a/scheduler/resource/peer.go b/scheduler/resource/peer.go index a75440f89..3b566e945 100644 --- a/scheduler/resource/peer.go +++ b/scheduler/resource/peer.go @@ -199,6 +199,7 @@ func NewPeer(id string, task *Task, host *Host) *Peer { p.Task.BackToSourcePeers.Delete(p) } + p.DeleteParent() p.UpdateAt.Store(time.Now()) p.Log.Infof("peer state is %s", e.FSM.Current()) },