reprovider: Make codeclimate happier
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Aug 1, 2017 at 18:21 UTC
3917d4dd18d4efd2e06189e07ffe57e7b86662a4
2 files changed
+17
-10
exchange/reprovide/providers.go
+4
-2
@@ -11,13 +11,15 @@ import (
11
cid "gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
12
)
13
14
-func NewBlockstoreProvider(bstore blocks.Blockstore) KeyChanFunc {
14
+// NewBlockstoreProvider returns key provider using bstore.AllKeysChan
15
+func NewBlockstoreProvider(bstore blocks.Blockstore) keyChanFunc {
16
return func(ctx context.Context) (<-chan *cid.Cid, error) {
17
return bstore.AllKeysChan(ctx)
18
}
19
}
20
20
-func NewPinnedProvider(pinning pin.Pinner, dag merkledag.DAGService, onlyRoots bool) KeyChanFunc {
21
+// NewPinnedProvider returns provider supplying pinned keys
22
+func NewPinnedProvider(pinning pin.Pinner, dag merkledag.DAGService, onlyRoots bool) keyChanFunc {
23
return func(ctx context.Context) (<-chan *cid.Cid, error) {
24
set, err := pinSet(ctx, pinning, dag, onlyRoots)
25
if err != nil {
exchange/reprovide/reprovide.go
+13
-8
@@ -13,7 +13,7 @@ import (
13
14
var log = logging.Logger("reprovider")
15
16
-type KeyChanFunc func(context.Context) (<-chan *cid.Cid, error)
16
+type keyChanFunc func(context.Context) (<-chan *cid.Cid, error)
17
18
type Reprovider struct {
19
ctx context.Context
@@ -22,19 +22,21 @@ type Reprovider struct {
22
// The routing system to provide values through
23
rsys routing.ContentRouting
24
25
- keyProvider KeyChanFunc
25
+ keyProvider keyChanFunc
26
}
27
28
-func NewReprovider(ctx context.Context, rsys routing.ContentRouting, keyProvider KeyChanFunc) *Reprovider {
28
+// NewReprovider creates new Reprovider instance.
29
+func NewReprovider(ctx context.Context, rsys routing.ContentRouting, keyProvider keyChanFunc) *Reprovider {
30
return &Reprovider{
31
ctx: ctx,
32
trigger: make(chan context.CancelFunc),
33
33
- rsys: rsys,
34
+ rsys: rsys,
35
keyProvider: keyProvider,
36
}
37
}
38
39
+// ProvideEvery re-provides keys with 'tick' interval
40
func (rp *Reprovider) ProvideEvery(tick time.Duration) {
41
// dont reprovide immediately.
42
// may have just started the daemon and shutting it down immediately.
@@ -49,7 +51,7 @@ func (rp *Reprovider) ProvideEvery(tick time.Duration) {
51
case <-after:
52
}
53
52
- err := rp.Reprovide(rp.ctx)
54
+ err := rp.Reprovide()
55
if err != nil {
56
log.Debug(err)
57
}
@@ -61,14 +63,15 @@ func (rp *Reprovider) ProvideEvery(tick time.Duration) {
63
}
64
}
65
64
-func (rp *Reprovider) Reprovide(ctx context.Context) error {
65
- keychan, err := rp.keyProvider(ctx)
66
+// Reprovide registers all keys given by rp.keyProvider to libp2p content routing
67
+func (rp *Reprovider) Reprovide() error {
68
+ keychan, err := rp.keyProvider(rp.ctx)
69
if err != nil {
70
return fmt.Errorf("Failed to get key chan: %s", err)
71
}
72
for c := range keychan {
73
op := func() error {
71
- err := rp.rsys.Provide(ctx, c, true)
74
+ err := rp.rsys.Provide(rp.ctx, c, true)
75
if err != nil {
76
log.Debugf("Failed to provide key: %s", err)
77
}
@@ -86,8 +89,10 @@ func (rp *Reprovider) Reprovide(ctx context.Context) error {
89
return nil
90
}
91
92
+// Trigger starts reprovision process in rp.ProvideEvery and waits for it
93
func (rp *Reprovider) Trigger(ctx context.Context) error {
94
progressCtx, done := context.WithCancel(ctx)
95
+
96
select {
97
case <-rp.ctx.Done():
98
return context.Canceled