resource

package
v1.0.15 Latest Latest
Warning

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

Go to latest
Published: Aug 17, 2023 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package resource is a generated GoMock package.

Package resource is a generated GoMock package.

Package resource is a generated GoMock package.

Package resource is a generated GoMock package.

Package resource is a generated GoMock package.

Package resource is a generated GoMock package.

Index

Constants

View Source
const (
	// Peer has been created but did not start running.
	PeerStatePending = "Pending"

	// Peer successfully registered as empty scope size.
	PeerStateReceivedEmpty = "ReceivedEmpty"

	// Peer successfully registered as tiny scope size.
	PeerStateReceivedTiny = "ReceivedTiny"

	// Peer successfully registered as small scope size.
	PeerStateReceivedSmall = "ReceivedSmall"

	// Peer successfully registered as normal scope size.
	PeerStateReceivedNormal = "ReceivedNormal"

	// Peer is downloading resources from peer.
	PeerStateRunning = "Running"

	// Peer is downloading resources from back-to-source.
	PeerStateBackToSource = "BackToSource"

	// Peer has been downloaded successfully.
	PeerStateSucceeded = "Succeeded"

	// Peer has been downloaded failed.
	PeerStateFailed = "Failed"

	// Peer has been left.
	PeerStateLeave = "Leave"
)
View Source
const (
	// Peer is registered as empty scope size.
	PeerEventRegisterEmpty = "RegisterEmpty"

	// Peer is registered as tiny scope size.
	PeerEventRegisterTiny = "RegisterTiny"

	// Peer is registered as small scope size.
	PeerEventRegisterSmall = "RegisterSmall"

	// Peer is registered as normal scope size.
	PeerEventRegisterNormal = "RegisterNormal"

	// Peer is downloading.
	PeerEventDownload = "Download"

	// Peer is downloading back-to-source.
	PeerEventDownloadBackToSource = "DownloadBackToSource"

	// Peer downloaded successfully.
	PeerEventDownloadSucceeded = "DownloadSucceeded"

	// Peer downloaded failed.
	PeerEventDownloadFailed = "DownloadFailed"

	// Peer leaves.
	PeerEventLeave = "Leave"
)
View Source
const (
	// Tiny file size is 128 bytes.
	TinyFileSize = 128

	// Empty file size is 0 bytes.
	EmptyFileSize = 0
)
View Source
const (
	// Peer failure limit in task.
	FailedPeerCountLimit = 200

	// Peer count limit for task.
	PeerCountLimitForTask = 1000
)
View Source
const (
	// Task has been created but did not start running.
	TaskStatePending = "Pending"

	// Task is downloading resources from seed peer or back-to-source.
	TaskStateRunning = "Running"

	// Task has been downloaded successfully.
	TaskStateSucceeded = "Succeeded"

	// Task has been downloaded failed.
	TaskStateFailed = "Failed"

	// Task has no peers.
	TaskStateLeave = "Leave"
)
View Source
const (
	// Task is downloading.
	TaskEventDownload = "Download"

	// Task downloaded successfully.
	TaskEventDownloadSucceeded = "DownloadSucceeded"

	// Task downloaded failed.
	TaskEventDownloadFailed = "DownloadFailed"

	// Task leaves.
	TaskEventLeave = "Leave"
)
View Source
const (
	// GC host id.
	GCHostID = "host"
)
View Source
const (
	// GC peer id.
	GCPeerID = "peer"
)
View Source
const (
	// GC task id.
	GCTaskID = "task"
)
View Source
const (
	// Default value of seed peer failed timeout.
	SeedPeerFailedTimeout = 30 * time.Minute
)

Variables

This section is empty.

Functions

func IsPieceBackToSource

func IsPieceBackToSource(parentID string) bool

IsPieceBackToSource returns whether the piece is downloaded back-to-source.

Types

type Build

type Build struct {
	// Git version.
	GitVersion string `csv:"gitVersion"`

	// Git commit.
	GitCommit string `csv:"gitCommit"`

	// Golang version.
	GoVersion string `csv:"goVersion"`

	// Build platform.
	Platform string `csv:"platform"`
}

Build contains content for build.

type CPU

type CPU struct {
	// Number of logical cores in the system.
	LogicalCount uint32 `csv:"logicalCount"`

	// Number of physical cores in the system.
	PhysicalCount uint32 `csv:"physicalCount"`

	// Percent calculates the percentage of cpu used.
	Percent float64 `csv:"percent"`

	// Calculates the percentage of cpu used by process.
	ProcessPercent float64 `csv:"processPercent"`

	// Times contains the amounts of time the CPU has spent performing different kinds of work.
	Times CPUTimes `csv:"times"`
}

CPU contains content for cpu.

type CPUTimes

type CPUTimes struct {
	// CPU time of user.
	User float64 `csv:"user"`

	// CPU time of system.
	System float64 `csv:"system"`

	// CPU time of idle.
	Idle float64 `csv:"idle"`

	// CPU time of nice.
	Nice float64 `csv:"nice"`

	// CPU time of iowait.
	Iowait float64 `csv:"iowait"`

	// CPU time of irq.
	Irq float64 `csv:"irq"`

	// CPU time of softirq.
	Softirq float64 `csv:"softirq"`

	// CPU time of steal.
	Steal float64 `csv:"steal"`

	// CPU time of guest.
	Guest float64 `csv:"guest"`

	// CPU time of guest nice.
	GuestNice float64 `csv:"guestNice"`
}

CPUTimes contains content for cpu times.

type Disk

type Disk struct {
	// Total amount of disk on the data path of dragonfly.
	Total uint64 `csv:"total"`

	// Free amount of disk on the data path of dragonfly.
	Free uint64 `csv:"free"`

	// Used amount of disk on the data path of dragonfly.
	Used uint64 `csv:"used"`

	// Used percent of disk on the data path of dragonfly directory.
	UsedPercent float64 `csv:"usedPercent"`

	// Total amount of indoes on the data path of dragonfly directory.
	InodesTotal uint64 `csv:"inodesTotal"`

	// Used amount of indoes on the data path of dragonfly directory.
	InodesUsed uint64 `csv:"inodesUsed"`

	// Free amount of indoes on the data path of dragonfly directory.
	InodesFree uint64 `csv:"inodesFree"`

	// Used percent of indoes on the data path of dragonfly directory.
	InodesUsedPercent float64 `csv:"inodesUsedPercent"`
}

Disk contains content for disk.

type Host

type Host struct {
	// ID is host id.
	ID string

	// Type is host type.
	Type types.HostType

	// Hostname is host name.
	Hostname string

	// IP is host ip.
	IP string

	// Port is grpc service port.
	Port int32

	// DownloadPort is piece downloading port.
	DownloadPort int32

	// Host OS.
	OS string

	// Host platform.
	Platform string

	// Host platform family.
	PlatformFamily string

	// Host platform version.
	PlatformVersion string

	// Host kernel version.
	KernelVersion string

	// CPU Stat.
	CPU CPU

	// Memory Stat.
	Memory Memory

	// Network Stat.
	Network Network

	// Dist Stat.
	Disk Disk

	// Build information.
	Build Build

	// ConcurrentUploadLimit is concurrent upload limit count.
	ConcurrentUploadLimit *atomic.Int32

	// ConcurrentUploadCount is concurrent upload count.
	ConcurrentUploadCount *atomic.Int32

	// UploadCount is total upload count.
	UploadCount *atomic.Int64

	// UploadFailedCount is upload failed count.
	UploadFailedCount *atomic.Int64

	// Peer sync map.
	Peers *sync.Map

	// PeerCount is peer count.
	PeerCount *atomic.Int32

	// CreatedAt is host create time.
	CreatedAt *atomic.Time

	// UpdatedAt is host update time.
	UpdatedAt *atomic.Time

	// Host log.
	Log *logger.SugaredLoggerOnWith
}

Host contains content for host.

func NewHost

func NewHost(
	id, ip, hostname string,
	port, downloadPort int32, typ types.HostType,
	options ...HostOption,
) *Host

New host instance.

func (*Host) DeletePeer

func (h *Host) DeletePeer(key string)

DeletePeer deletes peer for a key.

func (*Host) FreeUploadCount

func (h *Host) FreeUploadCount() int32

FreeUploadCount return free upload count of host.

func (*Host) LeavePeers

func (h *Host) LeavePeers()

LeavePeers set peer state to PeerStateLeave.

func (*Host) LoadPeer

func (h *Host) LoadPeer(key string) (*Peer, bool)

LoadPeer return peer for a key.

func (*Host) StorePeer

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

StorePeer set peer.

type HostManager

type HostManager interface {
	// Load returns host for a key.
	Load(string) (*Host, bool)

	// Store sets host.
	Store(*Host)

	// LoadOrStore returns host the key if present.
	// Otherwise, it stores and returns the given host.
	// The loaded result is true if the host was loaded, false if stored.
	LoadOrStore(*Host) (*Host, bool)

	// Delete deletes host for a key.
	Delete(string)

	// LoadRandomHosts loads host randomly through the Range of sync.Map.
	LoadRandomHosts(int, set.SafeSet[string]) []*Host

	// Try to reclaim host.
	RunGC() error
}

HostManager is the interface used for host manager.

type HostOption

type HostOption func(h *Host)

HostOption is a functional option for configuring the host.

func WithBuild

func WithBuild(build Build) HostOption

WithBuild sets host's build information.

func WithCPU

func WithCPU(cpu CPU) HostOption

WithCPU sets host's cpu.

func WithConcurrentUploadLimit

func WithConcurrentUploadLimit(limit int32) HostOption

WithConcurrentUploadLimit sets host's ConcurrentUploadLimit.

func WithDisk

func WithDisk(disk Disk) HostOption

WithDisk sets host's disk.

func WithKernelVersion

func WithKernelVersion(kernelVersion string) HostOption

WithKernelVersion sets host's kernel version.

func WithMemory

func WithMemory(memory Memory) HostOption

WithMemory sets host's memory.

func WithNetwork

func WithNetwork(network Network) HostOption

WithNetwork sets host's network.

func WithOS

func WithOS(os string) HostOption

WithOS sets host's os.

func WithPlatform

func WithPlatform(platform string) HostOption

WithPlatform sets host's platform.

func WithPlatformFamily

func WithPlatformFamily(platformFamily string) HostOption

WithPlatformFamily sets host's platform family.

func WithPlatformVersion

func WithPlatformVersion(platformVersion string) HostOption

WithPlatformVersion sets host's platform version.

type Memory

type Memory struct {
	// Total amount of RAM on this system.
	Total uint64 `csv:"total"`

	// RAM available for programs to allocate.
	Available uint64 `csv:"available"`

	// RAM used by programs.
	Used uint64 `csv:"used"`

	// Percentage of RAM used by programs.
	UsedPercent float64 `csv:"usedPercent"`

	// Calculates the percentage of memory used by process.
	ProcessUsedPercent float64 `csv:"processUsedPercent"`

	// This is the kernel's notion of free memory.
	Free uint64 `csv:"free"`
}

Memory contains content for memory.

type MockHostManager

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

MockHostManager is a mock of HostManager interface.

func NewMockHostManager

func NewMockHostManager(ctrl *gomock.Controller) *MockHostManager

NewMockHostManager creates a new mock instance.

func (*MockHostManager) Delete

func (m *MockHostManager) Delete(arg0 string)

Delete mocks base method.

func (*MockHostManager) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockHostManager) Load

func (m *MockHostManager) Load(arg0 string) (*Host, bool)

Load mocks base method.

func (*MockHostManager) LoadOrStore

func (m *MockHostManager) LoadOrStore(arg0 *Host) (*Host, bool)

LoadOrStore mocks base method.

func (*MockHostManager) LoadRandomHosts

func (m *MockHostManager) LoadRandomHosts(arg0 int, arg1 set.SafeSet[string]) []*Host

LoadRandomHosts mocks base method.

func (*MockHostManager) RunGC

func (m *MockHostManager) RunGC() error

RunGC mocks base method.

func (*MockHostManager) Store

func (m *MockHostManager) Store(arg0 *Host)

Store mocks base method.

type MockHostManagerMockRecorder

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

MockHostManagerMockRecorder is the mock recorder for MockHostManager.

func (*MockHostManagerMockRecorder) Delete

func (mr *MockHostManagerMockRecorder) Delete(arg0 interface{}) *gomock.Call

Delete indicates an expected call of Delete.

func (*MockHostManagerMockRecorder) Load

func (mr *MockHostManagerMockRecorder) Load(arg0 interface{}) *gomock.Call

Load indicates an expected call of Load.

func (*MockHostManagerMockRecorder) LoadOrStore

func (mr *MockHostManagerMockRecorder) LoadOrStore(arg0 interface{}) *gomock.Call

LoadOrStore indicates an expected call of LoadOrStore.

func (*MockHostManagerMockRecorder) LoadRandomHosts

func (mr *MockHostManagerMockRecorder) LoadRandomHosts(arg0, arg1 interface{}) *gomock.Call

LoadRandomHosts indicates an expected call of LoadRandomHosts.

func (*MockHostManagerMockRecorder) RunGC

RunGC indicates an expected call of RunGC.

func (*MockHostManagerMockRecorder) Store

func (mr *MockHostManagerMockRecorder) Store(arg0 interface{}) *gomock.Call

Store indicates an expected call of Store.

type MockPeerManager

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

MockPeerManager is a mock of PeerManager interface.

func NewMockPeerManager

func NewMockPeerManager(ctrl *gomock.Controller) *MockPeerManager

NewMockPeerManager creates a new mock instance.

func (*MockPeerManager) Delete

func (m *MockPeerManager) Delete(arg0 string)

Delete mocks base method.

func (*MockPeerManager) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockPeerManager) Load

func (m *MockPeerManager) Load(arg0 string) (*Peer, bool)

Load mocks base method.

func (*MockPeerManager) LoadOrStore

func (m *MockPeerManager) LoadOrStore(arg0 *Peer) (*Peer, bool)

LoadOrStore mocks base method.

func (*MockPeerManager) RunGC

func (m *MockPeerManager) RunGC() error

RunGC mocks base method.

func (*MockPeerManager) Store

func (m *MockPeerManager) Store(arg0 *Peer)

Store mocks base method.

type MockPeerManagerMockRecorder

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

MockPeerManagerMockRecorder is the mock recorder for MockPeerManager.

func (*MockPeerManagerMockRecorder) Delete

func (mr *MockPeerManagerMockRecorder) Delete(arg0 interface{}) *gomock.Call

Delete indicates an expected call of Delete.

func (*MockPeerManagerMockRecorder) Load

func (mr *MockPeerManagerMockRecorder) Load(arg0 interface{}) *gomock.Call

Load indicates an expected call of Load.

func (*MockPeerManagerMockRecorder) LoadOrStore

func (mr *MockPeerManagerMockRecorder) LoadOrStore(arg0 interface{}) *gomock.Call

LoadOrStore indicates an expected call of LoadOrStore.

func (*MockPeerManagerMockRecorder) RunGC

RunGC indicates an expected call of RunGC.

func (*MockPeerManagerMockRecorder) Store

func (mr *MockPeerManagerMockRecorder) Store(arg0 interface{}) *gomock.Call

Store indicates an expected call of Store.

type MockResource

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

MockResource is a mock of Resource interface.

func NewMockResource

func NewMockResource(ctrl *gomock.Controller) *MockResource

NewMockResource creates a new mock instance.

func (*MockResource) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockResource) HostManager

func (m *MockResource) HostManager() HostManager

HostManager mocks base method.

func (*MockResource) PeerManager

func (m *MockResource) PeerManager() PeerManager

PeerManager mocks base method.

func (*MockResource) SeedPeer

func (m *MockResource) SeedPeer() SeedPeer

SeedPeer mocks base method.

func (*MockResource) Stop

func (m *MockResource) Stop() error

Stop mocks base method.

func (*MockResource) TaskManager

func (m *MockResource) TaskManager() TaskManager

TaskManager mocks base method.

type MockResourceMockRecorder

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

MockResourceMockRecorder is the mock recorder for MockResource.

func (*MockResourceMockRecorder) HostManager

func (mr *MockResourceMockRecorder) HostManager() *gomock.Call

HostManager indicates an expected call of HostManager.

func (*MockResourceMockRecorder) PeerManager

func (mr *MockResourceMockRecorder) PeerManager() *gomock.Call

PeerManager indicates an expected call of PeerManager.

func (*MockResourceMockRecorder) SeedPeer

func (mr *MockResourceMockRecorder) SeedPeer() *gomock.Call

SeedPeer indicates an expected call of SeedPeer.

func (*MockResourceMockRecorder) Stop

func (mr *MockResourceMockRecorder) Stop() *gomock.Call

Stop indicates an expected call of Stop.

func (*MockResourceMockRecorder) TaskManager

func (mr *MockResourceMockRecorder) TaskManager() *gomock.Call

TaskManager indicates an expected call of TaskManager.

type MockSeedPeer

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

MockSeedPeer is a mock of SeedPeer interface.

func NewMockSeedPeer

func NewMockSeedPeer(ctrl *gomock.Controller) *MockSeedPeer

NewMockSeedPeer creates a new mock instance.

func (*MockSeedPeer) Client

func (m *MockSeedPeer) Client() SeedPeerClient

Client mocks base method.

func (*MockSeedPeer) DownloadTask

func (m *MockSeedPeer) DownloadTask(arg0 context.Context, arg1 *Task, arg2 types.HostType) error

DownloadTask mocks base method.

func (*MockSeedPeer) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockSeedPeer) Stop

func (m *MockSeedPeer) Stop() error

Stop mocks base method.

func (*MockSeedPeer) TriggerTask

func (m *MockSeedPeer) TriggerTask(arg0 context.Context, arg1 *http.Range, arg2 *Task) (*Peer, *v1.PeerResult, error)

TriggerTask mocks base method.

type MockSeedPeerClient

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

MockSeedPeerClient is a mock of SeedPeerClient interface.

func NewMockSeedPeerClient

func NewMockSeedPeerClient(ctrl *gomock.Controller) *MockSeedPeerClient

NewMockSeedPeerClient creates a new mock instance.

func (*MockSeedPeerClient) Close

func (m *MockSeedPeerClient) Close() error

Close mocks base method.

func (*MockSeedPeerClient) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockSeedPeerClient) GetPieceTasks

func (m *MockSeedPeerClient) GetPieceTasks(arg0 context.Context, arg1 *common.PieceTaskRequest, arg2 ...grpc.CallOption) (*common.PiecePacket, error)

