merkledag

package
v0.4.15 Latest Latest
Warning

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

Go to latest
Published: May 10, 2018 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package merkledag implements the IPFS Merkle DAG data structures.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotProtobuf  = fmt.Errorf("expected protobuf dag node")
	ErrLinkNotFound = fmt.Errorf("no link by that name")
)

Common errors

View Source
var ErrReadOnly = fmt.Errorf("cannot write to readonly DAGService")

ErrReadOnly is used when a read-only datastructure is written to.

View Source
var FetchGraphConcurrency = 8

FetchGraphConcurrency is total number of concurrent fetches that 'fetchNodes' will start at a time

Functions

func DecodeProtobufBlock added in v0.4.11

func DecodeProtobufBlock(b blocks.Block) (ipld.Node, error)

DecodeProtobufBlock is a block decoder for protobuf IPLD nodes conforming to node.DecodeBlockFunc

func DecodeRawBlock added in v0.4.11

func DecodeRawBlock(block blocks.Block) (ipld.Node, error)

DecodeRawBlock is a block decoder for raw IPLD nodes conforming to `node.DecodeBlockFunc`.

func EnumerateChildren added in v0.4.0

func EnumerateChildren(ctx context.Context, getLinks GetLinks, root *cid.Cid, visit func(*cid.Cid) bool) error

EnumerateChildren will walk the dag below the given root node and add all unseen children to the passed in set. TODO: parallelize to avoid disk latency perf hits?

func EnumerateChildrenAsync added in v0.4.0

func EnumerateChildrenAsync(ctx context.Context, getLinks GetLinks, c *cid.Cid, visit func(*cid.Cid) bool) error

EnumerateChildrenAsync is equivalent to EnumerateChildren *except* that it fetches children in parallel.

NOTE: It *does not* make multiple concurrent calls to the passed `visit` function.

func FetchGraph

func FetchGraph(ctx context.Context, root *cid.Cid, serv ipld.DAGService) error

FetchGraph fetches all nodes that are children of the given node

func NewDAGService

func NewDAGService(bs bserv.BlockService) *dagService

NewDAGService constructs a new DAGService (using the default implementation). Note that the default implementation is also an ipld.LinkGetter.

func NewReadOnlyDagService added in v0.4.14

func NewReadOnlyDagService(ng ipld.NodeGetter) ipld.DAGService

NewReadOnlyDagService takes a NodeGetter, and returns a full DAGService implementation that returns ErrReadOnly when its 'write' methods are invoked.

func NewSession added in v0.4.14

func NewSession(ctx context.Context, g ipld.NodeGetter) ipld.NodeGetter

NewSession returns a session backed NodeGetter if the given NodeGetter implements SessionMaker.

func PrefixForCidVersion added in v0.4.9

func PrefixForCidVersion(version int) (cid.Prefix, error)

PrefixForCidVersion returns the Protobuf prefix for a given CID version

func V0CidPrefix added in v0.4.12

func V0CidPrefix() cid.Prefix

V0CidPrefix returns a prefix for CIDv0

func V1CidPrefix added in v0.4.12

func V1CidPrefix() cid.Prefix

V1CidPrefix returns a prefix for CIDv1 with the default settings

Types

type ComboService added in v0.4.14

type ComboService struct {
	Read  ipld.NodeGetter
	Write ipld.DAGService
}

ComboService implements ipld.DAGService, using 'Read' for all fetch methods, and 'Write' for all methods that add new objects.

func (*ComboService) Add added in v0.4.14

func (cs *ComboService) Add(ctx context.Context, nd ipld.Node) error

Add writes a new node using the Write DAGService.

func (*ComboService) AddMany added in v0.4.14

func (cs *ComboService) AddMany(ctx context.Context, nds []ipld.Node) error

AddMany adds nodes using the Write DAGService.

func (*ComboService) Get added in v0.4.14

func (cs *ComboService) Get(ctx context.Context, c *cid.Cid) (ipld.Node, error)

Get fetches a node using the Read DAGService.

func (*ComboService) GetMany added in v0.4.14

func (cs *ComboService) GetMany(ctx context.Context, cids []*cid.Cid) <-chan *ipld.NodeOption

GetMany fetches nodes using the Read DAGService.

func (*ComboService) Remove added in v0.4.14

func (cs *ComboService) Remove(ctx context.Context, c *cid.Cid) error

Remove deletes a node using the Write DAGService.

func (*ComboService) RemoveMany added in v0.4.14

func (cs *ComboService) RemoveMany(ctx context.Context, cids []*cid.Cid) error

RemoveMany deletes nodes using the Write DAGService.

type ErrorService added in v0.4.14

type ErrorService struct {
	Err error
}

ErrorService implements ipld.DAGService, returning 'Err' for every call.

func (*ErrorService) Add added in v0.4.14

func (cs *ErrorService) Add(ctx context.Context, nd ipld.Node) error

Add returns the cs.Err.

func (*ErrorService) AddMany added in v0.4.14

func (cs *ErrorService) AddMany(ctx context.Context, nds []ipld.Node) error

