@cryptotaxi247 / kubo / commits / c9ce2e724

Simplify Pinner interface by folding ManualPinner into Pinner

Pinner had method GetManual that returned a ManualPinner, so every Pinner had to implement ManualPinner anyway. License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Tommi Virtanen committed May 8, 2015 at 11:00 UTC c9ce2e724a34d18cca84d89ddd6c6c08bd445b11
12 files changed +38 -45
core/commands/add.go
+5 -6
@@ -169,9 +169,8 @@ remains to be implemented.
169 return err
170 }
171
172 - mp := n.Pinning.GetManual()
173 - mp.RemovePinWithMode(rnk, pin.Indirect)
174 - mp.PinWithMode(rnk, pin.Recursive)
172 + n.Pinning.RemovePinWithMode(rnk, pin.Indirect)
173 + n.Pinning.PinWithMode(rnk, pin.Recursive)
174 return n.Pinning.Flush()
175 }
176
@@ -326,13 +325,13 @@ func add(n *core.IpfsNode, reader io.Reader, useTrickle bool, chunker string) (*
325 node, err = importer.BuildTrickleDagFromReader(
326 n.DAG,
327 chnk,
329 - importer.PinIndirectCB(n.Pinning.GetManual()),
328 + importer.PinIndirectCB(n.Pinning),
329 )
330 } else {
331 node, err = importer.BuildDagFromReader(
332 n.DAG,
333 chnk,
335 - importer.PinIndirectCB(n.Pinning.GetManual()),
334 + importer.PinIndirectCB(n.Pinning),
335 )
336 }
337
@@ -464,7 +463,7 @@ func (params *adder) addDir(file files.File) (*dag.Node, error) {
463 return nil, err
464 }
465
467 - params.node.Pinning.GetManual().PinWithMode(k, pin.Indirect)
466 + params.node.Pinning.PinWithMode(k, pin.Indirect)
467
468 return tree, nil
469 }
core/corehttp/gateway_handler.go
+1 -1
@@ -51,7 +51,7 @@ func (i *gatewayHandler) newDagFromReader(r io.Reader) (*dag.Node, error) {
51 return importer.BuildDagFromReader(
52 i.node.DAG,
53 chunk.DefaultSplitter(r),
54 - importer.BasicPinnerCB(i.node.Pinning.GetManual()))
54 + importer.BasicPinnerCB(i.node.Pinning))
55 }
56
57 // TODO(btc): break this apart into separate handlers using a more expressive muxer
core/coreunix/add.go
+3 -5
@@ -28,7 +28,7 @@ func Add(n *core.IpfsNode, r io.Reader) (string, error) {
28 dagNode, err := importer.BuildDagFromReader(
29 n.DAG,
30 chunk.NewSizeSplitter(r, chunk.DefaultBlockSize),
31 - importer.BasicPinnerCB(n.Pinning.GetManual()),
31 + importer.BasicPinnerCB(n.Pinning),
32 )
33 if err != nil {
34 return "", err
@@ -64,7 +64,7 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
64 return "", err
65 }
66
67 - n.Pinning.GetManual().RemovePinWithMode(k, pin.Indirect)
67 + n.Pinning.RemovePinWithMode(k, pin.Indirect)
68 if err := n.Pinning.Flush(); err != nil {
69 return "", err
70 }
@@ -91,12 +91,10 @@ func AddWrapped(n *core.IpfsNode, r io.Reader, filename string) (string, *merkle
91 }
92
93 func add(n *core.IpfsNode, reader io.Reader) (*merkledag.Node, error) {
94 - mp := n.Pinning.GetManual()
95 -
94 return importer.BuildDagFromReader(
95 n.DAG,
96 chunk.DefaultSplitter(reader),
99 - importer.PinIndirectCB(mp),
97 + importer.PinIndirectCB(n.Pinning),
98 )
99 }
100
importer/balanced/balanced_test.go
+1 -1
@@ -128,7 +128,7 @@ func arrComp(a, b []byte) error {
128
129 type dagservAndPinner struct {
130 ds dag.DAGService
131 - mp pin.ManualPinner
131 + mp pin.Pinner
132 }
133
134 func TestIndirectBlocks(t *testing.T) {
importer/helpers/dagbuilder.go
+1 -1
@@ -17,7 +17,7 @@ var nilFunc NodeCB = func(_ *dag.Node, _ bool) error { return nil }
17 // efficiently create unixfs dag trees
18 type DagBuilderHelper struct {
19 dserv dag.DAGService
20 - mp pin.ManualPinner
20 + mp pin.Pinner
21 in <-chan []byte
22 errs <-chan error
23 recvdErr error
importer/importer.go
+3 -3
@@ -20,7 +20,7 @@ var log = logging.Logger("importer")
20
21 // Builds a DAG from the given file, writing created blocks to disk as they are
22 // created
23 -func BuildDagFromFile(fpath string, ds dag.DAGService, mp pin.ManualPinner) (*dag.Node, error) {
23 +func BuildDagFromFile(fpath string, ds dag.DAGService, mp pin.Pinner) (*dag.Node, error) {
24 stat, err := os.Lstat(fpath)
25 if err != nil {
26 return nil, err
@@ -65,7 +65,7 @@ func BuildTrickleDagFromReader(ds dag.DAGService, spl chunk.Splitter, ncb h.Node
65 return trickle.TrickleLayout(dbp.New(blkch, errch))
66 }
67
68 -func BasicPinnerCB(p pin.ManualPinner) h.NodeCB {
68 +func BasicPinnerCB(p pin.Pinner) h.NodeCB {
69 return func(n *dag.Node, last bool) error {
70 k, err := n.Key()
71 if err != nil {
@@ -82,7 +82,7 @@ func BasicPinnerCB(p pin.ManualPinner) h.NodeCB {
82 }
83 }
84
85 -func PinIndirectCB(p pin.ManualPinner) h.NodeCB {
85 +func PinIndirectCB(p pin.Pinner) h.NodeCB {
86 return func(n *dag.Node, last bool) error {
87 k, err := n.Key()
88 if err != nil {
importer/trickle/trickle_test.go
+1 -1
@@ -125,7 +125,7 @@ func arrComp(a, b []byte) error {
125
126 type dagservAndPinner struct {
127 ds merkledag.DAGService
128 - mp pin.ManualPinner
128 + mp pin.Pinner
129 }
130
131 func TestIndirectBlocks(t *testing.T) {
ipnsfs/file.go
+1 -1
@@ -23,7 +23,7 @@ type File struct {
23
24 // NewFile returns a NewFile object with the given parameters
25 func NewFile(name string, node *dag.Node, parent childCloser, fs *Filesystem) (*File, error) {
26 - dmod, err := mod.NewDagModifier(context.Background(), node, fs.dserv, fs.pins.GetManual(), chunk.DefaultSplitter)
26 + dmod, err := mod.NewDagModifier(context.Background(), node, fs.dserv, fs.pins, chunk.DefaultSplitter)
27 if err != nil {
28 return nil, err
29 }
merkledag/merkledag_test.go
+2 -2
@@ -28,7 +28,7 @@ import (
28
29 type dagservAndPinner struct {
30 ds DAGService
31 - mp pin.ManualPinner
31 + mp pin.Pinner
32 }
33
34 func getDagservAndPinner(t *testing.T) dagservAndPinner {
@@ -36,7 +36,7 @@ func getDagservAndPinner(t *testing.T) dagservAndPinner {
36 bs := bstore.NewBlockstore(db)
37 blockserv := bserv.New(bs, offline.Exchange(bs))
38 dserv := NewDAGService(blockserv)
39 - mpin := pin.NewPinner(db, dserv).GetManual()
39 + mpin := pin.NewPinner(db, dserv)
40 return dagservAndPinner{
41 ds: dserv,
42 mp: mpin,
pin/pin.go
+12 -16
@@ -34,22 +34,22 @@ type Pinner interface {
34 IsPinned(key.Key) bool
35 Pin(context.Context, *mdag.Node, bool) error
36 Unpin(context.Context, key.Key, bool) error
37 +
38 + // PinWithMode is for manually editing the pin structure. Use with
39 + // care! If used improperly, garbage collection may not be
40 + // successful.
41 + PinWithMode(key.Key, PinMode)
42 + // RemovePinWithMode is for manually editing the pin structure.
43 + // Use with care! If used improperly, garbage collection may not
44 + // be successful.
45 + RemovePinWithMode(key.Key, PinMode)
46 +
47 Flush() error
38 - GetManual() ManualPinner
48 DirectKeys() []key.Key
49 IndirectKeys() map[key.Key]int
50 RecursiveKeys() []key.Key
51 }
52
44 -// ManualPinner is for manually editing the pin structure
45 -// Use with care! If used improperly, garbage collection
46 -// may not be successful
47 -type ManualPinner interface {
48 - PinWithMode(key.Key, PinMode)
49 - RemovePinWithMode(key.Key, PinMode)
50 - Pinner
51 -}
52 -
53 // pinner implements the Pinner interface
54 type pinner struct {
55 lock sync.RWMutex
@@ -308,8 +308,8 @@ func loadSet(d ds.Datastore, k ds.Key, val interface{}) error {
308 return json.Unmarshal(bf, val)
309 }
310
311 -// PinWithMode is a method on ManualPinners, allowing the user to have fine
312 -// grained control over pin counts
311 +// PinWithMode allows the user to have fine grained control over pin
312 +// counts
313 func (p *pinner) PinWithMode(k key.Key, mode PinMode) {
314 p.lock.Lock()
315 defer p.lock.Unlock()
@@ -322,7 +322,3 @@ func (p *pinner) PinWithMode(k key.Key, mode PinMode) {
322 p.indirPin.Increment(k)
323 }
324 }
325 -
326 -func (p *pinner) GetManual() ManualPinner {
327 - return p
328 -}
unixfs/mod/dagmodifier.go
+2 -2
@@ -37,7 +37,7 @@ var log = logging.Logger("dagio")
37 type DagModifier struct {
38 dagserv mdag.DAGService
39 curNode *mdag.Node
40 - mp pin.ManualPinner
40 + mp pin.Pinner
41
42 splitter chunk.SplitterGen
43 ctx context.Context
@@ -50,7 +50,7 @@ type DagModifier struct {
50 read *uio.DagReader
51 }
52
53 -func NewDagModifier(ctx context.Context, from *mdag.Node, serv mdag.DAGService, mp pin.ManualPinner, spl chunk.SplitterGen) (*DagModifier, error) {
53 +func NewDagModifier(ctx context.Context, from *mdag.Node, serv mdag.DAGService, mp pin.Pinner, spl chunk.SplitterGen) (*DagModifier, error) {
54 return &DagModifier{
55 curNode: from.Copy(),
56 dagserv: serv,
unixfs/mod/dagmodifier_test.go
+6 -6
@@ -27,25 +27,25 @@ import (
27 context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
28 )
29
30 -func getMockDagServ(t testing.TB) (mdag.DAGService, pin.ManualPinner) {
30 +func getMockDagServ(t testing.TB) (mdag.DAGService, pin.Pinner) {
31 dstore := ds.NewMapDatastore()
32 tsds := sync.MutexWrap(dstore)
33 bstore := blockstore.NewBlockstore(tsds)
34 bserv := bs.New(bstore, offline.Exchange(bstore))
35 dserv := mdag.NewDAGService(bserv)
36 - return dserv, pin.NewPinner(tsds, dserv).GetManual()
36 + return dserv, pin.NewPinner(tsds, dserv)
37 }
38
39 -func getMockDagServAndBstore(t testing.TB) (mdag.DAGService, blockstore.Blockstore, pin.ManualPinner) {
39 +func getMockDagServAndBstore(t testing.TB) (mdag.DAGService, blockstore.Blockstore, pin.Pinner) {
40 dstore := ds.NewMapDatastore()
41 tsds := sync.MutexWrap(dstore)
42 bstore := blockstore.NewBlockstore(tsds)
43 bserv := bs.New(bstore, offline.Exchange(bstore))
44 dserv := mdag.NewDAGService(bserv)
45 - return dserv, bstore, pin.NewPinner(tsds, dserv).GetManual()
45 + return dserv, bstore, pin.NewPinner(tsds, dserv)
46 }
47
48 -func getNode(t testing.TB, dserv mdag.DAGService, size int64, pinner pin.ManualPinner) ([]byte, *mdag.Node) {
48 +func getNode(t testing.TB, dserv mdag.DAGService, size int64, pinner pin.Pinner) ([]byte, *mdag.Node) {
49 in := io.LimitReader(u.NewTimeSeededRand(), size)
50 node, err := imp.BuildTrickleDagFromReader(dserv, sizeSplitterGen(500)(in), imp.BasicPinnerCB(pinner))
51 if err != nil {
@@ -469,7 +469,7 @@ func TestSparseWrite(t *testing.T) {
469 }
470 }
471
472 -func basicGC(t *testing.T, bs blockstore.Blockstore, pins pin.ManualPinner) {
472 +func basicGC(t *testing.T, bs blockstore.Blockstore, pins pin.Pinner) {
473 ctx, cancel := context.WithCancel(context.Background())
474 defer cancel() // in case error occurs during operation
475 keychan, err := bs.AllKeysChan(ctx)