GetPieceTasks mocks base method.

func (*MockSeedPeerClient) ObtainSeeds

ObtainSeeds mocks base method.

func (*MockSeedPeerClient) OnNotify

func (m *MockSeedPeerClient) OnNotify(arg0 *config.DynconfigData)

OnNotify mocks base method.

func (*MockSeedPeerClient) SyncPieceTasks

SyncPieceTasks mocks base method.

type MockSeedPeerClientMockRecorder

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

MockSeedPeerClientMockRecorder is the mock recorder for MockSeedPeerClient.

func (*MockSeedPeerClientMockRecorder) Close

Close indicates an expected call of Close.

func (*MockSeedPeerClientMockRecorder) GetPieceTasks

func (mr *MockSeedPeerClientMockRecorder) GetPieceTasks(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call

GetPieceTasks indicates an expected call of GetPieceTasks.

func (*MockSeedPeerClientMockRecorder) ObtainSeeds

func (mr *MockSeedPeerClientMockRecorder) ObtainSeeds(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call

ObtainSeeds indicates an expected call of ObtainSeeds.

func (*MockSeedPeerClientMockRecorder) OnNotify

func (mr *MockSeedPeerClientMockRecorder) OnNotify(arg0 interface{}) *gomock.Call

OnNotify indicates an expected call of OnNotify.

func (*MockSeedPeerClientMockRecorder) SyncPieceTasks

func (mr *MockSeedPeerClientMockRecorder) SyncPieceTasks(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call

SyncPieceTasks indicates an expected call of SyncPieceTasks.

type MockSeedPeerMockRecorder

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

MockSeedPeerMockRecorder is the mock recorder for MockSeedPeer.

func (*MockSeedPeerMockRecorder) Client

func (mr *MockSeedPeerMockRecorder) Client() *gomock.Call

Client indicates an expected call of Client.

func (*MockSeedPeerMockRecorder) DownloadTask

func (mr *MockSeedPeerMockRecorder) DownloadTask(arg0, arg1, arg2 interface{}) *gomock.Call

DownloadTask indicates an expected call of DownloadTask.

func (*MockSeedPeerMockRecorder) Stop

func (mr *MockSeedPeerMockRecorder) Stop() *gomock.Call

Stop indicates an expected call of Stop.

func (*MockSeedPeerMockRecorder) TriggerTask

func (mr *MockSeedPeerMockRecorder) TriggerTask(arg0, arg1, arg2 interface{}) *gomock.Call

TriggerTask indicates an expected call of TriggerTask.

type MockTaskManager

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

MockTaskManager is a mock of TaskManager interface.

func NewMockTaskManager

func NewMockTaskManager(ctrl *gomock.Controller) *MockTaskManager

NewMockTaskManager creates a new mock instance.

func (*MockTaskManager) Delete

func (m *MockTaskManager) Delete(arg0 string)

Delete mocks base method.

func (*MockTaskManager) EXPECT

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockTaskManager) Load

func (m *MockTaskManager) Load(arg0 string) (*Task, bool)

Load mocks base method.

func (*MockTaskManager) LoadOrStore

func (m *MockTaskManager) LoadOrStore(arg0 *Task) (*Task, bool)

LoadOrStore mocks base method.

func (*MockTaskManager) RunGC

func (m *MockTaskManager) RunGC() error

RunGC mocks base method.

func (*MockTaskManager) Store

func (m *MockTaskManager) Store(arg0 *Task)

Store mocks base method.

type MockTaskManagerMockRecorder

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

MockTaskManagerMockRecorder is the mock recorder for MockTaskManager.

func (*MockTaskManagerMockRecorder) Delete

func (mr *MockTaskManagerMockRecorder) Delete(arg0 interface{}) *gomock.Call

Delete indicates an expected call of Delete.

func (*MockTaskManagerMockRecorder) Load

func (mr *MockTaskManagerMockRecorder) Load(arg0 interface{}) *gomock.Call

Load indicates an expected call of Load.

func (*MockTaskManagerMockRecorder) LoadOrStore

func (mr *MockTaskManagerMockRecorder) LoadOrStore(arg0 interface{}) *gomock.Call

LoadOrStore indicates an expected call of LoadOrStore.

func (*MockTaskManagerMockRecorder) RunGC

RunGC indicates an expected call of RunGC.

func (*MockTaskManagerMockRecorder) Store

func (mr *MockTaskManagerMockRecorder) Store(arg0 interface{}) *gomock.Call

Store indicates an expected call of Store.

type Network

type Network struct {
	// Return count of tcp connections opened and status is ESTABLISHED.
	TCPConnectionCount uint32 `csv:"tcpConnectionCount"`

	// Return count of upload tcp connections opened and status is ESTABLISHED.
	UploadTCPConnectionCount uint32 `csv:"uploadTCPConnectionCount"`

	// Location path(area|country|province|city|...).
	Location string `csv:"location"`

	// IDC where the peer host is located
	IDC string `csv:"idc"`
}

Network contains content for network.

type Option

type Option func(r *resource)

Option is a functional option for configuring the resource.

func WithTransportCredentials

func WithTransportCredentials(creds credentials.TransportCredentials) Option

WithTransportCredentials returns a DialOption which configures a connection level security credentials (e.g., TLS/SSL).

type Peer

type Peer struct {
	// ID is peer id.
	ID string

	// Range is url range of request.
	Range *nethttp.Range

	// Priority is peer priority.
	Priority commonv2.Priority

	// Piece sync map.
	Pieces *sync.Map

	// Pieces is finished pieces bitset.
	FinishedPieces *bitset.BitSet

	// Cost is the cost of downloading.
	Cost *atomic.Duration

	// ReportPieceResultStream is the grpc stream of Scheduler_ReportPieceResultServer,
	// Used only in v1 version of the grpc.
	ReportPieceResultStream *atomic.Value

	// AnnouncePeerStream is the grpc stream of Scheduler_AnnouncePeerServer,
	// Used only in v2 version of the grpc.
	AnnouncePeerStream *atomic.Value

	// Task state machine.
	FSM *fsm.FSM

	// Task is peer task.
	Task *Task

	// Host is peer host.
	Host *Host

	// BlockParents is bad parents ids.
	BlockParents set.SafeSet[string]

	// NeedBackToSource needs downloaded from source.
	//
	// When peer is registering, at the same time,
	// scheduler needs to create the new corresponding task and the seed peer is disabled,
	// NeedBackToSource is set to true.
	NeedBackToSource *atomic.Bool

	// PieceUpdatedAt is piece update time.
	PieceUpdatedAt *atomic.Time

	// CreatedAt is peer create time.
	CreatedAt *atomic.Time

	// UpdatedAt is peer update time.
	UpdatedAt *atomic.Time

	// Peer log.
	Log *logger.SugaredLoggerOnWith
	// contains filtered or unexported fields
}

Peer contains content for peer.

func NewPeer

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

New Peer instance.

func (*Peer) AppendPieceCost

func (p *Peer) AppendPieceCost(duration time.Duration)

AppendPieceCost append piece cost to costs slice.

func (*Peer) CalculatePriority

func (p *Peer) CalculatePriority(dynconfig config.DynconfigInterface) commonv2.Priority

CalculatePriority returns priority of peer.

func (*Peer) Children

func (p *Peer) Children() []*Peer

Children returns children of peer.

func (*Peer) DeleteAnnouncePeerStream

func (p *Peer) DeleteAnnouncePeerStream()

DeleteAnnouncePeerStream deletes the grpc stream of Scheduler_AnnouncePeerServer, Used only in v2 version of the grpc.

func (*Peer) DeletePiece

func (p *Peer) DeletePiece(key int32)

DeletePiece deletes piece for a key.

func (*Peer) DeleteReportPieceResultStream

func (p *Peer) DeleteReportPieceResultStream()

DeleteReportPieceResultStream deletes the grpc stream of Scheduler_ReportPieceResultServer, Used only in v1 version of the grpc.

func (*Peer) DownloadTinyFile

func (p *Peer) DownloadTinyFile() ([]byte, error)

DownloadTinyFile downloads tiny file from peer without range.

func (*Peer) LoadAnnouncePeerStream

func (p *Peer) LoadAnnouncePeerStream() (schedulerv2.Scheduler_AnnouncePeerServer, bool)

LoadAnnouncePeerStream return the grpc stream of Scheduler_AnnouncePeerServer, Used only in v2 version of the grpc.

func (*Peer) LoadPiece

func (p *Peer) LoadPiece(key int32) (*Piece, bool)

LoadPiece return piece for a key.

func (*Peer) LoadReportPieceResultStream

func (p *Peer) LoadReportPieceResultStream() (schedulerv1.Scheduler_ReportPieceResultServer, bool)

LoadReportPieceResultStream return the grpc stream of Scheduler_ReportPieceResultServer, Used only in v1 version of the grpc.

func (*Peer) Parents

func (p *Peer) Parents() []*Peer

Parents returns parents of peer.

func (*Peer) PieceCosts

func (p *Peer) PieceCosts() []time.Duration

PieceCosts return piece costs slice.

func (*Peer) StoreAnnouncePeerStream

func (p *Peer) StoreAnnouncePeerStream(stream schedulerv2.Scheduler_AnnouncePeerServer)

StoreAnnouncePeerStream set the grpc stream of Scheduler_AnnouncePeerServer, Used only in v2 version of the grpc.

func (*Peer) StorePiece

func (p *Peer) StorePiece(piece *Piece)

StorePiece set piece.

func (*Peer) StoreReportPieceResultStream

func (p *Peer) StoreReportPieceResultStream(stream schedulerv1.Scheduler_ReportPieceResultServer)

StoreReportPieceResultStream set the grpc stream of Scheduler_ReportPieceResultServer, Used only in v1 version of the grpc.

type PeerManager

type PeerManager interface {
	// Load returns peer for a key.
	Load(string) (*Peer, bool)

	// Store sets peer.
	Store(*Peer)

	// LoadOrStore returns peer the key if present.
	// Otherwise, it stores and returns the given peer.
	// The loaded result is true if the peer was loaded, false if stored.
	LoadOrStore(*Peer) (*Peer, bool)

	// Delete deletes peer for a key.
	Delete(string)

	// Try to reclaim peer.
	RunGC() error
}

PeerManager is the interface used for peer manager.

type PeerOption

type PeerOption func(peer *Peer)

PeerOption is a functional option for peer.

func WithAnnouncePeerStream

func WithAnnouncePeerStream(stream schedulerv2.Scheduler_AnnouncePeerServer) PeerOption

WithAnnouncePeerStream set AnnouncePeerStream for peer.

func WithPriority

func WithPriority(priority commonv2.Priority) PeerOption

WithPriority set Priority for peer.

func WithRange

func WithRange(rg nethttp.Range) PeerOption

WithRange set Range for peer.

type Piece

type Piece struct {
	// Piece number.
	Number int32
	// Parent peer id.
	ParentID string
	// Piece offset.
	Offset uint64
	// Piece length.
	Length uint64
	// Digest of the piece data.
	Digest *digest.Digest
	// Traffic type.
	TrafficType commonv2.TrafficType
	// Downloading piece costs time.
	Cost time.Duration
	// Piece create time.
	CreatedAt time.Time
}

Piece represents information of piece.

type Resource

type Resource interface {
	// SeedPeer interface.
	SeedPeer() SeedPeer

	// Host manager interface.
	HostManager() HostManager

	// Peer manager interface.
	PeerManager() PeerManager

	// Task manager interface.
	TaskManager() TaskManager

	// Stop resource serivce.
	Stop() error
}

Resource is the interface used for resource.

func New

func New(cfg *config.Config, gc gc.GC, dynconfig config.DynconfigInterface, options ...Option) (Resource, error)

New returns Resource interface.

type SeedPeer

type SeedPeer interface {
	// DownloadTask downloads task back-to-source.
	// Used only in v2 version of the grpc.
	DownloadTask(context.Context, *Task, types.HostType) error

	// TriggerTask triggers the seed peer to download task.
	// Used only in v1 version of the grpc.
	TriggerTask(context.Context, *http.Range, *Task) (*Peer, *schedulerv1.PeerResult, error)

	// Client returns grpc client of seed peer.
	Client() SeedPeerClient

	// Stop seed peer serivce.
	Stop() error
}

SeedPeer is the interface used for seed peer.

type SeedPeerClient

type SeedPeerClient interface {
	// client is seed peer grpc client interface.
	client.Client

	// Observer is dynconfig observer interface.
	config.Observer
}

SeedPeerClient is the interface used for client of seed peer.

type Task

type Task struct {
	// ID is task id.
	ID string

	// Type is task type.
	Type commonv2.TaskType

	// URL is task download url.
	URL string

	// Digest of the task content, for example md5:xxx or sha256:yyy.
	Digest *digest.Digest

	// URL tag identifies different task for same url.
	Tag string

	// Application identifies different task for same url.
	Application string

	// Filter url used to generate task id.
	Filters []string

	// Task request headers.
	Header map[string]string

	// Task piece length.
	PieceLength int32

	// DirectPiece is tiny piece data.
	DirectPiece []byte

	// ContentLength is task total content length.
	ContentLength *atomic.Int64

	// TotalPieceCount is total piece count.
	TotalPieceCount *atomic.Int32

	// BackToSourceLimit is back-to-source limit.
	BackToSourceLimit *atomic.Int32

	// BackToSourcePeers is back-to-source sync map.
	BackToSourcePeers set.SafeSet[string]

	// Task state machine.
	FSM *fsm.FSM

	// Piece sync map.
	Pieces *sync.Map

	// DAG is directed acyclic graph of peers.
	DAG dag.DAG[*Peer]

	// PeerFailedCount is peer failed count,
	// if one peer succeeds, the value is reset to zero.
	PeerFailedCount *atomic.Int32

	// CreatedAt is task create time.
	CreatedAt *atomic.Time

	// UpdatedAt is task update time.
	UpdatedAt *atomic.Time

	// Task log.
	Log *logger.SugaredLoggerOnWith
}

Task contains content for task.

func NewTask

func NewTask(id, url, tag, application string, typ commonv2.TaskType, filters []string,
	header map[string]string, backToSourceLimit int32, options ...TaskOption) *Task

New task instance.

func (*Task) AddPeerEdge

func (t *Task) AddPeerEdge(fromPeer *Peer, toPeer *Peer) error

AddPeerEdge adds inedges between two peers.

func (*Task) AnnouncePeers

func (t *Task) AnnouncePeers(resp *schedulerv2.AnnouncePeerResponse, event string)

AnnouncePeers announces all peers in the task with the state code. Used only in v2 version of the grpc.

func (*Task) CanAddPeerEdge

func (t *Task) CanAddPeerEdge(fromPeerKey, toPeerKey string) bool

CanAddPeerEdge finds whether there are peer circles through depth-first search.

func (*Task) CanBackToSource

func (t *Task) CanBackToSource() bool

CanBackToSource represents whether task can back-to-source.

func (*Task) CanReuseDirectPiece

func (t *Task) CanReuseDirectPiece() bool

CanReuseDirectPiece represents whether task can reuse data of direct piece.

func (*Task) DeletePeer

func (t *Task) DeletePeer(key string)

DeletePeer deletes peer for a key.

func (*Task) DeletePeerInEdges

func (t *Task) DeletePeerInEdges(key string) error

DeletePeerInEdges deletes inedges of peer.

func (*Task) DeletePeerOutEdges

func (t *Task) DeletePeerOutEdges(key string) error

DeletePeerOutEdges deletes outedges of peer.

func (*Task) DeletePiece

func (t *Task) DeletePiece(key int32)

DeletePiece deletes piece for a key.

func (*Task) HasAvailablePeer

func (t *Task) HasAvailablePeer(blocklist set.SafeSet[string]) bool

HasAvailablePeer returns whether there is an available peer.

func (*Task) IsSeedPeerFailed

func (t *Task) IsSeedPeerFailed() bool

IsSeedPeerFailed returns whether the seed peer in the task failed.

func (*Task) LoadPeer

func (t *Task) LoadPeer(key string) (*Peer, bool)

LoadPeer return peer for a key.

func (*Task) LoadPiece

func (t *Task) LoadPiece(key int32) (*Piece, bool)

LoadPiece return piece for a key.

func (*Task) LoadRandomPeers

func (t *Task) LoadRandomPeers(n uint) []*Peer

LoadRandomPeers return random peers.

func (*Task) LoadSeedPeer

func (t *Task) LoadSeedPeer() (*Peer, bool)

LoadSeedPeer return latest seed peer in peers sync map.

func (*Task) PeerCount

func (t *Task) PeerCount() int

PeerCount returns count of peer.

func (*Task) PeerDegree

func (t *Task) PeerDegree(key string) (int, error)

PeerDegree returns the degree of peer.

func (*Task) PeerInDegree

func (t *Task) PeerInDegree(key string) (int, error)

PeerInDegree returns the indegree of peer.

func (*Task) PeerOutDegree

func (t *Task) PeerOutDegree(key string) (int, error)

PeerOutDegree returns the outdegree of peer.

func (*Task) ReportPieceResultToPeers

func (t *Task) ReportPieceResultToPeers(peerPacket *schedulerv1.PeerPacket, event string)

ReportPieceResultToPeers reports all peers in the task with the state code. Used only in v1 version of the grpc.

func (*Task) SizeScope

func (t *Task) SizeScope() commonv2.SizeScope

SizeScope return task size scope type.

func (*Task) StorePeer

func (t *Task) StorePeer(peer *Peer)

StorePeer set peer.

func (*Task) StorePiece

func (t *Task) StorePiece(piece *Piece)

StorePiece set piece.

type TaskManager

type TaskManager interface {
	// Load returns task for a key.
	Load(string) (*Task, bool)

	// Store sets task.
	Store(*Task)

	// LoadOrStore returns task the key if present.
	// Otherwise, it stores and returns the given task.
	// The loaded result is true if the task was loaded, false if stored.
	LoadOrStore(*Task) (*Task, bool)

	// Delete deletes task for a key.
	Delete(string)

	// Try to reclaim task.
	RunGC() error
}

TaskManager is the interface used for task manager.

type TaskOption

type TaskOption func(task *Task)

TaskOption is a functional option for task.

func WithDigest

func WithDigest(d *digest.Digest) TaskOption

WithDigest set Digest for task.

func WithPieceLength

func WithPieceLength(pieceLength int32) TaskOption

WithPieceLength set PieceLength for task.

Jump to

Keyboard shortcuts

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