Documentation ¶
Overview ¶
Package merkledag implements the DMS3 Merkle DAG data structures.
Index ¶
- Variables
- func DecodeProtobufBlock(b blocks.Block) (ld.Node, error)
- func DecodeRawBlock(block blocks.Block) (ld.Node, error)
- func FetchGraph(ctx context.Context, root cid.Cid, serv ld.DAGService) error
- func FetchGraphWithDepthLimit(ctx context.Context, root cid.Cid, depthLim int, serv ld.DAGService) error
- func NewDAGService(bs bserv.BlockService) *dagService
- func NewReadOnlyDagService(ng ld.NodeGetter) ld.DAGService
- func NewSession(ctx context.Context, g ld.NodeGetter) ld.NodeGetter
- func PrefixForCidVersion(version int) (cid.Prefix, error)
- func V0CidPrefix() cid.Prefix
- func V1CidPrefix() cid.Prefix
- func Walk(ctx context.Context, getLinks GetLinks, c cid.Cid, visit func(cid.Cid) bool, ...) error
- func WalkDepth(ctx context.Context, getLinks GetLinks, c cid.Cid, ...) error
- type ComboService
- func (cs *ComboService) Add(ctx context.Context, nd ld.Node) error
- func (cs *ComboService) AddMany(ctx context.Context, nds []ld.Node) error
- func (cs *ComboService) Get(ctx context.Context, c cid.Cid) (ld.Node, error)
- func (cs *ComboService) GetMany(ctx context.Context, cids []cid.Cid) <-chan *ld.NodeOption
- func (cs *ComboService) Remove(ctx context.Context, c cid.Cid) error
- func (cs *ComboService) RemoveMany(ctx context.Context, cids []cid.Cid) error
- type ErrorService
- func (cs *ErrorService) Add(ctx context.Context, nd ld.Node) error
- func (cs *ErrorService) AddMany(ctx context.Context, nds []ld.Node) error
- func (cs *ErrorService) Get(ctx context.Context, c cid.Cid) (ld.Node, error)
- func (cs *ErrorService) GetMany(ctx context.Context, cids []cid.Cid) <-chan *ld.NodeOption
- func (cs *ErrorService) Remove(ctx context.Context, c cid.Cid) error
- func (cs *ErrorService) RemoveMany(ctx context.Context, cids []cid.Cid) error
- type GetLinks
- type LinkSlice
- type ProgressTracker
- type ProtoNode
- func (n *ProtoNode) AddNodeLink(name string, that ld.Node) error
- func (n *ProtoNode) AddRawLink(name string, l *ld.Link) error
- func (n *ProtoNode) Cid() cid.Cid
- func (n *ProtoNode) CidBuilder() cid.Builder
- func (n *ProtoNode) Copy() ld.Node
- func (n *ProtoNode) Data() []byte
- func (n *ProtoNode) EncodeProtobuf(force bool) ([]byte, error)
- func (n *ProtoNode) GetLinkedNode(ctx context.Context, ds ld.DAGService, name string) (ld.Node, error)
- func (n *ProtoNode) GetLinkedProtoNode(ctx context.Context, ds ld.DAGService, name string) (*ProtoNode, error)
- func (n *ProtoNode) GetNodeLink(name string) (*ld.Link, error)
- func (n *ProtoNode) GetPBNode() *pb.PBNode
- func (n *ProtoNode) Links() []*ld.Link
- func (n *ProtoNode) Loggable() map[string]interface{}
- func (n *ProtoNode) Marshal() ([]byte, error)
- func (n *ProtoNode) MarshalJSON() ([]byte, error)
- func (n *ProtoNode) Multihash() mh.Multihash
- func (n *ProtoNode) RawData() []byte
- func (n *ProtoNode) RemoveNodeLink(name string) error
- func (n *ProtoNode) Resolve(path []string) (interface{}, []string, error)
- func (n *ProtoNode) ResolveLink(path []string) (*ld.Link, []string, error)
- func (n *ProtoNode) SetCidBuilder(builder cid.Builder)
- func (n *ProtoNode) SetData(d []byte)
- func (n *ProtoNode) SetLinks(links []*ld.Link)
- func (n *ProtoNode) Size() (uint64, error)
- func (n *ProtoNode) Stat() (*ld.NodeStat, error)
- func (n *ProtoNode) String() string
- func (n *ProtoNode) Tree(p string, depth int) []string
- func (n *ProtoNode) UnmarshalJSON(b []byte) error
- func (n *ProtoNode) UpdateNodeLink(name string, that *ProtoNode) (*ProtoNode, error)
- type RawNode
- func (rn *RawNode) Copy() ld.Node
- func (rn *RawNode) Links() []*ld.Link
- func (rn *RawNode) MarshalJSON() ([]byte, error)
- func (rn *RawNode) Resolve(path []string) (interface{}, []string, error)
- func (rn *RawNode) ResolveLink(path []string) (*ld.Link, []string, error)
- func (rn *RawNode) Size() (uint64, error)
- func (rn *RawNode) Stat() (*ld.NodeStat, error)
- func (rn *RawNode) Tree(p string, depth int) []string
- type SessionMaker
- type WalkOption
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotProtobuf = fmt.Errorf("expected protobuf dag node") ErrLinkNotFound = fmt.Errorf("no link by that name") )
Common errors
var ErrReadOnly = fmt.Errorf("cannot write to readonly DAGService")
ErrReadOnly is used when a read-only datastructure is written to.
Functions ¶
func DecodeProtobufBlock ¶
DecodeProtobufBlock is a block decoder for protobuf LD nodes conforming to node.DecodeBlockFunc
func DecodeRawBlock ¶
DecodeRawBlock is a block decoder for raw LD nodes conforming to `node.DecodeBlockFunc`.
func FetchGraph ¶
FetchGraph fetches all nodes that are children of the given node
func FetchGraphWithDepthLimit ¶
func FetchGraphWithDepthLimit(ctx context.Context, root cid.Cid, depthLim int, serv ld.DAGService) error
FetchGraphWithDepthLimit fetches all nodes that are children to the given node down to the given depth. maxDepth=0 means "only fetch root", maxDepth=1 means "fetch root and its direct children" and so on... maxDepth=-1 means unlimited.
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 ld.LinkGetter.
func NewReadOnlyDagService ¶
func NewReadOnlyDagService(ng ld.NodeGetter) ld.DAGService
NewReadOnlyDagService takes a NodeGetter, and returns a full DAGService implementation that returns ErrReadOnly when its 'write' methods are invoked.
func NewSession ¶
func NewSession(ctx context.Context, g ld.NodeGetter) ld.NodeGetter
NewSession returns a session backed NodeGetter if the given NodeGetter implements SessionMaker.
func PrefixForCidVersion ¶
PrefixForCidVersion returns the Protobuf prefix for a given CID version
func V1CidPrefix ¶
V1CidPrefix returns a prefix for CIDv1 with the default settings
func Walk ¶
func Walk(ctx context.Context, getLinks GetLinks, c cid.Cid, visit func(cid.Cid) bool, options ...WalkOption) error
WalkGraph will walk the dag in order (depth first) starting at the given root.
func WalkDepth ¶
func WalkDepth(ctx context.Context, getLinks GetLinks, c cid.Cid, visit func(cid.Cid, int) bool, options ...WalkOption) error
WalkDepth walks the dag starting at the given root and passes the current depth to a given visit function. The visit function can be used to limit DAG exploration.
Types ¶
type ComboService ¶
type ComboService struct { Read ld.NodeGetter Write ld.DAGService }
ComboService implements ld.DAGService, using 'Read' for all fetch methods, and 'Write' for all methods that add new objects.
func (*ComboService) GetMany ¶
func (cs *ComboService) GetMany(ctx context.Context, cids []cid.Cid) <-chan *ld.NodeOption
GetMany fetches nodes using the Read DAGService.
func (*ComboService) RemoveMany ¶
RemoveMany deletes nodes using the Write DAGService.
type ErrorService ¶
type ErrorService struct {
Err error
}
ErrorService implements ld.DAGService, returning 'Err' for every call.
func (*ErrorService) GetMany ¶
func (cs *ErrorService) GetMany(ctx context.Context, cids []cid.Cid) <-chan *ld.NodeOption
GetMany many returns the cs.Err.
func (*ErrorService) RemoveMany ¶
RemoveMany returns the cs.Err.
type GetLinks ¶
GetLinks is the type of function passed to the EnumerateChildren function(s) for getting the children of an LD node.
func GetLinksDirect ¶
func GetLinksDirect(serv ld.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 ¶
func GetLinksWithDAG(ng ld.NodeGetter) GetLinks
GetLinksWithDAG returns a GetLinks function that tries to use the given NodeGetter as a LinkGetter to get the children of a given LD 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 ProgressTracker ¶
type ProgressTracker struct { Total int // contains filtered or unexported fields }
ProgressTracker is used to show progress when fetching nodes.
func (*ProgressTracker) DeriveContext ¶
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 ¶
func (p *ProgressTracker) Increment()
Increment adds one to the total progress.
func (*ProgressTracker) Value ¶
func (p *ProgressTracker) Value() int
Value returns the current progress.
type ProtoNode ¶
type ProtoNode struct {
// contains filtered or unexported fields
}
ProtoNode represents a node in the DMS3 Merkle DAG. nodes have opaque data and a set of navigable links.
func DecodeProtobuf ¶
DecodeProtobuf decodes raw data and returns a new Node instance.
func NodeWithData ¶
NodeWithData builds a new Protonode with the given data.
func (*ProtoNode) AddNodeLink ¶
AddNodeLink adds a link to another node.
func (*ProtoNode) AddRawLink ¶
AddRawLink adds a copy of a link to this node
func (*ProtoNode) Cid ¶
Cid returns the node's Cid, calculated according to its prefix and raw data contents.
func (*ProtoNode) CidBuilder ¶
CidBuilder returns the CID Builder for this ProtoNode, it is never nil
func (*ProtoNode) Copy ¶
Copy returns a copy of the node. NOTE: Does not make copies of Node objects in the links.
func (*ProtoNode) EncodeProtobuf ¶
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 ¶
func (n *ProtoNode) GetLinkedNode(ctx context.Context, ds ld.DAGService, name string) (ld.Node, error)
GetLinkedNode returns a copy of the LD Node with the given name.
func (*ProtoNode) GetLinkedProtoNode ¶
func (n *ProtoNode) GetLinkedProtoNode(ctx context.Context, ds ld.DAGService, name string) (*ProtoNode, error)
GetLinkedProtoNode returns a copy of the ProtoNode with the given name.
func (*ProtoNode) GetNodeLink ¶
GetNodeLink returns a copy of the link with the given name.
func (*ProtoNode) GetPBNode ¶
GetPBNode converts *ProtoNode into it's protocol buffer variant. If you plan on mutating the data of the original node, it is recommended that you call ProtoNode.Copy() before calling ProtoNode.GetPBNode()
func (*ProtoNode) Marshal ¶
Marshal encodes a *Node instance into a new byte slice. The conversion uses an intermediate PBNode.
func (*ProtoNode) MarshalJSON ¶
MarshalJSON returns a JSON representation of the node.
func (*ProtoNode) RemoveNodeLink ¶
RemoveNodeLink removes a link on this node by the given name.
func (*ProtoNode) ResolveLink ¶
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) SetCidBuilder ¶
SetCidBuilder sets the CID builder if it is non nil, if nil then it is reset to the default value
func (*ProtoNode) Size ¶
Size returns the total size of the data addressed by node, including the total sizes of references.
func (*ProtoNode) Tree ¶
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 ¶
UnmarshalJSON reads the node fields from a JSON-encoded byte slice.
type RawNode ¶
RawNode represents a node which only contains data.
func NewRawNode ¶
NewRawNode creates a RawNode using the default sha2-256 hash function.
func NewRawNodeWPrefix ¶
NewRawNodeWPrefix creates a RawNode using the provided cid builder
func (*RawNode) MarshalJSON ¶
MarshalJSON is required for our "dms3 dag" commands.
func (*RawNode) ResolveLink ¶
ResolveLink returns an error.
type SessionMaker ¶
type SessionMaker interface {
Session(context.Context) ld.NodeGetter
}
SessionMaker is an object that can generate a new fetching session.
type WalkOption ¶
type WalkOption func(*walkOptions)
WalkOption is a setter for walkOptions
func Concurrency ¶
func Concurrency(worker int) WalkOption
Concurrency is a WalkOption indicating that node fetching should be done in parallel, with a specific concurrency factor. NOTE: When using that option, the walk order is *not* guarantee. NOTE: It *does not* make multiple concurrent calls to the passed `visit` function.
func Concurrent ¶
func Concurrent() WalkOption
Concurrent is a WalkOption indicating that node fetching should be done in parallel, with the default concurrency factor. NOTE: When using that option, the walk order is *not* guarantee. NOTE: It *does not* make multiple concurrent calls to the passed `visit` function.
func IgnoreErrors ¶
func IgnoreErrors() WalkOption
IgnoreErrors is a WalkOption indicating that the walk should attempt to continue even when an error occur.
func IgnoreMissing ¶
func IgnoreMissing() WalkOption
IgnoreMissing is a WalkOption indicating that the walk should continue when a node is missing.
func OnError ¶
func OnError(handler func(c cid.Cid, err error) error) WalkOption
OnError is a WalkOption adding a custom error handler. If this handler return a nil error, the walk will continue.
func OnMissing ¶
func OnMissing(callback func(c cid.Cid)) WalkOption
OnMissing is a WalkOption adding a callback that will be triggered on a missing node.
func SkipRoot ¶
func SkipRoot() WalkOption
SkipRoot is a WalkOption indicating that the root node should skipped