Skip to content

Commit cbf7415

Browse files
cfzjywxktiancaiamao
authored andcommitted
*: add errcode for structure, tablecodec, admin files (pingcap#14054)
1 parent b8dad33 commit cbf7415

15 files changed

+110
-58
lines changed

executor/admin_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ func (s *testSuite2) TestAdminCheckPartitionTableFailed(c *C) {
433433
err = txn.Commit(context.Background())
434434
c.Assert(err, IsNil)
435435
err = tk.ExecToErr("admin check table admin_test_p")
436-
c.Assert(err.Error(), Equals, fmt.Sprintf("[executor:8003]admin_test_p err:[admin:1]index:<nil> != record:&admin.RecordData{Handle:%d, Values:[]types.Datum{types.Datum{k:0x1, collation:0x0, decimal:0x0, length:0x0, i:%d, b:[]uint8(nil), x:interface {}(nil)}}}", i, i))
436+
c.Assert(err.Error(), Equals, fmt.Sprintf("[executor:8003]admin_test_p err:[admin:8223]index:<nil> != record:&admin.RecordData{Handle:%d, Values:[]types.Datum{types.Datum{k:0x1, collation:0x0, decimal:0x0, length:0x0, i:%d, b:[]uint8(nil), x:interface {}(nil)}}}", i, i))
437437
c.Assert(executor.ErrAdminCheckTable.Equal(err), IsTrue)
438438
// TODO: fix admin recover for partition table.
439439
//r := tk.MustQuery("admin recover index admin_test_p idx")
@@ -527,7 +527,7 @@ func (s *testSuite5) TestAdminCheckTableFailed(c *C) {
527527
c.Assert(err, IsNil)
528528
err = tk.ExecToErr("admin check table admin_test")
529529
c.Assert(err.Error(), Equals,
530-
"[executor:8003]admin_test err:[admin:1]index:<nil> != record:&admin.RecordData{Handle:-1, Values:[]types.Datum{types.Datum{k:0x1, collation:0x0, decimal:0x0, length:0x0, i:-10, b:[]uint8(nil), x:interface {}(nil)}}}")
530+
"[executor:8003]admin_test err:[admin:8223]index:<nil> != record:&admin.RecordData{Handle:-1, Values:[]types.Datum{types.Datum{k:0x1, collation:0x0, decimal:0x0, length:0x0, i:-10, b:[]uint8(nil), x:interface {}(nil)}}}")
531531
c.Assert(executor.ErrAdminCheckTable.Equal(err), IsTrue)
532532
r := tk.MustQuery("admin recover index admin_test c2")
533533
r.Check(testkit.Rows("1 7"))

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ require (
3737
github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e
3838
github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03
3939
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9
40-
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01
40+
github.com/pingcap/parser v0.0.0-20191216031109-53ef01243aa6
4141
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d
4242
github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3
4343
github.com/pingcap/tidb-tools v3.0.6-0.20191106033616-90632dda3863+incompatible

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03/go.mod h1:WWLmULLO
190190
github.com/pingcap/log v0.0.0-20190715063458-479153f07ebd/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw=
191191
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA=
192192
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8=
193-
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01 h1:q1rGnV/296//bArDP7cDWWaSrhaeEKZY+gIo+Jb0Gyk=
194-
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA=
193+
github.com/pingcap/parser v0.0.0-20191216031109-53ef01243aa6 h1:aAhPfDloqGNCYkY0/vpcRGneyum5Sph4+foxA4XzarU=
194+
github.com/pingcap/parser v0.0.0-20191216031109-53ef01243aa6/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA=
195195
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d h1:0uUwCayeh1U4r1n7kb4gHf2ZbiI9fuVtXPCEpb2piBY=
196196
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d/go.mod h1:Z/VMtXHpkOP+MnYnk4TL5VHc3ZwO1qHwc89zDuf5n8Q=
197197
github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3 h1:HCNif3lukL83gNC2EBAoh2Qbz36+2p0bm0LjgnNfl1s=

meta/meta_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ func (s *testSuite) TestSnapshot(c *C) {
294294
c.Assert(n, Equals, int64(1))
295295
_, err = snapMeta.GenGlobalID()
296296
c.Assert(err, NotNil)
297-
c.Assert(err.Error(), Equals, "[structure:5]write on snapshot")
297+
c.Assert(err.Error(), Equals, "[structure:8220]write on snapshot")
298298
}
299299

300300
func (s *testSuite) TestDDL(c *C) {

structure/hash.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (meta hashMeta) IsEmpty() bool {
4646
// HSet sets the string value of a hash field.
4747
func (t *TxStructure) HSet(key []byte, field []byte, value []byte) error {
4848
if t.readWriter == nil {
49-
return errWriteOnSnapshot
49+
return ErrWriteOnSnapshot
5050
}
5151
return t.updateHash(key, field, func([]byte) ([]byte, error) {
5252
return value, nil
@@ -76,7 +76,7 @@ func (t *TxStructure) EncodeHashAutoIDKeyValue(key []byte, field []byte, val int
7676
// the value after the increment.
7777
func (t *TxStructure) HInc(key []byte, field []byte, step int64) (int64, error) {
7878
if t.readWriter == nil {
79-
return 0, errWriteOnSnapshot
79+
return 0, ErrWriteOnSnapshot
8080
}
8181
base := int64(0)
8282
err := t.updateHash(key, field, func(oldValue []byte) ([]byte, error) {
@@ -156,7 +156,7 @@ func (t *TxStructure) HLen(key []byte) (int64, error) {
156156
// HDel deletes one or more hash fields.
157157
func (t *TxStructure) HDel(key []byte, fields ...[]byte) error {
158158
if t.readWriter == nil {
159-
return errWriteOnSnapshot
159+
return ErrWriteOnSnapshot
160160
}
161161
metaKey := t.encodeHashMetaKey(key)
162162
meta, err := t.loadHashMeta(metaKey)
@@ -332,7 +332,7 @@ func (t *TxStructure) loadHashMeta(metaKey []byte) (hashMeta, error) {
332332
}
333333

334334
if len(v) != 8 {
335-
return meta, errInvalidListMetaData
335+
return meta, ErrInvalidListMetaData
336336
}
337337

338338
meta.FieldCount = int64(binary.BigEndian.Uint64(v[0:8]))

structure/list.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func (t *TxStructure) RPush(key []byte, values ...[]byte) error {
4949

5050
func (t *TxStructure) listPush(key []byte, left bool, values ...[]byte) error {
5151
if t.readWriter == nil {
52-
return errWriteOnSnapshot
52+
return ErrWriteOnSnapshot
5353
}
5454
if len(values) == 0 {
5555
return nil
@@ -92,7 +92,7 @@ func (t *TxStructure) RPop(key []byte) ([]byte, error) {
9292

9393
func (t *TxStructure) listPop(key []byte, left bool) ([]byte, error) {
9494
if t.readWriter == nil {
95-
return nil, errWriteOnSnapshot
95+
return nil, ErrWriteOnSnapshot
9696
}
9797
metaKey := t.encodeListMetaKey(key)
9898
meta, err := t.loadListMeta(metaKey)
@@ -176,7 +176,7 @@ func (t *TxStructure) LIndex(key []byte, index int64) ([]byte, error) {
176176
// LSet updates an element in the list by its index.
177177
func (t *TxStructure) LSet(key []byte, index int64, value []byte) error {
178178
if t.readWriter == nil {
179-
return errWriteOnSnapshot
179+
return ErrWriteOnSnapshot
180180
}
181181
metaKey := t.encodeListMetaKey(key)
182182
meta, err := t.loadListMeta(metaKey)
@@ -189,13 +189,13 @@ func (t *TxStructure) LSet(key []byte, index int64, value []byte) error {
189189
if index >= meta.LIndex && index < meta.RIndex {
190190
return t.readWriter.Set(t.encodeListDataKey(key, index), value)
191191
}
192-
return errInvalidListIndex.GenWithStack("invalid list index %d", index)
192+
return ErrInvalidListIndex.GenWithStack("invalid list index %d", index)
193193
}
194194

195195
// LClear removes the list of the key.
196196
func (t *TxStructure) LClear(key []byte) error {
197197
if t.readWriter == nil {
198-
return errWriteOnSnapshot
198+
return ErrWriteOnSnapshot
199199
}
200200
metaKey := t.encodeListMetaKey(key)
201201
meta, err := t.loadListMeta(metaKey)
@@ -228,7 +228,7 @@ func (t *TxStructure) loadListMeta(metaKey []byte) (listMeta, error) {
228228
}
229229

230230
if len(v) != 16 {
231-
return meta, errInvalidListMetaData
231+
return meta, ErrInvalidListMetaData
232232
}
233233

234234
meta.LIndex = int64(binary.BigEndian.Uint64(v[0:8]))

structure/string.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
// Set sets the string value of the key.
2525
func (t *TxStructure) Set(key []byte, value []byte) error {
2626
if t.readWriter == nil {
27-
return errWriteOnSnapshot
27+
return ErrWriteOnSnapshot
2828
}
2929
ek := t.encodeStringDataKey(key)
3030
return t.readWriter.Set(ek, value)
@@ -55,7 +55,7 @@ func (t *TxStructure) GetInt64(key []byte) (int64, error) {
5555
// the value after the increment.
5656
func (t *TxStructure) Inc(key []byte, step int64) (int64, error) {
5757
if t.readWriter == nil {
58-
return 0, errWriteOnSnapshot
58+
return 0, ErrWriteOnSnapshot
5959
}
6060
ek := t.encodeStringDataKey(key)
6161
// txn Inc will lock this key, so we don't lock it here.
@@ -69,7 +69,7 @@ func (t *TxStructure) Inc(key []byte, step int64) (int64, error) {
6969
// Clear removes the string value of the key.
7070
func (t *TxStructure) Clear(key []byte) error {
7171
if t.readWriter == nil {
72-
return errWriteOnSnapshot
72+
return ErrWriteOnSnapshot
7373
}
7474
ek := t.encodeStringDataKey(key)
7575
err := t.readWriter.Delete(ek)

structure/structure.go

+20-11
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,20 @@
1414
package structure
1515

1616
import (
17+
"github.com/pingcap/parser/mysql"
1718
"github.com/pingcap/parser/terror"
1819
"github.com/pingcap/tidb/kv"
1920
)
2021

21-
// structure error codes.
22-
const (
23-
codeInvalidHashKeyFlag terror.ErrCode = 1
24-
codeInvalidListMetaData terror.ErrCode = 4
25-
codeWriteOnSnapshot terror.ErrCode = 5
26-
)
27-
2822
var (
29-
errInvalidHashKeyFlag = terror.ClassStructure.New(codeInvalidHashKeyFlag, "invalid encoded hash key flag")
30-
errInvalidListIndex = terror.ClassStructure.New(codeInvalidListMetaData, "invalid list index")
31-
errInvalidListMetaData = terror.ClassStructure.New(codeInvalidListMetaData, "invalid list meta data")
32-
errWriteOnSnapshot = terror.ClassStructure.New(codeWriteOnSnapshot, "write on snapshot")
23+
// ErrInvalidHashKeyFlag used by structure
24+
ErrInvalidHashKeyFlag = terror.ClassStructure.New(mysql.ErrInvalidHashKeyFlag, mysql.MySQLErrName[mysql.ErrInvalidHashKeyFlag])
25+
// ErrInvalidListIndex used by structure
26+
ErrInvalidListIndex = terror.ClassStructure.New(mysql.ErrInvalidListIndex, mysql.MySQLErrName[mysql.ErrInvalidListIndex])
27+
// ErrInvalidListMetaData used by structure
28+
ErrInvalidListMetaData = terror.ClassStructure.New(mysql.ErrInvalidListMetaData, mysql.MySQLErrName[mysql.ErrInvalidListMetaData])
29+
// ErrWriteOnSnapshot used by structure
30+
ErrWriteOnSnapshot = terror.ClassStructure.New(mysql.ErrWriteOnSnapshot, mysql.MySQLErrName[mysql.ErrWriteOnSnapshot])
3331
)
3432

3533
// NewStructure creates a TxStructure with Retriever, RetrieverMutator and key prefix.
@@ -48,3 +46,14 @@ type TxStructure struct {
4846
readWriter kv.RetrieverMutator
4947
prefix []byte
5048
}
49+
50+
func init() {
51+
// Register terror to mysql error map.
52+
mySQLErrCodes := map[terror.ErrCode]uint16{
53+
mysql.ErrInvalidHashKeyFlag: mysql.ErrInvalidHashKeyFlag,
54+
mysql.ErrInvalidListIndex: mysql.ErrInvalidListIndex,
55+
mysql.ErrInvalidListMetaData: mysql.ErrInvalidListMetaData,
56+
mysql.ErrWriteOnSnapshot: mysql.ErrWriteOnSnapshot,
57+
}
58+
terror.ErrClassToMySQLCodes[terror.ClassStructure] = mySQLErrCodes
59+
}

structure/structure_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"testing"
1919

2020
. "github.com/pingcap/check"
21+
"github.com/pingcap/parser/mysql"
22+
"github.com/pingcap/parser/terror"
2123
"github.com/pingcap/tidb/kv"
2224
"github.com/pingcap/tidb/store/mockstore"
2325
"github.com/pingcap/tidb/structure"
@@ -395,3 +397,16 @@ func (s *testTxStructureSuite) TestHash(c *C) {
395397
})
396398
c.Assert(err, IsNil)
397399
}
400+
401+
func (*testTxStructureSuite) TestError(c *C) {
402+
kvErrs := []*terror.Error{
403+
structure.ErrInvalidHashKeyFlag,
404+
structure.ErrInvalidListIndex,
405+
structure.ErrInvalidListMetaData,
406+
structure.ErrWriteOnSnapshot,
407+
}
408+
for _, err := range kvErrs {
409+
code := err.ToSQLError().Code
410+
c.Assert(code != mysql.ErrUnknown && code == uint16(err.Code()), IsTrue, Commentf("err: %v", err))
411+
}
412+
}

structure/type.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (t *TxStructure) decodeHashDataKey(ek kv.Key) ([]byte, []byte, error) {
9191
if err != nil {
9292
return nil, nil, errors.Trace(err)
9393
} else if TypeFlag(tp) != HashData {
94-
return nil, nil, errInvalidHashKeyFlag.GenWithStack("invalid encoded hash data key flag %c", byte(tp))
94+
return nil, nil, ErrInvalidHashKeyFlag.GenWithStack("invalid encoded hash data key flag %c", byte(tp))
9595
}
9696

9797
_, field, err = codec.DecodeBytes(ek, nil)

tablecodec/tablecodec.go

+11-9
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
)
3131

3232
var (
33-
errInvalidKey = terror.ClassXEval.New(codeInvalidKey, "invalid key")
34-
errInvalidRecordKey = terror.ClassXEval.New(codeInvalidRecordKey, "invalid record key")
35-
errInvalidIndexKey = terror.ClassXEval.New(codeInvalidIndexKey, "invalid index key")
33+
errInvalidKey = terror.ClassXEval.New(mysql.ErrInvalidKey, mysql.MySQLErrName[mysql.ErrInvalidKey])
34+
errInvalidRecordKey = terror.ClassXEval.New(mysql.ErrInvalidRecordKey, mysql.MySQLErrName[mysql.ErrInvalidRecordKey])
35+
errInvalidIndexKey = terror.ClassXEval.New(mysql.ErrInvalidIndexKey, mysql.MySQLErrName[mysql.ErrInvalidIndexKey])
3636
)
3737

3838
var (
@@ -721,9 +721,11 @@ func GetTableIndexKeyRange(tableID, indexID int64) (startKey, endKey []byte) {
721721
return
722722
}
723723

724-
const (
725-
codeInvalidRecordKey = 4
726-
codeInvalidColumnCount = 5
727-
codeInvalidKey = 6
728-
codeInvalidIndexKey = 7
729-
)
724+
func init() {
725+
mySQLErrCodes := map[terror.ErrCode]uint16{
726+
mysql.ErrInvalidKey: mysql.ErrInvalidKey,
727+
mysql.ErrInvalidRecordKey: mysql.ErrInvalidRecordKey,
728+
mysql.ErrInvalidIndexKey: mysql.ErrInvalidIndexKey,
729+
}
730+
terror.ErrClassToMySQLCodes[terror.ClassXEval] = mySQLErrCodes
731+
}

tablecodec/tablecodec_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
. "github.com/pingcap/check"
2323
"github.com/pingcap/failpoint"
2424
"github.com/pingcap/parser/mysql"
25+
"github.com/pingcap/parser/terror"
2526
"github.com/pingcap/tidb/kv"
2627
"github.com/pingcap/tidb/sessionctx/stmtctx"
2728
"github.com/pingcap/tidb/types"
@@ -519,3 +520,15 @@ func BenchmarkEncodeValue(b *testing.B) {
519520
}
520521
}
521522
}
523+
524+
func (s *testTableCodecSuite) TestError(c *C) {
525+
kvErrs := []*terror.Error{
526+
errInvalidKey,
527+
errInvalidRecordKey,
528+
errInvalidIndexKey,
529+
}
530+
for _, err := range kvErrs {
531+
code := err.ToSQLError().Code
532+
c.Assert(code != mysql.ErrUnknown && code == uint16(err.Code()), IsTrue, Commentf("err: %v", err))
533+
}
534+
}

util/admin/admin.go

+15-12
Original file line numberDiff line numberDiff line change
@@ -432,21 +432,24 @@ func iterRecords(sessCtx sessionctx.Context, retriever kv.Retriever, t table.Tab
432432
return nil
433433
}
434434

435-
// admin error codes.
436-
const (
437-
codeDataNotEqual terror.ErrCode = iota + 1
438-
codeDDLJobNotFound
439-
codeCancelFinishedJob
440-
codeCannotCancelDDLJob
441-
)
442-
443435
var (
444436
// ErrDataInConsistent indicate that meets inconsistent data.
445-
ErrDataInConsistent = terror.ClassAdmin.New(codeDataNotEqual, "data isn't equal")
437+
ErrDataInConsistent = terror.ClassAdmin.New(mysql.ErrDataInConsistent, mysql.MySQLErrName[mysql.ErrDataInConsistent])
446438
// ErrDDLJobNotFound indicates the job id was not found.
447-
ErrDDLJobNotFound = terror.ClassAdmin.New(codeDDLJobNotFound, "DDL Job:%v not found")
439+
ErrDDLJobNotFound = terror.ClassAdmin.New(mysql.ErrDDLJobNotFound, mysql.MySQLErrName[mysql.ErrDDLJobNotFound])
448440
// ErrCancelFinishedDDLJob returns when cancel a finished ddl job.
449-
ErrCancelFinishedDDLJob = terror.ClassAdmin.New(codeCancelFinishedJob, "This job:%v is finished, so can't be cancelled")
441+
ErrCancelFinishedDDLJob = terror.ClassAdmin.New(mysql.ErrCancelFinishedDDLJob, mysql.MySQLErrName[mysql.ErrCancelFinishedDDLJob])
450442
// ErrCannotCancelDDLJob returns when cancel a almost finished ddl job, because cancel in now may cause data inconsistency.
451-
ErrCannotCancelDDLJob = terror.ClassAdmin.New(codeCannotCancelDDLJob, "This job:%v is almost finished, can't be cancelled now")
443+
ErrCannotCancelDDLJob = terror.ClassAdmin.New(mysql.ErrCannotCancelDDLJob, mysql.MySQLErrName[mysql.ErrCannotCancelDDLJob])
452444
)
445+
446+
func init() {
447+
// Register terror to mysql error map.
448+
mySQLErrCodes := map[terror.ErrCode]uint16{
449+
mysql.ErrDataInConsistent: mysql.ErrDataInConsistent,
450+
mysql.ErrDDLJobNotFound: mysql.ErrDDLJobNotFound,
451+
mysql.ErrCancelFinishedDDLJob: mysql.ErrCancelFinishedDDLJob,
452+
mysql.ErrCannotCancelDDLJob: mysql.ErrCannotCancelDDLJob,
453+
}
454+
terror.ErrClassToMySQLCodes[terror.ClassAdmin] = mySQLErrCodes
455+
}

util/admin/admin_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818

1919
. "github.com/pingcap/check"
2020
"github.com/pingcap/parser/model"
21+
"github.com/pingcap/parser/mysql"
22+
"github.com/pingcap/parser/terror"
2123
"github.com/pingcap/tidb/kv"
2224
"github.com/pingcap/tidb/meta"
2325
"github.com/pingcap/tidb/store/mockstore"
@@ -343,3 +345,16 @@ func (s *testSuite) TestIsJobRollbackable(c *C) {
343345
c.Assert(re == ca.result, IsTrue)
344346
}
345347
}
348+
349+
func (s *testSuite) TestError(c *C) {
350+
kvErrs := []*terror.Error{
351+
ErrDataInConsistent,
352+
ErrDDLJobNotFound,
353+
ErrCancelFinishedDDLJob,
354+
ErrCannotCancelDDLJob,
355+
}
356+
for _, err := range kvErrs {
357+
code := err.ToSQLError().Code
358+
c.Assert(code != mysql.ErrUnknown && code == uint16(err.Code()), IsTrue, Commentf("err: %v", err))
359+
}
360+
}

util/ranger/points.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,7 @@ import (
3333

3434
// Error instances.
3535
var (
36-
ErrUnsupportedType = terror.ClassOptimizer.New(CodeUnsupportedType, "Unsupported type")
37-
)
38-
39-
// Error codes.
40-
const (
41-
CodeUnsupportedType terror.ErrCode = 1
36+
ErrUnsupportedType = terror.ClassOptimizer.New(mysql.ErrUnsupportedType, mysql.MySQLErrName[mysql.ErrUnsupportedType])
4237
)
4338

4439
// RangeType is alias for int.

0 commit comments

Comments
 (0)