pin

package
v0.4.14-rc2 Latest Latest
Warning

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

Go to latest
Published: Mar 13, 2018 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package pin implements structures and methods to keep track of which objects a user wants to keep stored locally.

Index

Constants

This section is empty.

Variables

View Source
var ErrNotPinned = fmt.Errorf("not pinned")

ErrNotPinned is returned when trying to unpin items which are not pinned.

Functions

func ModeToString

func ModeToString(mode Mode) (string, bool)

ModeToString returns a human-readable name for the Mode.

Types

type Mode

type Mode int

Mode allows to specify different types of pin (recursive, direct etc.). See the Pin Modes constants for a full list.

const (
	// Recursive pins pin the target cids along with any reachable children.
	Recursive Mode = iota

	// Direct pins pin just the target cid.
	Direct

	// Indirect pins are cids who have some ancestor pinned recursively.
	Indirect

	// Internal pins are cids used to keep the internal state of the pinner.
	Internal

	// NotPinned
	NotPinned

	// Any refers to any pinned cid
	Any
)

Pin Modes

func StringToMode

func StringToMode(s string) (Mode, bool)

StringToMode parses the result of ModeToString() back to a Mode. It returns a boolean which is set to false if the mode is unknown.

type Pinned added in v0.4.5

type Pinned struct {
	Key  *cid.Cid
	Mode Mode
	Via  *cid.Cid
}

Pinned represents CID which has been pinned with a pinning strategy. The Via field allows to identify the pinning parent of this CID, in the case that the item is not pinned directly (but rather pinned recursively by some ascendant).

func (Pinned) Pinned added in v0.4.5

func (p Pinned) Pinned() bool

Pinned returns whether or not the given cid is pinned

func (Pinned) String added in v0.4.5

func (p Pinned) String() string

String Returns pin status as string

type Pinner

type Pinner interface {
	// IsPinned returns whether or not the given cid is pinned
	// and an explanation of why its pinned
	IsPinned(*cid.Cid) (string, bool, error)

	// IsPinnedWithType returns whether or not the given cid is pinned with the
	// given pin type, as well as returning the type of pin its pinned with.
	IsPinnedWithType(*cid.Cid, Mode) (string, bool, error)

	// Pin the given node, optionally recursively.
	Pin(ctx context.Context, node ipld.Node, recursive bool) error

	// Unpin the given cid. If recursive is true, removes either a recursive or
	// a direct pin. If recursive is false, only removes a direct pin.
	Unpin(ctx context.Context, cid *cid.Cid, recursive bool) error

	// Update updates a recursive pin from one cid to another
	// this is more efficient than simply pinning the new one and unpinning the
	// old one
	Update(ctx context.Context, from, to *cid.Cid, unpin bool) error

	// Check if a set of keys are pinned, more efficient than
	// calling IsPinned for each key
	CheckIfPinned(cids ...*cid.Cid) ([]Pinned, error)

	// PinWithMode is for manually editing the pin structure. Use with
	// care! If used improperly, garbage collection may not be
	// successful.
	PinWithMode(*cid.Cid, Mode)

	// RemovePinWithMode is for manually editing the pin structure.
	// Use with care! If used improperly, garbage collection may not
	// be successful.
	RemovePinWithMode(*cid.Cid, Mode)

	// Flush writes the pin state to the backing datastore
	Flush() error

	// DirectKeys returns all directly pinned cids
	DirectKeys() []*cid.Cid

	// DirectKeys returns all recursively pinned cids
	RecursiveKeys() []*cid.Cid

	// InternalPins returns all cids kept pinned for the internal state of the
	// pinner
	InternalPins() []*cid.Cid
}

A Pinner provides the necessary methods to keep track of Nodes which are to be kept locally, according to a pin mode. In practice, a Pinner is in in charge of keeping the list of items from the local storage that should not be garbaged-collected.

func LoadPinner

func LoadPinner(d ds.Datastore, dserv, internal ipld.DAGService) (Pinner, error)

LoadPinner loads a pinner and its keysets from the given datastore

func NewPinner

func NewPinner(dstore ds.Datastore, serv, internal ipld.DAGService) Pinner

NewPinner creates a new pinner using the given datastore as a backend

Directories

Path Synopsis
Package gc provides garbage collection for go-ipfs.
Package gc provides garbage collection for go-ipfs.
internal
pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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