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

terror: remove dead code which may cause data race #1096

Merged
merged 4 commits into from Nov 23, 2020
Merged
Changes from all 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
33 changes: 25 additions & 8 deletions terror/terror.go
Expand Up @@ -17,6 +17,7 @@ import (
"fmt"
"strconv"
"strings"
"sync"

"github.com/pingcap/errors"
"github.com/pingcap/log"
Expand Down Expand Up @@ -85,8 +86,26 @@ var (
)

var errClass2Desc = make(map[ErrClass]string)
var errCodeMap = make(map[ErrCode]*Error)
var rfcCode2errClass = make(map[string]ErrClass)
var rfcCode2errClass = newCode2ErrClassMap()

type code2ErrClassMap struct {
data sync.Map
}

func newCode2ErrClassMap() *code2ErrClassMap {
return &code2ErrClassMap{
data: sync.Map{},
}
}

func (m *code2ErrClassMap) Get(key string) (ErrClass, bool) {
ret, have := m.data.Load(key)
return ret.(ErrClass), have
}

func (m *code2ErrClassMap) Put(key string, err ErrClass) {
m.data.Store(key, err)
}

// RegisterErrorClass registers new error class for terror.
func RegisterErrorClass(classCode int, desc string) ErrClass {
Expand Down Expand Up @@ -115,7 +134,7 @@ func (ec ErrClass) EqualClass(err error) bool {
if te, ok := e.(*Error); ok {
rfcCode := te.RFCCode()
if index := strings.Index(string(rfcCode), ":"); index > 0 {
if class, has := rfcCode2errClass[string(rfcCode)[:index]]; has {
if class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {
return class == ec
}
}
Expand All @@ -137,7 +156,7 @@ func (ec ErrClass) initError(code ErrCode) string {
clsMap[code] = struct{}{}
class := errClass2Desc[ec]
rfcCode := fmt.Sprintf("%s:%d", class, code)
rfcCode2errClass[class] = ec
rfcCode2errClass.Put(class, ec)
return rfcCode
}

Expand All @@ -151,7 +170,6 @@ func (ec ErrClass) initError(code ErrCode) string {
func (ec ErrClass) New(code ErrCode, message string) *Error {
rfcCode := ec.initError(code)
err := errors.Normalize(message, errors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode))
errCodeMap[code] = err
return err
}

Expand All @@ -160,7 +178,6 @@ func (ec ErrClass) New(code ErrCode, message string) *Error {
func (ec ErrClass) NewStdErr(code ErrCode, message *mysql.ErrMessage) *Error {
rfcCode := ec.initError(code)
err := errors.Normalize(message.Raw, errors.RedactArgs(message.RedactArgPos), errors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode))
errCodeMap[code] = err
return err
}

Expand Down Expand Up @@ -192,7 +209,7 @@ func getMySQLErrorCode(e *Error) uint16 {
rfcCode := e.RFCCode()
var class ErrClass
if index := strings.Index(string(rfcCode), ":"); index > 0 {
if ec, has := rfcCode2errClass[string(rfcCode)[:index]]; has {
if ec, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {
class = ec
} else {
log.Warn("Unknown error class", zap.String("class", string(rfcCode)[:index]))
Expand Down Expand Up @@ -278,7 +295,7 @@ func Log(err error) {
func GetErrClass(e *Error) ErrClass {
rfcCode := e.RFCCode()
if index := strings.Index(string(rfcCode), ":"); index > 0 {
if class, has := rfcCode2errClass[string(rfcCode)[:index]]; has {
if class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {
return class
}
}
Expand Down