Skip to content

Commit a8b2981

Browse files
committed
refactor errors
1 parent d8ac04c commit a8b2981

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+281
-250
lines changed

auth/simple/simple.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ func (b *BasicAuth) UnaryInterceptor(ctx context.Context, req interface{}, info
4040
func (b *BasicAuth) doAuth(ctx context.Context) error {
4141
meta, ok := metadata.FromIncomingContext(ctx)
4242
if !ok {
43-
return types.ErrBadMeta
43+
return types.ErrInvaildGRPCRequestMeta
4444
}
4545
passwords, ok := meta[b.username]
4646
if !ok {
47-
return types.ErrInvaildUsername
47+
return types.ErrInvaildGRPCUsername
4848
}
4949
if len(passwords) < 1 || passwords[0] != b.password {
50-
return types.ErrInvaildPassword
50+
return types.ErrInvaildGRPCPassword
5151
}
5252
return nil
5353
}

client/clientpool.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type Pool struct {
3232
// NewCoreRPCClientPool .
3333
func NewCoreRPCClientPool(ctx context.Context, config *PoolConfig) (*Pool, error) {
3434
if len(config.EruAddrs) == 0 {
35-
return nil, types.ErrBadIPAddress
35+
return nil, types.ErrInvaildEruIPAddress
3636
}
3737
c := &Pool{rpcClients: []*clientWithStatus{}}
3838
for _, addr := range config.EruAddrs {

cluster/calcium/build.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"os"
1010
"time"
1111

12-
"github.com/pkg/errors"
12+
"github.com/cockroachdb/errors"
1313
enginetypes "github.com/projecteru2/core/engine/types"
1414
"github.com/projecteru2/core/log"
1515
"github.com/projecteru2/core/types"
@@ -21,8 +21,7 @@ func (c *Calcium) BuildImage(ctx context.Context, opts *types.BuildOptions) (ch
2121
logger := log.WithField("Calcium", "BuildImage").WithField("opts", opts)
2222
// Disable build API if scm not set
2323
if c.source == nil {
24-
logger.Error(ctx, types.ErrSCMNotSet)
25-
return nil, types.ErrSCMNotSet
24+
return nil, types.ErrNoSCMSetting
2625
}
2726
// select nodes
2827
node, err := c.selectBuildNode(ctx)
@@ -45,8 +44,7 @@ func (c *Calcium) BuildImage(ctx context.Context, opts *types.BuildOptions) (ch
4544
case types.BuildFromExist:
4645
refs, node, resp, err = c.buildFromExist(ctx, opts)
4746
default:
48-
logger.Error(ctx, types.ErrUnknownBuildType)
49-
return nil, types.ErrUnknownBuildType
47+
return nil, types.ErrInvaildBuildType
5048
}
5149
if err != nil {
5250
logger.Error(ctx, err)
@@ -71,7 +69,7 @@ func (c *Calcium) selectBuildNode(ctx context.Context) (*types.Node, error) {
7169
}
7270

7371
if len(nodes) == 0 {
74-
return nil, types.ErrInsufficientNodes
72+
return nil, types.ErrInsufficientCapacity
7573
}
7674
// get idle max node
7775
return c.getMostIdleNode(ctx, nodes)

cluster/calcium/build_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func TestBuild(t *testing.T) {
6464
c.config.Docker.BuildPod = "test"
6565
// failed by ListPodNodes failed
6666
store := c.store.(*storemocks.Store)
67-
store.On("GetNodesByPod", mock.Anything, mock.Anything).Return(nil, types.ErrBadMeta).Once()
67+
store.On("GetNodesByPod", mock.Anything, mock.Anything).Return(nil, types.ErrInvaildWorkloadMeta).Once()
6868
ch, err := c.BuildImage(ctx, opts)
6969
assert.Error(t, err)
7070
// failed by no nodes
@@ -84,7 +84,7 @@ func TestBuild(t *testing.T) {
8484
// failed by plugin error
8585
rmgr := c.rmgr.(*resourcemocks.Manager)
8686
rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil)
87-
rmgr.On("GetMostIdleNode", mock.Anything, mock.Anything).Return("", types.ErrBadCount).Once()
87+
rmgr.On("GetMostIdleNode", mock.Anything, mock.Anything).Return("", types.ErrInvaildCount).Once()
8888
ch, err = c.BuildImage(ctx, opts)
8989
assert.Error(t, err)
9090
rmgr.On("GetMostIdleNode", mock.Anything, mock.Anything).Return("test", nil)
@@ -107,7 +107,7 @@ func TestBuild(t *testing.T) {
107107
buildImageRespReader2 := io.NopCloser(bytes.NewReader(buildImageResp2))
108108
engine.On("BuildRefs", mock.Anything, mock.Anything, mock.Anything).Return([]string{"t1", "t2"})
109109
// failed by build context
110-
engine.On("BuildContent", mock.Anything, mock.Anything, mock.Anything).Return("", nil, types.ErrBadCount).Once()
110+
engine.On("BuildContent", mock.Anything, mock.Anything, mock.Anything).Return("", nil, types.ErrInvaildCount).Once()
111111
ch, err = c.BuildImage(ctx, opts)
112112
assert.Error(t, err)
113113
b := io.NopCloser(bytes.NewReader([]byte{}))

cluster/calcium/capacity.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/sanity-io/litter"
1111
"golang.org/x/exp/maps"
1212

13-
"github.com/pkg/errors"
13+
"github.com/cockroachdb/errors"
1414
)
1515

1616
// CalculateCapacity calculates capacity
@@ -45,7 +45,7 @@ func (c *Calcium) CalculateCapacity(ctx context.Context, opts *types.DeployOptio
4545
return err
4646
}
4747
if msg.Total <= 0 {
48-
return errors.Wrap(types.ErrInsufficientRes, "no node meets all the resource requirements at the same time")
48+
return errors.Wrap(types.ErrInsufficientResource, "no node meets all the resource requirements at the same time")
4949
}
5050
for node, info := range infos {
5151
msg.NodeCapacities[node] = info.Capacity

cluster/calcium/control.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (c *Calcium) ControlWorkload(ctx context.Context, ids []string, t string, f
4444
message = append(message, startHook...)
4545
return err
4646
}
47-
return types.ErrUnknownControlType
47+
return types.ErrInvaildControlType
4848
})
4949
if err == nil {
5050
logger.Infof(ctx, "[ControlWorkload] Workload %s %s", id, t)

cluster/calcium/create.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@ func (c *Calcium) CreateWorkload(ctx context.Context, opts *types.DeployOptions)
2626
logger.Error(ctx, err)
2727
return nil, err
2828
}
29-
3029
opts.ProcessIdent = utils.RandomString(16)
3130
logger.Infof(ctx, "[CreateWorkload %s] Creating workload with options:\n%s", opts.ProcessIdent, litter.Options{Compact: true}.Sdump(opts))
3231
// Count 要大于0
3332
if opts.Count <= 0 {
34-
err := types.NewDetailedErr(types.ErrBadCount, opts.Count)
33+
err := types.NewDetailedErr(types.ErrInvaildCount, opts.Count)
3534
logger.Error(ctx, err)
3635
return nil, err
3736
}

cluster/calcium/create_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func TestCreateWorkloadTxn(t *testing.T) {
136136

137137
// doAllocResource fails: Alloc
138138
rmgr.On("Alloc", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(
139-
nil, nil, types.ErrBadCPU,
139+
nil, nil, types.ErrInvalidType,
140140
).Once()
141141
ch, err = c.CreateWorkload(ctx, opts)
142142
assert.Nil(t, err)

cluster/calcium/execute_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestExecuteWorkload(t *testing.T) {
2929
store := c.store.(*storemocks.Store)
3030

3131
// failed by GetWorkload
32-
store.On("GetWorkload", mock.Anything, mock.Anything).Return(nil, types.ErrBadCount).Once()
32+
store.On("GetWorkload", mock.Anything, mock.Anything).Return(nil, types.ErrInvaildCount).Once()
3333
ID := "abc"
3434
ch := c.ExecuteWorkload(ctx, &types.ExecuteWorkloadOptions{WorkloadID: ID}, nil)
3535
for ac := range ch {

cluster/calcium/log_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestLogStream(t *testing.T) {
3535
}
3636
store.On("GetWorkload", mock.Anything, mock.Anything).Return(workload, nil)
3737
// failed by VirtualizationLogs
38-
engine.On("VirtualizationLogs", mock.Anything, mock.Anything).Return(nil, nil, types.ErrNodeExist).Once()
38+
engine.On("VirtualizationLogs", mock.Anything, mock.Anything).Return(nil, nil, types.ErrInvalidType).Once()
3939
ch, err = c.LogStream(ctx, opts)
4040
assert.NoError(t, err)
4141
for c := range ch {

cluster/calcium/replace.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/projecteru2/core/types"
1212
"github.com/projecteru2/core/utils"
1313

14-
"github.com/pkg/errors"
14+
"github.com/cockroachdb/errors"
1515
)
1616

1717
// ReplaceWorkload replace workloads with same resource
@@ -73,7 +73,7 @@ func (c *Calcium) ReplaceWorkload(ctx context.Context, opts *types.ReplaceOption
7373
if err != nil {
7474
return err
7575
} else if !info.Running {
76-
return types.NewDetailedErr(types.ErrNotSupport,
76+
return types.NewDetailedErr(types.ErrInvaildWorkloadOps,
7777
fmt.Sprintf("workload %s is not running, can not inherit", workload.ID),
7878
)
7979
}
@@ -114,7 +114,7 @@ func (c *Calcium) doReplaceWorkload(
114114
}
115115
// label filter
116116
if !utils.LabelsFilter(workload.Labels, opts.FilterLabels) {
117-
return nil, removeMessage, types.ErrNotFitLabels
117+
return nil, removeMessage, types.ErrWorkloadIgnored
118118
}
119119
// prepare node
120120
node, err := c.doGetAndPrepareNode(ctx, workload.Nodename, opts.Image)

cluster/calcium/replace_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func TestReplaceWorkload(t *testing.T) {
143143
store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil)
144144
// failed by VirtualizationCopyFrom
145145
opts.Copy = map[string]string{"src": "dst"}
146-
engine.On("VirtualizationCopyFrom", mock.Anything, mock.Anything, mock.Anything).Return(nil, 0, 0, int64(0), types.ErrBadWorkloadID).Once()
146+
engine.On("VirtualizationCopyFrom", mock.Anything, mock.Anything, mock.Anything).Return(nil, 0, 0, int64(0), types.ErrInvalidType).Once()
147147
ch, err = c.ReplaceWorkload(ctx, opts)
148148
assert.NoError(t, err)
149149
for r := range ch {

cluster/calcium/service.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/projecteru2/core/types"
1010
"github.com/projecteru2/core/utils"
1111

12-
"github.com/pkg/errors"
12+
"github.com/cockroachdb/errors"
1313
)
1414

1515
// WatchServiceStatus returns chan of available service address

cluster/calcium/stream.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"io"
88
"sync"
99

10-
"github.com/pkg/errors"
10+
"github.com/cockroachdb/errors"
1111
"github.com/projecteru2/core/engine"
1212
enginetypes "github.com/projecteru2/core/engine/types"
1313
"github.com/projecteru2/core/log"

cluster/calcium/wal.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import (
66
"sync"
77
"time"
88

9+
"github.com/cockroachdb/errors"
910
"github.com/panjf2000/ants/v2"
10-
"github.com/pkg/errors"
1111
"github.com/projecteru2/core/cluster"
1212
"github.com/projecteru2/core/log"
1313
"github.com/projecteru2/core/store"

cluster/calcium/wal_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func TestHandleCreateWorkloadError(t *testing.T) {
7979

8080
store := c.store.(*storemocks.Store)
8181

82-
err = types.NewDetailedErr(types.ErrBadCount, fmt.Sprintf("keys: [%s]", wrkid))
82+
err = types.NewDetailedErr(types.ErrInvaildCount, fmt.Sprintf("keys: [%s]", wrkid))
8383
store.On("GetWorkload", mock.Anything, mock.Anything).Return(wrk, err).Once()
8484
store.On("GetNode", mock.Anything, mock.Anything).Return(nil, err).Once()
8585
c.wal.Recover(context.TODO())
@@ -133,7 +133,7 @@ func TestHandleCreateWorkloadHandled(t *testing.T) {
133133
}
134134

135135
store := c.store.(*storemocks.Store)
136-
err = types.NewDetailedErr(types.ErrBadCount, fmt.Sprintf("keys: [%s]", wrkid))
136+
err = types.NewDetailedErr(types.ErrInvaildCount, fmt.Sprintf("keys: [%s]", wrkid))
137137
store.On("GetWorkload", mock.Anything, wrkid).Return(nil, err).Once()
138138
store.On("GetNode", mock.Anything, wrk.Nodename).Return(node, nil)
139139

discovery/helium/helium.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"sync"
66
"time"
77

8-
"github.com/pkg/errors"
8+
"github.com/cockroachdb/errors"
99
"github.com/projecteru2/core/log"
1010
"github.com/projecteru2/core/store"
1111
"github.com/projecteru2/core/types"

engine/docker/container.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (e *Engine) VirtualizationCreate(ctx context.Context, opts *enginetypes.Vir
8989

9090
// memory should more than 4MiB
9191
if opts.Memory > 0 && opts.Memory < minMemory || opts.Memory < 0 {
92-
return r, coretypes.ErrBadMemory
92+
return r, coretypes.ErrInvaildMemory
9393
}
9494
// set default log driver if lambda
9595
if opts.Lambda {
@@ -408,11 +408,11 @@ func (e *Engine) VirtualizationUpdateResource(ctx context.Context, ID string, op
408408
}
409409

410410
if resourceOpts.Memory > 0 && resourceOpts.Memory < minMemory || resourceOpts.Memory < 0 {
411-
return coretypes.ErrBadMemory
411+
return coretypes.ErrInvaildMemory
412412
}
413413
if len(opts.Volumes) > 0 || resourceOpts.VolumeChanged {
414414
log.Errorf(ctx, err, "[VirtualizationUpdateResource] docker engine not support rebinding volume resource: %+v", resourceOpts.Volumes)
415-
return coretypes.ErrNotSupport
415+
return coretypes.ErrInvaildWorkloadOps
416416
}
417417

418418
memory := resourceOpts.Memory

engine/docker/network.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (e *Engine) makeIPV4EndpointSetting(ipv4 string) (*dockernetwork.EndpointSe
6969
if ipv4 != "" {
7070
ip := net.ParseIP(ipv4)
7171
if ip == nil {
72-
return nil, coretypes.NewDetailedErr(coretypes.ErrBadIPAddress, ipv4)
72+
return nil, coretypes.NewDetailedErr(coretypes.ErrInvaildIPAddress, ipv4)
7373
}
7474
config.IPAMConfig.IPv4Address = ip.String()
7575
}

engine/factory/factory.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ func getEnginePrefix(endpoint string) (string, error) {
192192
return prefix, nil
193193
}
194194
}
195-
return "", types.NewDetailedErr(types.ErrNodeFormat, fmt.Sprintf("endpoint invalid %+v", endpoint))
195+
return "", types.NewDetailedErr(types.ErrInvaildNodeEndpoint, fmt.Sprintf("endpoint invalid %+v", endpoint))
196196
}
197197

198198
func getEngineCacheKey(endpoint, ca, cert, key string) string {
@@ -207,7 +207,7 @@ func newEngine(ctx context.Context, config types.Config, nodename, endpoint, ca,
207207
}
208208
e, ok := engines[prefix]
209209
if !ok {
210-
return nil, types.ErrNotSupport
210+
return nil, types.ErrNotSupportEndpoint
211211
}
212212
utils.WithTimeout(ctx, config.ConnectionTimeout, func(ctx context.Context) {
213213
client, err = e(ctx, config, nodename, endpoint, ca, cert, key)

engine/virt/helper.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"strconv"
77
"strings"
88

9-
"github.com/pkg/errors"
9+
"github.com/cockroachdb/errors"
1010
coretypes "github.com/projecteru2/core/types"
1111
)
1212

@@ -19,7 +19,7 @@ func (v *Virt) parseVolumes(volumes []string) ([]string, error) {
1919
for _, bind := range volumes {
2020
parts := strings.Split(bind, ":")
2121
if len(parts) != 4 && len(parts) != 8 {
22-
return nil, coretypes.NewDetailedErr(coretypes.ErrInvalidBind, bind)
22+
return nil, coretypes.NewDetailedErr(coretypes.ErrInvalidVolumeBind, bind)
2323
}
2424

2525
src := parts[0]

engine/virt/image.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (v *Virt) ImageBuildFromExist(ctx context.Context, ID string, refs []string
102102
return "", types.ErrNoImageUser
103103
}
104104
if len(refs) != 1 {
105-
return "", types.ErrBadRefs
105+
return "", types.ErrInvaildRefs
106106
}
107107

108108
_, imgName, err := splitUserImage(refs[0])
@@ -154,7 +154,7 @@ func (v *Virt) ImageRemoteDigest(ctx context.Context, image string) (string, err
154154
case err != nil:
155155
return "", err
156156
case len(digests) < 1:
157-
return "", types.ErrNoRemoteDigest
157+
return "", types.ErrInvaildRemoteDigest
158158
default:
159159
return digests[0], nil
160160
}

engine/virt/virt.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func MakeClient(ctx context.Context, config coretypes.Config, nodename, endpoint
4949
case strings.HasPrefix(endpoint, GRPCPrefixKey):
5050
uri = "grpc://" + strings.TrimPrefix(endpoint, GRPCPrefixKey)
5151
default:
52-
return nil, coretypes.ErrNotSupport
52+
return nil, coretypes.ErrNotSupportEndpoint
5353
}
5454

5555
cli, err := virtapi.New(uri)

go.mod

+8-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ require (
66
github.com/CMGS/statsd v0.0.0-20160223095033-48c421b3c1ab
77
github.com/alicebob/miniredis/v2 v2.14.3
88
github.com/cenkalti/backoff/v4 v4.1.1
9+
github.com/cockroachdb/errors v1.9.0
910
github.com/cornelk/hashmap v1.0.9-0.20221102000129-36b3b9c2b7ec
1011
github.com/docker/distribution v2.8.0+incompatible
1112
github.com/docker/docker v20.10.0+incompatible
1213
github.com/docker/go-connections v0.4.0
1314
github.com/docker/go-units v0.4.0
14-
github.com/getsentry/sentry-go v0.9.0
15+
github.com/getsentry/sentry-go v0.12.0
1516
github.com/go-git/go-git/v5 v5.2.0
1617
github.com/go-ping/ping v0.0.0-20210407214646-e4e642a95741
1718
github.com/go-redis/redis/v8 v8.8.2
@@ -53,6 +54,8 @@ require (
5354
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect
5455
github.com/beorn7/perks v1.0.1 // indirect
5556
github.com/cespare/xxhash/v2 v2.1.1 // indirect
57+
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
58+
github.com/cockroachdb/redact v1.1.3 // indirect
5659
github.com/containerd/cgroups v1.0.3 // indirect
5760
github.com/containerd/containerd v1.5.13 // indirect
5861
github.com/containerd/continuity v0.1.0 // indirect
@@ -84,6 +87,8 @@ require (
8487
github.com/json-iterator/go v1.1.11 // indirect
8588
github.com/juju/errors v0.0.0-20220331221717-b38fca44723b // indirect
8689
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect
90+
github.com/kr/pretty v0.3.0 // indirect
91+
github.com/kr/text v0.2.0 // indirect
8792
github.com/mattn/go-colorable v0.1.12 // indirect
8893
github.com/mattn/go-isatty v0.0.14 // indirect
8994
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
@@ -100,6 +105,7 @@ require (
100105
github.com/prometheus/client_model v0.2.0 // indirect
101106
github.com/prometheus/common v0.26.0 // indirect
102107
github.com/prometheus/procfs v0.6.0 // indirect
108+
github.com/rogpeppe/go-internal v1.8.1 // indirect
103109
github.com/russross/blackfriday/v2 v2.0.1 // indirect
104110
github.com/sergi/go-diff v1.1.0 // indirect
105111
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
@@ -136,7 +142,7 @@ require (
136142
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
137143
golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect
138144
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
139-
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
145+
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 // indirect
140146
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
141147
gopkg.in/warnings.v0 v0.1.2 // indirect
142148
gopkg.in/yaml.v2 v2.4.0 // indirect

0 commit comments

Comments
 (0)