Documentation
¶
Overview ¶
Package decision implements the decision engine for the bitswap service.
Index ¶
- type DefaultScoreLedger
- func (dsl *DefaultScoreLedger) AddToReceivedBytes(p peer.ID, n int)
- func (dsl *DefaultScoreLedger) AddToSentBytes(p peer.ID, n int)
- func (dsl *DefaultScoreLedger) GetReceipt(p peer.ID) *Receipt
- func (dsl *DefaultScoreLedger) PeerConnected(p peer.ID)
- func (dsl *DefaultScoreLedger) PeerDisconnected(p peer.ID)
- func (dsl *DefaultScoreLedger) Start(scorePeer ScorePeerFunc)
- func (dsl *DefaultScoreLedger) Stop()
- type Engine
- func (e *Engine) LedgerForPeer(p peer.ID) *Receipt
- func (e *Engine) MessageReceived(ctx context.Context, p peer.ID, m bsmsg.BitSwapMessage) (mustKillConnection bool)
- func (e *Engine) MessageSent(p peer.ID, m bsmsg.BitSwapMessage)
- func (e *Engine) NotifyNewBlocks(blks []blocks.Block)
- func (e *Engine) Outbox() <-chan (<-chan *Envelope)
- func (e *Engine) PeerConnected(p peer.ID)
- func (e *Engine) PeerDisconnected(p peer.ID)
- func (e *Engine) Peers() []peer.ID
- func (e *Engine) ReceivedBlocks(from peer.ID, blks []blocks.Block)
- func (e *Engine) SetSendDontHaves(send bool)
- func (e *Engine) StartWorkers(ctx context.Context, px process.Process)
- func (e *Engine) WantlistForPeer(p peer.ID) []wl.Entry
- type Envelope
- type Option
- func WithBlockstoreWorkerCount(count int) Option
- func WithMaxCidSize(n uint) Option
- func WithMaxOutstandingBytesPerPeer(count int) Option
- func WithMaxQueuedWantlistEntriesPerPeer(count uint) Option
- func WithPeerBlockRequestFilter(pbrf PeerBlockRequestFilter) Option
- func WithScoreLedger(scoreledger ScoreLedger) Option
- func WithSetSendDontHave(send bool) Option
- func WithTargetMessageSize(size int) Option
- func WithTaskComparator(comparator TaskComparator) Option
- func WithTaskWorkerCount(count int) Option
- type PeerBlockRequestFilter
- type PeerTagger
- type Receipt
- type ScoreLedger
- type ScorePeerFunc
- type TaskComparator
- type TaskInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DefaultScoreLedger ¶
type DefaultScoreLedger struct {
// contains filtered or unexported fields
}
DefaultScoreLedger is used by Engine as the default ScoreLedger.
func NewDefaultScoreLedger ¶
func NewDefaultScoreLedger() *DefaultScoreLedger
Creates a new instance of the default score ledger.
func NewTestScoreLedger ¶
func NewTestScoreLedger(peerSampleInterval time.Duration, sampleCh chan struct{}, clock clock.Clock) *DefaultScoreLedger
Creates a new instance of the default score ledger with testing parameters.
func (*DefaultScoreLedger) AddToReceivedBytes ¶
func (dsl *DefaultScoreLedger) AddToReceivedBytes(p peer.ID, n int)
Increments the received counter for the given peer.
func (*DefaultScoreLedger) AddToSentBytes ¶
func (dsl *DefaultScoreLedger) AddToSentBytes(p peer.ID, n int)
Increments the sent counter for the given peer.
func (*DefaultScoreLedger) GetReceipt ¶
func (dsl *DefaultScoreLedger) GetReceipt(p peer.ID) *Receipt
GetReceipt returns aggregated data communication with a given peer.
func (*DefaultScoreLedger) PeerConnected ¶
func (dsl *DefaultScoreLedger) PeerConnected(p peer.ID)
PeerConnected should be called when a new peer connects, meaning we should open accounting.
func (*DefaultScoreLedger) PeerDisconnected ¶
func (dsl *DefaultScoreLedger) PeerDisconnected(p peer.ID)
PeerDisconnected should be called when a peer disconnects to clean up the accounting.
func (*DefaultScoreLedger) Start ¶
func (dsl *DefaultScoreLedger) Start(scorePeer ScorePeerFunc)
Starts the default ledger sampling process.
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine manages sending requested blocks to peers.
func NewEngine ¶
func NewEngine( ctx context.Context, bs bstore.Blockstore, peerTagger PeerTagger, self peer.ID, opts ...Option, ) *Engine
NewEngine creates a new block sending engine for the given block store. maxOutstandingBytesPerPeer hints to the peer task queue not to give a peer more tasks if it has some maximum work already outstanding.
func (*Engine) LedgerForPeer ¶
LedgerForPeer returns aggregated data communication with a given peer.
func (*Engine) MessageReceived ¶
func (e *Engine) MessageReceived(ctx context.Context, p peer.ID, m bsmsg.BitSwapMessage) (mustKillConnection bool)
MessageReceived is called when a message is received from a remote peer. For each item in the wantlist, add a want-have or want-block entry to the request queue (this is later popped off by the workerTasks)
func (*Engine) MessageSent ¶
func (e *Engine) MessageSent(p peer.ID, m bsmsg.BitSwapMessage)
MessageSent is called when a message has successfully been sent out, to record changes.
func (*Engine) NotifyNewBlocks ¶
NotifyNewBlocks is called when new blocks becomes available locally, and in particular when the caller of bitswap decide to store those blocks and make them available on the network.
func (*Engine) PeerConnected ¶
PeerConnected is called when a new peer connects, meaning we should start sending blocks.
func (*Engine) PeerDisconnected ¶
PeerDisconnected is called when a peer disconnects.
func (*Engine) ReceivedBlocks ¶
ReceivedBlocks is called when new blocks are received from the network. This function also updates the receive side of the ledger.
func (*Engine) SetSendDontHaves ¶
SetSendDontHaves indicates what to do when the engine receives a want-block for a block that is not in the blockstore. Either - Send a DONT_HAVE message - Simply don't respond Older versions of Bitswap did not respond, so this allows us to simulate those older versions for testing.
func (*Engine) StartWorkers ¶
Start up workers to handle requests from other nodes for the data on this node
type Envelope ¶
type Envelope struct {
// Peer is the intended recipient.
Peer peer.ID
// Message is the payload.
Message bsmsg.BitSwapMessage
// A callback to notify the decision queue that the task is complete
Sent func()
}
Envelope contains a message for a Peer.
type Option ¶
type Option func(*Engine)
func WithBlockstoreWorkerCount ¶
WithBlockstoreWorkerCount sets the number of worker threads used for blockstore operations in the decision engine
func WithMaxCidSize ¶ added in v0.4.1
WithMaxQueuedWantlistEntriesPerPeer limits how much individual entries each peer is allowed to send. If a peer send us more than this we will truncate newest entries.
func WithMaxOutstandingBytesPerPeer ¶
WithMaxOutstandingBytesPerPeer describes approximately how much work we are will to have outstanding to a peer at any given time. Setting it to 0 will disable any limiting.
func WithMaxQueuedWantlistEntriesPerPeer ¶ added in v0.4.1
WithMaxQueuedWantlistEntriesPerPeer limits how much individual entries each peer is allowed to send. If a peer send us more than this we will truncate newest entries.
func WithPeerBlockRequestFilter ¶
func WithPeerBlockRequestFilter(pbrf PeerBlockRequestFilter) Option
func WithScoreLedger ¶
func WithScoreLedger(scoreledger ScoreLedger) Option
func WithSetSendDontHave ¶
func WithTargetMessageSize ¶
func WithTaskComparator ¶
func WithTaskComparator(comparator TaskComparator) Option
func WithTaskWorkerCount ¶
WithTaskWorkerCount sets the number of worker threads used inside the engine
type PeerBlockRequestFilter ¶
PeerBlockRequestFilter is used to accept / deny requests for a CID coming from a PeerID It should return true if the request should be fullfilled.
type PeerTagger ¶
PeerTagger covers the methods on the connection manager used by the decision engine to tag peers
type Receipt ¶
Receipt is a summary of the ledger for a given peer collecting various pieces of aggregated data for external reporting purposes.
type ScoreLedger ¶
type ScoreLedger interface {
// Returns aggregated data communication with a given peer.
GetReceipt(p peer.ID) *Receipt
// Increments the sent counter for the given peer.
AddToSentBytes(p peer.ID, n int)
// Increments the received counter for the given peer.
AddToReceivedBytes(p peer.ID, n int)
// PeerConnected should be called when a new peer connects,
// meaning the ledger should open accounting.
PeerConnected(p peer.ID)
// PeerDisconnected should be called when a peer disconnects to
// clean up the accounting.
PeerDisconnected(p peer.ID)
// Starts the ledger sampling process.
Start(scorePeer ScorePeerFunc)
// Stops the sampling process.
Stop()
}
ScoreLedger is an external ledger dealing with peer scores.
type TaskComparator ¶
TaskComparator is used for task prioritization. It should return true if task 'ta' has higher priority than task 'tb'
type TaskInfo ¶
type TaskInfo struct {
Peer peer.ID
// The CID of the block
Cid cid.Cid
// Tasks can be want-have or want-block
IsWantBlock bool
// Whether to immediately send a response if the block is not found
SendDontHave bool
// The size of the block corresponding to the task
BlockSize int
// Whether the block was found
HaveBlock bool
}
TaskInfo represents the details of a request from a peer.