1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-09-10 05:52:20 +08:00

use batching transaction interface from datastore

License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
This commit is contained in:
Jeromy
2015-06-26 09:44:00 -07:00
parent f6f9cae4e4
commit 137c0ac4ac
39 changed files with 857 additions and 1546 deletions

View File

@ -31,7 +31,17 @@ func BalancedLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
root = h.NewUnixfsNode()
}
return db.Add(root)
out, err := db.Add(root)
if err != nil {
return nil, err
}
err = db.Close()
if err != nil {
return nil, err
}
return out, nil
}
// fillNodeRec will fill the given node with data from the dagBuilders input

View File

@ -22,6 +22,8 @@ type DagBuilderHelper struct {
nextData []byte // the next item to return.
maxlinks int
ncb NodeCB
batch *dag.Batch
}
type DagBuilderParams struct {
@ -48,6 +50,7 @@ func (dbp *DagBuilderParams) New(in <-chan []byte) *DagBuilderHelper {
in: in,
maxlinks: dbp.Maxlinks,
ncb: ncb,
batch: dbp.Dagserv.Batch(),
}
}
@ -156,3 +159,7 @@ func (db *DagBuilderHelper) Add(node *UnixfsNode) (*dag.Node, error) {
func (db *DagBuilderHelper) Maxlinks() int {
return db.maxlinks
}
func (db *DagBuilderHelper) Close() error {
return db.batch.Commit()
}

View File

@ -107,7 +107,7 @@ func (n *UnixfsNode) AddChild(child *UnixfsNode, db *DagBuilderHelper) error {
return err
}
_, err = db.dserv.Add(childnode)
_, err = db.batch.Add(childnode)
if err != nil {
return err
}

View File

@ -36,7 +36,17 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
}
}
return db.Add(root)
out, err := db.Add(root)
if err != nil {
return nil, err
}
err = db.Close()
if err != nil {
return nil, err
}
return out, nil
}
func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error {
@ -64,7 +74,16 @@ func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error
}
// TrickleAppend appends the data in `db` to the dag, using the Trickledag format
func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_out error) {
defer func() {
if err_out == nil {
err := db.Close()
if err != nil {
err_out = err
}
}
}()
// Convert to unixfs node for working with easily
ufsn, err := h.NewUnixfsNodeFromDag(base)
if err != nil {