瀏覽代碼

internal/tracing: replace go-multierror.Group with sync.WaitGroup

The go-multierror Group is just a shallow wrapper around sync.WaitGroup;
https://github.com/hashicorp/go-multierror/blob/v1.1.1/group.go#L5-L38

This patch replaces the go-multierror.Group for a sync.WaitGroup (we
probably don't need to limit concurrency for this one) and stdlib multi-
errors.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
Sebastiaan van Stijn 4 月之前
父節點
當前提交
5165b0f814
共有 1 個文件被更改,包括 38 次插入15 次删除
  1. 38 15
      internal/tracing/mux.go

+ 38 - 15
internal/tracing/mux.go

@@ -18,8 +18,9 @@ package tracing
 
 import (
 	"context"
+	"errors"
+	"sync"
 
-	"github.com/hashicorp/go-multierror"
 	sdktrace "go.opentelemetry.io/otel/sdk/trace"
 )
 
@@ -28,23 +29,45 @@ type MuxExporter struct {
 }
 
 func (m MuxExporter) ExportSpans(ctx context.Context, spans []sdktrace.ReadOnlySpan) error {
-	var eg multierror.Group
-	for i := range m.exporters {
-		exporter := m.exporters[i]
-		eg.Go(func() error {
-			return exporter.ExportSpans(ctx, spans)
-		})
+	var (
+		wg    sync.WaitGroup
+		errMu sync.Mutex
+		errs  = make([]error, 0, len(m.exporters))
+	)
+
+	for _, exporter := range m.exporters {
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+			if err := exporter.ExportSpans(ctx, spans); err != nil {
+				errMu.Lock()
+				errs = append(errs, err)
+				errMu.Unlock()
+			}
+		}()
 	}
-	return eg.Wait()
+	wg.Wait()
+	return errors.Join(errs...)
 }
 
 func (m MuxExporter) Shutdown(ctx context.Context) error {
-	var eg multierror.Group
-	for i := range m.exporters {
-		exporter := m.exporters[i]
-		eg.Go(func() error {
-			return exporter.Shutdown(ctx)
-		})
+	var (
+		wg    sync.WaitGroup
+		errMu sync.Mutex
+		errs  = make([]error, 0, len(m.exporters))
+	)
+
+	for _, exporter := range m.exporters {
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+			if err := exporter.Shutdown(ctx); err != nil {
+				errMu.Lock()
+				errs = append(errs, err)
+				errMu.Unlock()
+			}
+		}()
 	}
-	return eg.Wait()
+	wg.Wait()
+	return errors.Join(errs...)
 }