supervisor

package
v2.0.2-alpha.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2021 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TaskGCID     = "task"
	TinyFileSize = 128
)
View Source
const (
	// When using the manager configuration parameter, limit the maximum load number to 5000
	HostMaxLoad = 5 * 1000
)
View Source
const (
	PeerGCID = "peer"
)

Variables

View Source
var (
	ErrCDNClientUninitialized = errors.New("cdn client is not initialized")
	ErrCDNRegisterFail        = errors.New("cdn task register failed")
	ErrCDNDownloadFail        = errors.New("cdn task download failed")
	ErrCDNUnknown             = errors.New("cdn obtain seed encounter unknown err")
	ErrCDNInvokeFail          = errors.New("invoke cdn interface failed")
	ErrInitCDNPeerFail        = errors.New("init cdn peer failed")
)
View Source
var ErrChannelBusy = errors.New("channel busy")

Functions

This section is empty.

Types

type CDN added in v2.0.1

type CDN interface {
	// CetClient get cdn grpc client
	GetClient() CDNDynmaicClient

	// StartSeedTask start seed cdn task
	StartSeedTask(context.Context, *Task) (*Peer, error)
}

func NewCDN added in v2.0.1

func NewCDN(client CDNDynmaicClient, peerManager PeerManager, hostManager HostManager) CDN

type CDNDynmaicClient added in v2.0.1

type CDNDynmaicClient interface {
	// cdnclient is cdn grpc client
	cdnclient.CdnClient
	// Observer is dynconfig observer
	config.Observer
	// Get cdn host
	GetHost(hostID string) (*Host, bool)
}

func NewCDNDynmaicClient added in v2.0.1

func NewCDNDynmaicClient(dynConfig config.DynconfigInterface, opts []grpc.DialOption) (CDNDynmaicClient, error)

type Channel

type Channel struct {
	// contains filtered or unexported fields
}

func (*Channel) Close

func (c *Channel) Close()

func (*Channel) Done

func (c *Channel) Done() <-chan struct{}

func (*Channel) Error added in v2.0.1

func (c *Channel) Error() error

func (*Channel) IsClosed

func (c *Channel) IsClosed() bool

func (*Channel) Receiver

func (c *Channel) Receiver() <-chan *scheduler.PieceResult

func (*Channel) Send

func (c *Channel) Send(packet *scheduler.PeerPacket) error

type Host added in v2.0.1

type Host struct {
	// uuid each time the daemon starts, it will generate a different uuid
	UUID string
	// IP peer host ip
	IP string
	// HostName peer host name
	HostName string
	// RPCPort rpc service port for peer
	RPCPort int32
	// DownloadPort piece downloading port for peer
	DownloadPort int32
	// IsCDN if host type is cdn
	IsCDN bool
	// SecurityDomain security isolation domain for network
	SecurityDomain string
	// Location location path: area|country|province|city|...
	Location string
	// IDC idc where the peer host is located
	IDC string
	// NetTopology network device path
	// according to the user's own network topology definition, the coverage range from large to small, using the | symbol segmentation,
	// Example: switch|router|...
	NetTopology string
	// TODO TotalUploadLoad currentUploadLoad decided by real time client report host info
	TotalUploadLoad uint32
	// CurrentUploadLoad is current upload load number
	CurrentUploadLoad atomic.Uint32
	// contains filtered or unexported fields
}

func NewCDNHost added in v2.0.1

func NewCDNHost(uuid, ip, hostname string, rpcPort, downloadPort int32, securityDomain, location, idc string, options ...HostOption) *Host

func NewClientHost added in v2.0.1

func NewClientHost(uuid, ip, hostname string, rpcPort, downloadPort int32, securityDomain, location, idc string, options ...HostOption) *Host

func (*Host) AddPeer added in v2.0.1

func (h *Host) AddPeer(peer *Peer)

func (*Host) DeletePeer added in v2.0.1

func (h *Host) DeletePeer(id string)

func (*Host) GetFreeUploadLoad added in v2.0.1

func (h *Host) GetFreeUploadLoad() int32

func (*Host) GetPeer added in v2.0.1

func (h *Host) GetPeer(id string) (*Peer, bool)

func (*Host) GetPeersLen added in v2.0.1

func (h *Host) GetPeersLen() int

func (*Host) Log added in v2.0.1

func (h *Host) Log() *logger.SugaredLoggerOnWith

