blockservice

package
v0.19.0 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2024 License: Apache-2.0, MIT Imports: 13 Imported by: 80

Documentation

Overview

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.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ContextWithSession added in v0.18.0

func ContextWithSession(ctx context.Context, bs BlockService) context.Context

ContextWithSession is a helper which creates a context with an embded session, future calls to [BlockGetter.GetBlock], [BlockGetter.GetBlocks] and NewSession with the same BlockService will be redirected to this same session instead. Sessions are lazily setup, this is cheap. It wont make a new session if one exists already in the context.

func EmbedSessionInContext added in v0.18.0

func EmbedSessionInContext(ctx context.Context, ses *Session) context.Context

EmbedSessionInContext is like ContextWithSession but it allows to embed an existing session.

Types

type BlockGetter

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

type BlockService interface {
	io.Closer
	BlockGetter

	// 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(ctx context.Context, o blocks.Block) error

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

	// DeleteBlock deletes the given block from the blockservice.
	DeleteBlock(ctx context.Context, 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

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

New creates a BlockService with given datastore instance.

type BoundedBlockService added in v0.12.0

type BoundedBlockService interface {
	BlockService

	Allowlist() verifcid.Allowlist
}

BoundedBlockService is a Blockservice bounded via strict multihash Allowlist.

type Option added in v0.12.0

type Option func(*blockService)

func WithAllowlist added in v0.12.0

func WithAllowlist(allowlist verifcid.Allowlist) Option

WithAllowlist sets a custom verifcid.Allowlist which will be used

func WriteThrough added in v0.12.0

func WriteThrough() Option

WriteThrough disable cache checks for writes and make them go straight to the blockstore.

type Session

type Session struct {
	// contains filtered or unexported fields
}

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

func NewSession

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. Sessions are lazily setup, this is cheap.

func (*Session) GetBlock

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

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

GetBlocks gets blocks in the context of a request session

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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