AddMany returns the cs.Err.

func (*ErrorService) Get added in v0.4.14

func (cs *ErrorService) Get(ctx context.Context, c *cid.Cid) (ipld.Node, error)

Get returns the cs.Err.

func (*ErrorService) GetMany added in v0.4.14

func (cs *ErrorService) GetMany(ctx context.Context, cids []*cid.Cid) <-chan *ipld.NodeOption

GetMany many returns the cs.Err.

func (*ErrorService) Remove added in v0.4.14

func (cs *ErrorService) Remove(ctx context.Context, c *cid.Cid) error

Remove returns the cs.Err.

func (*ErrorService) RemoveMany added in v0.4.14

func (cs *ErrorService) RemoveMany(ctx context.Context, cids []*cid.Cid) error

RemoveMany returns the cs.Err.

type GetLinks func(context.Context, *cid.Cid) ([]*ipld.Link, error)

GetLinks is the type of function passed to the EnumerateChildren function(s) for getting the children of an IPLD node.

func GetLinksDirect added in v0.4.7

func GetLinksDirect(serv ipld.NodeGetter) GetLinks

GetLinksDirect creates a function to get the links for a node, from the node, bypassing the LinkService. If the node does not exist locally (and can not be retrieved) an error will be returned.

func GetLinksWithDAG added in v0.4.14

func GetLinksWithDAG(ng ipld.NodeGetter) GetLinks

GetLinksWithDAG returns a GetLinks function that tries to use the given NodeGetter as a LinkGetter to get the children of a given IPLD node. This may allow us to traverse the DAG without actually loading and parsing the node in question (if we already have the links cached).

type LinkSlice

type LinkSlice []*ipld.Link

LinkSlice is a slice of ipld.Links

func (LinkSlice) Len

func (ls LinkSlice) Len() int

func (LinkSlice) Less

func (ls LinkSlice) Less(a, b int) bool

func (LinkSlice) Swap

func (ls LinkSlice) Swap(a, b int)

type ProgressTracker added in v0.4.7

type ProgressTracker struct {
	Total int
	// contains filtered or unexported fields
}

ProgressTracker is used to show progress when fetching nodes.

func (*ProgressTracker) DeriveContext added in v0.4.7

func (p *ProgressTracker) DeriveContext(ctx context.Context) context.Context

DeriveContext returns a new context with value "progress" derived from the given one.

func (*ProgressTracker) Increment added in v0.4.7

func (p *ProgressTracker) Increment()

Increment adds one to the total progress.

func (*ProgressTracker) Value added in v0.4.7

func (p *ProgressTracker) Value() int

Value returns the current progress.

type ProtoNode added in v0.4.5

type ProtoNode struct {

	// Prefix specifies cid version and hashing function
	Prefix cid.Prefix
	// contains filtered or unexported fields
}

ProtoNode represents a node in the IPFS Merkle DAG. nodes have opaque data and a set of navigable links.

func DecodeProtobuf added in v0.4.0

func DecodeProtobuf(encoded []byte) (*ProtoNode, error)

DecodeProtobuf decodes raw data and returns a new Node instance.

func NodeWithData added in v0.4.3

func NodeWithData(d []byte) *ProtoNode

NodeWithData builds a new Protonode with the given data.

func (n *ProtoNode) AddNodeLink(name string, that ipld.Node) error

AddNodeLink adds a link to another node.

func (n *ProtoNode) AddRawLink(name string, l *ipld.Link) error

AddRawLink adds a copy of a link to this node

func (*ProtoNode) Cid added in v0.4.5

func (n *ProtoNode) Cid() *cid.Cid

Cid returns the node's Cid, calculated according to its prefix and raw data contents.

func (*ProtoNode) Copy added in v0.4.5

func (n *ProtoNode) Copy() ipld.Node

Copy returns a copy of the node. NOTE: Does not make copies of Node objects in the links.

func (*ProtoNode) Data added in v0.4.5

func (n *ProtoNode) Data() []byte

Data returns the data stored by this node.

func (*ProtoNode) EncodeProtobuf added in v0.4.5

func (n *ProtoNode) EncodeProtobuf(force bool) ([]byte, error)

EncodeProtobuf returns the encoded raw data version of a Node instance. It may use a cached encoded version, unless the force flag is given.

func (*ProtoNode) GetLinkedNode added in v0.4.5

func (n *ProtoNode) GetLinkedNode(ctx context.Context, ds ipld.DAGService, name string) (ipld.Node, error)

GetLinkedNode returns a copy of the IPLD Node with the given name.

func (*ProtoNode) GetLinkedProtoNode added in v0.4.5

func (n *ProtoNode) GetLinkedProtoNode(ctx context.Context, ds ipld.DAGService, name string) (*ProtoNode, error)

GetLinkedProtoNode returns a copy of the ProtoNode with the given name.

func (n *ProtoNode) GetNodeLink(name string) (*ipld.Link, error)

GetNodeLink returns a copy of the link with the given name.