type HostManager added in v2.0.1

type HostManager interface {
	// Add host
	Add(*Host)
	// Get host
	Get(string) (*Host, bool)
	// Delete host
	Delete(string)
}

func NewHostManager added in v2.0.1

func NewHostManager() HostManager

type HostOption added in v2.0.1

type HostOption func(rt *Host) *Host

func WithNetTopology added in v2.0.1

func WithNetTopology(n string) HostOption

func WithTotalUploadLoad added in v2.0.1

func WithTotalUploadLoad(load uint32) HostOption

type Peer

type Peer struct {
	// ID is ID of peer
	ID string
	// Task is peer task
	Task *Task
	// Host is peer host
	Host *Host
	// TotalPieceCount is downloaded finished piece count
	TotalPieceCount atomic.Int32
	// CreateAt is peer create time
	CreateAt *atomic.Time
	// contains filtered or unexported fields
}

func NewPeer

func NewPeer(id string, task *Task, host *Host) *Peer

func (*Peer) BindNewConn

func (peer *Peer) BindNewConn(stream scheduler.Scheduler_ReportPieceResultServer) (*Channel, bool)

func (*Peer) CloseChannelWithError added in v2.0.1

func (peer *Peer) CloseChannelWithError(err error) error

func (*Peer) GetChildren

func (peer *Peer) GetChildren() *sync.Map

func (*Peer) GetParent

func (peer *Peer) GetParent() (*Peer, bool)

func (*Peer) GetPieceCosts added in v2.0.1

func (peer *Peer) GetPieceCosts() []int

func (*Peer) GetRoot added in v2.0.1

func (peer *Peer) GetRoot() *Peer

func (*Peer) GetStatus

func (peer *Peer) GetStatus() PeerStatus

func (*Peer) GetTreeDepth added in v2.0.1

func (peer *Peer) GetTreeDepth() int

func (*Peer) GetTreeNodeCount added in v2.0.1

func (peer *Peer) GetTreeNodeCount() int

func (*Peer) IsAncestor added in v2.0.1

func (peer *Peer) IsAncestor(offspring *Peer) bool

IsAncestorOf if offspring is offspring of peer

func (*Peer) IsBad

func (peer *Peer) IsBad() bool

func (*Peer) IsConnected

func (peer *Peer) IsConnected() bool

func (*Peer) IsDescendant added in v2.0.1

func (peer *Peer) IsDescendant(ancestor *Peer) bool

IsDescendant if peer is offspring of ancestor

func (*Peer) IsDone

func (peer *Peer) IsDone() bool

func (*Peer) IsFail

func (peer *Peer) IsFail() bool

func (*Peer) IsLeave

func (peer *Peer) IsLeave() bool

func (*Peer) IsRunning

func (peer *Peer) IsRunning() bool

func (*Peer) IsSuccess

func (peer *Peer) IsSuccess() bool

func (*Peer) IsWaiting

func (peer *Peer) IsWaiting() bool

func (*Peer) Leave added in v2.0.1

func (peer *Peer) Leave()

func (*Peer) Log

func (peer *Peer) Log() *logger.SugaredLoggerOnWith

func (*Peer) ReplaceParent

func (peer *Peer) ReplaceParent(parent *Peer)

func (*Peer) SendSchedulePacket

func (peer *Peer) SendSchedulePacket(packet *scheduler.PeerPacket) error

func (*Peer) SetParent added in v2.0.1

func (peer *Peer) SetParent(parent *Peer)

func (*Peer) SetPieceCosts added in v2.0.1

func (peer *Peer) SetPieceCosts(costs ...int)

func (*Peer) SetStatus

func (peer *Peer) SetStatus(status PeerStatus)

func (*Peer) SortedValue added in v2.0.1

func (peer *Peer) SortedValue() int

func (*Peer) Touch

func (peer *Peer) Touch()

func (*Peer) UpdateProgress

func (peer *Peer) UpdateProgress(finishedCount int32, cost int)

type PeerManager added in v2.0.1

type PeerManager interface {
	// Add peer
	Add(*Peer)
	// Get peer
	Get(string) (*Peer, bool)
	// Delete peer
	Delete(string)
	// Get peer by task id
	GetPeersByTask(string) []*Peer
	// Get peers
	GetPeers() *sync.Map
}

func NewPeerManager added in v2.0.1

