gc: refactor: CollectResult
License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>
Kevin Atkinson committed
Feb 24, 2017 at 15:10 UTC
401d1565961556e6115a78fc6f3cd67a522067ed
2 files changed
+25
-21
core/commands/repo.go
+6
-18
@@ -15,6 +15,7 @@ import (
15
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
16
lockfile "github.com/ipfs/go-ipfs/repo/fsrepo/lock"
17
18
+ cid "gx/ipfs/QmV5gPoRsjN1Gid3LMdNZTyfCtP2DsvqEbMAmz82RmmiGk/go-cid"
19
u "gx/ipfs/QmZuY8aV7zbNXVy6DyN9SmnuH3o9nG852F4aTiSBpts8d1/go-ipfs-util"
20
)
21
@@ -65,24 +66,11 @@ order to reclaim hard disk space.
66
67
go func() {
68
defer close(outChan)
68
- var errors []error
69
- for res := range gcOutChan {
70
- if res.KeyRemoved != nil {
71
- outChan <- &corerepo.KeyRemoved{res.KeyRemoved}
72
- }
73
- if res.Error != nil {
74
- errors = append(errors, res.Error)
75
- }
76
- }
77
- switch len(errors) {
78
- case 0:
79
- return
80
- case 1:
81
- res.SetError(errors[0], cmds.ErrNormal)
82
- return
83
- default:
84
- res.SetError(corerepo.NewMultiError(errors...), cmds.ErrNormal)
85
- return
69
+ err := corerepo.CollectResult(req.Context(), gcOutChan, func(k *cid.Cid) {
70
+ outChan <- &corerepo.KeyRemoved{k}
71
+ })
72
+ if err != nil {
73
+ res.SetError(err, cmds.ErrNormal)
74
}
75
}()
76
},
core/corerepo/gc.go
+19
-3
@@ -92,10 +92,26 @@ func GarbageCollect(n *core.IpfsNode, ctx context.Context) error {
92
}
93
rmed := gc.GC(ctx, n.Blockstore, n.DAG, n.Pinning, roots)
94
95
+ return CollectResult(ctx, rmed, nil)
96
+}
97
+
98
+func CollectResult(ctx context.Context, gcOut <-chan gc.Result, cb func(*cid.Cid)) error {
99
var errors []error
96
- for res := range rmed {
97
- if res.Error != nil {
98
- errors = append(errors, err)
100
+loop:
101
+ for {
102
+ select {
103
+ case res, ok := <-gcOut:
104
+ if !ok {
105
+ break loop
106
+ }
107
+ if res.Error != nil {
108
+ errors = append(errors, res.Error)
109
+ } else if res.KeyRemoved != nil && cb != nil {
110
+ cb(res.KeyRemoved)
111
+ }
112
+ case <-ctx.Done():
113
+ errors = append(errors, ctx.Err())
114
+ break loop
115
}
116
}
117