go-ipfs-blockstore: github.com/ipfs/go-ipfs-blockstore Index | Files

package blockstore

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

Package blockstore implements a thin wrapper over a datastore, giving a clean interface for Getting and Putting block objects.


Package Files

arc_cache.go blockstore.go bloom_cache.go caching.go idstore.go


var BlockPrefix = ds.NewKey("blocks")

BlockPrefix namespaces blockstore datastores

var ErrHashMismatch = errors.New("block in storage has different hash than requested")

ErrHashMismatch is an error returned when the hash of a block is different than expected.

var ErrNotFound = errors.New("blockstore: block not found")

ErrNotFound is an error returned when a block is not found.

type Blockstore Uses

type Blockstore interface {
    DeleteBlock(cid.Cid) error
    Has(cid.Cid) (bool, error)
    Get(cid.Cid) (blocks.Block, error)

    // GetSize returns the CIDs mapped BlockSize
    GetSize(cid.Cid) (int, error)

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

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

    // AllKeysChan returns a channel from which
    // the CIDs in the Blockstore can be read. It should respect
    // the given context, closing the channel if it becomes Done.
    AllKeysChan(ctx context.Context) (<-chan cid.Cid, error)

    // HashOnRead specifies if every read block should be
    // rehashed to make sure it matches its CID.
    HashOnRead(enabled bool)

Blockstore wraps a Datastore block-centered methods and provides a layer of abstraction which allows to add different caching strategies.

func CachedBlockstore Uses

func CachedBlockstore(
    ctx context.Context,
    bs Blockstore,
    opts CacheOpts) (cbs Blockstore, err error)

CachedBlockstore returns a blockstore wrapped in an ARCCache and then in a bloom filter cache, if the options indicate it.

func NewBlockstore Uses

func NewBlockstore(d ds.Batching) Blockstore

NewBlockstore returns a default Blockstore implementation using the provided datastore.Batching backend.

func NewIdStore Uses

func NewIdStore(bs Blockstore) Blockstore

type CacheOpts Uses

type CacheOpts struct {
    HasBloomFilterSize   int // 1 byte
    HasBloomFilterHashes int // No size, 7 is usually best, consult bloom papers
    HasARCCacheSize      int // 32 bytes

CacheOpts wraps options for CachedBlockStore(). Next to each option is it aproximate memory usage per unit

func DefaultCacheOpts Uses

func DefaultCacheOpts() CacheOpts

DefaultCacheOpts returns a CacheOpts initialized with default values.

type GCBlockstore Uses

type GCBlockstore interface {

GCBlockstore is a blockstore that can safely run garbage-collection operations.

func NewGCBlockstore Uses

func NewGCBlockstore(bs Blockstore, gcl GCLocker) GCBlockstore

NewGCBlockstore returns a default implementation of GCBlockstore using the given Blockstore and GCLocker.

type GCLocker Uses

type GCLocker interface {
    // GCLock locks the blockstore for garbage collection. No operations
    // that expect to finish with a pin should ocurr simultaneously.
    // Reading during GC is safe, and requires no lock.
    GCLock() Unlocker

    // PinLock locks the blockstore for sequences of puts expected to finish
    // with a pin (before GC). Multiple put->pin sequences can write through
    // at the same time, but no GC should happen simulatenously.
    // Reading during Pinning is safe, and requires no lock.
    PinLock() Unlocker

    // GcRequested returns true if GCLock has been called and is waiting to
    // take the lock
    GCRequested() bool

GCLocker abstract functionality to lock a blockstore when performing garbage-collection operations.

func NewGCLocker Uses

func NewGCLocker() GCLocker

NewGCLocker returns a default implementation of GCLocker using standard [RW] mutexes.

type Unlocker Uses

type Unlocker interface {

Unlocker represents an object which can Unlock something.

Package blockstore imports 18 packages (graph) and is imported by 177 packages. Updated 2020-07-26. Refresh now. Tools for package owners.