Documentation
¶
Overview ¶
package merkledag implements the ipfs Merkle DAG datastructures.
Index ¶
- Variables
- func EnumerateChildren(ctx context.Context, ds DAGService, root *Node, set key.KeySet, ...) error
- func EnumerateChildrenAsync(ctx context.Context, ds DAGService, root *Node, set key.KeySet) error
- func FetchGraph(ctx context.Context, root *Node, serv DAGService) error
- func FindLinks(links []key.Key, k key.Key, start int) []int
- type Batch
- type DAGService
- type Link
- type LinkSlice
- type Node
- func (n *Node) AddNodeLink(name string, that *Node) error
- func (n *Node) AddNodeLinkClean(name string, that *Node) error
- func (n *Node) AddRawLink(name string, l *Link) error
- func (n *Node) Copy() *Node
- func (n *Node) Data() []byte
- func (n *Node) EncodeProtobuf(force bool) ([]byte, error)
- func (n *Node) GetLinkedNode(ctx context.Context, ds DAGService, name string) (*Node, error)
- func (n *Node) GetNodeLink(name string) (*Link, error)
- func (n *Node) Key() (key.Key, error)
- func (n *Node) Marshal() ([]byte, error)
- func (n *Node) Multihash() (mh.Multihash, error)
- func (n *Node) RemoveNodeLink(name string) error
- func (n *Node) SetData(d []byte)
- func (n *Node) Size() (uint64, error)
- func (n *Node) Stat() (*NodeStat, error)
- func (n *Node) UpdateNodeLink(name string, that *Node) (*Node, error)
- type NodeGetter
- type NodeOption
- type NodeStat
Constants ¶
This section is empty.
Variables ¶
var ErrLinkNotFound = fmt.Errorf("no link by that name")
var ErrNotFound = fmt.Errorf("merkledag: not found")
Functions ¶
func EnumerateChildren ¶ added in v0.4.0
func EnumerateChildren(ctx context.Context, ds DAGService, root *Node, set key.KeySet, bestEffort 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, ds DAGService, root *Node, set key.KeySet) error
func FetchGraph ¶
func FetchGraph(ctx context.Context, root *Node, serv DAGService) error
FetchGraph fetches all nodes that are children of the given node
Types ¶
type Batch ¶ added in v0.3.6
type Batch struct {
MaxSize int
// contains filtered or unexported fields
}
type DAGService ¶
type DAGService interface {
Add(*Node) (key.Key, error)
Get(context.Context, key.Key) (*Node, error)
Remove(*Node) error
// GetDAG returns, in order, all the single leve child
// nodes of the passed in node.
GetMany(context.Context, []key.Key) <-chan *NodeOption
Batch() *Batch
}
DAGService is an IPFS Merkle DAG service.
func NewDAGService ¶
func NewDAGService(bs *bserv.BlockService) DAGService
type Link ¶
type Link struct {
// utf string name. should be unique per object
Name string // utf8
// cumulative size of target object
Size uint64
// multihash of the target object
Hash mh.Multihash
}
Link represents an IPFS Merkle DAG Link between Nodes.
type Node ¶
type Node struct {
Links []*Link
// contains filtered or unexported fields
}
Node 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) (*Node, error)
Decoded decodes raw data and returns a new Node instance.
func NodeWithData ¶ added in v0.4.3
func NodeWithData(d []byte) *Node
func (*Node) AddNodeLink ¶
func (n *Node) AddNodeLink(name string, that *Node) error
AddNodeLink adds a link to another node.
func (*Node) AddNodeLinkClean ¶
func (n *Node) AddNodeLinkClean(name string, that *Node) error
AddNodeLinkClean adds a link to another node. without keeping a reference to the child node
func (*Node) AddRawLink ¶ added in v0.3.2
func (n *Node) AddRawLink(name string, l *Link) error
AddRawLink adds a copy of a link to this node
func (*Node) Copy ¶
func (n *Node) Copy() *Node
Copy returns a copy of the node. NOTE: Does not make copies of Node objects in the links.
func (*Node) EncodeProtobuf ¶ added in v0.4.0
func (n *Node) 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 (*Node) GetLinkedNode ¶ added in v0.3.6
func (n *Node) GetLinkedNode(ctx context.Context, ds DAGService, name string) (*Node, error)
func (*Node) GetNodeLink ¶ added in v0.3.2
func (n *Node) GetNodeLink(name string) (*Link, error)
Return a copy of the link with given name
func (*Node) Key ¶
func (n *Node) Key() (key.Key, error)
Key returns the Multihash as a key, for maps.
func (*Node) Marshal ¶
func (n *Node) Marshal() ([]byte, error)
Marshal encodes a *Node instance into a new byte slice. The conversion uses an intermediate PBNode.
func (*Node) Multihash ¶
func (n *Node) Multihash() (mh.Multihash, error)
Multihash hashes the encoded data of this node.
func (*Node) RemoveNodeLink ¶
func (n *Node) RemoveNodeLink(name string) error
Remove a link on this node by the given name
func (*Node) Size ¶
func (n *Node) Size() (uint64, error)
Size returns the total size of the data addressed by node, including the total sizes of references.
func (*Node) UpdateNodeLink ¶
func (n *Node) UpdateNodeLink(name string, that *Node) (*Node, 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 NodeGetter ¶
type NodeGetter interface {
Get(context.Context) (*Node, error)
Fail(err error)
Send(*Node)
}
NodeGetter provides a promise like interface for a dag Node the first call to Get will block until the Node is received from its internal channels, subsequent calls will return the cached node.
type NodeOption ¶ added in v0.4.0
type NodeOption struct {
Node *Node
Err error
}
type NodeStat ¶
type NodeStat struct {
Hash string
NumLinks int // number of links in link table
BlockSize int // size of the raw, encoded data
LinksSize int // size of the links segment
DataSize int // size of the data segment
CumulativeSize int // cumulative size of object and its references
}
NodeStat is a statistics object for a Node. Mostly sizes.