@cryptotaxi247 / kubo / commits / 401d15659

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