Documentation ¶
Index ¶
- type Option
- type PeerTaskQueue
- func (ptq *PeerTaskQueue) FullThaw()
- func (ptq *PeerTaskQueue) Options(options ...Option) Option
- func (ptq *PeerTaskQueue) PopTasks(targetMinWork int) (peer.ID, []*peertask.Task, int)
- func (ptq *PeerTaskQueue) PushTasks(to peer.ID, tasks ...peertask.Task)
- func (ptq *PeerTaskQueue) Remove(topic peertask.Topic, p peer.ID)
- func (ptq *PeerTaskQueue) TasksDone(to peer.ID, tasks ...*peertask.Task)
- func (ptq *PeerTaskQueue) ThawRound()
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 ¶
IgnoreFreezing is an option that can make the task queue ignore freezing and unfreezing
func OnPeerAddedHook ¶
OnPeerAddedHook adds a hook function that gets called whenever the ptq adds a new peer
func OnPeerRemovedHook ¶
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 (*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 ¶
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.