Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: refine some error code #14002

Merged
merged 8 commits into from Dec 12, 2019
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 0 additions & 2 deletions domain/domain.go
Expand Up @@ -815,8 +815,6 @@ func (do *Domain) LoadPrivilegeLoop(ctx sessionctx.Context) error {
metrics.LoadPrivilegeCounter.WithLabelValues(metrics.RetLabel(err)).Inc()
if err != nil {
logutil.BgLogger().Error("load privilege failed", zap.Error(err))
} else {
logutil.BgLogger().Debug("reload privilege success")
}
}
}()
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Expand Up @@ -37,7 +37,7 @@ require (
github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e
github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9
github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d
github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3
github.com/pingcap/tidb-tools v3.0.6-0.20191106033616-90632dda3863+incompatible
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Expand Up @@ -190,8 +190,8 @@ github.com/pingcap/kvproto v0.0.0-20191202044712-32be31591b03/go.mod h1:WWLmULLO
github.com/pingcap/log v0.0.0-20190715063458-479153f07ebd/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw=
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA=
github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8=
github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0 h1:BmayUSQpOj05pzVprTZ9HCoarUlap4gYNjlHijNxx8w=
github.com/pingcap/parser v0.0.0-20191210055545-753e13bfdbf0/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA=
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01 h1:q1rGnV/296//bArDP7cDWWaSrhaeEKZY+gIo+Jb0Gyk=
github.com/pingcap/parser v0.0.0-20191210060830-bdf23a7ade01/go.mod h1:1FNvfp9+J0wvc4kl8eGNh7Rqrxveg15jJoWo/a0uHwA=
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d h1:0uUwCayeh1U4r1n7kb4gHf2ZbiI9fuVtXPCEpb2piBY=
github.com/pingcap/pd v1.1.0-beta.0.20191210055626-676ddd3fbd2d/go.mod h1:Z/VMtXHpkOP+MnYnk4TL5VHc3ZwO1qHwc89zDuf5n8Q=
github.com/pingcap/sysutil v0.0.0-20191126040022-986c5b3ed9a3 h1:HCNif3lukL83gNC2EBAoh2Qbz36+2p0bm0LjgnNfl1s=
Expand Down
6 changes: 0 additions & 6 deletions meta/autoid/autoid.go
Expand Up @@ -22,7 +22,6 @@ import (
"github.com/cznic/mathutil"
"github.com/pingcap/errors"
"github.com/pingcap/failpoint"
"github.com/pingcap/parser/terror"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/metrics"
Expand Down Expand Up @@ -52,8 +51,6 @@ const (
// Test needs to change it, so it's a variable.
var step = int64(30000)

var errInvalidTableID = terror.ClassAutoid.New(codeInvalidTableID, "invalid TableID")

// Allocator is an auto increment id generator.
// Just keep id unique actually.
type Allocator interface {
Expand Down Expand Up @@ -262,9 +259,6 @@ func NewAllocator(store kv.Storage, dbID int64, isUnsigned bool) Allocator {
}
}

// codeInvalidTableID is the code of autoid error.
const codeInvalidTableID terror.ErrCode = 1

// Alloc implements autoid.Allocator Alloc interface.
func (alloc *allocator) Alloc(tableID int64, n uint64) (int64, int64, error) {
if tableID == 0 {
Expand Down
2 changes: 2 additions & 0 deletions meta/autoid/errors.go
Expand Up @@ -20,6 +20,7 @@ import (

// Error instances.
var (
errInvalidTableID = terror.ClassAutoid.New(mysql.ErrInvalidTableID, mysql.MySQLErrName[mysql.ErrInvalidTableID])
ErrAutoincReadFailed = terror.ClassAutoid.New(mysql.ErrAutoincReadFailed, mysql.MySQLErrName[mysql.ErrAutoincReadFailed])
ErrWrongAutoKey = terror.ClassAutoid.New(mysql.ErrWrongAutoKey, mysql.MySQLErrName[mysql.ErrWrongAutoKey])
)
Expand All @@ -29,6 +30,7 @@ func init() {
tableMySQLErrCodes := map[terror.ErrCode]uint16{
mysql.ErrAutoincReadFailed: mysql.ErrAutoincReadFailed,
mysql.ErrWrongAutoKey: mysql.ErrWrongAutoKey,
mysql.ErrInvalidTableID: mysql.ErrInvalidTableID,
}
terror.ErrClassToMySQLCodes[terror.ClassAutoid] = tableMySQLErrCodes
}
35 changes: 21 additions & 14 deletions privilege/privileges/cache.go
Expand Up @@ -29,9 +29,10 @@ import (
"github.com/pingcap/tidb/sessionctx"
"github.com/pingcap/tidb/types"
"github.com/pingcap/tidb/util/chunk"
"github.com/pingcap/tidb/util/logutil"
"github.com/pingcap/tidb/util/sqlexec"
"github.com/pingcap/tidb/util/stringutil"
log "github.com/sirupsen/logrus"
"go.uber.org/zap"
)

var (
Expand Down Expand Up @@ -184,47 +185,53 @@ func (p *MySQLPrivilege) FindRole(user string, host string, role *auth.RoleIdent
func (p *MySQLPrivilege) LoadAll(ctx sessionctx.Context) error {
err := p.LoadUserTable(ctx)
if err != nil {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.user fail", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.user")
}

err = p.LoadDBTable(ctx)
if err != nil {
if !noSuchTable(err) {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.db fail", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.db")
}
log.Warn("mysql.db maybe missing")
logutil.BgLogger().Warn("mysql.db maybe missing")
}

err = p.LoadTablesPrivTable(ctx)
if err != nil {
if !noSuchTable(err) {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.tables_priv fail", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.tables_priv")
}
log.Warn("mysql.tables_priv missing")
logutil.BgLogger().Warn("mysql.tables_priv missing")
}

err = p.LoadDefaultRoles(ctx)
if err != nil {
if !noSuchTable(err) {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.roles", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.roles")
}
log.Warn("mysql.default_roles missing")
logutil.BgLogger().Warn("mysql.default_roles missing")
}

err = p.LoadColumnsPrivTable(ctx)
if err != nil {
if !noSuchTable(err) {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.columns_priv", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.columns_priv")
}
log.Warn("mysql.columns_priv missing")
logutil.BgLogger().Warn("mysql.columns_priv missing")
}

err = p.LoadRoleGraph(ctx)
if err != nil {
if !noSuchTable(err) {
return errors.Trace(err)
logutil.BgLogger().Warn("load mysql.role_edges", zap.Error(err))
return errLoadPrivilege.FastGen("mysql.role_edges")
}
log.Warn("mysql.role_edges missing")
logutil.BgLogger().Warn("mysql.role_edges missing")
}
return nil
}
Expand Down Expand Up @@ -566,7 +573,7 @@ func decodeSetToPrivilege(s types.Set) mysql.PrivilegeType {
for _, str := range strings.Split(s.Name, ",") {
priv, ok := mysql.SetStr2Priv[str]
if !ok {
log.Warn("unsupported privilege type:", str)
logutil.BgLogger().Warn("unsupported privilege", zap.String("type", str))
continue
}
ret |= priv
Expand Down Expand Up @@ -1053,7 +1060,7 @@ func (h *Handle) Update(ctx sessionctx.Context) error {
var priv MySQLPrivilege
err := priv.LoadAll(ctx)
if err != nil {
return errors.Trace(err)
return err
}

h.priv.Store(&priv)
Expand Down
12 changes: 5 additions & 7 deletions privilege/privileges/errors.go
Expand Up @@ -18,19 +18,17 @@ import (
"github.com/pingcap/parser/terror"
)

// privilege error codes.
const (
codeInvalidPrivilegeType terror.ErrCode = 1
)

var (
errInvalidPrivilegeType = terror.ClassPrivilege.New(codeInvalidPrivilegeType, "unknown privilege type %s")
errInvalidPrivilegeType = terror.ClassPrivilege.New(mysql.ErrInvalidPrivilegeType, mysql.MySQLErrName[mysql.ErrInvalidPrivilegeType])
errNonexistingGrant = terror.ClassPrivilege.New(mysql.ErrNonexistingGrant, mysql.MySQLErrName[mysql.ErrNonexistingGrant])
errLoadPrivilege = terror.ClassPrivilege.New(mysql.ErrLoadPrivilege, mysql.MySQLErrName[mysql.ErrLoadPrivilege])
)

func init() {
privilegeMySQLErrCodes := map[terror.ErrCode]uint16{
mysql.ErrNonexistingGrant: mysql.ErrNonexistingGrant,
mysql.ErrNonexistingGrant: mysql.ErrNonexistingGrant,
mysql.ErrLoadPrivilege: mysql.ErrLoadPrivilege,
mysql.ErrInvalidPrivilegeType: mysql.ErrInvalidPrivilegeType,
}
terror.ErrClassToMySQLCodes[terror.ClassPrivilege] = privilegeMySQLErrCodes
}
9 changes: 6 additions & 3 deletions server/server.go
Expand Up @@ -86,9 +86,9 @@ func init() {
}

var (
errUnknownFieldType = terror.ClassServer.New(codeUnknownFieldType, "unknown field type")
errInvalidSequence = terror.ClassServer.New(codeInvalidSequence, "invalid sequence")
errInvalidType = terror.ClassServer.New(codeInvalidType, "invalid type")
errUnknownFieldType = terror.ClassServer.New(mysql.ErrUnknownFieldType, mysql.MySQLErrName[mysql.ErrUnknownFieldType])
errInvalidSequence = terror.ClassServer.New(mysql.ErrInvalidSequence, mysql.MySQLErrName[mysql.ErrInvalidSequence])
errInvalidType = terror.ClassServer.New(mysql.ErrInvalidType, mysql.MySQLErrName[mysql.ErrInvalidType])
errNotAllowedCommand = terror.ClassServer.New(mysql.ErrNotAllowedCommand, mysql.MySQLErrName[mysql.ErrNotAllowedCommand])
errAccessDenied = terror.ClassServer.New(mysql.ErrAccessDenied, mysql.MySQLErrName[mysql.ErrAccessDenied])
)
Expand Down Expand Up @@ -647,6 +647,9 @@ func init() {
serverMySQLErrCodes := map[terror.ErrCode]uint16{
mysql.ErrNotAllowedCommand: mysql.ErrNotAllowedCommand,
mysql.ErrAccessDenied: mysql.ErrAccessDenied,
mysql.ErrUnknownFieldType: mysql.ErrUnknownFieldType,
mysql.ErrInvalidSequence: mysql.ErrInvalidSequence,
mysql.ErrInvalidType: mysql.ErrInvalidType,
}
terror.ErrClassToMySQLCodes[terror.ClassServer] = serverMySQLErrCodes
}
12 changes: 3 additions & 9 deletions sessionctx/variable/session.go
Expand Up @@ -44,19 +44,13 @@ import (
"github.com/pingcap/tidb/util/timeutil"
)

const (
codeCantGetValidID terror.ErrCode = 1
codeCantSetToNull terror.ErrCode = 2
codeSnapshotTooOld terror.ErrCode = 3
)

var preparedStmtCount int64

// Error instances.
var (
errCantGetValidID = terror.ClassVariable.New(codeCantGetValidID, "cannot get valid auto-increment id in retry")
ErrCantSetToNull = terror.ClassVariable.New(codeCantSetToNull, "cannot set variable to null")
ErrSnapshotTooOld = terror.ClassVariable.New(codeSnapshotTooOld, "snapshot is older than GC safe point %s")
errCantGetValidID = terror.ClassVariable.New(mysql.ErrCantGetValidID, mysql.MySQLErrName[mysql.ErrCantGetValidID])
ErrCantSetToNull = terror.ClassVariable.New(mysql.ErrCantSetToNull, mysql.MySQLErrName[mysql.ErrCantSetToNull])
ErrSnapshotTooOld = terror.ClassVariable.New(mysql.ErrSnapshotTooOld, mysql.MySQLErrName[mysql.ErrSnapshotTooOld])
)

// RetryInfo saves retry information.
Expand Down
3 changes: 3 additions & 0 deletions sessionctx/variable/sysvar.go
Expand Up @@ -84,6 +84,9 @@ func init() {

// Register terror to mysql error map.
mySQLErrCodes := map[terror.ErrCode]uint16{
mysql.ErrCantGetValidID: mysql.ErrCantGetValidID,
mysql.ErrCantSetToNull: mysql.ErrCantSetToNull,
mysql.ErrSnapshotTooOld: mysql.ErrSnapshotTooOld,
mysql.ErrUnsupportedValueForVar: mysql.ErrUnsupportedValueForVar,
mysql.ErrUnknownSystemVariable: mysql.ErrUnknownSystemVariable,
mysql.ErrIncorrectGlobalLocalVar: mysql.ErrIncorrectGlobalLocalVar,
Expand Down