feat: remove host and task when peer make tree (#1042)
Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
parent
6d13c87161
commit
aa5f078a14
|
|
@ -80,7 +80,7 @@ func (c *cdn) TriggerTask(ctx context.Context, task *Task) (*Peer, *rpcscheduler
|
||||||
|
|
||||||
// Handle begin of piece
|
// Handle begin of piece
|
||||||
if piece.PieceInfo != nil && piece.PieceInfo.PieceNum == common.BeginOfPiece {
|
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)
|
peer, err = c.initPeer(task, piece)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ func (h *Host) LenPeers() int {
|
||||||
|
|
||||||
// LeavePeers set peer state to PeerStateLeave
|
// LeavePeers set peer state to PeerStateLeave
|
||||||
func (h *Host) LeavePeers() {
|
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 peer, ok := value.(*Peer); ok {
|
||||||
if err := peer.FSM.Event(PeerEventDownloadFailed); err != nil {
|
if err := peer.FSM.Event(PeerEventDownloadFailed); err != nil {
|
||||||
peer.Log.Errorf("peer fsm event failed: %v", err)
|
peer.Log.Errorf("peer fsm event failed: %v", err)
|
||||||
|
|
@ -179,7 +179,7 @@ func (h *Host) LeavePeers() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
peer.Log.Info("peer has been left")
|
h.Log.Infof("peer %s has been left", peer.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
|
||||||
|
|
@ -239,8 +239,6 @@ func (p *Peer) StoreChild(child *Peer) {
|
||||||
defer p.mu.Unlock()
|
defer p.mu.Unlock()
|
||||||
|
|
||||||
p.Children.Store(child.ID, child)
|
p.Children.Store(child.ID, child)
|
||||||
p.Host.Peers.Store(child.ID, child)
|
|
||||||
p.Task.Peers.Store(child.ID, child)
|
|
||||||
child.Parent.Store(p)
|
child.Parent.Store(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -255,8 +253,6 @@ func (p *Peer) DeleteChild(key string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Children.Delete(child.ID)
|
p.Children.Delete(child.ID)
|
||||||
p.Host.DeletePeer(child.ID)
|
|
||||||
p.Task.DeletePeer(child.ID)
|
|
||||||
child.Parent = &atomic.Value{}
|
child.Parent = &atomic.Value{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -288,8 +284,6 @@ func (p *Peer) StoreParent(parent *Peer) {
|
||||||
|
|
||||||
p.Parent.Store(parent)
|
p.Parent.Store(parent)
|
||||||
parent.Children.Store(p.ID, p)
|
parent.Children.Store(p.ID, p)
|
||||||
parent.Host.Peers.Store(p.ID, p)
|
|
||||||
parent.Task.Peers.Store(p.ID, p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteParent deletes peer parent
|
// DeleteParent deletes peer parent
|
||||||
|
|
@ -304,8 +298,6 @@ func (p *Peer) DeleteParent() {
|
||||||
|
|
||||||
p.Parent = &atomic.Value{}
|
p.Parent = &atomic.Value{}
|
||||||
parent.Children.Delete(p.ID)
|
parent.Children.Delete(p.ID)
|
||||||
parent.Host.Peers.Delete(p.ID)
|
|
||||||
parent.Task.Peers.Delete(p.ID)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReplaceParent replaces peer parent
|
// ReplaceParent replaces peer parent
|
||||||
|
|
|
||||||
|
|
@ -146,12 +146,6 @@ func TestPeer_StoreChild(t *testing.T) {
|
||||||
child, ok = peer.LoadChild(childID)
|
child, ok = peer.LoadChild(childID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, childID)
|
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()
|
parent, ok = child.LoadParent()
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(parent.ID, peer.ID)
|
assert.Equal(parent.ID, peer.ID)
|
||||||
|
|
@ -171,12 +165,6 @@ func TestPeer_StoreChild(t *testing.T) {
|
||||||
child, ok = peer.LoadChild(childID)
|
child, ok = peer.LoadChild(childID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, childID)
|
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()
|
parent, ok = child.LoadParent()
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(parent.ID, peer.ID)
|
assert.Equal(parent.ID, peer.ID)
|
||||||
|
|
@ -213,10 +201,6 @@ func TestPeer_DeleteChild(t *testing.T) {
|
||||||
var ok bool
|
var ok bool
|
||||||
_, ok = peer.LoadChild(mockChildPeer.ID)
|
_, ok = peer.LoadChild(mockChildPeer.ID)
|
||||||
assert.Equal(ok, false)
|
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()
|
_, ok = mockChildPeer.LoadParent()
|
||||||
assert.Equal(ok, false)
|
assert.Equal(ok, false)
|
||||||
},
|
},
|
||||||
|
|
@ -236,12 +220,6 @@ func TestPeer_DeleteChild(t *testing.T) {
|
||||||
child, ok = peer.LoadChild(mockChildPeer.ID)
|
child, ok = peer.LoadChild(mockChildPeer.ID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, mockChildPeer.ID)
|
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()
|
parent, ok = child.LoadParent()
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(parent.ID, peer.ID)
|
assert.Equal(parent.ID, peer.ID)
|
||||||
|
|
@ -377,12 +355,6 @@ func TestPeer_StoreParent(t *testing.T) {
|
||||||
child, ok = parent.LoadChild(peer.ID)
|
child, ok = parent.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, peer.ID)
|
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)
|
child, ok = parent.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, peer.ID)
|
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)
|
assert.Equal(ok, false)
|
||||||
_, ok = mockParentPeer.LoadChild(peer.ID)
|
_, ok = mockParentPeer.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, false)
|
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)
|
assert.Equal(ok, false)
|
||||||
_, ok = mockParentPeer.LoadChild(peer.ID)
|
_, ok = mockParentPeer.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, false)
|
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)
|
child, ok = mockNewParentPeer.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, peer.ID)
|
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)
|
child, ok = mockNewParentPeer.LoadChild(peer.ID)
|
||||||
assert.Equal(ok, true)
|
assert.Equal(ok, true)
|
||||||
assert.Equal(child.ID, peer.ID)
|
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)
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -325,6 +325,10 @@ func (c *callback) PeerLeave(ctx context.Context, peer *resource.Peer) {
|
||||||
// 1. CDN downloads the resource successfully
|
// 1. CDN downloads the resource successfully
|
||||||
// 2. Dfdaemon back-to-source to download successfully
|
// 2. Dfdaemon back-to-source to download successfully
|
||||||
func (c *callback) TaskSuccess(ctx context.Context, task *resource.Task, result *rpcscheduler.PeerResult) {
|
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 {
|
if err := task.FSM.Event(resource.TaskEventDownloadSucceeded); err != nil {
|
||||||
task.Log.Errorf("task fsm event failed: %v", err)
|
task.Log.Errorf("task fsm event failed: %v", err)
|
||||||
return
|
return
|
||||||
|
|
@ -339,6 +343,10 @@ func (c *callback) TaskSuccess(ctx context.Context, task *resource.Task, result
|
||||||
// 1. CDN downloads the resource falied
|
// 1. CDN downloads the resource falied
|
||||||
// 2. Dfdaemon back-to-source to download failed
|
// 2. Dfdaemon back-to-source to download failed
|
||||||
func (c *callback) TaskFail(ctx context.Context, task *resource.Task) {
|
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 {
|
if err := task.FSM.Event(resource.TaskEventDownloadFailed); err != nil {
|
||||||
task.Log.Errorf("task fsm event failed: %v", err)
|
task.Log.Errorf("task fsm event failed: %v", err)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue