rqueue

package
v0.5.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Jul 26, 2020 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultLatencyResolution = 100

Variables

This section is empty.

Functions

This section is empty.

Types

type FilterFunc

type FilterFunc func(r *Request) bool

FilterFunc is a function which determines whether a request should be enqueued or not.

type Queue

type Queue interface {
	// Next returns the next request to send, pops it from the queue and marks it as pending.
	Next() *Request
	// Peek returns the next request to send without popping it from the queue.
	Peek() *Request
	// Enqueue enqueues the given request if it isn't already queued or pending.
	Enqueue(*Request) (enqueued bool)
	// IsQueued tells whether a given request for the given transaction hash is queued.
	IsQueued(hash hornet.Hash) bool
	// IsPending tells whether a given request was popped from the queue and is now pending.
	IsPending(hash hornet.Hash) bool
	// IsProcessing tells whether a given request was popped from the queue, received and is now processing.
	IsProcessing(hash hornet.Hash) bool
	// Received marks a request as received and thereby removes it from the pending set.
	// It is added to the processing set.
	// Returns the origin request which was pending or nil if the hash was not requested.
	Received(hash hornet.Hash) *Request
	// Processed marks a request as fulfilled and thereby removes it from the processing set.
	// Returns the origin request which was pending or nil if the hash was not requested.
	Processed(hash hornet.Hash) *Request
	// EnqueuePending enqueues all pending requests back into the queue.
	// It also discards requests in the pending set of which their enqueue time is over the given delta threshold.
	// If discardOlderThan is zero, no requests are discarded.
	EnqueuePending(discardOlderThan time.Duration) (queued int)
	// Size returns the size of currently queued, requested/pending and processing requests.
	Size() (queued int, pending int, processing int)
	// Empty tells whether the queue has no queued and pending requests.
	Empty() bool
	// Requests returns a snapshot of all queued, pending and processing requests in the queue.
	Requests() (queued []*Request, pending []*Request, processing []*Request)
	// AvgLatency returns the average latency of enqueueing and then receiving a request.
	AvgLatency() int64
	// Filter adds the given filter function to the queue. Passing nil resets the current one.
	// Setting a filter automatically clears all queued and pending requests which do not fulfill
	// the filter criteria.
	Filter(f FilterFunc)
}

Queue implements a queue which contains requests for needed data.

func New

func New(latencyResolution ...int32) Queue

New creates a new Queue where request are prioritized over their milestone index (lower = higher priority).

type Request

type Request struct {
	// The hash of the transaction to request.
	Hash hornet.Hash
	// The milestone index under which this request is linked.
	MilestoneIndex milestone.Index

	// Tells the request queue to not remove this request if the enqueue time is
	// over the given threshold.
	PreventDiscard bool
	// the time at which this request was first enqueued.
	// do not modify this time
	EnqueueTime time.Time
	// contains filtered or unexported fields
}

Request is a request for a particular transaction.

Jump to

Keyboard shortcuts

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