feat: remove host and task when peer make tree (#1042)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2022-01-26 10:52:49 +08:00
parent 6d13c87161
commit aa5f078a14
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
5 changed files with 11 additions and 65 deletions

View File

@ -80,7 +80,7 @@ func (c *cdn) TriggerTask(ctx context.Context, task *Task) (*Peer, *rpcscheduler
// Handle begin of piece
if piece.PieceInfo != nil && piece.PieceInfo.PieceNum == common.BeginOfPiece {
task.Log.Infof("receive begin o piece: %#v %#v", piece, piece.PieceInfo)
task.Log.Infof("receive begin of piece: %#v %#v", piece, piece.PieceInfo)
peer, err = c.initPeer(task, piece)
if err != nil {
return nil, nil, err

View File

@ -167,7 +167,7 @@ func (h *Host) LenPeers() int {
// LeavePeers set peer state to PeerStateLeave
func (h *Host) LeavePeers() {
h.Peers.Range(func(key, value interface{}) bool {
h.Peers.Range(func(_, value interface{}) bool {
if peer, ok := value.(*Peer); ok {
if err := peer.FSM.Event(PeerEventDownloadFailed); err != nil {
peer.Log.Errorf("peer fsm event failed: %v", err)
@ -179,7 +179,7 @@ func (h *Host) LeavePeers() {
return true
}
peer.Log.Info("peer has been left")
h.Log.Infof("peer %s has been left", peer.ID)
}
return true

View File

@ -239,8 +239,6 @@ func (p *Peer) StoreChild(child *Peer) {
defer p.mu.Unlock()
p.Children.Store(child.ID, child)
p.Host.Peers.Store(child.ID, child)
p.Task.Peers.Store(child.ID, child)
child.Parent.Store(p)
}
@ -255,8 +253,6 @@ func (p *Peer) DeleteChild(key string) {
}
p.Children.Delete(child.ID)
p.Host.DeletePeer(child.ID)
p.Task.DeletePeer(child.ID)
child.Parent = &atomic.Value{}
}
@ -288,8 +284,6 @@ func (p *Peer) StoreParent(parent *Peer) {
p.Parent.Store(parent)
parent.Children.Store(p.ID, p)
parent.Host.Peers.Store(p.ID, p)
parent.Task.Peers.Store(p.ID, p)
}
// DeleteParent deletes peer parent
@ -304,8 +298,6 @@ func (p *Peer) DeleteParent() {
p.Parent = &atomic.Value{}
parent.Children.Delete(p.ID)
parent.Host.Peers.Delete(p.ID)
parent.Task.Peers.Delete(p.ID)
}
// ReplaceParent replaces peer parent

View File

@ -146,12 +146,6 @@ func TestPeer_StoreChild(t *testing.T) {
child, ok = peer.LoadChild(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
child, ok = peer.Host.LoadPeer(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
child, ok = peer.Task.LoadPeer(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
parent, ok = child.LoadParent()
assert.Equal(ok, true)
assert.Equal(parent.ID, peer.ID)
@ -171,12 +165,6 @@ func TestPeer_StoreChild(t *testing.T) {
child, ok = peer.LoadChild(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
child, ok = peer.Host.LoadPeer(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
child, ok = peer.Task.LoadPeer(childID)
assert.Equal(ok, true)
assert.Equal(child.ID, childID)
parent, ok = child.LoadParent()
assert.Equal(ok, true)
assert.Equal(parent.ID, peer.ID)
@ -213,10 +201,6 @@ func TestPeer_DeleteChild(t *testing.T) {
var ok bool
_, ok = peer.LoadChild(mockChildPeer.ID)
assert.Equal(ok, false)
_, ok = peer.Host.LoadPeer(mockChildPeer.ID)
assert.Equal(ok, false)
_, ok = peer.Task.LoadPeer(mockChildPeer.ID)
assert.Equal(ok, false)
_, ok = mockChildPeer.LoadParent()
assert.Equal(ok, false)
},
@ -236,12 +220,6 @@ func TestPeer_DeleteChild(t *testing.T) {
child, ok = peer.LoadChild(mockChildPeer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, mockChildPeer.ID)
child, ok = peer.Host.LoadPeer(mockChildPeer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, mockChildPeer.ID)
child, ok = peer.Task.LoadPeer(mockChildPeer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, mockChildPeer.ID)
parent, ok = child.LoadParent()
assert.Equal(ok, true)
assert.Equal(parent.ID, peer.ID)
@ -377,12 +355,6 @@ func TestPeer_StoreParent(t *testing.T) {
child, ok = parent.LoadChild(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = peer.Task.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = peer.Host.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
},
},
{
@ -402,12 +374,6 @@ func TestPeer_StoreParent(t *testing.T) {
child, ok = parent.LoadChild(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = peer.Task.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = peer.Host.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
},
},
}
@ -444,10 +410,6 @@ func TestPeer_DeleteParent(t *testing.T) {
assert.Equal(ok, false)
_, ok = mockParentPeer.LoadChild(peer.ID)
assert.Equal(ok, false)
_, ok = mockParentPeer.Task.LoadPeer(peer.ID)
assert.Equal(ok, false)
_, ok = mockParentPeer.Host.LoadPeer(peer.ID)
assert.Equal(ok, false)
},
},
{
@ -462,10 +424,6 @@ func TestPeer_DeleteParent(t *testing.T) {
assert.Equal(ok, false)
_, ok = mockParentPeer.LoadChild(peer.ID)
assert.Equal(ok, false)
_, ok = mockParentPeer.Task.LoadPeer(peer.ID)
assert.Equal(ok, false)
_, ok = mockParentPeer.Host.LoadPeer(peer.ID)
assert.Equal(ok, false)
},
},
}
@ -511,12 +469,6 @@ func TestPeer_ReplaceParent(t *testing.T) {
child, ok = mockNewParentPeer.LoadChild(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = mockNewParentPeer.Task.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = mockNewParentPeer.Host.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
},
},
{
@ -540,12 +492,6 @@ func TestPeer_ReplaceParent(t *testing.T) {
child, ok = mockNewParentPeer.LoadChild(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = mockNewParentPeer.Task.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
child, ok = mockNewParentPeer.Host.LoadPeer(peer.ID)
assert.Equal(ok, true)
assert.Equal(child.ID, peer.ID)
},
},
}

View File

@ -325,6 +325,10 @@ func (c *callback) PeerLeave(ctx context.Context, peer *resource.Peer) {
// 1. CDN downloads the resource successfully
// 2. Dfdaemon back-to-source to download successfully
func (c *callback) TaskSuccess(ctx context.Context, task *resource.Task, result *rpcscheduler.PeerResult) {
if task.FSM.Is(resource.TaskStateSucceeded) {
return
}
if err := task.FSM.Event(resource.TaskEventDownloadSucceeded); err != nil {
task.Log.Errorf("task fsm event failed: %v", err)
return
@ -339,6 +343,10 @@ func (c *callback) TaskSuccess(ctx context.Context, task *resource.Task, result
// 1. CDN downloads the resource falied
// 2. Dfdaemon back-to-source to download failed
func (c *callback) TaskFail(ctx context.Context, task *resource.Task) {
if task.FSM.Is(resource.TaskStateFailed) {
return
}
if err := task.FSM.Event(resource.TaskEventDownloadFailed); err != nil {
task.Log.Errorf("task fsm event failed: %v", err)
return