Commit a967e017 authored by Emery Hemingway's avatar Emery Hemingway

convert DAGService to an interface

parent d08cbc10
...@@ -62,7 +62,7 @@ func MakeLink(n *Node) (*Link, error) { ...@@ -62,7 +62,7 @@ func MakeLink(n *Node) (*Link, error) {
}, nil }, nil
} }
func (l *Link) GetNode(serv *DAGService) (*Node, error) { func (l *Link) GetNode(serv DAGService) (*Node, error) {
if l.Node != nil { if l.Node != nil {
return l.Node, nil return l.Node, nil
} }
...@@ -151,20 +151,32 @@ func (n *Node) Key() (u.Key, error) { ...@@ -151,20 +151,32 @@ func (n *Node) Key() (u.Key, error) {
} }
// DAGService is an IPFS Merkle DAG service. // DAGService is an IPFS Merkle DAG service.
type DAGService interface {
Add(*Node) (u.Key, error)
AddRecursive(*Node) error
Get(u.Key) (*Node, error)
Remove(*Node) error
}
func NewDAGService(bs *bserv.BlockService) DAGService {
return &dagService{bs}
}
// dagService is an IPFS Merkle DAG service.
// - the root is virtual (like a forest) // - the root is virtual (like a forest)
// - stores nodes' data in a BlockService // - stores nodes' data in a BlockService
// TODO: should cache Nodes that are in memory, and be // TODO: should cache Nodes that are in memory, and be
// able to free some of them when vm pressure is high // able to free some of them when vm pressure is high
type DAGService struct { type dagService struct {
Blocks *bserv.BlockService Blocks *bserv.BlockService
} }
// Add adds a node to the DAGService, storing the block in the BlockService // Add adds a node to the dagService, storing the block in the BlockService
func (n *DAGService) Add(nd *Node) (u.Key, error) { func (n *dagService) Add(nd *Node) (u.Key, error) {
k, _ := nd.Key() k, _ := nd.Key()
log.Debug("DagService Add [%s]", k) log.Debug("DagService Add [%s]", k)
if n == nil { if n == nil {
return "", fmt.Errorf("DAGService is nil") return "", fmt.Errorf("dagService is nil")
} }
d, err := nd.Encoded(false) d, err := nd.Encoded(false)
...@@ -182,7 +194,7 @@ func (n *DAGService) Add(nd *Node) (u.Key, error) { ...@@ -182,7 +194,7 @@ func (n *DAGService) Add(nd *Node) (u.Key, error) {
return n.Blocks.AddBlock(b) return n.Blocks.AddBlock(b)
} }
func (n *DAGService) AddRecursive(nd *Node) error { func (n *dagService) AddRecursive(nd *Node) error {
_, err := n.Add(nd) _, err := n.Add(nd)
if err != nil { if err != nil {
log.Info("AddRecursive Error: %s\n", err) log.Info("AddRecursive Error: %s\n", err)
...@@ -201,10 +213,10 @@ func (n *DAGService) AddRecursive(nd *Node) error { ...@@ -201,10 +213,10 @@ func (n *DAGService) AddRecursive(nd *Node) error {
return nil return nil
} }
// Get retrieves a node from the DAGService, fetching the block in the BlockService // Get retrieves a node from the dagService, fetching the block in the BlockService
func (n *DAGService) Get(k u.Key) (*Node, error) { func (n *dagService) Get(k u.Key) (*Node, error) {
if n == nil { if n == nil {
return nil, fmt.Errorf("DAGService is nil") return nil, fmt.Errorf("dagService is nil")
} }
ctx, _ := context.WithTimeout(context.TODO(), time.Second*5) ctx, _ := context.WithTimeout(context.TODO(), time.Second*5)
...@@ -216,7 +228,7 @@ func (n *DAGService) Get(k u.Key) (*Node, error) { ...@@ -216,7 +228,7 @@ func (n *DAGService) Get(k u.Key) (*Node, error) {
return Decoded(b.Data) return Decoded(b.Data)
} }
func (n *DAGService) Remove(nd *Node) error { func (n *dagService) Remove(nd *Node) error {
for _, l := range nd.Links { for _, l := range nd.Links {
if l.Node != nil { if l.Node != nil {
n.Remove(l.Node) n.Remove(l.Node)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment