From 4cde79e802b1431c4ba041cb8d48cc831464a231 Mon Sep 17 00:00:00 2001 From: Alexander Akhmetov Date: Mon, 2 Jun 2025 10:30:04 +0200 Subject: [PATCH] Alerting: Clean up join errors code (#106243) --- .../ngalert/state/historian/multiple.go | 53 +------------------ 1 file changed, 2 insertions(+), 51 deletions(-) diff --git a/pkg/services/ngalert/state/historian/multiple.go b/pkg/services/ngalert/state/historian/multiple.go index baf9ff4a69b..affd17e1263 100644 --- a/pkg/services/ngalert/state/historian/multiple.go +++ b/pkg/services/ngalert/state/historian/multiple.go @@ -2,6 +2,7 @@ package historian import ( "context" + "errors" "github.com/grafana/grafana-plugin-sdk-go/data" ngmodels "github.com/grafana/grafana/pkg/services/ngalert/models" @@ -44,7 +45,7 @@ func (h *MultipleBackend) Record(ctx context.Context, rule history_model.RuleMet errs = append(errs, err) } } - errCh <- Join(errs...) + errCh <- errors.Join(errs...) }() return errCh } @@ -52,53 +53,3 @@ func (h *MultipleBackend) Record(ctx context.Context, rule history_model.RuleMet func (h *MultipleBackend) Query(ctx context.Context, query ngmodels.HistoryQuery) (*data.Frame, error) { return h.primary.Query(ctx, query) } - -// TODO: This is vendored verbatim from the Go standard library. -// TODO: The grafana project doesn't support go 1.20 yet, so we can't use errors.Join() directly. -// TODO: Remove this and replace calls with "errors.Join(...)" when go 1.20 becomes the minimum supported version. -// -// Join returns an error that wraps the given errors. -// Any nil error values are discarded. -// Join returns nil if errs contains no non-nil values. -// The error formats as the concatenation of the strings obtained -// by calling the Error method of each element of errs, with a newline -// between each string. -func Join(errs ...error) error { - n := 0 - for _, err := range errs { - if err != nil { - n++ - } - } - if n == 0 { - return nil - } - e := &joinError{ - errs: make([]error, 0, n), - } - for _, err := range errs { - if err != nil { - e.errs = append(e.errs, err) - } - } - return e -} - -type joinError struct { - errs []error -} - -func (e *joinError) Error() string { - var b []byte - for i, err := range e.errs { - if i > 0 { - b = append(b, '\n') - } - b = append(b, err.Error()...) - } - return string(b) -} - -func (e *joinError) Unwrap() []error { - return e.errs -}