go-blockservice: github.com/ipfs/go-blockservice Index | Files | Directories

package blockservice

import "github.com/ipfs/go-blockservice"

package blockservice implements a BlockService interface that provides a single GetBlock/AddBlock interface that seamlessly retrieves data either locally or from a remote peer through the exchange.


Package Files



var ErrNotFound = errors.New("blockservice: key not found")

type BlockGetter Uses

type BlockGetter interface {
    // GetBlock gets the requested block.
    GetBlock(ctx context.Context, c cid.Cid) (blocks.Block, error)

    // GetBlocks does a batch request for the given cids, returning blocks as
    // they are found, in no particular order.
    // It may not be able to find all requested blocks (or the context may
    // be canceled). In that case, it will close the channel early. It is up
    // to the consumer to detect this situation and keep track which blocks
    // it has received and which it hasn't.
    GetBlocks(ctx context.Context, ks []cid.Cid) <-chan blocks.Block

BlockGetter is the common interface shared between blockservice sessions and the blockservice.

type BlockService Uses

type BlockService interface {

    // Blockstore returns a reference to the underlying blockstore
    Blockstore() blockstore.Blockstore

    // Exchange returns a reference to the underlying exchange (usually bitswap)
    Exchange() exchange.Interface

    // AddBlock puts a given block to the underlying datastore
    AddBlock(o blocks.Block) error

    // AddBlocks adds a slice of blocks at the same time using batching
    // capabilities of the underlying datastore whenever possible.
    AddBlocks(bs []blocks.Block) error

    // DeleteBlock deletes the given block from the blockservice.
    DeleteBlock(o cid.Cid) error

BlockService is a hybrid block datastore. It stores data in a local datastore and may retrieve data from a remote Exchange. It uses an internal `datastore.Datastore` instance to store values.

func New Uses

func New(bs blockstore.Blockstore, rem exchange.Interface) BlockService

NewBlockService creates a BlockService with given datastore instance.

func NewWriteThrough Uses

func NewWriteThrough(bs blockstore.Blockstore, rem exchange.Interface) BlockService

NewWriteThrough ceates a BlockService that guarantees writes will go through to the blockstore and are not skipped by cache checks.

type Session Uses

type Session struct {
    // contains filtered or unexported fields

Session is a helper type to provide higher level access to bitswap sessions

func NewSession Uses

func NewSession(ctx context.Context, bs BlockService) *Session

NewSession creates a new session that allows for controlled exchange of wantlists to decrease the bandwidth overhead. If the current exchange is a SessionExchange, a new exchange session will be created. Otherwise, the current exchange will be used directly.

func (*Session) GetBlock Uses

func (s *Session) GetBlock(ctx context.Context, c cid.Cid) (blocks.Block, error)

GetBlock gets a block in the context of a request session

func (*Session) GetBlocks Uses

func (s *Session) GetBlocks(ctx context.Context, ks []cid.Cid) <-chan blocks.Block

GetBlocks gets blocks in the context of a request session



Package blockservice imports 10 packages (graph) and is imported by 76 packages. Updated 2020-07-16. Refresh now. Tools for package owners.