func (n *ProtoNode) Links() []*ipld.Link

Links returns the node links.

func (*ProtoNode) Loggable added in v0.4.5

func (n *ProtoNode) Loggable() map[string]interface{}

Loggable implements the ipfs/go-log.Loggable interface.

func (*ProtoNode) Marshal added in v0.4.5

func (n *ProtoNode) Marshal() ([]byte, error)

Marshal encodes a *Node instance into a new byte slice. The conversion uses an intermediate PBNode.

func (*ProtoNode) MarshalJSON added in v0.4.5

func (n *ProtoNode) MarshalJSON() ([]byte, error)

MarshalJSON returns a JSON representation of the node.

func (*ProtoNode) Multihash added in v0.4.5

func (n *ProtoNode) Multihash() mh.Multihash

Multihash hashes the encoded data of this node.

func (*ProtoNode) RawData added in v0.4.5

func (n *ProtoNode) RawData() []byte

RawData returns the protobuf-encoded version of the node.

func (n *ProtoNode) RemoveNodeLink(name string) error

RemoveNodeLink removes a link on this node by the given name.

func (*ProtoNode) Resolve added in v0.4.5

func (n *ProtoNode) Resolve(path []string) (interface{}, []string, error)

Resolve is an alias for ResolveLink.

func (n *ProtoNode) ResolveLink(path []string) (*ipld.Link, []string, error)

ResolveLink consumes the first element of the path and obtains the link corresponding to it from the node. It returns the link and the path without the consumed element.

func (*ProtoNode) SetData added in v0.4.5

func (n *ProtoNode) SetData(d []byte)

SetData stores data in this nodes.

func (n *ProtoNode) SetLinks(links []*ipld.Link)

SetLinks replaces the node links with the given ones.

func (*ProtoNode) SetPrefix added in v0.4.9

func (n *ProtoNode) SetPrefix(prefix *cid.Prefix)

SetPrefix sets the CID prefix if it is non nil, if prefix is nil then it resets it the default value

func (*ProtoNode) Size added in v0.4.5

func (n *ProtoNode) Size() (uint64, error)

Size returns the total size of the data addressed by node, including the total sizes of references.

func (*ProtoNode) Stat added in v0.4.5

func (n *ProtoNode) Stat() (*ipld.NodeStat, error)

Stat returns statistics on the node.

func (*ProtoNode) String added in v0.4.5

func (n *ProtoNode) String() string

String prints the node's Cid.

func (*ProtoNode) Tree added in v0.4.5

func (n *ProtoNode) Tree(p string, depth int) []string

Tree returns the link names of the ProtoNode. ProtoNodes are only ever one path deep, so anything different than an empty string for p results in nothing. The depth parameter is ignored.

func (*ProtoNode) UnmarshalJSON added in v0.4.5

func (n *ProtoNode) UnmarshalJSON(b []byte) error

UnmarshalJSON reads the node fields from a JSON-encoded byte slice.

func (n *ProtoNode) UpdateNodeLink(name string, that *ProtoNode) (*ProtoNode, error)

UpdateNodeLink return a copy of the node with the link name set to point to that. If a link of the same name existed, it is removed.

type RawNode added in v0.4.5

type RawNode struct {
	blocks.Block
}

RawNode represents a node which only contains data.

func NewRawNode added in v0.4.5

func NewRawNode(data []byte) *RawNode

NewRawNode creates a RawNode using the default sha2-256 hash function.

func NewRawNodeWPrefix added in v0.4.10

func NewRawNodeWPrefix(data []byte, prefix cid.Prefix) (*RawNode, error)

NewRawNodeWPrefix creates a RawNode with the hash function specified in prefix.

func (*RawNode) Copy added in v0.4.5

func (rn *RawNode) Copy() ipld.Node

Copy performs a deep copy of this node and returns it as an ipld.Node

func (rn *RawNode) Links() []*ipld.Link

Links returns nil.

func (*RawNode) Resolve added in v0.4.5

func (rn *RawNode) Resolve(path []string) (interface{}, []string, error)

Resolve returns an error.

func (rn *RawNode) ResolveLink(path []string) (*ipld.Link, []string, error)

ResolveLink returns an error.

func (*RawNode) Size added in v0.4.5

func (rn *RawNode) Size() (uint64, error)

Size returns the size of this node

func (*RawNode) Stat added in v0.4.5

func (rn *RawNode) Stat() (*ipld.NodeStat, error)

Stat returns some Stats about this node.

func (*RawNode) Tree added in v0.4.5

func (rn *RawNode) Tree(p string, depth int) []string

Tree returns nil.

type SessionMaker added in v0.4.14

type SessionMaker interface {
	Session(context.Context) ipld.NodeGetter
}

SessionMaker is an object that can generate a new fetching session.

Directories

Path Synopsis
Package merkledag_pb is a generated protocol buffer package.
Package merkledag_pb is a generated protocol buffer package.
Package traverse provides merkledag traversal functions
Package traverse provides merkledag traversal functions

Jump to

Keyboard shortcuts

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