func NewPeerManager(cfg *config.GCConfig, gcManager gc.GC, hostManager HostManager) (PeerManager, error)

type PeerStatus

type PeerStatus uint8
const (
	PeerStatusWaiting PeerStatus = iota
	PeerStatusRunning
	// TODO add Seeding status
	PeerStatusZombie
	PeerStatusFail
	PeerStatusSuccess
)

func (PeerStatus) String

func (status PeerStatus) String() string

type Task

type Task struct {
	// ID is task id
	ID string
	// URL is task download url
	URL string
	// URLMeta is task download url meta
	URLMeta *base.UrlMeta
	// DirectPiece is tiny piece data
	DirectPiece []byte
	// ContentLength is task total content length
	ContentLength atomic.Int64
	// CreateAt is peer create time
	CreateAt *atomic.Time
	// LastTriggerAt is peer last trigger time
	LastTriggerAt *atomic.Time

	// BackToSourceWeight is back-to-source peer weight
	BackToSourceWeight atomic.Int32

	// TotalPieceCount is total piece count
	TotalPieceCount atomic.Int32
	// contains filtered or unexported fields
}

func NewTask

func NewTask(id, url string, meta *base.UrlMeta) *Task

func (*Task) AddBackToSourcePeer added in v2.0.1

func (task *Task) AddBackToSourcePeer(peerID string)

func (*Task) AddPeer

func (task *Task) AddPeer(peer *Peer)

func (*Task) CanBackToSource added in v2.0.1

func (task *Task) CanBackToSource() bool

func (*Task) CanSchedule

func (task *Task) CanSchedule() bool

CanSchedule determines whether task can be scheduled only task status is seeding or success can be scheduled

func (*Task) ContainsBackToSourcePeer added in v2.0.1

func (task *Task) ContainsBackToSourcePeer(peerID string) bool

func (*Task) DeletePeer

func (task *Task) DeletePeer(peer *Peer)

func (*Task) GetBackToSourcePeers added in v2.0.1

func (task *Task) GetBackToSourcePeers() []string

func (*Task) GetOrAddPiece added in v2.0.1

func (task *Task) GetOrAddPiece(p *base.PieceInfo) (*base.PieceInfo, bool)

func (*Task) GetPeers added in v2.0.1

func (task *Task) GetPeers() list.SortedUniqueList

func (*Task) GetPiece

func (task *Task) GetPiece(n int32) (*base.PieceInfo, bool)

func (*Task) GetStatus

func (task *Task) GetStatus() TaskStatus

func (*Task) IsFail

func (task *Task) IsFail() bool

IsFail determines whether task is fail

func (*Task) IsHealth

func (task *Task) IsHealth() bool

IsHealth determines whether task is health

func (*Task) IsSuccess

func (task *Task) IsSuccess() bool

IsSuccess determines that whether cdn status is success.

func (*Task) IsWaiting

func (task *Task) IsWaiting() bool

IsWaiting determines whether task is waiting

func (*Task) Log

func (task *Task) Log() *logger.SugaredLoggerOnWith

func (*Task) Pick

func (task *Task) Pick(limit int, pickFn func(peer *Peer) bool) []*Peer

func (*Task) PickReverse

func (task *Task) PickReverse(limit int, pickFn func(peer *Peer) bool) []*Peer

func (*Task) SetStatus

func (task *Task) SetStatus(status TaskStatus)

func (*Task) Touch

func (task *Task) Touch()

func (*Task) UpdatePeer

func (task *Task) UpdatePeer(peer *Peer)

func (*Task) UpdateSuccess added in v2.0.1

func (task *Task) UpdateSuccess(pieceCount int32, contentLength int64)

type TaskManager added in v2.0.1

type TaskManager interface {
	// Add task
	Add(*Task)
	// Get task
	Get(string) (*Task, bool)
	// Delete task
	Delete(string)
	// GetOrAdd or add task
	GetOrAdd(*Task) (*Task, bool)
}

func NewTaskManager added in v2.0.1

func NewTaskManager(cfg *config.GCConfig, gcManager gc.GC, peerManager PeerManager) (TaskManager, error)

type TaskStatus

type TaskStatus uint8
const (
	TaskStatusWaiting TaskStatus = iota
	TaskStatusRunning
	TaskStatusSeeding
	TaskStatusSuccess
	TaskStatusZombie
	TaskStatusFail
)

func (TaskStatus) String

func (status TaskStatus) String() string

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL