提交 97ac9c4e 作者: Steven Allen

dedup keys in GetMany

Otherwise, GetMany on the children of a node with duplicate links may fail

License: MIT
Signed-off-by: 's avatarSteven Allen <steven@stebalien.com>
上级 3f6519b4
......@@ -201,7 +201,20 @@ func (n *dagService) GetMany(ctx context.Context, keys []*cid.Cid) <-chan *ipld.
return getNodesFromBG(ctx, n.Blocks, keys)
}
func dedupKeys(keys []*cid.Cid) []*cid.Cid {
set := cid.NewSet()
for _, c := range keys {
set.Add(c)
}
if set.Len() == len(keys) {
return keys
}
return set.Keys()
}
func getNodesFromBG(ctx context.Context, bs bserv.BlockGetter, keys []*cid.Cid) <-chan *ipld.NodeOption {
keys = dedupKeys(keys)
out := make(chan *ipld.NodeOption, len(keys))
blocks := bs.GetBlocks(ctx, keys)
var count int
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论