peertaskqueue

package
v1.7.1 Latest Latest
Warning

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

Go to latest
Published: Jan 29, 2021 License: MIT, Apache-2.0, MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Option

type Option func(*PeerTaskQueue) Option

Option is a function that configures the peer task queue

func IgnoreFreezing

func IgnoreFreezing(ignoreFreezing bool) Option

IgnoreFreezing is an option that can make the task queue ignore freezing and unfreezing

func OnPeerAddedHook

func OnPeerAddedHook(onPeerAddedHook func(p peer.ID)) Option

OnPeerAddedHook adds a hook function that gets called whenever the ptq adds a new peer

func OnPeerRemovedHook

func OnPeerRemovedHook(onPeerRemovedHook func(p peer.ID)) Option

OnPeerRemovedHook adds a hook function that gets called whenever the ptq adds a new peer

func TaskMerger

func TaskMerger(tmfp peertracker.TaskMerger) Option

TaskMerger is an option that specifies merge behaviour when pushing a task with the same Topic as an existing Topic.

type PeerTaskQueue

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

PeerTaskQueue is a prioritized list of tasks to be executed on peers. Tasks are added to the queue, then popped off alternately between peers (roughly) to execute the block with the highest priority, or otherwise the one added first if priorities are equal.

func New

func New(options ...Option) *PeerTaskQueue

New creates a new PeerTaskQueue

func (*PeerTaskQueue) FullThaw

func (ptq *PeerTaskQueue) FullThaw()

FullThaw completely thaws all peers in the queue so they can execute tasks.

func (*PeerTaskQueue) Options

func (ptq *PeerTaskQueue) Options(options ...Option) Option

Options uses configuration functions to configure the peer task queue. It returns an Option that can be called to reverse the changes.

func (*PeerTaskQueue) PopTasks

func (ptq *PeerTaskQueue) PopTasks(targetMinWork int) (peer.ID, []*peertask.Task, int)

PopTasks finds the peer with the highest priority and pops as many tasks off the peer's queue as necessary to cover targetMinWork, in priority order. If there are not enough tasks to cover targetMinWork it just returns whatever is in the peer's queue.

  • Peers with the most "active" work are deprioritized. This heuristic is for fairness, we try to keep all peers "busy".
  • Peers with the most "pending" work are prioritized. This heuristic is so that peers with a lot to do get asked for work first.

The third response argument is pending work: the amount of work in the queue for this peer.

func (*PeerTaskQueue) PushTasks

func (ptq *PeerTaskQueue) PushTasks(to peer.ID, tasks ...peertask.Task)

PushTasks adds a new group of tasks for the given peer to the queue

func (*PeerTaskQueue) Remove

func (ptq *PeerTaskQueue) Remove(topic peertask.Topic, p peer.ID)

Remove removes a task from the queue.

func (*PeerTaskQueue) TasksDone

func (ptq *PeerTaskQueue) TasksDone(to peer.ID, tasks ...*peertask.Task)

TasksDone is called to indicate that the given tasks have completed for the given peer

func (*PeerTaskQueue) ThawRound

func (ptq *PeerTaskQueue) ThawRound()

ThawRound unthaws peers incrementally, so that those have been frozen the least become unfrozen and able to execute tasks first.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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