mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-10 22:49:13 +08:00
make callback take a node instead of a key
This commit is contained in:
@ -17,7 +17,6 @@ import (
|
|||||||
"github.com/ipfs/go-ipfs/pin"
|
"github.com/ipfs/go-ipfs/pin"
|
||||||
"github.com/ipfs/go-ipfs/thirdparty/eventlog"
|
"github.com/ipfs/go-ipfs/thirdparty/eventlog"
|
||||||
unixfs "github.com/ipfs/go-ipfs/unixfs"
|
unixfs "github.com/ipfs/go-ipfs/unixfs"
|
||||||
u "github.com/ipfs/go-ipfs/util"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var log = eventlog.Logger("coreunix")
|
var log = eventlog.Logger("coreunix")
|
||||||
@ -100,10 +99,7 @@ func add(n *core.IpfsNode, reader io.Reader) (*merkledag.Node, error) {
|
|||||||
reader,
|
reader,
|
||||||
n.DAG,
|
n.DAG,
|
||||||
chunk.DefaultSplitter,
|
chunk.DefaultSplitter,
|
||||||
func(k u.Key, root bool) error {
|
importer.PinIndirectCB(mp),
|
||||||
mp.PinWithMode(k, pin.Indirect)
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -3,12 +3,11 @@ package helpers
|
|||||||
import (
|
import (
|
||||||
dag "github.com/ipfs/go-ipfs/merkledag"
|
dag "github.com/ipfs/go-ipfs/merkledag"
|
||||||
"github.com/ipfs/go-ipfs/pin"
|
"github.com/ipfs/go-ipfs/pin"
|
||||||
u "github.com/ipfs/go-ipfs/util"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type BlockCB func(u.Key, bool) error
|
type NodeCB func(node *dag.Node, root bool) error
|
||||||
|
|
||||||
var nilFunc BlockCB = func(_ u.Key, _ bool) error { return nil }
|
var nilFunc NodeCB = func(_ *dag.Node, _ bool) error { return nil }
|
||||||
|
|
||||||
// DagBuilderHelper wraps together a bunch of objects needed to
|
// DagBuilderHelper wraps together a bunch of objects needed to
|
||||||
// efficiently create unixfs dag trees
|
// efficiently create unixfs dag trees
|
||||||
@ -18,7 +17,7 @@ type DagBuilderHelper struct {
|
|||||||
in <-chan []byte
|
in <-chan []byte
|
||||||
nextData []byte // the next item to return.
|
nextData []byte // the next item to return.
|
||||||
maxlinks int
|
maxlinks int
|
||||||
bcb BlockCB
|
ncb NodeCB
|
||||||
}
|
}
|
||||||
|
|
||||||
type DagBuilderParams struct {
|
type DagBuilderParams struct {
|
||||||
@ -29,22 +28,22 @@ type DagBuilderParams struct {
|
|||||||
Dagserv dag.DAGService
|
Dagserv dag.DAGService
|
||||||
|
|
||||||
// Callback for each block added
|
// Callback for each block added
|
||||||
BlockCB BlockCB
|
NodeCB NodeCB
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a new DagBuilderHelper from the given params, using 'in' as a
|
// Generate a new DagBuilderHelper from the given params, using 'in' as a
|
||||||
// data source
|
// data source
|
||||||
func (dbp *DagBuilderParams) New(in <-chan []byte) *DagBuilderHelper {
|
func (dbp *DagBuilderParams) New(in <-chan []byte) *DagBuilderHelper {
|
||||||
bcb := dbp.BlockCB
|
ncb := dbp.NodeCB
|
||||||
if bcb == nil {
|
if ncb == nil {
|
||||||
bcb = nilFunc
|
ncb = nilFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
return &DagBuilderHelper{
|
return &DagBuilderHelper{
|
||||||
dserv: dbp.Dagserv,
|
dserv: dbp.Dagserv,
|
||||||
in: in,
|
in: in,
|
||||||
maxlinks: dbp.Maxlinks,
|
maxlinks: dbp.Maxlinks,
|
||||||
bcb: bcb,
|
ncb: ncb,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,13 +135,13 @@ func (db *DagBuilderHelper) Add(node *UnixfsNode) (*dag.Node, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
key, err := db.dserv.Add(dn)
|
_, err = db.dserv.Add(dn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// block callback
|
// node callback
|
||||||
err = db.bcb(key, true)
|
err = db.ncb(dn, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -107,13 +107,13 @@ func (n *UnixfsNode) AddChild(child *UnixfsNode, db *DagBuilderHelper) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
childkey, err := db.dserv.Add(childnode)
|
_, err = db.dserv.Add(childnode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pin the child node indirectly
|
// Pin the child node indirectly
|
||||||
err = db.bcb(childkey, false)
|
err = db.ncb(childnode, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -39,34 +39,39 @@ func BuildDagFromFile(fpath string, ds dag.DAGService, mp pin.ManualPinner) (*da
|
|||||||
return BuildDagFromReader(f, ds, chunk.DefaultSplitter, BasicPinnerCB(mp))
|
return BuildDagFromReader(f, ds, chunk.DefaultSplitter, BasicPinnerCB(mp))
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, bcb h.BlockCB) (*dag.Node, error) {
|
func BuildDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, ncb h.NodeCB) (*dag.Node, error) {
|
||||||
// Start the splitter
|
// Start the splitter
|
||||||
blkch := spl.Split(r)
|
blkch := spl.Split(r)
|
||||||
|
|
||||||
dbp := h.DagBuilderParams{
|
dbp := h.DagBuilderParams{
|
||||||
Dagserv: ds,
|
Dagserv: ds,
|
||||||
Maxlinks: h.DefaultLinksPerBlock,
|
Maxlinks: h.DefaultLinksPerBlock,
|
||||||
BlockCB: bcb,
|
NodeCB: ncb,
|
||||||
}
|
}
|
||||||
|
|
||||||
return bal.BalancedLayout(dbp.New(blkch))
|
return bal.BalancedLayout(dbp.New(blkch))
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildTrickleDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, bcb h.BlockCB) (*dag.Node, error) {
|
func BuildTrickleDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, ncb h.NodeCB) (*dag.Node, error) {
|
||||||
// Start the splitter
|
// Start the splitter
|
||||||
blkch := spl.Split(r)
|
blkch := spl.Split(r)
|
||||||
|
|
||||||
dbp := h.DagBuilderParams{
|
dbp := h.DagBuilderParams{
|
||||||
Dagserv: ds,
|
Dagserv: ds,
|
||||||
Maxlinks: h.DefaultLinksPerBlock,
|
Maxlinks: h.DefaultLinksPerBlock,
|
||||||
BlockCB: bcb,
|
NodeCB: ncb,
|
||||||
}
|
}
|
||||||
|
|
||||||
return trickle.TrickleLayout(dbp.New(blkch))
|
return trickle.TrickleLayout(dbp.New(blkch))
|
||||||
}
|
}
|
||||||
|
|
||||||
func BasicPinnerCB(p pin.ManualPinner) h.BlockCB {
|
func BasicPinnerCB(p pin.ManualPinner) h.NodeCB {
|
||||||
return func(k u.Key, root bool) error {
|
return func(n *dag.Node, root bool) error {
|
||||||
|
k, err := n.Key()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if root {
|
if root {
|
||||||
p.PinWithMode(k, pin.Recursive)
|
p.PinWithMode(k, pin.Recursive)
|
||||||
return p.Flush()
|
return p.Flush()
|
||||||
@ -77,8 +82,13 @@ func BasicPinnerCB(p pin.ManualPinner) h.BlockCB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func PinIndirectCB(p pin.ManualPinner) h.BlockCB {
|
func PinIndirectCB(p pin.ManualPinner) h.NodeCB {
|
||||||
return func(k u.Key, root bool) error {
|
return func(n *dag.Node, root bool) error {
|
||||||
|
k, err := n.Key()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
p.PinWithMode(k, pin.Indirect)
|
p.PinWithMode(k, pin.Indirect)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -309,7 +309,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte) (*mdag.No
|
|||||||
dbp := &help.DagBuilderParams{
|
dbp := &help.DagBuilderParams{
|
||||||
Dagserv: dm.dagserv,
|
Dagserv: dm.dagserv,
|
||||||
Maxlinks: help.DefaultLinksPerBlock,
|
Maxlinks: help.DefaultLinksPerBlock,
|
||||||
BlockCB: imp.BasicPinnerCB(dm.mp),
|
NodeCB: imp.BasicPinnerCB(dm.mp),
|
||||||
}
|
}
|
||||||
|
|
||||||
return trickle.TrickleAppend(node, dbp.New(blks))
|
return trickle.TrickleAppend(node, dbp.New(blks))
|
||||||
|
Reference in New Issue
Block a user