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)