requestergadget

package
v0.0.0-...-b640923 Latest Latest
Warning

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

Go to latest
Published: Apr 3, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type RequestInfo

type RequestInfo = types.RequestInfo

type RequesterGadget

type RequesterGadget[Item comparable] struct {
	// contains filtered or unexported fields
}

A RequesterGadget helps us track and send requests for some data from a set of *seeders* that may or may not be able to serve the requests. Seeders may be byzantine, crashed, or just slow.

Not thread-safe. RequesterGadget is expected to be integrated into a single subprotocol event loop via selecting on Ticker() and then calling Tick().

Response processing is not handled by RequesterGadget. It is the responsibility of the subprotocol integrating RequesterGadget. After a response is received, the subprotocol must call CheckAndMarkResponse. It should also call one of MarkGoAwayResponse, MarkGoodResponse, MarkBadResponse, MarkGoodResponder, MarkBadResponder once the response has been processed.

func NewRequesterGadget

func NewRequesterGadget[Item comparable](
	n int,
	requestInterval time.Duration,
	sendRequestFn func(Item, commontypes.OracleID) (*RequestInfo, bool),
	getPendingItemsFn func() []Item,
	getSeedersFn func(Item) map[commontypes.OracleID]struct{},
) *RequesterGadget[Item]

func (*RequesterGadget[Item]) CheckAndMarkResponse

func (rg *RequesterGadget[Item]) CheckAndMarkResponse(item Item, sender commontypes.OracleID) bool

CheckAndMarkResponse must be called by the protocol when a response is received, to ensure that the response matches a request that the gadget has sent. It will return true even if the request has technically timed out in some cases.

func (*RequesterGadget[Item]) MarkBadResponder

func (rg *RequesterGadget[Item]) MarkBadResponder(sender commontypes.OracleID)

func (*RequesterGadget[Item]) MarkBadResponse

func (rg *RequesterGadget[Item]) MarkBadResponse(item Item, sender commontypes.OracleID)

func (*RequesterGadget[Item]) MarkGoAwayResponse

func (rg *RequesterGadget[Item]) MarkGoAwayResponse(item Item, sender commontypes.OracleID)

func (*RequesterGadget[Item]) MarkGoodResponder

func (rg *RequesterGadget[Item]) MarkGoodResponder(sender commontypes.OracleID)

func (*RequesterGadget[Item]) MarkGoodResponse

func (rg *RequesterGadget[Item]) MarkGoodResponse(_ Item, sender commontypes.OracleID)

func (*RequesterGadget[Item]) PleaseRecheckPendingItems

func (rg *RequesterGadget[Item]) PleaseRecheckPendingItems()

PleaseRecheckPendingItems must be called by the protocol when the output of getPendingItemsFn or getSeedersFn has changed.

func (*RequesterGadget[Item]) Tick

func (rg *RequesterGadget[Item]) Tick()

func (*RequesterGadget[Item]) Ticker

func (rg *RequesterGadget[Item]) Ticker() <-chan time.Time

Jump to

Keyboard shortcuts

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