From bcaca9104fbc746f6828d9e1a10b07540a09e774 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Fri, 4 Sep 2020 18:13:53 +0800 Subject: [PATCH] *: update the error dependency and do the corresponding changes (#2760) (#2902) * cherry pick #2760 to release-4.0 Signed-off-by: ti-srebot --- client/base_client.go | 9 +-- client/client.go | 7 ++- go.mod | 3 +- go.sum | 8 +++ pkg/dashboard/adapter/manager.go | 5 +- pkg/errs/errno.go | 64 ++++++++++++++++++++++ pkg/errs/errs.go | 26 +++++++++ pkg/errs/errs_test.go | 94 ++++++++++++++++++++++++++++++++ pkg/etcdutil/etcdutil_test.go | 3 +- server/kv/etcd_kv.go | 5 +- server/member/leader.go | 15 ++--- 11 files changed, 218 insertions(+), 21 deletions(-) create mode 100644 pkg/errs/errno.go create mode 100644 pkg/errs/errs.go create mode 100644 pkg/errs/errs_test.go diff --git a/client/base_client.go b/client/base_client.go index 930c43f8f71..40a7e7760ae 100644 --- a/client/base_client.go +++ b/client/base_client.go @@ -20,9 +20,10 @@ 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" "google.golang.org/grpc" @@ -137,7 +138,7 @@ func (c *baseClient) leaderLoop() { } if err := c.updateLeader(); err != nil { - log.Error("[pd] failed updateLeader", zap.Error(err)) + log.Error("[pd] failed updateLeader", errs.ZapError(errs.ErrUpdateLeader, err)) } } } @@ -177,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(err)) + log.Warn("[pd] failed to get cluster id", zap.String("url", u), errs.ZapError(errs.ErrGetClusterID, err)) continue } c.clusterID = members.GetHeader().GetClusterId() @@ -191,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(err)) + 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 { diff --git a/client/client.go b/client/client.go index efbe529ac8c..9f838fbb23d 100644 --- a/client/client.go +++ b/client/client.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/log" "github.com/pkg/errors" + "github.com/tikv/pd/pkg/errs" "go.uber.org/zap" ) @@ -232,7 +233,7 @@ func (c *client) tsLoop() { return default: } - log.Error("[pd] create tso stream error", zap.Error(err)) + log.Error("[pd] create tso stream error", errs.ZapError(errs.ErrCreateTSOStream, err)) c.ScheduleCheckLeader() cancel() c.revokeTSORequest(errors.WithStack(err)) @@ -280,7 +281,7 @@ func (c *client) tsLoop() { return default: } - log.Error("[pd] getTS error", zap.Error(err)) + log.Error("[pd] getTS error", errs.ZapError(errs.ErrGetTSO, err)) c.ScheduleCheckLeader() cancel() stream, cancel = nil, nil @@ -377,7 +378,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 close grpc clientConn", zap.Error(err)) + log.Error("[pd] failed to close gRPC clientConn", errs.ZapError(errs.ErrCloseGRPCConn, err)) } } } diff --git a/go.mod b/go.mod index 0d5ef6603a8..6e2e3c6a7a6 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,7 @@ require ( github.com/pingcap-incubator/tidb-dashboard v0.0.0-20200807020752-01f0abe88e93 github.com/pingcap/check v0.0.0-20191216031241-8a5a85928f12 github.com/pingcap/errcode v0.0.0-20180921232412-a1a7271709d9 + github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d github.com/pingcap/kvproto v0.0.0-20200818080353-7aaed8998596 github.com/pingcap/log v0.0.0-20200511115504-543df19646ad @@ -46,7 +47,7 @@ require ( github.com/urfave/negroni v0.3.0 go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738 go.uber.org/goleak v0.10.0 - go.uber.org/zap v1.13.0 + go.uber.org/zap v1.15.0 golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d google.golang.org/grpc v1.25.1 gopkg.in/natefinch/lumberjack.v2 v2.0.0 diff --git a/go.sum b/go.sum index 2f4779b0827..2173d40c95a 100644 --- a/go.sum +++ b/go.sum @@ -290,6 +290,8 @@ github.com/pingcap/errors v0.11.0 h1:DCJQB8jrHbQ1VVlMFIrbj2ApScNNotVmkSNplu2yUt4 github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011 h1:58naV4XMEqm0hl9LcYo6cZoGBGiLtefMQMF/vo3XLgQ= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de h1:mW8hC2yXTpflfyTeJgcN4aJQfwcYODde8YgjBgAy6do= +github.com/pingcap/errors v0.11.5-0.20200902104258-eba4f1d8f6de/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d h1:F8vp38kTAckN+v8Jlc98uMBvKIzr1a+UhnLyVYn8Q5Q= github.com/pingcap/failpoint v0.0.0-20191029060244-12f4ac2fd11d/go.mod h1:DNS3Qg7bEDhU6EXNHF+XSv/PGznQaMJ5FWvctpm6pQI= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= @@ -413,6 +415,8 @@ go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/dig v1.8.0 h1:1rR6hnL/bu1EVcjnRDN5kx1vbIjEJDTGhSQ2B3ddpcI= go.uber.org/dig v1.8.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= go.uber.org/fx v1.10.0 h1:S2K/H8oNied0Je/mLKdWzEWKZfv9jtxSDm8CnwK+5Fg= @@ -424,6 +428,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -435,6 +441,8 @@ go.uber.org/zap v1.12.0 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/pkg/dashboard/adapter/manager.go b/pkg/dashboard/adapter/manager.go index 98cc38878a2..8b9761d0aa4 100644 --- a/pkg/dashboard/adapter/manager.go +++ b/pkg/dashboard/adapter/manager.go @@ -24,6 +24,7 @@ import ( "go.uber.org/zap" "github.com/pingcap/log" + "github.com/tikv/pd/pkg/errs" "github.com/tikv/pd/pkg/logutil" "github.com/tikv/pd/server" "github.com/tikv/pd/server/cluster" @@ -195,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(err)) + log.Error("Can not start dashboard server", errs.ZapError(errs.ErrStartDashboard, err)) } else { log.Info("Dashboard server is started") } @@ -206,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(err)) + log.Error("Stop dashboard server error", errs.ZapError(errs.ErrStopDashboard, err)) } else { log.Info("Dashboard server is stopped") } diff --git a/pkg/errs/errno.go b/pkg/errs/errno.go new file mode 100644 index 00000000000..cd4fab2f9a2 --- /dev/null +++ b/pkg/errs/errno.go @@ -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")) +) diff --git a/pkg/errs/errs.go b/pkg/errs/errs.go new file mode 100644 index 00000000000..a4c2eb7afb9 --- /dev/null +++ b/pkg/errs/errs.go @@ -0,0 +1,26 @@ +// Copyright 2020 TiKV Project Authors. +// +// 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" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// 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} +} diff --git a/pkg/errs/errs_test.go b/pkg/errs/errs_test.go new file mode 100644 index 00000000000..6f6f0b013c1 --- /dev/null +++ b/pkg/errs/errs_test.go @@ -0,0 +1,94 @@ +// Copyright 2020 TiKV Project Authors. +// +// 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 ( + "bytes" + "fmt" + "strings" + "testing" + + . "github.com/pingcap/check" + "github.com/pingcap/errors" + "github.com/pingcap/log" + "go.uber.org/zap" +) + +// testingWriter is a WriteSyncer that writes to the the messages. +type testingWriter struct { + messages []string +} + +func newTestingWriter() *testingWriter { + return &testingWriter{} +} + +func (w *testingWriter) Write(p []byte) (n int, err error) { + n = len(p) + p = bytes.TrimRight(p, "\n") + m := fmt.Sprintf("%s", p) + w.messages = append(w.messages, m) + return n, nil +} + +func (w *testingWriter) Sync() error { + return nil +} + +type verifyLogger struct { + *zap.Logger + w *testingWriter +} + +func (logger *verifyLogger) Message() string { + if logger.w.messages == nil { + return "" + } + return logger.w.messages[len(logger.w.messages)-1] +} + +func newZapTestLogger(cfg *log.Config, opts ...zap.Option) verifyLogger { + // TestingWriter is used to write to memory. + // Used in the verify logger. + writer := newTestingWriter() + lg, _, _ := log.InitLoggerWithWriteSyncer(cfg, writer, opts...) + + return verifyLogger{ + Logger: lg, + w: writer, + } +} + +func Test(t *testing.T) { + TestingT(t) +} + +var _ = Suite(&testErrorSuite{}) + +type testErrorSuite struct{} + +func (s *testErrorSuite) TestError(c *C) { + conf := &log.Config{Level: "debug", File: log.FileLogConfig{}, DisableTimestamp: true} + lg := newZapTestLogger(conf) + log.ReplaceGlobals(lg.Logger, nil) + + rfc := `[error="[PD:tso:ErrInvalidTimestamp]invalid timestamp"]` + log.Error("test", zap.Error(ErrInvalidTimestamp.FastGenByArgs())) + c.Assert(strings.Contains(lg.Message(), rfc), IsTrue) + err := errors.New("test error") + 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) +} diff --git a/pkg/etcdutil/etcdutil_test.go b/pkg/etcdutil/etcdutil_test.go index 6d7a6e2026d..f5b942d2267 100644 --- a/pkg/etcdutil/etcdutil_test.go +++ b/pkg/etcdutil/etcdutil_test.go @@ -35,8 +35,7 @@ func Test(t *testing.T) { var _ = Suite(&testEtcdutilSuite{}) -type testEtcdutilSuite struct { -} +type testEtcdutilSuite struct{} func newTestSingleConfig() *embed.Config { cfg := embed.NewConfig() diff --git a/server/kv/etcd_kv.go b/server/kv/etcd_kv.go index 959c4b37dbd..bc0015987c2 100644 --- a/server/kv/etcd_kv.go +++ b/server/kv/etcd_kv.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/log" "github.com/pkg/errors" + "github.com/tikv/pd/pkg/errs" "github.com/tikv/pd/pkg/etcdutil" "go.etcd.io/etcd/clientv3" "go.uber.org/zap" @@ -88,7 +89,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.Error(err)) + 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 { @@ -103,7 +104,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.Error(err)) + log.Error("remove from etcd meet error", zap.String("key", key), errs.ZapError(errs.ErrEtcdKVRemove, err)) return errors.WithStack(err) } if !resp.Succeeded { diff --git a/server/member/leader.go b/server/member/leader.go index c0c47bde83b..f86f5c58164 100644 --- a/server/member/leader.go +++ b/server/member/leader.go @@ -29,6 +29,7 @@ import ( "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/etcdutil" "github.com/tikv/pd/server/config" "github.com/tikv/pd/server/kv" @@ -138,7 +139,7 @@ func (m *Member) CheckLeader(name string) (*pdpb.Member, int64, bool) { leader, rev, err := getLeader(m.client, m.GetLeaderPath()) if err != nil { - log.Error("get leader meet error", zap.Error(err)) + log.Error("getting pd leader meets error", errs.ZapError(errs.ErrGetLeader, err)) time.Sleep(200 * time.Millisecond) return nil, 0, true } @@ -148,7 +149,7 @@ func (m *Member) CheckLeader(name string) (*pdpb.Member, int64, bool) { // in previous CampaignLeader. we can delete and campaign again. log.Warn("the leader has not changed, delete and campaign again", zap.Stringer("old-leader", leader)) if err = m.deleteLeaderKey(); err != nil { - log.Error("delete leader key meet error", zap.Error(err)) + log.Error("deleting pd leader key meets error", errs.ZapError(errs.ErrDeleteLeaderKey, err)) time.Sleep(200 * time.Millisecond) return nil, 0, true } @@ -165,18 +166,18 @@ func (m *Member) CheckPriority(ctx context.Context) { } myPriority, err := m.GetMemberLeaderPriority(m.ID()) if err != nil { - log.Error("failed to load leader priority", zap.Error(err)) + log.Error("failed to load 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(err)) + 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(err)) + log.Error("failed to transfer etcd leader", errs.ZapError(errs.ErrTransferetcdLeader, err)) } else { log.Info("transfer etcd leader", zap.Uint64("from", etcdLeader), @@ -227,7 +228,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 leader meet error", zap.Stringer("leader", leader), zap.Error(err)) + log.Fatal("marshal pd leader meet error", zap.Stringer("pd-leader", leader), errs.ZapError(errs.ErrMarshalLeader, err)) } m.member = leader m.memberValue = string(data) @@ -475,7 +476,7 @@ func (m *Member) WatchLeader(serverCtx context.Context, leader *pdpb.Member, rev break } if wresp.Canceled { - log.Error("leader watcher is canceled with", zap.Int64("revision", revision), zap.Error(wresp.Err())) + log.Error("pd leader watcher is canceled with", zap.Int64("revision", revision), errs.ZapError(errs.ErrWatcherCancel, wresp.Err())) return }