Skip to content

Commit

Permalink
update the error dependency and do the corresponding changes
Browse files Browse the repository at this point in the history
Signed-off-by: Ryan Leung <rleungx@gmail.com>
  • Loading branch information
rleungx committed Aug 19, 2020
1 parent 515d46b commit 5359dfb
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 69 deletions.
8 changes: 4 additions & 4 deletions client/base_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import (
"sync"
"time"

"github.com/pingcap/errors"
"github.com/pingcap/kvproto/pkg/pdpb"
"github.com/pingcap/log"
"github.com/pkg/errors"
"github.com/tikv/pd/pkg/errs"
"github.com/tikv/pd/pkg/grpcutil"
"go.uber.org/zap"
Expand Down Expand Up @@ -138,7 +138,7 @@ func (c *baseClient) leaderLoop() {
}

if err := c.updateLeader(); err != nil {
log.Error("[pd] failed updateLeader", zap.Error(errs.ErrUpdateLeader.Wrap(err).FastGenWithCause()))
log.Error("[pd] failed updateLeader", errs.ZapError(errs.ErrUpdateLeader, err))
}
}
}
Expand Down Expand Up @@ -178,7 +178,7 @@ func (c *baseClient) initClusterID() error {
members, err := c.getMembers(timeoutCtx, u)
timeoutCancel()
if err != nil || members.GetHeader() == nil {
log.Warn("[pd] failed to get cluster id", zap.String("url", u), zap.Error(errs.ErrGetClusterID.Wrap(err).FastGenWithCause()))
log.Warn("[pd] failed to get cluster id", zap.String("url", u), errs.ZapError(errs.ErrGetClusterID, err))
continue
}
c.clusterID = members.GetHeader().GetClusterId()
Expand All @@ -192,7 +192,7 @@ func (c *baseClient) updateLeader() error {
ctx, cancel := context.WithTimeout(c.ctx, updateLeaderTimeout)
members, err := c.getMembers(ctx, u)
if err != nil {
log.Warn("[pd] cannot update leader", zap.String("address", u), zap.Error(errs.ErrUpdateLeader.Wrap(err).FastGenWithCause()))
log.Warn("[pd] cannot update leader", zap.String("address", u), errs.ZapError(errs.ErrUpdateLeader, err))
}
cancel()
if err != nil || members.GetLeader() == nil || len(members.GetLeader().GetClientUrls()) == 0 {
Expand Down
6 changes: 3 additions & 3 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ func (c *client) tsLoop() {
return
default:
}
log.Error("[pd] create tso stream error", zap.Error(errs.ErrCreateTSOStream.Wrap(err).FastGenWithCause()))
log.Error("[pd] create tso stream error", errs.ZapError(errs.ErrCreateTSOStream, err))
c.ScheduleCheckLeader()
cancel()
c.revokeTSORequest(errors.WithStack(err))
Expand Down Expand Up @@ -282,7 +282,7 @@ func (c *client) tsLoop() {
return
default:
}
log.Error("[pd] getTS error", zap.Error(errs.ErrGetTSO.Wrap(err).FastGenWithCause()))
log.Error("[pd] getTS error", errs.ZapError(errs.ErrGetTSO, err))
c.ScheduleCheckLeader()
cancel()
stream, cancel = nil, nil
Expand Down Expand Up @@ -379,7 +379,7 @@ func (c *client) Close() {
defer c.connMu.Unlock()
for _, cc := range c.connMu.clientConns {
if err := cc.Close(); err != nil {
log.Error("[pd] failed to close gRPC clientConn", zap.Error(errs.ErrCloseGRPCConn.Wrap(err).FastGenWithCause()))
log.Error("[pd] failed to close gRPC clientConn", errs.ZapError(errs.ErrCloseGRPCConn, err))
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/dashboard/adapter/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func (m *Manager) startService() {
return
}
if err := m.service.Start(m.ctx); err != nil {
log.Error("Can not start dashboard server", zap.Error(errs.ErrStartDashboard.Wrap(err).FastGenWithCause()))
log.Error("Can not start dashboard server", errs.ZapError(errs.ErrStartDashboard, err))
} else {
log.Info("Dashboard server is started")
}
Expand All @@ -207,7 +207,7 @@ func (m *Manager) stopService() {
return
}
if err := m.service.Stop(context.Background()); err != nil {
log.Error("Stop dashboard server error", zap.Error(errs.ErrStopDashboard.Wrap(err).FastGenWithCause()))
log.Error("Stop dashboard server error", errs.ZapError(errs.ErrStopDashboard, err))
} else {
log.Info("Dashboard server is stopped")
}
Expand Down
64 changes: 64 additions & 0 deletions pkg/errs/errno.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.

package errs

import "github.com/pingcap/errors"

// tso errors
var (
ErrInvalidTimestamp = errors.Normalize("invalid timestamp", errors.RFCCodeText("PD:tso:ErrInvalidTimestamp"))
ErrLogicOverflow = errors.Normalize("logic part overflow", errors.RFCCodeText("PD:tso:ErrLogicOverflow"))
ErrIncorrectSystemTime = errors.Normalize("incorrect system time", errors.RFCCodeText("PD:tso:ErrIncorrectSystemTime"))
)

// adapter errors
var (
ErrStartDashboard = errors.Normalize("start dashboard failed", errors.RFCCodeText("PD:adapter:ErrStartDashboard"))
ErrStopDashboard = errors.Normalize("stop dashboard failed", errors.RFCCodeText("PD:adapter:ErrStopDashboard"))
)

// member errors
var (
ErretcdLeaderNotFound = errors.Normalize("etcd leader not found", errors.RFCCodeText("PD:member:ErretcdLeaderNotFound"))
ErrGetLeader = errors.Normalize("get leader failed", errors.RFCCodeText("PD:member:ErrGetLeader"))
ErrDeleteLeaderKey = errors.Normalize("delete leader key failed", errors.RFCCodeText("PD:member:ErrDeleteLeaderKey"))
ErrLoadLeaderPriority = errors.Normalize("load leader priority failed", errors.RFCCodeText("PD:member:ErrLoadLeaderPriority"))
ErrLoadetcdLeaderPriority = errors.Normalize("load etcd leader priority failed", errors.RFCCodeText("PD:member:ErrLoadetcdLeaderPriority"))
ErrTransferetcdLeader = errors.Normalize("transfer etcd leader failed", errors.RFCCodeText("PD:member:ErrTransferetcdLeader"))
ErrWatcherCancel = errors.Normalize("watcher canceled", errors.RFCCodeText("PD:member:ErrWatcherCancel"))
ErrMarshalLeader = errors.Normalize("marshal leader failed", errors.RFCCodeText("PD:member:ErrMarshalLeader"))
)

// client errors
var (
ErrCloseGRPCConn = errors.Normalize("close gRPC connection failed", errors.RFCCodeText("PD:client:ErrCloseGRPCConn"))
ErrUpdateLeader = errors.Normalize("update leader failed", errors.RFCCodeText("PD:client:ErrUpdateLeader"))
ErrCreateTSOStream = errors.Normalize("create TSO stream failed", errors.RFCCodeText("PD:client:ErrCreateTSOStream"))
ErrGetTSO = errors.Normalize("get TSO failed", errors.RFCCodeText("PD:client:ErrGetTSO"))
ErrGetClusterID = errors.Normalize("get cluster ID failed", errors.RFCCodeText("PD:client:ErrGetClusterID"))
)

// placement errors
var (
ErrRuleContent = errors.Normalize("invalid rule content, %s", errors.RFCCodeText("PD:placement:ErrRuleContent"))
ErrLoadRule = errors.Normalize("load rule failed", errors.RFCCodeText("PD:placement:ErrLoadRule"))
ErrLoadRuleGroup = errors.Normalize("load rule group failed", errors.RFCCodeText("PD:placement:ErrLoadRuleGroup"))
ErrBuildRuleList = errors.Normalize("build rule list failed, %s", errors.RFCCodeText("PD:placement:ErrBuildRuleList"))
)

// kv errors
var (
ErrEtcdKVSave = errors.Normalize("etcd KV save failed", errors.RFCCodeText("PD:kv:ErrEtcdKVSave"))
ErrEtcdKVRemove = errors.Normalize("etcd KV remove failed", errors.RFCCodeText("PD:kv:ErrEtcdKVRemove"))
)
56 changes: 9 additions & 47 deletions pkg/errs/errs.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,52 +13,14 @@

package errs

import "github.com/pingcap/errors"

// tso errors
var (
ErrInvalidTimestamp = errors.Normalize("invalid timestamp", errors.RFCCodeText("PD:tso:ErrInvalidTimestamp"))
ErrLogicOverflow = errors.Normalize("logic part overflow", errors.RFCCodeText("PD:tso:ErrLogicOverflow"))
ErrIncorrectSystemTime = errors.Normalize("incorrect system time", errors.RFCCodeText("PD:tso:ErrIncorrectSystemTime"))
)

// adapter errors
var (
ErrStartDashboard = errors.Normalize("start dashboard failed", errors.RFCCodeText("PD:adapter:ErrStartDashboard"))
ErrStopDashboard = errors.Normalize("stop dashboard failed", errors.RFCCodeText("PD:adapter:ErrStopDashboard"))
)

// member errors
var (
ErretcdLeaderNotFound = errors.Normalize("etcd leader not found", errors.RFCCodeText("PD:member:ErretcdLeaderNotFound"))
ErrGetLeader = errors.Normalize("get leader failed", errors.RFCCodeText("PD:member:ErrGetLeader"))
ErrDeleteLeaderKey = errors.Normalize("delete leader key failed", errors.RFCCodeText("PD:member:ErrDeleteLeaderKey"))
ErrLoadLeaderPriority = errors.Normalize("load leader priority failed", errors.RFCCodeText("PD:member:ErrLoadLeaderPriority"))
ErrLoadetcdLeaderPriority = errors.Normalize("load etcd leader priority failed", errors.RFCCodeText("PD:member:ErrLoadetcdLeaderPriority"))
ErrTransferetcdLeader = errors.Normalize("transfer etcd leader failed", errors.RFCCodeText("PD:member:ErrTransferetcdLeader"))
ErrWatcherCancel = errors.Normalize("watcher canceled", errors.RFCCodeText("PD:member:ErrWatcherCancel"))
ErrMarshalLeader = errors.Normalize("marshal leader failed", errors.RFCCodeText("PD:member:ErrMarshalLeader"))
import (
"github.com/pingcap/errors"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)

// client errors
var (
ErrCloseGRPCConn = errors.Normalize("close gRPC connection failed", errors.RFCCodeText("PD:client:ErrCloseGRPCConn"))
ErrUpdateLeader = errors.Normalize("update leader failed", errors.RFCCodeText("PD:client:ErrUpdateLeader"))
ErrCreateTSOStream = errors.Normalize("create TSO stream failed", errors.RFCCodeText("PD:client:ErrCreateTSOStream"))
ErrGetTSO = errors.Normalize("get TSO failed", errors.RFCCodeText("PD:client:ErrGetTSO"))
ErrGetClusterID = errors.Normalize("get cluster ID failed", errors.RFCCodeText("PD:client:ErrGetClusterID"))
)

// placement errors
var (
ErrRuleContent = errors.Normalize("invalid rule content, %s", errors.RFCCodeText("PD:placement:ErrRuleContent"))
ErrLoadRule = errors.Normalize("load rule failed", errors.RFCCodeText("PD:placement:ErrLoadRule"))
ErrLoadRuleGroup = errors.Normalize("load rule group failed", errors.RFCCodeText("PD:placement:ErrLoadRuleGroup"))
ErrBuildRuleList = errors.Normalize("build rule list failed, %s", errors.RFCCodeText("PD:placement:ErrBuildRuleList"))
)

// kv errors
var (
ErrEtcdKVSave = errors.Normalize("etcd KV save failed", errors.RFCCodeText("PD:kv:ErrEtcdKVSave"))
ErrEtcdKVRemove = errors.Normalize("etcd KV remove failed", errors.RFCCodeText("PD:kv:ErrEtcdKVRemove"))
)
// ZapError is used to make the log output eaiser.
func ZapError(err *errors.Error, causeError error) zap.Field {
e := err.Wrap(causeError).FastGenWithCause()
return zap.Field{Key: "error", Type: zapcore.ErrorType, Interface: e}
}
5 changes: 3 additions & 2 deletions pkg/errs/errs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ package errs

import (
"bytes"
"errors"
"fmt"
"strings"
"testing"

. "github.com/pingcap/check"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"go.uber.org/zap"
)
Expand Down Expand Up @@ -87,7 +87,8 @@ func (s *testErrorSuite) TestError(c *C) {
log.Error("test", zap.Error(ErrInvalidTimestamp.FastGenByArgs()))
c.Assert(strings.Contains(lg.Message(), rfc), IsTrue)
err := errors.New("test error")
log.Error("test", zap.Error(ErrInvalidTimestamp.Wrap(err).FastGenWithCause()))
log.Error("test", ZapError(ErrInvalidTimestamp, err))
rfc = `[error="[PD:tso:ErrInvalidTimestamp] test error"]`
fmt.Println(lg.Message())
c.Assert(strings.Contains(lg.Message(), rfc), IsTrue)
}
4 changes: 2 additions & 2 deletions server/kv/etcd_kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (kv *etcdKVBase) Save(key, value string) error {
txn := NewSlowLogTxn(kv.client)
resp, err := txn.Then(clientv3.OpPut(key, value)).Commit()
if err != nil {
log.Error("save to etcd meet error", zap.String("key", key), zap.String("value", value), zap.Error(errs.ErrEtcdKVSave.Wrap(err).FastGenWithCause()))
log.Error("save to etcd meet error", zap.String("key", key), zap.String("value", value), errs.ZapError(errs.ErrEtcdKVSave, err))
return errors.WithStack(err)
}
if !resp.Succeeded {
Expand All @@ -108,7 +108,7 @@ func (kv *etcdKVBase) Remove(key string) error {
txn := NewSlowLogTxn(kv.client)
resp, err := txn.Then(clientv3.OpDelete(key)).Commit()
if err != nil {
log.Error("remove from etcd meet error", zap.String("key", key), zap.Error(errs.ErrEtcdKVRemove.Wrap(err).FastGenWithCause()))
log.Error("remove from etcd meet error", zap.String("key", key), errs.ZapError(errs.ErrEtcdKVRemove, err))
return errors.WithStack(err)
}
if !resp.Succeeded {
Expand Down
14 changes: 7 additions & 7 deletions server/member/member.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ func (m *Member) CheckLeader(name string) (*pdpb.Member, int64, bool) {

leader, rev, err := election.GetLeader(m.client, m.GetLeaderPath())
if err != nil {
log.Error("getting pd leader meets error", zap.Error(errs.ErrGetLeader.Wrap(err).FastGenWithCause()))
log.Error("getting pd leader meets error", errs.ZapError(errs.ErrGetLeader, err))
time.Sleep(200 * time.Millisecond)
return nil, 0, true
}
Expand All @@ -150,7 +150,7 @@ func (m *Member) CheckLeader(name string) (*pdpb.Member, int64, bool) {
// in previous CampaignLeader. We should delete the leadership and campaign again.
log.Warn("the pd leader has not changed, delete and campaign again", zap.Stringer("old-pd-leader", leader))
if err = m.deleteLeaderKey(); err != nil {
log.Error("deleting pd leader key meets error", zap.Error(errs.ErrDeleteLeaderKey.Wrap(err).FastGenWithCause()))
log.Error("deleting pd leader key meets error", errs.ZapError(errs.ErrDeleteLeaderKey, err))
time.Sleep(200 * time.Millisecond)
return nil, 0, true
}
Expand All @@ -167,18 +167,18 @@ func (m *Member) CheckPriority(ctx context.Context) {
}
myPriority, err := m.GetMemberLeaderPriority(m.ID())
if err != nil {
log.Error("failed to load etcd leader priority", zap.Error(errs.ErrLoadLeaderPriority.Wrap(err).FastGenWithCause()))
log.Error("failed to load etcd leader priority", errs.ZapError(errs.ErrLoadLeaderPriority, err))
return
}
leaderPriority, err := m.GetMemberLeaderPriority(etcdLeader)
if err != nil {
log.Error("failed to load etcd leader priority", zap.Error(errs.ErrLoadetcdLeaderPriority.Wrap(err).FastGenWithCause()))
log.Error("failed to load etcd leader priority", errs.ZapError(errs.ErrLoadetcdLeaderPriority, err))
return
}
if myPriority > leaderPriority {
err := m.MoveEtcdLeader(ctx, etcdLeader, m.ID())
if err != nil {
log.Error("failed to transfer etcd leader", zap.Error(errs.ErrTransferetcdLeader.Wrap(err).FastGenWithCause()))
log.Error("failed to transfer etcd leader", errs.ZapError(errs.ErrTransferetcdLeader, err))
} else {
log.Info("transfer etcd leader",
zap.Uint64("from", etcdLeader),
Expand Down Expand Up @@ -216,7 +216,7 @@ func (m *Member) MemberInfo(cfg *config.Config, name string, rootPath string) {
data, err := leader.Marshal()
if err != nil {
// can't fail, so panic here.
log.Fatal("marshal pd leader meet error", zap.Stringer("pd-leader", leader), zap.Error(errs.ErrMarshalLeader.Wrap(err).FastGenWithCause()))
log.Fatal("marshal pd leader meet error", zap.Stringer("pd-leader", leader), errs.ZapError(errs.ErrMarshalLeader, err))
}
m.member = leader
m.memberValue = string(data)
Expand Down Expand Up @@ -417,7 +417,7 @@ func (m *Member) WatchLeader(serverCtx context.Context, leader *pdpb.Member, rev
break
}
if wresp.Canceled {
log.Error("pd leader watcher is canceled with", zap.Int64("revision", revision), zap.Error(errs.ErrWatcherCancel.Wrap(wresp.Err()).FastGenWithCause()))
log.Error("pd leader watcher is canceled with", zap.Int64("revision", revision), errs.ZapError(errs.ErrWatcherCancel, wresp.Err()))
return
}

Expand Down
4 changes: 2 additions & 2 deletions server/schedule/placement/rule_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (m *RuleManager) loadRules() error {
return
}
if err := m.adjustRule(&r); err != nil {
log.Error("rule is in bad format", zap.String("rule-key", k), zap.String("rule-value", v), zap.Error(errs.ErrLoadRule.Wrap(err).FastGenWithCause()))
log.Error("rule is in bad format", zap.String("rule-key", k), zap.String("rule-value", v), zap.Error(errs.ErrLoadRule.FastGenByArgs()), zap.NamedError("cause", err))
toDelete = append(toDelete, k)
return
}
Expand Down Expand Up @@ -137,7 +137,7 @@ func (m *RuleManager) loadGroups() error {
return m.store.LoadRuleGroups(func(k, v string) {
var g RuleGroup
if err := json.Unmarshal([]byte(v), &g); err != nil {
log.Error("failed to unmarshal rule group", zap.String("group-id", k), zap.Error(errs.ErrLoadRuleGroup.Wrap(err).FastGenWithCause()))
log.Error("failed to unmarshal rule group", zap.String("group-id", k), zap.Error(errs.ErrLoadRuleGroup.FastGenByArgs()), zap.NamedError("cause", err))
return
}
m.groups[g.ID] = &g
Expand Down

0 comments on commit 5359dfb

Please sign in to comment.