Commit 9b7197d2 authored by Jeromy's avatar Jeromy

dont use searchset for indirect pin checking

License: MIT
Signed-off-by: default avatarJeromy <jeromyj@gmail.com>
parent 484d981e
...@@ -176,19 +176,16 @@ func (p *pinner) isPinned(k key.Key) (string, bool, error) { ...@@ -176,19 +176,16 @@ func (p *pinner) isPinned(k key.Key) (string, bool, error) {
} }
for _, rk := range p.recursePin.GetKeys() { for _, rk := range p.recursePin.GetKeys() {
ss := &searchSet{target: k}
rnd, err := p.dserv.Get(context.Background(), rk) rnd, err := p.dserv.Get(context.Background(), rk)
if err != nil { if err != nil {
return "", false, err return "", false, err
} }
err = mdag.EnumerateChildren(context.Background(), p.dserv, rnd, ss) has, err := hasChild(p.dserv, rnd, k)
if err != nil { if err != nil {
return "", false, err return "", false, err
} }
if has {
if ss.found {
return rk.B58String(), true, nil return rk.B58String(), true, nil
} }
} }
...@@ -349,26 +346,26 @@ func (p *pinner) PinWithMode(k key.Key, mode PinMode) { ...@@ -349,26 +346,26 @@ func (p *pinner) PinWithMode(k key.Key, mode PinMode) {
} }
} }
// searchSet implements key.KeySet in func hasChild(ds mdag.DAGService, root *mdag.Node, child key.Key) (bool, error) {
type searchSet struct { for _, lnk := range root.Links {
target key.Key k := key.Key(lnk.Hash)
found bool if k == child {
} return true, nil
}
func (ss *searchSet) Add(k key.Key) { nd, err := ds.Get(context.Background(), k)
if ss.target == k { if err != nil {
ss.found = true return false, err
} }
}
func (ss *searchSet) Has(k key.Key) bool { has, err := hasChild(ds, nd, child)
// returning true to all Has queries will cause EnumerateChildren to return if err != nil {
// almost immediately return false, err
return ss.found }
}
func (ss *searchSet) Keys() []key.Key { if has {
return nil return has, nil
}
}
return false, nil
} }
func (ss *searchSet) Remove(key.Key) {}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment