Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3014f7a

Browse files
[Feature] Unify errors (#1937)
1 parent 6b82a17 commit 3014f7a

File tree

5 files changed

+54
-44
lines changed

5 files changed

+54
-44
lines changed

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- (Documentation) Add Required & Skip in Docs
99
- (Feature) (Platform) ECS Storage
1010
- (Bugfix) (Platform) Prevent NPE in case of missing Helm Release
11+
- (Feature) Unify Errors
1112

1213
## [1.2.50](https://github.com/arangodb/kube-arangodb/tree/1.2.50) (2025年07月04日)
1314
- (Feature) (Platform) MetaV1 Integration Service

‎pkg/apis/deployment/v1/server_group_volume_test.go‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@ import (
2828
core "k8s.io/api/core/v1"
2929

3030
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
31+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3132
)
3233

3334
const (
@@ -192,12 +193,12 @@ func Test_Volume_Validation(t *testing.T) {
192193
if c.fail {
193194
require.Error(t, err)
194195

195-
mergedErr, ok := err.(shared.MergedErrors)
196+
mergedErr, ok := err.(errors.Array)
196197
require.True(t, ok, "Is not MergedError type")
197198

198-
require.Equal(t, len(mergedErr.Errors()), len(c.failedFields), "Count of expected fields and merged errors does not match")
199+
require.Equal(t, len(mergedErr), len(c.failedFields), "Count of expected fields and merged errors does not match")
199200

200-
for _, fieldError := range mergedErr.Errors() {
201+
for _, fieldError := range mergedErr {
201202
resourceErr, ok := fieldError.(shared.ResourceError)
202203
if !ok {
203204
resourceErr = shared.ResourceError{

‎pkg/apis/deployment/v2alpha1/server_group_volume_test.go‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@ import (
2828
core "k8s.io/api/core/v1"
2929

3030
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
31+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3132
)
3233

3334
const (
@@ -192,12 +193,12 @@ func Test_Volume_Validation(t *testing.T) {
192193
if c.fail {
193194
require.Error(t, err)
194195

195-
mergedErr, ok := err.(shared.MergedErrors)
196+
mergedErr, ok := err.(errors.Array)
196197
require.True(t, ok, "Is not MergedError type")
197198

198-
require.Equal(t, len(mergedErr.Errors()), len(c.failedFields), "Count of expected fields and merged errors does not match")
199+
require.Equal(t, len(mergedErr), len(c.failedFields), "Count of expected fields and merged errors does not match")
199200

200-
for _, fieldError := range mergedErr.Errors() {
201+
for _, fieldError := range mergedErr {
201202
resourceErr, ok := fieldError.(shared.ResourceError)
202203
if !ok {
203204
resourceErr = shared.ResourceError{

‎pkg/apis/shared/errors.go‎

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ package shared
2323
import (
2424
"fmt"
2525
"io"
26-
goStrings "strings"
26+
27+
"github.com/arangodb/kube-arangodb/pkg/util/errors"
2728
)
2829

2930
type ResourceError struct {
@@ -84,38 +85,16 @@ func PrefixResourceErrors(prefix string, errs ...error) error {
8485

8586
for _, err := range errs {
8687
switch errType := err.(type) {
87-
case MergedErrors:
88-
for _, subError := range errType.errors {
88+
case errors.Array:
89+
for _, subError := range errType {
8990
prefixed = append(prefixed, PrefixResourceError(prefix, subError))
9091
}
9192
default:
9293
prefixed = append(prefixed, PrefixResourceError(prefix, err))
9394
}
9495
}
9596

96-
return WithErrors(prefixed...)
97-
}
98-
99-
type MergedErrors struct {
100-
errors []error
101-
}
102-
103-
func (m MergedErrors) Error() string {
104-
errStrings := make([]string, 0, len(m.errors))
105-
106-
for _, err := range m.errors {
107-
if err == nil {
108-
continue
109-
}
110-
111-
errStrings = append(errStrings, err.Error())
112-
}
113-
114-
return fmt.Sprintf("Received %d errors: %s", len(errStrings), goStrings.Join(errStrings, ", "))
115-
}
116-
117-
func (m MergedErrors) Errors() []error {
118-
return m.errors
97+
return errors.Errors(prefixed...)
11998
}
12099

121100
// WithErrors filter out nil errors
@@ -128,18 +107,12 @@ func WithErrors(errs ...error) error {
128107
}
129108

130109
switch errType := err.(type) {
131-
case MergedErrors:
132-
filteredErrs = append(filteredErrs, errType.errors...)
110+
case errors.Array:
111+
filteredErrs = append(filteredErrs, errType...)
133112
default:
134113
filteredErrs = append(filteredErrs, err)
135114
}
136115
}
137116

138-
if len(filteredErrs) == 0 {
139-
return nil
140-
}
141-
142-
return MergedErrors{
143-
errors: filteredErrs,
144-
}
117+
return errors.Errors(filteredErrs...)
145118
}

‎pkg/util/errors/errors_array.go‎

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,25 @@
2121
package errors
2222

2323
import (
24+
"errors"
2425
"fmt"
26+
"io"
2527
goStrings "strings"
2628
)
2729

30+
func ExpandArray(err error) []error {
31+
if err == nil {
32+
return nil
33+
}
34+
35+
var v Array
36+
if errors.As(err, &v) {
37+
return v
38+
}
39+
40+
return []error{err}
41+
}
42+
2843
type Array []error
2944

3045
func (a Array) Error() string {
@@ -37,6 +52,25 @@ func (a Array) Error() string {
3752
return fmt.Sprintf("Received %d errors: %s", len(q), goStrings.Join(q, ", "))
3853
}
3954

55+
// Format formats error with verbs
56+
func (p Array) Format(s fmt.State, verb rune) {
57+
switch verb {
58+
case 'v':
59+
if s.Flag('+') {
60+
fmt.Fprintf(s, "%s\n", p.Error())
61+
for _, err := range p {
62+
fmt.Fprintf(s, "%+v\n", err)
63+
}
64+
return
65+
}
66+
fallthrough
67+
case 's':
68+
io.WriteString(s, p.Error())
69+
case 'q':
70+
fmt.Fprintf(s, "%q", p.Error())
71+
}
72+
}
73+
4074
func Errors(errs ...error) error {
4175
f := make(Array, 0, len(errs))
4276

@@ -45,7 +79,7 @@ func Errors(errs ...error) error {
4579
continue
4680
}
4781

48-
f = append(f, err)
82+
f = append(f, ExpandArray(err)...)
4983
}
5084

5185
if len(f) == 0 {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /