Documentation
¶
Index ¶
- type RequestInfo
- type RequesterGadget
- func (rg *RequesterGadget[Item]) CheckAndMarkResponse(item Item, sender commontypes.OracleID) bool
- func (rg *RequesterGadget[Item]) MarkBadResponder(sender commontypes.OracleID)
- func (rg *RequesterGadget[Item]) MarkBadResponse(item Item, sender commontypes.OracleID)
- func (rg *RequesterGadget[Item]) MarkGoAwayResponse(item Item, sender commontypes.OracleID)
- func (rg *RequesterGadget[Item]) MarkGoodResponder(sender commontypes.OracleID)
- func (rg *RequesterGadget[Item]) MarkGoodResponse(_ Item, sender commontypes.OracleID)
- func (rg *RequesterGadget[Item]) PleaseRecheckPendingItems()
- func (rg *RequesterGadget[Item]) Tick()
- func (rg *RequesterGadget[Item]) Ticker() <-chan time.Time
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