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)
- func (e *Engine) MessageSent(p peer.ID, m bsmsg.BitSwapMessage)
- 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) ReceiveFrom(from peer.ID, blks []blocks.Block, haves []cid.Cid)
- 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 PeerTagger
- type Receipt
- type ScoreLedger
- type ScorePeerFunc
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{}) *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(bs bstore.Blockstore, bstoreWorkerCount int, peerTagger PeerTagger, self peer.ID, scoreLedger ScoreLedger) *Engine
NewEngine creates a new block sending engine for the given block store
func (*Engine) LedgerForPeer ¶
LedgerForPeer returns aggregated data communication with a given peer.
func (*Engine) MessageReceived ¶
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) 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) ReceiveFrom ¶
ReceiveFrom is called when new blocks are received and added to the block store, meaning there may be peers who want those blocks, so we should send the blocks to them.
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 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.