Skip to content

Commit 221877d

Browse files
authored
*: unify the error definition (#8902)
ref #8922 Signed-off-by: Ryan Leung <[email protected]>
1 parent 2d970a6 commit 221877d

14 files changed

+346
-185
lines changed

errors.toml

+155
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ error = '''
6161
unsupported metrics type %v
6262
'''
6363

64+
["PD:cgroup:ErrNoCPUControllerDetected"]
65+
error = '''
66+
no cpu controller detected
67+
'''
68+
6469
["PD:checker:ErrCheckerMergeAgain"]
6570
error = '''
6671
region will be merged again, %s
@@ -71,6 +76,36 @@ error = '''
7176
checker not found
7277
'''
7378

79+
["PD:checker:ErrNoNewLeader"]
80+
error = '''
81+
no new leader
82+
'''
83+
84+
["PD:checker:ErrNoStoreToAdd"]
85+
error = '''
86+
no store to add peer
87+
'''
88+
89+
["PD:checker:ErrNoStoreToReplace"]
90+
error = '''
91+
no store to replace peer
92+
'''
93+
94+
["PD:checker:ErrPeerCannotBeLeader"]
95+
error = '''
96+
peer cannot be leader
97+
'''
98+
99+
["PD:checker:ErrPeerCannotBeWitness"]
100+
error = '''
101+
peer cannot be witness
102+
'''
103+
104+
["PD:checker:ErrRegionNoLeader"]
105+
error = '''
106+
region no leader
107+
'''
108+
74109
["PD:client:ErrClientCreateTSOStream"]
75110
error = '''
76111
create TSO stream failed, %s
@@ -491,6 +526,116 @@ error = '''
491526
failed to unmarshal json
492527
'''
493528

529+
["PD:keyspace:ErrExceedMaxEtcdTxnOps"]
530+
error = '''
531+
exceed max etcd txn operations
532+
'''
533+
534+
["PD:keyspace:ErrIllegalOperation"]
535+
error = '''
536+
unknown operation
537+
'''
538+
539+
["PD:keyspace:ErrKeyspaceExists"]
540+
error = '''
541+
keyspace already exists
542+
'''
543+
544+
["PD:keyspace:ErrKeyspaceGroupExists"]
545+
error = '''
546+
keyspace group already exists
547+
'''
548+
549+
["PD:keyspace:ErrKeyspaceGroupInMerging"]
550+
error = '''
551+
keyspace group %v is in merging state
552+
'''
553+
554+
["PD:keyspace:ErrKeyspaceGroupInSplit"]
555+
error = '''
556+
keyspace group %v is in split state
557+
'''
558+
559+
["PD:keyspace:ErrKeyspaceGroupNotEnoughReplicas"]
560+
error = '''
561+
not enough replicas in the keyspace group
562+
'''
563+
564+
["PD:keyspace:ErrKeyspaceGroupNotExists"]
565+
error = '''
566+
keyspace group %v does not exist
567+
'''
568+
569+
["PD:keyspace:ErrKeyspaceGroupNotInMerging"]
570+
error = '''
571+
keyspace group %v is not in merging state
572+
'''
573+
574+
["PD:keyspace:ErrKeyspaceGroupNotInSplit"]
575+
error = '''
576+
keyspace group %v is not in split state
577+
'''
578+
579+
["PD:keyspace:ErrKeyspaceGroupPrimaryNotFound"]
580+
error = '''
581+
primary of keyspace group does not exist
582+
'''
583+
584+
["PD:keyspace:ErrKeyspaceGroupWithEmptyKeyspace"]
585+
error = '''
586+
keyspace group with empty keyspace
587+
'''
588+
589+
["PD:keyspace:ErrKeyspaceNotFound"]
590+
error = '''
591+
keyspace does not exist
592+
'''
593+
594+
["PD:keyspace:ErrKeyspaceNotInAnyKeyspaceGroup"]
595+
error = '''
596+
keyspace is not in any keyspace group
597+
'''
598+
599+
["PD:keyspace:ErrKeyspaceNotInKeyspaceGroup"]
600+
error = '''
601+
keyspace is not in this keyspace group
602+
'''
603+
604+
["PD:keyspace:ErrModifyDefaultKeyspace"]
605+
error = '''
606+
cannot modify default keyspace's state
607+
'''
608+
609+
["PD:keyspace:ErrModifyDefaultKeyspaceGroup"]
610+
error = '''
611+
default keyspace group cannot be modified
612+
'''
613+
614+
["PD:keyspace:ErrNoAvailableNode"]
615+
error = '''
616+
no available node
617+
'''
618+
619+
["PD:keyspace:ErrNodeNotInKeyspaceGroup"]
620+
error = '''
621+
the tso node is not in this keyspace group
622+
'''
623+
624+
["PD:keyspace:ErrRegionSplitFailed"]
625+
error = '''
626+
region split failed
627+
'''
628+
629+
["PD:keyspace:ErrRegionSplitTimeout"]
630+
error = '''
631+
region split timeout
632+
'''
633+
634+
["PD:keyspace:ErrUnsupportedOperationInKeyspace"]
635+
error = '''
636+
it's a unsupported operation
637+
'''
638+
494639
["PD:leveldb:ErrLevelDBClose"]
495640
error = '''
496641
close leveldb error
@@ -646,6 +791,11 @@ error = '''
646791
failed to unmarshal proto
647792
'''
648793

794+
["PD:ratelimit:ErrMaxWaitingTasksExceeded"]
795+
error = '''
796+
max waiting tasks exceeded
797+
'''
798+
649799
["PD:region:ErrRegionAbnormalPeer"]
650800
error = '''
651801
region %v has abnormal peer
@@ -691,6 +841,11 @@ error = '''
691841
invalid group settings, please check the group name, priority and the number of resources
692842
'''
693843

844+
["PD:scatter:ErrEmptyRegion"]
845+
error = '''
846+
empty region
847+
'''
848+
694849
["PD:schedule:ErrCreateOperator"]
695850
error = '''
696851
unable to create operator, %s

pkg/cgroup/cgroup_cpu.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import (
1919
"path/filepath"
2020

2121
"github.com/pingcap/errors"
22-
)
2322

24-
var errNoCPUControllerDetected = errors.New("no cpu controller detected")
23+
"github.com/tikv/pd/pkg/errs"
24+
)
2525

2626
// Helper function for getCgroupCPU. Root is always "/", except in tests.
2727
func getCgroupCPUHelper(root string) (CPUUsage, error) {
@@ -32,7 +32,7 @@ func getCgroupCPUHelper(root string) (CPUUsage, error) {
3232

3333
// No CPU controller detected
3434
if path == "" {
35-
return CPUUsage{}, errNoCPUControllerDetected
35+
return CPUUsage{}, errs.ErrNoCPUControllerDetected
3636
}
3737

3838
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "cpu,cpuacct")

pkg/cgroup/cgroup_cpu_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"testing"
2727

2828
"github.com/stretchr/testify/require"
29+
30+
"github.com/tikv/pd/pkg/errs"
2931
)
3032

3133
func checkKernelVersionNewerThan(re *require.Assertions, t *testing.T, major, minor int) bool {
@@ -82,7 +84,7 @@ func TestGetCgroupCPU(t *testing.T) {
8284
}()
8385
}
8486
cpu, err := GetCgroupCPU()
85-
if err == errNoCPUControllerDetected {
87+
if err == errs.ErrNoCPUControllerDetected {
8688
// for more information, please refer https://github.com/pingcap/tidb/pull/41347
8789
if checkKernelVersionNewerThan(re, t, 4, 7) {
8890
re.NoError(err, "linux version > v4.7 and err still happens")

pkg/errs/errno.go

+73-2
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,69 @@ var (
140140

141141
// checker errors
142142
var (
143-
ErrCheckerNotFound = errors.Normalize("checker not found", errors.RFCCodeText("PD:checker:ErrCheckerNotFound"))
144-
ErrCheckerMergeAgain = errors.Normalize("region will be merged again, %s", errors.RFCCodeText("PD:checker:ErrCheckerMergeAgain"))
143+
ErrCheckerNotFound = errors.Normalize("checker not found", errors.RFCCodeText("PD:checker:ErrCheckerNotFound"))
144+
ErrCheckerMergeAgain = errors.Normalize("region will be merged again, %s", errors.RFCCodeText("PD:checker:ErrCheckerMergeAgain"))
145+
ErrNoStoreToAdd = errors.Normalize("no store to add peer", errors.RFCCodeText("PD:checker:ErrNoStoreToAdd"))
146+
ErrNoStoreToReplace = errors.Normalize("no store to replace peer", errors.RFCCodeText("PD:checker:ErrNoStoreToReplace"))
147+
ErrPeerCannotBeLeader = errors.Normalize("peer cannot be leader", errors.RFCCodeText("PD:checker:ErrPeerCannotBeLeader"))
148+
ErrPeerCannotBeWitness = errors.Normalize("peer cannot be witness", errors.RFCCodeText("PD:checker:ErrPeerCannotBeWitness"))
149+
ErrNoNewLeader = errors.Normalize("no new leader", errors.RFCCodeText("PD:checker:ErrNoNewLeader"))
150+
ErrRegionNoLeader = errors.Normalize("region no leader", errors.RFCCodeText("PD:checker:ErrRegionNoLeader"))
151+
)
152+
153+
// scatter errors
154+
var (
155+
ErrEmptyRegion = errors.Normalize("empty region", errors.RFCCodeText("PD:scatter:ErrEmptyRegion"))
156+
)
157+
158+
// keyspace errors
159+
var (
160+
// ErrKeyspaceNotFound is used to indicate target keyspace does not exist.
161+
ErrKeyspaceNotFound = errors.Normalize("keyspace does not exist", errors.RFCCodeText("PD:keyspace:ErrKeyspaceNotFound"))
162+
// ErrRegionSplitTimeout indices to split region timeout
163+
ErrRegionSplitTimeout = errors.Normalize("region split timeout", errors.RFCCodeText("PD:keyspace:ErrRegionSplitTimeout"))
164+
// ErrRegionSplitFailed indices to split region failed
165+
ErrRegionSplitFailed = errors.Normalize("region split failed", errors.RFCCodeText("PD:keyspace:ErrRegionSplitFailed"))
166+
// ErrKeyspaceExists indicates target keyspace already exists.
167+
// It's used when creating a new keyspace.
168+
ErrKeyspaceExists = errors.Normalize("keyspace already exists", errors.RFCCodeText("PD:keyspace:ErrKeyspaceExists"))
169+
// ErrKeyspaceGroupExists indicates target keyspace group already exists.
170+
ErrKeyspaceGroupExists = errors.Normalize("keyspace group already exists", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupExists"))
171+
// ErrKeyspaceNotInKeyspaceGroup is used to indicate target keyspace is not in this keyspace group.
172+
ErrKeyspaceNotInKeyspaceGroup = errors.Normalize("keyspace is not in this keyspace group", errors.RFCCodeText("PD:keyspace:ErrKeyspaceNotInKeyspaceGroup"))
173+
// ErrKeyspaceNotInAnyKeyspaceGroup is used to indicate target keyspace is not in any keyspace group.
174+
ErrKeyspaceNotInAnyKeyspaceGroup = errors.Normalize("keyspace is not in any keyspace group", errors.RFCCodeText("PD:keyspace:ErrKeyspaceNotInAnyKeyspaceGroup"))
175+
// ErrNodeNotInKeyspaceGroup is used to indicate the tso node is not in this keyspace group.
176+
ErrNodeNotInKeyspaceGroup = errors.Normalize("the tso node is not in this keyspace group", errors.RFCCodeText("PD:keyspace:ErrNodeNotInKeyspaceGroup"))
177+
// ErrKeyspaceGroupNotEnoughReplicas is used to indicate not enough replicas in the keyspace group.
178+
ErrKeyspaceGroupNotEnoughReplicas = errors.Normalize("not enough replicas in the keyspace group", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupNotEnoughReplicas"))
179+
// ErrKeyspaceGroupWithEmptyKeyspace is used to indicate keyspace group with empty keyspace.
180+
ErrKeyspaceGroupWithEmptyKeyspace = errors.Normalize("keyspace group with empty keyspace", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupWithEmptyKeyspace"))
181+
// ErrModifyDefaultKeyspaceGroup is used to indicate that default keyspace group cannot be modified.
182+
ErrModifyDefaultKeyspaceGroup = errors.Normalize("default keyspace group cannot be modified", errors.RFCCodeText("PD:keyspace:ErrModifyDefaultKeyspaceGroup"))
183+
// ErrNoAvailableNode is used to indicate no available node in the keyspace group.
184+
ErrNoAvailableNode = errors.Normalize("no available node", errors.RFCCodeText("PD:keyspace:ErrNoAvailableNode"))
185+
// ErrExceedMaxEtcdTxnOps is used to indicate the number of etcd txn operations exceeds the limit.
186+
ErrExceedMaxEtcdTxnOps = errors.Normalize("exceed max etcd txn operations", errors.RFCCodeText("PD:keyspace:ErrExceedMaxEtcdTxnOps"))
187+
// ErrModifyDefaultKeyspace is used to indicate that default keyspace cannot be modified.
188+
ErrModifyDefaultKeyspace = errors.Normalize("cannot modify default keyspace's state", errors.RFCCodeText("PD:keyspace:ErrModifyDefaultKeyspace"))
189+
// ErrIllegalOperation is used to indicate this is an illegal operation.
190+
ErrIllegalOperation = errors.Normalize("unknown operation", errors.RFCCodeText("PD:keyspace:ErrIllegalOperation"))
191+
// ErrUnsupportedOperationInKeyspace is used to indicate this is an unsupported operation.
192+
ErrUnsupportedOperationInKeyspace = errors.Normalize("it's a unsupported operation", errors.RFCCodeText("PD:keyspace:ErrUnsupportedOperationInKeyspace"))
193+
// ErrKeyspaceGroupPrimaryNotFound is used to indicate primary of target keyspace group does not exist.
194+
ErrKeyspaceGroupPrimaryNotFound = errors.Normalize("primary of keyspace group does not exist", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupPrimaryNotFound"))
195+
// ErrKeyspaceGroupNotExists is used to indicate target keyspace group does not exist.
196+
ErrKeyspaceGroupNotExists = errors.Normalize("keyspace group %v does not exist", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupNotExists"))
197+
// ErrKeyspaceGroupInSplit is used to indicate target keyspace group is in split state.
198+
ErrKeyspaceGroupInSplit = errors.Normalize("keyspace group %v is in split state", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupInSplit"))
199+
// ErrKeyspaceGroupNotInSplit is used to indicate target keyspace group is not in split state.
200+
ErrKeyspaceGroupNotInSplit = errors.Normalize("keyspace group %v is not in split state", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupNotInSplit"))
201+
// ErrKeyspaceGroupInMerging is used to indicate target keyspace group is in merging state.
202+
ErrKeyspaceGroupInMerging = errors.Normalize("keyspace group %v is in merging state", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupInMerging"))
203+
// ErrKeyspaceGroupNotInMerging is used to indicate target keyspace group is not in merging state.
204+
ErrKeyspaceGroupNotInMerging = errors.Normalize("keyspace group %v is not in merging state", errors.RFCCodeText("PD:keyspace:ErrKeyspaceGroupNotInMerging"))
205+
// errKeyspaceGroupNotInMerging is used to indicate target keyspace group is not in merging state.
145206
)
146207

147208
// diagnostic errors
@@ -229,6 +290,16 @@ var (
229290
ErrBytesToUint64 = errors.Normalize("invalid data, must 8 bytes, but %d", errors.RFCCodeText("PD:typeutil:ErrBytesToUint64"))
230291
)
231292

293+
// cgroup errors
294+
var (
295+
ErrNoCPUControllerDetected = errors.Normalize("no cpu controller detected", errors.RFCCodeText("PD:cgroup:ErrNoCPUControllerDetected"))
296+
)
297+
298+
// ratelimit errors
299+
var (
300+
ErrMaxWaitingTasksExceeded = errors.Normalize("max waiting tasks exceeded", errors.RFCCodeText("PD:ratelimit:ErrMaxWaitingTasksExceeded"))
301+
)
302+
232303
// The third-party project error.
233304
// url errors
234305
var (

pkg/gc/safepoint_v2.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/pingcap/kvproto/pkg/keyspacepb"
2626
"github.com/pingcap/log"
2727

28+
"github.com/tikv/pd/pkg/errs"
2829
"github.com/tikv/pd/pkg/keyspace"
2930
"github.com/tikv/pd/pkg/slice"
3031
"github.com/tikv/pd/pkg/storage/endpoint"
@@ -101,7 +102,7 @@ func (manager *SafePointV2Manager) checkKeyspace(keyspaceID uint32, updateReques
101102
}
102103
// If a keyspace does not exist, then loading its gc safe point is prohibited.
103104
if meta == nil {
104-
return keyspace.ErrKeyspaceNotFound
105+
return errs.ErrKeyspaceNotFound
105106
}
106107
// If keyspace's state does not permit updating safe point, we return error.
107108
if updateRequest && !slice.Contains(allowUpdateSafePoint, meta.GetState()) {

0 commit comments

Comments
 (0)