From cb1b879fe1520a24748762416baa161ad4ebc84b Mon Sep 17 00:00:00 2001 From: coffeegoddd Date: Fri, 17 Jan 2025 14:29:16 -0800 Subject: [PATCH] /go/libraries/doltcore/env/actions/tag.go: minimal parallelism too --- go/libraries/doltcore/env/actions/tag.go | 42 +++++++++++++++++------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/go/libraries/doltcore/env/actions/tag.go b/go/libraries/doltcore/env/actions/tag.go index 7a1a3b9d5ab..85e7c5b0301 100644 --- a/go/libraries/doltcore/env/actions/tag.go +++ b/go/libraries/doltcore/env/actions/tag.go @@ -23,6 +23,7 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/store/datas" + "golang.org/x/sync/errgroup" ) type TagProps struct { @@ -149,18 +150,37 @@ func IterResolvedTagsPaginated(ctx context.Context, ddb *doltdb.DoltDB, startTag return "", err } + eg, egCtx := errgroup.WithContext(ctx) + eg.SetLimit(5) + // for each tag, get the meta - tagMetas := make([]*doltdb.TagRefWithMeta, 0, len(tagRefs)) - for _, r := range tagRefs { - tr, ok := r.(ref.TagRef) - if !ok { - return "", fmt.Errorf("DoltDB.GetTags() returned non-tag DoltRef") - } - tm, err := ddb.ResolveTagMeta(ctx, tr) - if err != nil { - return "", err - } - tagMetas = append(tagMetas, tm) + tagMetas := make([]*doltdb.TagRefWithMeta, len(tagRefs)) + for idx, r := range tagRefs { + idx, r := idx, r + + eg.Go(func() error { + if egCtx.Err() != nil { + return egCtx.Err() + } + + tr, ok := r.(ref.TagRef) + if !ok { + return fmt.Errorf("DoltDB.GetTags() returned non-tag DoltRef") + } + + tm, err := ddb.ResolveTagMeta(ctx, tr) + if err != nil { + return err + } + + tagMetas[idx] = tm + return nil + }) + + } + + if err := eg.Wait(); err != nil { + return "", err } // sort by meta timestamp