mirror of
https://github.com/prometheus/prometheus.git
synced 2025-01-22 19:26:56 -08:00
Fix context.Canceled wrapping in compaction
We need to make sure that `tsdb_errors.NewMulti` handles the errors.Is() calls properly, like it's done in grafana/dskit. Also we need to check that `errors.Is(err, context.Canceled)`, not that `err == context.Canceled`. Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
This commit is contained in:
parent
dfbd52113b
commit
1535deb62c
|
@ -539,7 +539,7 @@ func (c *LeveledCompactor) compact(dest string, dirs []string, open []*Block, sh
|
||||||
}
|
}
|
||||||
|
|
||||||
errs := tsdb_errors.NewMulti(err)
|
errs := tsdb_errors.NewMulti(err)
|
||||||
if err != context.Canceled {
|
if !errors.Is(err, context.Canceled) {
|
||||||
for _, b := range bs {
|
for _, b := range bs {
|
||||||
if err := b.setCompactionFailed(); err != nil {
|
if err := b.setCompactionFailed(); err != nil {
|
||||||
errs.Add(errors.Wrapf(err, "setting compaction failed for block: %s", b.Dir()))
|
errs.Add(errors.Wrapf(err, "setting compaction failed for block: %s", b.Dir()))
|
||||||
|
|
|
@ -16,6 +16,7 @@ package errors
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
@ -79,6 +80,19 @@ func (es nonNilMultiError) Error() string {
|
||||||
return buf.String()
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is attempts to match the provided error against errors in the error list.
|
||||||
|
//
|
||||||
|
// This function allows errors.Is to traverse the values stored in the MultiError.
|
||||||
|
// It returns true if any of the errors in the list match the target.
|
||||||
|
func (es nonNilMultiError) Is(target error) bool {
|
||||||
|
for _, err := range es.errs {
|
||||||
|
if errors.Is(err, target) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// CloseAll closes all given closers while recording error in MultiError.
|
// CloseAll closes all given closers while recording error in MultiError.
|
||||||
func CloseAll(cs []io.Closer) error {
|
func CloseAll(cs []io.Closer) error {
|
||||||
errs := NewMulti()
|
errs := NewMulti()
|
||||||
|
|
Loading…
Reference in a new issue