@cryptotaxi247 / kubo / commits / 859de5140

dont use searchset for indirect pin checking

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Jul 10, 2015 at 11:34 UTC 859de5140634db36c326cb8050d00209880f26cb
1 file changed +21 -24
pin/pin.go
+21 -24
@@ -176,19 +176,16 @@ func (p *pinner) isPinned(k key.Key) (string, bool, error) {
176 }
177
178 for _, rk := range p.recursePin.GetKeys() {
179 - ss := &searchSet{target: k}
180 -
179 rnd, err := p.dserv.Get(context.Background(), rk)
180 if err != nil {
181 return "", false, err
182 }
183
186 - err = mdag.EnumerateChildren(context.Background(), p.dserv, rnd, ss)
184 + has, err := hasChild(p.dserv, rnd, k)
185 if err != nil {
186 return "", false, err
187 }
190 -
191 - if ss.found {
188 + if has {
189 return rk.B58String(), true, nil
190 }
191 }
@@ -349,26 +346,26 @@ func (p *pinner) PinWithMode(k key.Key, mode PinMode) {
346 }
347 }
348
352 -// searchSet implements key.KeySet in
353 -type searchSet struct {
354 - target key.Key
355 - found bool
356 -}
349 +func hasChild(ds mdag.DAGService, root *mdag.Node, child key.Key) (bool, error) {
350 + for _, lnk := range root.Links {
351 + k := key.Key(lnk.Hash)
352 + if k == child {
353 + return true, nil
354 + }
355
358 -func (ss *searchSet) Add(k key.Key) {
359 - if ss.target == k {
360 - ss.found = true
361 - }
362 -}
356 + nd, err := ds.Get(context.Background(), k)
357 + if err != nil {
358 + return false, err
359 + }
360
364 -func (ss *searchSet) Has(k key.Key) bool {
365 - // returning true to all Has queries will cause EnumerateChildren to return
366 - // almost immediately
367 - return ss.found
368 -}
361 + has, err := hasChild(ds, nd, child)
362 + if err != nil {
363 + return false, err
364 + }
365
370 -func (ss *searchSet) Keys() []key.Key {
371 - return nil
366 + if has {
367 + return has, nil
368 + }
369 + }
370 + return false, nil
371 }
373 -
374 -func (ss *searchSet) Remove(key.Key) {}