Skip to content

Commit

Permalink
Merge pull request #1577 from sipsma/faster-remotecache
Browse files Browse the repository at this point in the history
remotecache: Only visit each item once when walking results.
  • Loading branch information
tonistiigi authored Jul 17, 2020
2 parents 919ee62 + 806fddd commit e65986c
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
3 changes: 2 additions & 1 deletion cache/remotecache/v1/cachestorage.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ func (cs *cacheResultStorage) LoadWithParents(ctx context.Context, res solver.Ca

m := map[string]solver.Result{}

visited := make(map[*item]struct{})
if err := v.walkAllResults(func(i *item) error {
if i.result == nil {
return nil
Expand All @@ -236,7 +237,7 @@ func (cs *cacheResultStorage) LoadWithParents(ctx context.Context, res solver.Ca
m[id] = worker.NewWorkerRefResult(ref, cs.w)
}
return nil
}); err != nil {
}, visited); err != nil {
for _, v := range m {
v.Release(context.TODO())
}
Expand Down
8 changes: 6 additions & 2 deletions cache/remotecache/v1/chains.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,13 +128,17 @@ func (c *item) LinkFrom(rec solver.CacheExporterRecord, index int, selector stri
c.links[index][link{src: src, selector: selector}] = struct{}{}
}

func (c *item) walkAllResults(fn func(i *item) error) error {
func (c *item) walkAllResults(fn func(i *item) error, visited map[*item]struct{}) error {
if _, ok := visited[c]; ok {
return nil
}
visited[c] = struct{}{}
if err := fn(c); err != nil {
return err
}
for _, links := range c.links {
for l := range links {
if err := l.src.walkAllResults(fn); err != nil {
if err := l.src.walkAllResults(fn, visited); err != nil {
return err
}
}
Expand Down

0 comments on commit e65986c

Please sign in to comment.