diff --git a/cmd/pd-server/main.go b/cmd/pd-server/main.go index 864b3589549c..39c457415ce8 100644 --- a/cmd/pd-server/main.go +++ b/cmd/pd-server/main.go @@ -16,16 +16,17 @@ package main import ( "context" "flag" + "fmt" "os" "os/signal" "syscall" "github.com/grpc-ecosystem/go-grpc-prometheus" - "github.com/juju/errors" "github.com/pingcap/pd/pkg/logutil" "github.com/pingcap/pd/pkg/metricutil" "github.com/pingcap/pd/server" "github.com/pingcap/pd/server/api" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" // Register schedulers. @@ -50,12 +51,12 @@ func main() { case flag.ErrHelp: os.Exit(0) default: - log.Fatalf("parse cmd flags error: %s\n", errors.ErrorStack(err)) + log.Fatalf("parse cmd flags error: %s\n", fmt.Sprintf("%+v", err)) } err = logutil.InitLogger(&cfg.Log) if err != nil { - log.Fatalf("initialize logger error: %s\n", errors.ErrorStack(err)) + log.Fatalf("initialize logger error: %s\n", fmt.Sprintf("%+v", err)) } server.LogPDInfo() @@ -71,15 +72,15 @@ func main() { err = server.PrepareJoinCluster(cfg) if err != nil { - log.Fatal("join error ", errors.ErrorStack(err)) + log.Fatal("join error ", fmt.Sprintf("%+v", err)) } svr, err := server.CreateServer(cfg, api.NewHandler) if err != nil { - log.Fatalf("create server failed: %v", errors.ErrorStack(err)) + log.Fatalf("create server failed: %v", fmt.Sprintf("%+v", err)) } if err = server.InitHTTPClient(svr); err != nil { - log.Fatalf("initial http client for api handler failed: %v", errors.ErrorStack(err)) + log.Fatalf("initial http client for api handler failed: %v", fmt.Sprintf("%+v", err)) } sc := make(chan os.Signal, 1) @@ -97,7 +98,7 @@ func main() { }() if err := svr.Run(ctx); err != nil { - log.Fatalf("run server failed: %v", errors.ErrorStack(err)) + log.Fatalf("run server failed: %v", fmt.Sprintf("%+v", err)) } <-ctx.Done() diff --git a/cmd/pd-tso-bench/main.go b/cmd/pd-tso-bench/main.go index 10db0dfd92a5..c91c4827142a 100644 --- a/cmd/pd-tso-bench/main.go +++ b/cmd/pd-tso-bench/main.go @@ -24,7 +24,7 @@ import ( "syscall" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pd-client" ) diff --git a/pd-client/client.go b/pd-client/client.go index 99715456e439..108a62ac6386 100644 --- a/pd-client/client.go +++ b/pd-client/client.go @@ -22,7 +22,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/opentracing/opentracing-go" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" @@ -131,10 +131,10 @@ func NewClient(pdAddrs []string, security SecurityOption) (Client, error) { c.connMu.clientConns = make(map[string]*grpc.ClientConn) if err := c.initClusterID(); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if err := c.updateLeader(); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } log.Infof("[pd] init cluster id %v", c.clusterID) @@ -171,7 +171,7 @@ func (c *client) initClusterID() error { time.Sleep(time.Second) } - return errors.Trace(errFailInitClusterID) + return errors.WithStack(errFailInitClusterID) } func (c *client) updateLeader() error { @@ -182,14 +182,14 @@ func (c *client) updateLeader() error { if err != nil || members.GetLeader() == nil || len(members.GetLeader().GetClientUrls()) == 0 { select { case <-c.ctx.Done(): - return errors.Trace(err) + return errors.WithStack(err) default: continue } } c.updateURLs(members.GetMembers()) if err = c.switchLeader(members.GetLeader().GetClientUrls()); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil } @@ -199,11 +199,11 @@ func (c *client) updateLeader() error { func (c *client) getMembers(ctx context.Context, url string) (*pdpb.GetMembersResponse, error) { cc, err := c.getOrCreateGRPCConn(url) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } members, err := pdpb.NewPDClient(cc).GetMembers(ctx, &pdpb.GetMembersRequest{}) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return members, nil } @@ -222,7 +222,7 @@ func (c *client) switchLeader(addrs []string) error { log.Infof("[pd] leader switches to: %v, previous: %v", addr, oldLeader) if _, err := c.getOrCreateGRPCConn(addr); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } c.connMu.Lock() @@ -273,11 +273,11 @@ func (c *client) getOrCreateGRPCConn(addr string) (*grpc.ClientConn, error) { } u, err := url.Parse(addr) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cc, err := grpc.Dial(u.Host, opt) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } c.connMu.Lock() defer c.connMu.Unlock() @@ -440,20 +440,20 @@ func (c *client) processTSORequests(stream pdpb.PD_TsoClient, requests []*tsoReq if err := stream.Send(req); err != nil { c.finishTSORequest(requests, 0, 0, err) - return errors.Trace(err) + return errors.WithStack(err) } resp, err := stream.Recv() if err != nil { - c.finishTSORequest(requests, 0, 0, errors.Trace(err)) - return errors.Trace(err) + c.finishTSORequest(requests, 0, 0, errors.WithStack(err)) + return errors.WithStack(err) } requestDuration.WithLabelValues("tso").Observe(time.Since(start).Seconds()) if err == nil && resp.GetCount() != uint32(len(requests)) { err = errTSOLength } if err != nil { - c.finishTSORequest(requests, 0, 0, errors.Trace(err)) - return errors.Trace(err) + c.finishTSORequest(requests, 0, 0, errors.WithStack(err)) + return errors.WithStack(err) } physical, logical := resp.GetTimestamp().GetPhysical(), resp.GetTimestamp().GetLogical() @@ -477,7 +477,7 @@ func (c *client) revokeTSORequest(err error) { n := len(c.tsoRequests) for i := 0; i < n; i++ { req := <-c.tsoRequests - req.done <- errors.Trace(err) + req.done <- errors.WithStack(err) } } @@ -564,13 +564,13 @@ func (req *tsoRequest) Wait() (int64, int64, error) { defer tsoReqPool.Put(req) if err != nil { cmdFailedDuration.WithLabelValues("tso").Observe(time.Since(req.start).Seconds()) - return 0, 0, errors.Trace(err) + return 0, 0, errors.WithStack(err) } physical, logical := req.physical, req.logical cmdDuration.WithLabelValues("tso").Observe(time.Since(req.start).Seconds()) return physical, logical, err case <-req.ctx.Done(): - return 0, 0, errors.Trace(req.ctx.Err()) + return 0, 0, errors.WithStack(req.ctx.Err()) } } @@ -597,7 +597,7 @@ func (c *client) GetRegion(ctx context.Context, key []byte) (*metapb.Region, *me if err != nil { cmdFailedDuration.WithLabelValues("get_region").Observe(time.Since(start).Seconds()) c.ScheduleCheckLeader() - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } return resp.GetRegion(), resp.GetLeader(), nil } @@ -620,7 +620,7 @@ func (c *client) GetPrevRegion(ctx context.Context, key []byte) (*metapb.Region, if err != nil { cmdFailedDuration.WithLabelValues("get_prev_region").Observe(time.Since(start).Seconds()) c.ScheduleCheckLeader() - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } return resp.GetRegion(), resp.GetLeader(), nil } @@ -643,7 +643,7 @@ func (c *client) GetRegionByID(ctx context.Context, regionID uint64) (*metapb.Re if err != nil { cmdFailedDuration.WithLabelValues("get_region_byid").Observe(time.Since(start).Seconds()) c.ScheduleCheckLeader() - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } return resp.GetRegion(), resp.GetLeader(), nil } @@ -666,7 +666,7 @@ func (c *client) GetStore(ctx context.Context, storeID uint64) (*metapb.Store, e if err != nil { cmdFailedDuration.WithLabelValues("get_store").Observe(time.Since(start).Seconds()) c.ScheduleCheckLeader() - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } store := resp.GetStore() if store == nil { @@ -696,7 +696,7 @@ func (c *client) UpdateGCSafePoint(ctx context.Context, safePoint uint64) (uint6 if err != nil { cmdFailedDuration.WithLabelValues("update_gc_safe_point").Observe(time.Since(start).Seconds()) c.ScheduleCheckLeader() - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } return resp.GetNewSafePoint(), nil } diff --git a/pdctl/command/global.go b/pdctl/command/global.go index f2fbb8fb9de8..19f16991f3dd 100644 --- a/pdctl/command/global.go +++ b/pdctl/command/global.go @@ -24,7 +24,7 @@ import ( "os" "github.com/coreos/etcd/pkg/transport" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -43,7 +43,7 @@ func InitHTTPSClient(CAPath, CertPath, KeyPath string) error { } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } dialClient = &http.Client{Transport: &http.Transport{ diff --git a/pdctl/command/operator.go b/pdctl/command/operator.go index 2fcffcb89fff..8d728e82d031 100644 --- a/pdctl/command/operator.go +++ b/pdctl/command/operator.go @@ -18,7 +18,7 @@ import ( "net/http" "strconv" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -355,7 +355,7 @@ func parseUint64s(args []string) ([]uint64, error) { for _, arg := range args { v, err := strconv.ParseUint(arg, 10, 64) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } results = append(results, v) } diff --git a/pkg/apiutil/apiutil.go b/pkg/apiutil/apiutil.go index c024b78a5a5c..ed232c31a8a4 100644 --- a/pkg/apiutil/apiutil.go +++ b/pkg/apiutil/apiutil.go @@ -20,14 +20,14 @@ import ( "io/ioutil" "strconv" - "github.com/juju/errors" + "github.com/pkg/errors" ) // DeferClose captures the error returned from closing (if an error occurs). // This is designed to be used in a defer statement. func DeferClose(c io.Closer, err *error) { if cerr := c.Close(); cerr != nil && *err == nil { - *err = errors.Trace(cerr) + *err = errors.WithStack(cerr) } } @@ -55,7 +55,7 @@ func ReadJSON(r io.ReadCloser, data interface{}) error { defer DeferClose(r, &err) b, err := ioutil.ReadAll(r) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } err = json.Unmarshal(b, data) diff --git a/pkg/etcdutil/etcdutil.go b/pkg/etcdutil/etcdutil.go index 6a0b34c9bc6e..2e9bdf1a1ddd 100644 --- a/pkg/etcdutil/etcdutil.go +++ b/pkg/etcdutil/etcdutil.go @@ -22,7 +22,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/etcdserver" "github.com/coreos/etcd/pkg/types" - "github.com/juju/errors" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) @@ -76,7 +76,7 @@ func AddEtcdMember(client *clientv3.Client, urls []string) (*clientv3.MemberAddR ctx, cancel := context.WithTimeout(client.Ctx(), DefaultRequestTimeout) addResp, err := client.MemberAdd(ctx, urls) cancel() - return addResp, errors.Trace(err) + return addResp, errors.WithStack(err) } // ListEtcdMembers returns a list of internal etcd members. @@ -84,7 +84,7 @@ func ListEtcdMembers(client *clientv3.Client) (*clientv3.MemberListResponse, err ctx, cancel := context.WithTimeout(client.Ctx(), DefaultRequestTimeout) listResp, err := client.MemberList(ctx) cancel() - return listResp, errors.Trace(err) + return listResp, errors.WithStack(err) } // RemoveEtcdMember removes a member by the given id. @@ -92,5 +92,5 @@ func RemoveEtcdMember(client *clientv3.Client, id uint64) (*clientv3.MemberRemov ctx, cancel := context.WithTimeout(client.Ctx(), DefaultRequestTimeout) rmResp, err := client.MemberRemove(ctx, id) cancel() - return rmResp, errors.Trace(err) + return rmResp, errors.WithStack(err) } diff --git a/pkg/faketikv/client.go b/pkg/faketikv/client.go index bc5199208220..8874a1607e26 100644 --- a/pkg/faketikv/client.go +++ b/pkg/faketikv/client.go @@ -19,7 +19,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/faketikv/simutil" @@ -77,11 +77,11 @@ func NewClient(pdAddr string, tag string) (Client, <-chan *pdpb.RegionHeartbeatR } cc, err := c.createConn() if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } c.clientConn = cc if err := c.initClusterID(); err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } simutil.Logger.Infof("[%s][pd] init cluster id %v", tag, c.clusterID) c.wg.Add(1) @@ -107,13 +107,13 @@ func (c *client) initClusterID() error { return nil } - return errors.Trace(errFailInitClusterID) + return errors.WithStack(errFailInitClusterID) } func (c *client) getMembers(ctx context.Context) (*pdpb.GetMembersResponse, error) { members, err := c.pdClient().GetMembers(ctx, &pdpb.GetMembersRequest{}) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return members, nil } @@ -121,7 +121,7 @@ func (c *client) getMembers(ctx context.Context) (*pdpb.GetMembersResponse, erro func (c *client) createConn() (*grpc.ClientConn, error) { cc, err := grpc.Dial(strings.TrimPrefix(c.url, "http://"), grpc.WithInsecure()) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return cc, nil } diff --git a/pkg/faketikv/cluster.go b/pkg/faketikv/cluster.go index f60a475b9f38..23cf5949da32 100644 --- a/pkg/faketikv/cluster.go +++ b/pkg/faketikv/cluster.go @@ -16,7 +16,7 @@ package faketikv import ( "context" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/pd/pkg/faketikv/cases" ) @@ -37,7 +37,7 @@ func NewClusterInfo(pdAddr string, conf *cases.Conf) (*ClusterInfo, error) { for _, store := range conf.Stores { node, err := NewNode(store, pdAddr) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster.Nodes[store.ID] = node } @@ -71,5 +71,5 @@ func (c *ClusterInfo) allocID(storeID uint64) (uint64, error) { return 0, errors.Errorf("node %d not found", storeID) } id, err := node.client.AllocID(context.Background()) - return id, errors.Trace(err) + return id, errors.WithStack(err) } diff --git a/pkg/faketikv/drive.go b/pkg/faketikv/drive.go index 5b5c9530f7cc..15079e7fc6e2 100644 --- a/pkg/faketikv/drive.go +++ b/pkg/faketikv/drive.go @@ -16,7 +16,7 @@ package faketikv import ( "context" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/faketikv/cases" @@ -52,18 +52,18 @@ func (d *Driver) Prepare() error { clusterInfo, err := NewClusterInfo(d.addr, d.conf) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } d.clusterInfo = clusterInfo conn, err := NewConn(d.clusterInfo.Nodes) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } raftEngine, err := NewRaftEngine(d.conf, conn) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } d.raftEngine = raftEngine @@ -74,7 +74,7 @@ func (d *Driver) Prepare() error { // Bootstrap. store, region, err := clusterInfo.GetBootstrapInfo(d.raftEngine) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } d.client = clusterInfo.Nodes[store.GetId()].client @@ -91,7 +91,7 @@ func (d *Driver) Prepare() error { for { id, err := d.client.AllocID(context.Background()) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if id > d.conf.MaxID { break diff --git a/pkg/integration_test/cluster.go b/pkg/integration_test/cluster.go index 116edfc2ca48..5f832ff7bbf6 100644 --- a/pkg/integration_test/cluster.go +++ b/pkg/integration_test/cluster.go @@ -21,7 +21,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/go-semver/semver" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server" "github.com/pingcap/pd/server/api" @@ -46,17 +46,17 @@ var initHTTPClientOnce sync.Once func newTestServer(cfg *server.Config) (*testServer, error) { err := server.PrepareJoinCluster(cfg) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } svr, err := server.CreateServer(cfg, api.NewHandler) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } initHTTPClientOnce.Do(func() { err = server.InitHTTPClient(svr) }) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return &testServer{ server: svr, @@ -71,7 +71,7 @@ func (s *testServer) Run(ctx context.Context) error { return errors.Errorf("server(state%d) cannot run", s.state) } if err := s.server.Run(ctx); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } s.state = Running return nil @@ -141,7 +141,7 @@ func (s *testServer) GetEtcdLeader() (string, error) { req := &pdpb.GetMembersRequest{Header: &pdpb.RequestHeader{ClusterId: s.server.ClusterID()}} members, err := s.server.GetMembers(context.TODO(), req) if err != nil { - return "", errors.Trace(err) + return "", errors.WithStack(err) } return members.GetEtcdLeader().GetName(), nil } @@ -163,11 +163,11 @@ func newTestCluster(initialServerCount int) (*testCluster, error) { for _, conf := range config.InitialServers { serverConf, err := conf.Generate() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } s, err := newTestServer(serverConf) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } servers[conf.Name] = s } @@ -190,7 +190,7 @@ func (c *testCluster) RunServers(ctx context.Context, servers []*testServer) err } for _, c := range res { if err := <-c; err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } return nil @@ -207,7 +207,7 @@ func (c *testCluster) RunInitialServers() error { func (c *testCluster) StopAll() error { for _, s := range c.servers { if err := s.Stop(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } return nil @@ -239,11 +239,11 @@ func (c *testCluster) WaitLeader() string { func (c *testCluster) Join() (*testServer, error) { conf, err := c.config.Join().Generate() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } s, err := newTestServer(conf) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } c.servers[conf.Name] = s return s, nil @@ -253,7 +253,7 @@ func (c *testCluster) Destroy() error { for _, s := range c.servers { err := s.Destroy() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } return nil diff --git a/pkg/integration_test/config.go b/pkg/integration_test/config.go index 599beec32683..9eaf79a4f939 100644 --- a/pkg/integration_test/config.go +++ b/pkg/integration_test/config.go @@ -18,7 +18,7 @@ import ( "io/ioutil" "strings" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/tempurl" "github.com/pingcap/pd/server" ) @@ -64,7 +64,7 @@ func (c *serverConfig) Generate() (*server.Config, error) { cfg := server.NewConfig() err := cfg.Parse(arguments) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return cfg, nil } diff --git a/pkg/integration_test/member_test.go b/pkg/integration_test/member_test.go index 456f3e335d53..314b2a02ecb7 100644 --- a/pkg/integration_test/member_test.go +++ b/pkg/integration_test/member_test.go @@ -21,7 +21,7 @@ import ( "net/http" "time" - "github.com/juju/errors" + "github.com/pkg/errors" . "github.com/pingcap/check" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/testutil" diff --git a/pkg/logutil/log.go b/pkg/logutil/log.go index 86f553f06998..a2b5b3b47eb3 100644 --- a/pkg/logutil/log.go +++ b/pkg/logutil/log.go @@ -24,7 +24,7 @@ import ( "sync" "github.com/coreos/pkg/capnslog" - "github.com/juju/errors" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" lumberjack "gopkg.in/natefinch/lumberjack.v2" ) @@ -242,7 +242,7 @@ func InitLogger(cfg *LogConfig) error { err = InitFileLog(&cfg.File) }) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil } diff --git a/pkg/typeutil/duration.go b/pkg/typeutil/duration.go index 46148712917d..c29c8de8ed6b 100644 --- a/pkg/typeutil/duration.go +++ b/pkg/typeutil/duration.go @@ -18,7 +18,7 @@ import ( "strconv" "time" - "github.com/juju/errors" + "github.com/pkg/errors" ) // Duration is a wrapper of time.Duration for TOML and JSON. @@ -40,11 +40,11 @@ func (d *Duration) MarshalJSON() ([]byte, error) { func (d *Duration) UnmarshalJSON(text []byte) error { s, err := strconv.Unquote(string(text)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } duration, err := time.ParseDuration(s) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } d.Duration = duration return nil @@ -54,5 +54,5 @@ func (d *Duration) UnmarshalJSON(text []byte) error { func (d *Duration) UnmarshalText(text []byte) error { var err error d.Duration, err = time.ParseDuration(string(text)) - return errors.Trace(err) + return errors.WithStack(err) } diff --git a/pkg/typeutil/size.go b/pkg/typeutil/size.go index 08523316ecd2..3b58c73ccfac 100644 --- a/pkg/typeutil/size.go +++ b/pkg/typeutil/size.go @@ -17,7 +17,7 @@ import ( "strconv" gh "github.com/dustin/go-humanize" - "github.com/juju/errors" + "github.com/pkg/errors" ) // ByteSize is a retype uint64 for TOML and JSON. @@ -32,11 +32,11 @@ func (b ByteSize) MarshalJSON() ([]byte, error) { func (b *ByteSize) UnmarshalJSON(text []byte) error { s, err := strconv.Unquote(string(text)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } v, err := gh.ParseBytes(s) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } *b = ByteSize(v) return nil @@ -46,7 +46,7 @@ func (b *ByteSize) UnmarshalJSON(text []byte) error { func (b *ByteSize) UnmarshalText(text []byte) error { v, err := gh.ParseBytes(string(text)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } *b = ByteSize(v) return nil diff --git a/pkg/typeutil/string_slice.go b/pkg/typeutil/string_slice.go index 2ff515ca2acb..e62df9032ec5 100644 --- a/pkg/typeutil/string_slice.go +++ b/pkg/typeutil/string_slice.go @@ -17,7 +17,7 @@ import ( "strconv" "strings" - "github.com/juju/errors" + "github.com/pkg/errors" ) //StringSlice is more friendly to json encode/decode @@ -32,7 +32,7 @@ func (s StringSlice) MarshalJSON() ([]byte, error) { func (s *StringSlice) UnmarshalJSON(text []byte) error { data, err := strconv.Unquote(string(text)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if len(data) == 0 { *s = nil diff --git a/server/api/classifier.go b/server/api/classifier.go index e6847f633efc..6ab776f54638 100644 --- a/server/api/classifier.go +++ b/server/api/classifier.go @@ -16,7 +16,7 @@ package api import ( "net/http" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server" "github.com/unrolled/render" ) diff --git a/server/api/config.go b/server/api/config.go index 6e93974984a1..a543fb562770 100644 --- a/server/api/config.go +++ b/server/api/config.go @@ -20,7 +20,7 @@ import ( "net/http" "github.com/gorilla/mux" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/error_code" "github.com/pingcap/pd/server" "github.com/unrolled/render" diff --git a/server/api/diagnose.go b/server/api/diagnose.go index 374a2532c38c..2251d6478fc9 100644 --- a/server/api/diagnose.go +++ b/server/api/diagnose.go @@ -19,7 +19,7 @@ import ( "net/http" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server" "github.com/unrolled/render" @@ -115,7 +115,7 @@ func (d *diagnoseHandler) membersDiagnose(rdd *[]*Recommendation) error { req := &pdpb.GetMembersRequest{Header: &pdpb.RequestHeader{ClusterId: d.svr.ClusterID()}} members, err := d.svr.GetMembers(context.Background(), req) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } lenMembers := len(members.Members) if lenMembers > 0 { diff --git a/server/api/label.go b/server/api/label.go index 5586db236a91..8ffb5d363052 100644 --- a/server/api/label.go +++ b/server/api/label.go @@ -18,7 +18,7 @@ import ( "regexp" "strings" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/pd/server" "github.com/unrolled/render" @@ -102,11 +102,11 @@ func newStoresLabelFilter(name, value string) (*storesLabelFilter, error) { // add (?i) to set a case-insensitive flag keyPattern, err := regexp.Compile("(?i)" + name) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } valuePattern, err := regexp.Compile("(?i)" + value) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return &storesLabelFilter{ keyPattern: keyPattern, diff --git a/server/api/member.go b/server/api/member.go index 0450be9770b8..d3874bd9ec54 100644 --- a/server/api/member.go +++ b/server/api/member.go @@ -20,7 +20,7 @@ import ( "strconv" "github.com/gorilla/mux" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/etcdutil" "github.com/pingcap/pd/server" @@ -53,7 +53,7 @@ func (h *memberHandler) listMembers() (*pdpb.GetMembersResponse, error) { req := &pdpb.GetMembersRequest{Header: &pdpb.RequestHeader{ClusterId: h.svr.ClusterID()}} members, err := h.svr.GetMembers(context.Background(), req) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } // Fill leader priorities. for _, m := range members.GetMembers() { @@ -68,7 +68,7 @@ func (h *memberHandler) listMembers() (*pdpb.GetMembersResponse, error) { } m.LeaderPriority = int32(leaderPriority) } - return members, errors.Trace(err) + return members, errors.WithStack(err) } func (h *memberHandler) DeleteByName(w http.ResponseWriter, r *http.Request) { diff --git a/server/api/store.go b/server/api/store.go index 1e0a1f51cebc..0c4cf35d399b 100644 --- a/server/api/store.go +++ b/server/api/store.go @@ -20,7 +20,7 @@ import ( "time" "github.com/gorilla/mux" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/pd/pkg/apiutil" "github.com/pingcap/pd/pkg/error_code" @@ -360,7 +360,7 @@ func newStoreStateFilter(u *url.URL) (*storeStateFilter, error) { for _, s := range v { state, err := strconv.Atoi(s) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } storeState := metapb.StoreState(state) diff --git a/server/api/trend.go b/server/api/trend.go index eb8cd2a0951c..388cafd0f8c0 100644 --- a/server/api/trend.go +++ b/server/api/trend.go @@ -18,7 +18,7 @@ import ( "strconv" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/typeutil" "github.com/pingcap/pd/server" "github.com/pingcap/pd/server/core" @@ -116,7 +116,7 @@ func (h *trendHandler) getTrendStores() ([]trendStore, error) { } stores, err := h.GetStores() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } trendStores := make([]trendStore, 0, len(stores)) @@ -157,7 +157,7 @@ func (h *trendHandler) getStoreFlow(stats core.StoreHotRegionsStat, storeID uint func (h *trendHandler) getTrendHistory(start time.Time) (*trendHistory, error) { operatorHistory, err := h.GetHistory(start) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } // Use a tmp map to merge same histories together. historyMap := make(map[trendHistoryEntry]int) diff --git a/server/api/util.go b/server/api/util.go index 7e10134c44a2..774b32f84ebc 100644 --- a/server/api/util.go +++ b/server/api/util.go @@ -20,7 +20,7 @@ import ( "io/ioutil" "net/http" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/apiutil" "github.com/pingcap/pd/pkg/error_code" "github.com/pingcap/pd/server" @@ -70,11 +70,11 @@ func readJSON(r io.ReadCloser, data interface{}) error { b, err := ioutil.ReadAll(r) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } err = json.Unmarshal(b, data) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil @@ -83,7 +83,7 @@ func readJSON(r io.ReadCloser, data interface{}) error { func postJSON(url string, data []byte) error { resp, err := server.DialClient.Post(url, "application/json", bytes.NewBuffer(data)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } res, err := ioutil.ReadAll(resp.Body) resp.Body.Close() @@ -112,7 +112,7 @@ func doDelete(url string) error { func doGet(url string) (*http.Response, error) { resp, err := server.DialClient.Get(url) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if resp.StatusCode != http.StatusOK { return nil, errors.Errorf("http get url %s return code %d", url, resp.StatusCode) diff --git a/server/api/utiletcdhttpapi.go b/server/api/utiletcdhttpapi.go index f0b34ebb6b23..4bac28ccc9fd 100644 --- a/server/api/utiletcdhttpapi.go +++ b/server/api/utiletcdhttpapi.go @@ -17,7 +17,7 @@ import ( "fmt" "time" - "github.com/juju/errors" + "github.com/pkg/errors" ) const ( @@ -45,11 +45,11 @@ func getEtcdPeerStats(etcdClientURL string) (*PeerStats, error) { ps := &PeerStats{} resp, err := doGet(fmt.Sprintf("%s%s", etcdClientURL, etcdPeerStatsAPI)) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } defer resp.Body.Close() if err := readJSON(resp.Body, ps); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return ps, nil } diff --git a/server/cluster.go b/server/cluster.go index c3fceaf004bc..c87ab42c25ff 100644 --- a/server/cluster.go +++ b/server/cluster.go @@ -19,7 +19,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/error_code" @@ -76,14 +76,14 @@ func newRaftCluster(s *Server, clusterID uint64) *RaftCluster { func (c *RaftCluster) loadClusterStatus() (*ClusterStatus, error) { data, err := c.s.kv.Load((c.s.kv.ClusterStatePath("raft_bootstrap_time"))) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if len(data) == 0 { return &ClusterStatus{}, nil } t, err := parseTimestamp([]byte(data)) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return &ClusterStatus{RaftBootstrapTime: t}, nil } @@ -99,7 +99,7 @@ func (c *RaftCluster) start() error { cluster, err := loadClusterInfo(c.s.idAlloc, c.s.kv, c.s.scheduleOpt) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if cluster == nil { return nil @@ -107,7 +107,7 @@ func (c *RaftCluster) start() error { err = c.s.classifier.ReloadNamespaces() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } c.cachedCluster = cluster @@ -295,7 +295,7 @@ func (c *RaftCluster) UpdateStoreLabels(storeID uint64, labels []*metapb.StoreLa storeMeta.Labels = labels // putStore will perform label merge. err := c.putStore(storeMeta) - return errors.Trace(err) + return errors.WithStack(err) } func (c *RaftCluster) putStore(store *metapb.Store) error { @@ -435,7 +435,7 @@ func (c *RaftCluster) SetStoreWeight(storeID uint64, leader, region float64) err } if err := c.s.kv.SaveStoreWeight(storeID, leader, region); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } store.LeaderWeight, store.RegionWeight = leader, region diff --git a/server/cluster_info.go b/server/cluster_info.go index 7302a2600dae..502f5af2946c 100644 --- a/server/cluster_info.go +++ b/server/cluster_info.go @@ -19,7 +19,7 @@ import ( "github.com/coreos/go-semver/semver" "github.com/gogo/protobuf/proto" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server/core" @@ -58,7 +58,7 @@ func loadClusterInfo(id core.IDAllocator, kv *core.KV, opt *scheduleOption) (*cl c.meta = &metapb.Cluster{} ok, err := kv.LoadMeta(c.meta) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if !ok { return nil, nil @@ -66,13 +66,13 @@ func loadClusterInfo(id core.IDAllocator, kv *core.KV, opt *scheduleOption) (*cl start := time.Now() if err := kv.LoadStores(c.core.Stores); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } log.Infof("load %v stores cost %v", c.core.Stores.GetStoreCount(), time.Since(start)) start = time.Now() if err := kv.LoadRegions(c.core.Regions); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } log.Infof("load %v regions cost %v", c.core.Regions.GetRegionCount(), time.Since(start)) @@ -124,7 +124,7 @@ func (c *clusterInfo) AllocPeer(storeID uint64) (*metapb.Peer, error) { peerID, err := c.allocID() if err != nil { log.Errorf("failed to alloc peer: %v", err) - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } peer := &metapb.Peer{ Id: peerID, @@ -154,7 +154,7 @@ func (c *clusterInfo) putMeta(meta *metapb.Cluster) error { func (c *clusterInfo) putMetaLocked(meta *metapb.Cluster) error { if c.kv != nil { if err := c.kv.SaveMeta(meta); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } c.meta = meta @@ -177,7 +177,7 @@ func (c *clusterInfo) putStore(store *core.StoreInfo) error { func (c *clusterInfo) putStoreLocked(store *core.StoreInfo) error { if c.kv != nil { if err := c.kv.SaveStore(store.Store); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } return c.core.PutStore(store) @@ -300,7 +300,7 @@ func (c *clusterInfo) putRegion(region *core.RegionInfo) error { func (c *clusterInfo) putRegionLocked(region *core.RegionInfo) error { if c.kv != nil { if err := c.kv.SaveRegion(region.Region); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } return c.core.PutRegion(region) @@ -465,7 +465,7 @@ func (c *clusterInfo) handleRegionHeartbeat(region *core.RegionInfo) error { o := origin.GetRegionEpoch() // Region meta is stale, return an error. if r.GetVersion() < o.GetVersion() || r.GetConfVer() < o.GetConfVer() { - return errors.Trace(ErrRegionIsStale(region.Region, origin.Region)) + return errors.WithStack(ErrRegionIsStale(region.Region, origin.Region)) } if r.GetVersion() > o.GetVersion() { log.Infof("[region %d] %s, Version changed from {%d} to {%d}", region.GetId(), core.DiffRegionKeyInfo(origin, region), o.GetVersion(), r.GetVersion()) diff --git a/server/cluster_info_test.go b/server/cluster_info_test.go index ed5a5d1cc802..41fbe78f6a14 100644 --- a/server/cluster_info_test.go +++ b/server/cluster_info_test.go @@ -16,7 +16,7 @@ package server import ( "math/rand" - "github.com/juju/errors" + "github.com/pkg/errors" . "github.com/pingcap/check" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" @@ -32,7 +32,7 @@ func checkStaleRegion(origin *metapb.Region, region *metapb.Region) error { e := region.GetRegionEpoch() if e.GetVersion() < o.GetVersion() || e.GetConfVer() < o.GetConfVer() { - return errors.Trace(ErrRegionIsStale(region, origin)) + return errors.WithStack(ErrRegionIsStale(region, origin)) } return nil diff --git a/server/cluster_worker.go b/server/cluster_worker.go index c36cd0c82bc0..7853256a3bfb 100644 --- a/server/cluster_worker.go +++ b/server/cluster_worker.go @@ -15,19 +15,20 @@ package server import ( "bytes" + "fmt" "github.com/gogo/protobuf/proto" - "github.com/juju/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server/core" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) // HandleRegionHeartbeat processes RegionInfo reports from client. func (c *RaftCluster) HandleRegionHeartbeat(region *core.RegionInfo) error { if err := c.cachedCluster.handleRegionHeartbeat(region); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // If the region peer count is 0, then we should not handle this. @@ -44,18 +45,18 @@ func (c *RaftCluster) handleAskSplit(request *pdpb.AskSplitRequest) (*pdpb.AskSp reqRegion := request.GetRegion() err := c.validRequestRegion(reqRegion) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } newRegionID, err := c.s.idAlloc.Alloc() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } peerIDs := make([]uint64, len(request.Region.Peers)) for i := 0; i < len(peerIDs); i++ { if peerIDs[i], err = c.s.idAlloc.Alloc(); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } } @@ -92,7 +93,7 @@ func (c *RaftCluster) handleAskBatchSplit(request *pdpb.AskBatchSplitRequest) (* splitCount := request.GetSplitCount() err := c.validRequestRegion(reqRegion) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } splitIDs := make([]*pdpb.SplitID, 0, splitCount) @@ -101,13 +102,13 @@ func (c *RaftCluster) handleAskBatchSplit(request *pdpb.AskBatchSplitRequest) (* for i := 0; i < int(splitCount); i++ { newRegionID, err := c.s.idAlloc.Alloc() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } peerIDs := make([]uint64, len(request.Region.Peers)) for i := 0; i < len(peerIDs); i++ { if peerIDs[i], err = c.s.idAlloc.Alloc(); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } } @@ -163,8 +164,8 @@ func (c *RaftCluster) handleReportSplit(request *pdpb.ReportSplitRequest) (*pdpb err := c.checkSplitRegion(left, right) if err != nil { - log.Warnf("report split region is invalid - %v, %v", request, errors.ErrorStack(err)) - return nil, errors.Trace(err) + log.Warnf("report split region is invalid - %v, %v", request, fmt.Sprintf("%+v", err)) + return nil, errors.WithStack(err) } // Build origin region by using left and right. @@ -180,8 +181,8 @@ func (c *RaftCluster) handleBatchReportSplit(request *pdpb.ReportBatchSplitReque err := c.checkSplitRegions(regions) if err != nil { - log.Warnf("report batch split region is invalid - %v, %v", request, errors.ErrorStack(err)) - return nil, errors.Trace(err) + log.Warnf("report batch split region is invalid - %v, %v", request, fmt.Sprintf("%+v", err)) + return nil, errors.WithStack(err) } last := len(regions) - 1 originRegion := proto.Clone(regions[last]).(*metapb.Region) diff --git a/server/config.go b/server/config.go index 12b2eb874254..f4f53d813ea4 100644 --- a/server/config.go +++ b/server/config.go @@ -27,7 +27,7 @@ import ( "github.com/coreos/etcd/embed" "github.com/coreos/etcd/pkg/transport" "github.com/coreos/go-semver/semver" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/logutil" "github.com/pingcap/pd/pkg/metricutil" "github.com/pingcap/pd/pkg/typeutil" @@ -224,7 +224,7 @@ func (c *Config) Parse(arguments []string) error { // Parse first to get config file. err := c.FlagSet.Parse(arguments) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // Load config file if specified. @@ -232,7 +232,7 @@ func (c *Config) Parse(arguments []string) error { if c.configFile != "" { meta, err = c.configFromFile(c.configFile) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // Backward compatibility for toml config @@ -251,7 +251,7 @@ func (c *Config) Parse(arguments []string) error { // Parse again to replace with command line options. err = c.FlagSet.Parse(arguments) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if len(c.FlagSet.Args()) != 0 { @@ -259,7 +259,7 @@ func (c *Config) Parse(arguments []string) error { } err = c.adjust(meta) - return errors.Trace(err) + return errors.WithStack(err) } func (c *Config) validate() error { @@ -268,15 +268,15 @@ func (c *Config) validate() error { } dataDir, err := filepath.Abs(c.DataDir) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } logFile, err := filepath.Abs(c.Log.File.Filename) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } rel, err := filepath.Rel(dataDir, filepath.Dir(logFile)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !strings.HasPrefix(rel, "..") { return errors.New("log directory shouldn't be the subdirectory of data directory") @@ -290,7 +290,7 @@ func (c *Config) adjust(meta *toml.MetaData) error { adjustString(&c.DataDir, fmt.Sprintf("default.%s", c.Name)) if err := c.validate(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } adjustString(&c.ClientUrls, defaultClientUrls) @@ -336,10 +336,10 @@ func (c *Config) adjust(meta *toml.MetaData) error { adjustString(&c.Metric.PushJob, c.Name) if err := c.Schedule.adjust(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err := c.Replication.adjust(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } adjustDuration(&c.heartbeatStreamBindInterval, defaultHeartbeatStreamRebindInterval) @@ -370,7 +370,7 @@ func (c *Config) String() string { // configFromFile loads config from file. func (c *Config) configFromFile(path string) (*toml.MetaData, error) { meta, err := toml.DecodeFile(path, c) - return &meta, errors.Trace(err) + return &meta, errors.WithStack(err) } // ScheduleConfig is the schedule configuration. @@ -628,7 +628,7 @@ func (s SecurityConfig) ToTLSConfig() (*tls.Config, error) { } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return tlsConfig, nil } @@ -660,7 +660,7 @@ func ParseUrls(s string) ([]url.URL, error) { for _, item := range items { u, err := url.Parse(item) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } urls = append(urls, *u) @@ -698,22 +698,22 @@ func (c *Config) genEmbedEtcdConfig() (*embed.Config, error) { cfg.LPUrls, err = ParseUrls(c.PeerUrls) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cfg.APUrls, err = ParseUrls(c.AdvertisePeerUrls) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cfg.LCUrls, err = ParseUrls(c.ClientUrls) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cfg.ACUrls, err = ParseUrls(c.AdvertiseClientUrls) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return cfg, nil diff --git a/server/coordinator.go b/server/coordinator.go index fba4a133c00c..0ac8d768252e 100644 --- a/server/coordinator.go +++ b/server/coordinator.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/eraftpb" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" @@ -386,7 +386,7 @@ func (c *coordinator) addScheduler(scheduler schedule.Scheduler, args ...string) s := newScheduleController(c, scheduler) if err := s.Prepare(c.cluster); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } c.wg.Add(1) @@ -410,7 +410,7 @@ func (c *coordinator) removeScheduler(name string) error { delete(c.schedulers, name) if err := c.cluster.opt.RemoveSchedulerCfg(name); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil diff --git a/server/coordinator_test.go b/server/coordinator_test.go index 315f36633c90..6a967ca1e8f3 100644 --- a/server/coordinator_test.go +++ b/server/coordinator_test.go @@ -18,7 +18,7 @@ import ( "math/rand" "time" - "github.com/juju/errors" + "github.com/pkg/errors" . "github.com/pingcap/check" "github.com/pingcap/kvproto/pkg/eraftpb" "github.com/pingcap/kvproto/pkg/metapb" diff --git a/server/core/kv.go b/server/core/kv.go index 33c0d5ffd18b..b7829ed68c97 100644 --- a/server/core/kv.go +++ b/server/core/kv.go @@ -21,7 +21,7 @@ import ( "strconv" "github.com/gogo/protobuf/proto" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" ) @@ -109,7 +109,7 @@ func (kv *KV) DeleteRegion(region *metapb.Region) error { func (kv *KV) SaveConfig(cfg interface{}) error { value, err := json.Marshal(cfg) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return kv.Save(configPath, string(value)) } @@ -118,14 +118,14 @@ func (kv *KV) SaveConfig(cfg interface{}) error { func (kv *KV) LoadConfig(cfg interface{}) (bool, error) { value, err := kv.Load(configPath) if err != nil { - return false, errors.Trace(err) + return false, errors.WithStack(err) } if value == "" { return false, nil } err = json.Unmarshal([]byte(value), cfg) if err != nil { - return false, errors.Trace(err) + return false, errors.WithStack(err) } return true, nil } @@ -138,22 +138,22 @@ func (kv *KV) LoadStores(stores *StoresInfo) error { key := kv.storePath(nextID) res, err := kv.LoadRange(key, endKey, minKVRangeLimit) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } for _, s := range res { store := &metapb.Store{} if err := store.Unmarshal([]byte(s)); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } storeInfo := NewStoreInfo(store) leaderWeight, err := kv.loadFloatWithDefaultValue(kv.storeLeaderWeightPath(storeInfo.GetId()), 1.0) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } storeInfo.LeaderWeight = leaderWeight regionWeight, err := kv.loadFloatWithDefaultValue(kv.storeRegionWeightPath(storeInfo.GetId()), 1.0) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } storeInfo.RegionWeight = regionWeight @@ -170,11 +170,11 @@ func (kv *KV) LoadStores(stores *StoresInfo) error { func (kv *KV) SaveStoreWeight(storeID uint64, leader, region float64) error { leaderValue := strconv.FormatFloat(leader, 'f', -1, 64) if err := kv.Save(kv.storeLeaderWeightPath(storeID), leaderValue); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } regionValue := strconv.FormatFloat(region, 'f', -1, 64) if err := kv.Save(kv.storeRegionWeightPath(storeID), regionValue); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil } @@ -182,14 +182,14 @@ func (kv *KV) SaveStoreWeight(storeID uint64, leader, region float64) error { func (kv *KV) loadFloatWithDefaultValue(path string, def float64) (float64, error) { res, err := kv.Load(path) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } if res == "" { return def, nil } val, err := strconv.ParseFloat(res, 64) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } return val, nil } @@ -211,20 +211,20 @@ func (kv *KV) LoadRegions(regions *RegionsInfo) error { if rangeLimit /= 2; rangeLimit >= minKVRangeLimit { continue } - return errors.Trace(err) + return errors.WithStack(err) } for _, s := range res { region := &metapb.Region{} if err := region.Unmarshal([]byte(s)); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } nextID = region.GetId() + 1 overlaps := regions.SetRegion(NewRegionInfo(region, nil)) for _, item := range overlaps { if err := kv.DeleteRegion(item); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } } @@ -240,7 +240,7 @@ func (kv *KV) SaveGCSafePoint(safePoint uint64) error { key := path.Join(gcPath, "safe_point") value := strconv.FormatUint(safePoint, 16) if err := kv.Save(key, value); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return nil } @@ -250,14 +250,14 @@ func (kv *KV) LoadGCSafePoint() (uint64, error) { key := path.Join(gcPath, "safe_point") value, err := kv.Load(key) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } if value == "" { return 0, nil } safePoint, err := strconv.ParseUint(value, 16, 64) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } return safePoint, nil } @@ -265,7 +265,7 @@ func (kv *KV) LoadGCSafePoint() (uint64, error) { func (kv *KV) loadProto(key string, msg proto.Message) (bool, error) { value, err := kv.Load(key) if err != nil { - return false, errors.Trace(err) + return false, errors.WithStack(err) } if value == "" { return false, nil @@ -276,7 +276,7 @@ func (kv *KV) loadProto(key string, msg proto.Message) (bool, error) { func (kv *KV) saveProto(key string, msg proto.Message) error { value, err := proto.Marshal(msg) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } return kv.Save(key, string(value)) } diff --git a/server/core/kv_test.go b/server/core/kv_test.go index c9c4e13df798..fdd9f32e63e9 100644 --- a/server/core/kv_test.go +++ b/server/core/kv_test.go @@ -17,7 +17,7 @@ import ( "fmt" "math" - "github.com/juju/errors" + "github.com/pkg/errors" . "github.com/pingcap/check" "github.com/pingcap/kvproto/pkg/metapb" ) diff --git a/server/etcd_kv.go b/server/etcd_kv.go index 2dcb72f37e76..4fb893661d3a 100644 --- a/server/etcd_kv.go +++ b/server/etcd_kv.go @@ -19,7 +19,7 @@ import ( "time" "github.com/coreos/etcd/clientv3" - "github.com/juju/errors" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) @@ -51,7 +51,7 @@ func (kv *etcdKVBase) Load(key string) (string, error) { resp, err := kvGet(kv.server.client, key) if err != nil { - return "", errors.Trace(err) + return "", errors.WithStack(err) } if n := len(resp.Kvs); n == 0 { return "", nil @@ -69,7 +69,7 @@ func (kv *etcdKVBase) LoadRange(key, endKey string, limit int) ([]string, error) withLimit := clientv3.WithLimit(int64(limit)) resp, err := kvGet(kv.server.client, key, withRange, withLimit) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } res := make([]string, 0, len(resp.Kvs)) for _, item := range resp.Kvs { @@ -84,10 +84,10 @@ func (kv *etcdKVBase) Save(key, value string) error { resp, err := kv.server.leaderTxn().Then(clientv3.OpPut(key, value)).Commit() if err != nil { log.Errorf("save to etcd error: %v", err) - return errors.Trace(err) + return errors.WithStack(err) } if !resp.Succeeded { - return errors.Trace(errTxnFailed) + return errors.WithStack(errTxnFailed) } return nil } @@ -98,10 +98,10 @@ func (kv *etcdKVBase) Delete(key string) error { resp, err := kv.server.leaderTxn().Then(clientv3.OpDelete(key)).Commit() if err != nil { log.Errorf("delete from etcd error: %v", err) - return errors.Trace(err) + return errors.WithStack(err) } if !resp.Succeeded { - return errors.Trace(errTxnFailed) + return errors.WithStack(errTxnFailed) } return nil } @@ -119,5 +119,5 @@ func kvGet(c *clientv3.Client, key string, opts ...clientv3.OpOption) (*clientv3 log.Warnf("kv gets too slow: key %v cost %v err %v", key, cost, err) } - return resp, errors.Trace(err) + return resp, errors.WithStack(err) } diff --git a/server/grpc_service.go b/server/grpc_service.go index 894353f56849..ea8d5d4b4181 100644 --- a/server/grpc_service.go +++ b/server/grpc_service.go @@ -20,7 +20,7 @@ import ( "sync/atomic" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server/core" @@ -71,10 +71,10 @@ func (s *Server) Tso(stream pdpb.PD_TsoServer) error { return nil } if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err = s.validateRequest(request.GetHeader()); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } count := request.GetCount() ts, err := s.getRespTS(count) @@ -87,7 +87,7 @@ func (s *Server) Tso(stream pdpb.PD_TsoServer) error { Count: count, } if err := stream.Send(response); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } } @@ -95,7 +95,7 @@ func (s *Server) Tso(stream pdpb.PD_TsoServer) error { // Bootstrap implements gRPC PDServer. func (s *Server) Bootstrap(ctx context.Context, request *pdpb.BootstrapRequest) (*pdpb.BootstrapResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -120,7 +120,7 @@ func (s *Server) Bootstrap(ctx context.Context, request *pdpb.BootstrapRequest) // IsBootstrapped implements gRPC PDServer. func (s *Server) IsBootstrapped(ctx context.Context, request *pdpb.IsBootstrappedRequest) (*pdpb.IsBootstrappedResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -133,7 +133,7 @@ func (s *Server) IsBootstrapped(ctx context.Context, request *pdpb.IsBootstrappe // AllocID implements gRPC PDServer. func (s *Server) AllocID(ctx context.Context, request *pdpb.AllocIDRequest) (*pdpb.AllocIDResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } // We can use an allocator for all types ID allocation. @@ -151,7 +151,7 @@ func (s *Server) AllocID(ctx context.Context, request *pdpb.AllocIDRequest) (*pd // GetStore implements gRPC PDServer. func (s *Server) GetStore(ctx context.Context, request *pdpb.GetStoreRequest) (*pdpb.GetStoreResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -188,7 +188,7 @@ func checkStore2(cluster *RaftCluster, storeID uint64) *pdpb.Error { // PutStore implements gRPC PDServer. func (s *Server) PutStore(ctx context.Context, request *pdpb.PutStoreRequest) (*pdpb.PutStoreResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -218,7 +218,7 @@ func (s *Server) PutStore(ctx context.Context, request *pdpb.PutStoreRequest) (* // GetAllStores implements gRPC PDServer. func (s *Server) GetAllStores(ctx context.Context, request *pdpb.GetAllStoresRequest) (*pdpb.GetAllStoresResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -235,7 +235,7 @@ func (s *Server) GetAllStores(ctx context.Context, request *pdpb.GetAllStoresReq // StoreHeartbeat implements gRPC PDServer. func (s *Server) StoreHeartbeat(ctx context.Context, request *pdpb.StoreHeartbeatRequest) (*pdpb.StoreHeartbeatResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if request.GetStats() == nil { @@ -284,10 +284,10 @@ func (s *heartbeatServer) Send(m *pdpb.RegionHeartbeatResponse) error { if err != nil { atomic.StoreInt32(&s.closed, 1) } - return errors.Trace(err) + return errors.WithStack(err) case <-time.After(regionHeartbeatSendTimeout): atomic.StoreInt32(&s.closed, 1) - return errors.Trace(errSendRegionHeartbeatTimeout) + return errors.WithStack(errSendRegionHeartbeatTimeout) } } @@ -298,7 +298,7 @@ func (s *heartbeatServer) Recv() (*pdpb.RegionHeartbeatRequest, error) { req, err := s.stream.Recv() if err != nil { atomic.StoreInt32(&s.closed, 1) - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return req, nil } @@ -312,7 +312,7 @@ func (s *Server) RegionHeartbeat(stream pdpb.PD_RegionHeartbeatServer) error { Header: s.notBootstrappedHeader(), } err := server.Send(resp) - return errors.Trace(err) + return errors.WithStack(err) } var lastBind time.Time @@ -322,11 +322,11 @@ func (s *Server) RegionHeartbeat(stream pdpb.PD_RegionHeartbeatServer) error { return nil } if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err = s.validateRequest(request.GetHeader()); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } storeID := request.GetLeader().GetStoreId() @@ -357,7 +357,7 @@ func (s *Server) RegionHeartbeat(stream pdpb.PD_RegionHeartbeatServer) error { err = cluster.HandleRegionHeartbeat(region) if err != nil { - msg := errors.Trace(err).Error() + msg := errors.WithStack(err).Error() hbStreams.sendErr(region, pdpb.ErrorType_UNKNOWN, msg, storeLabel) } @@ -368,7 +368,7 @@ func (s *Server) RegionHeartbeat(stream pdpb.PD_RegionHeartbeatServer) error { // GetRegion implements gRPC PDServer. func (s *Server) GetRegion(ctx context.Context, request *pdpb.GetRegionRequest) (*pdpb.GetRegionResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -386,7 +386,7 @@ func (s *Server) GetRegion(ctx context.Context, request *pdpb.GetRegionRequest) // GetPrevRegion implements gRPC PDServer func (s *Server) GetPrevRegion(ctx context.Context, request *pdpb.GetRegionRequest) (*pdpb.GetRegionResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -405,7 +405,7 @@ func (s *Server) GetPrevRegion(ctx context.Context, request *pdpb.GetRegionReque // GetRegionByID implements gRPC PDServer. func (s *Server) GetRegionByID(ctx context.Context, request *pdpb.GetRegionByIDRequest) (*pdpb.GetRegionResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -424,7 +424,7 @@ func (s *Server) GetRegionByID(ctx context.Context, request *pdpb.GetRegionByIDR // AskSplit implements gRPC PDServer. func (s *Server) AskSplit(ctx context.Context, request *pdpb.AskSplitRequest) (*pdpb.AskSplitResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -452,7 +452,7 @@ func (s *Server) AskSplit(ctx context.Context, request *pdpb.AskSplitRequest) (* // AskBatchSplit implements gRPC PDServer. func (s *Server) AskBatchSplit(ctx context.Context, request *pdpb.AskBatchSplitRequest) (*pdpb.AskBatchSplitResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -483,7 +483,7 @@ func (s *Server) AskBatchSplit(ctx context.Context, request *pdpb.AskBatchSplitR // ReportSplit implements gRPC PDServer. func (s *Server) ReportSplit(ctx context.Context, request *pdpb.ReportSplitRequest) (*pdpb.ReportSplitResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -503,7 +503,7 @@ func (s *Server) ReportSplit(ctx context.Context, request *pdpb.ReportSplitReque // ReportBatchSplit implements gRPC PDServer. func (s *Server) ReportBatchSplit(ctx context.Context, request *pdpb.ReportBatchSplitRequest) (*pdpb.ReportBatchSplitResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -524,7 +524,7 @@ func (s *Server) ReportBatchSplit(ctx context.Context, request *pdpb.ReportBatch // GetClusterConfig implements gRPC PDServer. func (s *Server) GetClusterConfig(ctx context.Context, request *pdpb.GetClusterConfigRequest) (*pdpb.GetClusterConfigResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -540,7 +540,7 @@ func (s *Server) GetClusterConfig(ctx context.Context, request *pdpb.GetClusterC // PutClusterConfig implements gRPC PDServer. func (s *Server) PutClusterConfig(ctx context.Context, request *pdpb.PutClusterConfigRequest) (*pdpb.PutClusterConfigResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -562,7 +562,7 @@ func (s *Server) PutClusterConfig(ctx context.Context, request *pdpb.PutClusterC // ScatterRegion implements gRPC PDServer. func (s *Server) ScatterRegion(ctx context.Context, request *pdpb.ScatterRegionRequest) (*pdpb.ScatterRegionResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -591,7 +591,7 @@ func (s *Server) ScatterRegion(ctx context.Context, request *pdpb.ScatterRegionR // GetGCSafePoint implements gRPC PDServer. func (s *Server) GetGCSafePoint(ctx context.Context, request *pdpb.GetGCSafePointRequest) (*pdpb.GetGCSafePointResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -601,7 +601,7 @@ func (s *Server) GetGCSafePoint(ctx context.Context, request *pdpb.GetGCSafePoin safePoint, err := s.kv.LoadGCSafePoint() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return &pdpb.GetGCSafePointResponse{ @@ -613,7 +613,7 @@ func (s *Server) GetGCSafePoint(ctx context.Context, request *pdpb.GetGCSafePoin // UpdateGCSafePoint implements gRPC PDServer. func (s *Server) UpdateGCSafePoint(ctx context.Context, request *pdpb.UpdateGCSafePointRequest) (*pdpb.UpdateGCSafePointResponse, error) { if err := s.validateRequest(request.GetHeader()); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } cluster := s.GetRaftCluster() @@ -623,7 +623,7 @@ func (s *Server) UpdateGCSafePoint(ctx context.Context, request *pdpb.UpdateGCSa oldSafePoint, err := s.kv.LoadGCSafePoint() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } newSafePoint := request.SafePoint @@ -631,7 +631,7 @@ func (s *Server) UpdateGCSafePoint(ctx context.Context, request *pdpb.UpdateGCSa // Only save the safe point if it's greater than the previous one if newSafePoint > oldSafePoint { if err := s.kv.SaveGCSafePoint(newSafePoint); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } log.Infof("updated gc safe point to %d", newSafePoint) } else if newSafePoint < oldSafePoint { diff --git a/server/handler.go b/server/handler.go index 26e08bbd606d..0855d72e3d75 100644 --- a/server/handler.go +++ b/server/handler.go @@ -19,7 +19,7 @@ import ( "strings" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server/core" @@ -63,7 +63,7 @@ func newHandler(s *Server) *Handler { func (h *Handler) getCoordinator() (*coordinator, error) { cluster := h.s.GetRaftCluster() if cluster == nil { - return nil, errors.Trace(ErrNotBootstrapped) + return nil, errors.WithStack(ErrNotBootstrapped) } return cluster.coordinator, nil } @@ -72,7 +72,7 @@ func (h *Handler) getCoordinator() (*coordinator, error) { func (h *Handler) GetSchedulers() ([]string, error) { c, err := h.getCoordinator() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return c.getSchedulers(), nil } @@ -81,14 +81,14 @@ func (h *Handler) GetSchedulers() ([]string, error) { func (h *Handler) GetStores() ([]*core.StoreInfo, error) { cluster := h.s.GetRaftCluster() if cluster == nil { - return nil, errors.Trace(ErrNotBootstrapped) + return nil, errors.WithStack(ErrNotBootstrapped) } storeMetas := cluster.GetStores() stores := make([]*core.StoreInfo, 0, len(storeMetas)) for _, s := range storeMetas { store, err := cluster.GetStore(s.GetId()) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } stores = append(stores, store) } @@ -137,11 +137,11 @@ func (h *Handler) GetHotKeysReadStores() map[uint64]uint64 { func (h *Handler) AddScheduler(name string, args ...string) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } s, err := schedule.CreateScheduler(name, c.limiter, args...) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("create scheduler %s", s.GetName()) if err = c.addScheduler(s, args...); err != nil { @@ -149,21 +149,21 @@ func (h *Handler) AddScheduler(name string, args ...string) error { } else if err = h.opt.persist(c.cluster.kv); err != nil { log.Errorf("can not persist scheduler config: %v", err) } - return errors.Trace(err) + return errors.WithStack(err) } // RemoveScheduler removes a scheduler by name. func (h *Handler) RemoveScheduler(name string) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err = c.removeScheduler(name); err != nil { log.Errorf("can not remove scheduler %v: %v", name, err) } else if err = h.opt.persist(c.cluster.kv); err != nil { log.Errorf("can not persist scheduler config: %v", err) } - return errors.Trace(err) + return errors.WithStack(err) } // AddBalanceLeaderScheduler adds a balance-leader-scheduler. @@ -225,7 +225,7 @@ func (h *Handler) AddRandomMergeScheduler() error { func (h *Handler) GetOperator(regionID uint64) (*schedule.Operator, error) { c, err := h.getCoordinator() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } op := c.getOperator(regionID) @@ -240,7 +240,7 @@ func (h *Handler) GetOperator(regionID uint64) (*schedule.Operator, error) { func (h *Handler) RemoveOperator(regionID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } op := c.getOperator(regionID) @@ -256,7 +256,7 @@ func (h *Handler) RemoveOperator(regionID uint64) error { func (h *Handler) GetOperators() ([]*schedule.Operator, error) { c, err := h.getCoordinator() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return c.getOperators(), nil } @@ -280,7 +280,7 @@ func (h *Handler) GetRegionOperators() ([]*schedule.Operator, error) { func (h *Handler) GetOperatorsOfKind(mask schedule.OperatorKind) ([]*schedule.Operator, error) { ops, err := h.GetOperators() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } var results []*schedule.Operator for _, op := range ops { @@ -295,7 +295,7 @@ func (h *Handler) GetOperatorsOfKind(mask schedule.OperatorKind) ([]*schedule.Op func (h *Handler) GetHistory(start time.Time) ([]schedule.OperatorHistory, error) { c, err := h.getCoordinator() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return c.getHistory(start), nil } @@ -306,7 +306,7 @@ var errAddOperator = errors.New("failed to add operator, maybe already have one" func (h *Handler) AddTransferLeaderOperator(regionID uint64, storeID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -321,7 +321,7 @@ func (h *Handler) AddTransferLeaderOperator(regionID uint64, storeID uint64) err step := schedule.TransferLeader{FromStore: region.Leader.GetStoreId(), ToStore: newLeader.GetStoreId()} op := schedule.NewOperator("adminTransferLeader", regionID, region.GetRegionEpoch(), schedule.OpAdmin|schedule.OpLeader, step) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -330,7 +330,7 @@ func (h *Handler) AddTransferLeaderOperator(regionID uint64, storeID uint64) err func (h *Handler) AddTransferRegionOperator(regionID uint64, storeIDs map[uint64]struct{}) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -350,7 +350,7 @@ func (h *Handler) AddTransferRegionOperator(regionID uint64, storeIDs map[uint64 } peer, err := c.cluster.AllocPeer(id) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if c.cluster.IsRaftLearnerEnabled() { steps = append(steps, @@ -372,7 +372,7 @@ func (h *Handler) AddTransferRegionOperator(regionID uint64, storeIDs map[uint64 op := schedule.NewOperator("adminMoveRegion", regionID, region.GetRegionEpoch(), schedule.OpAdmin|schedule.OpRegion, steps...) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -381,7 +381,7 @@ func (h *Handler) AddTransferRegionOperator(regionID uint64, storeIDs map[uint64 func (h *Handler) AddTransferPeerOperator(regionID uint64, fromStoreID, toStoreID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -399,12 +399,12 @@ func (h *Handler) AddTransferPeerOperator(regionID uint64, fromStoreID, toStoreI } newPeer, err := c.cluster.AllocPeer(toStoreID) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } op := schedule.CreateMovePeerOperator("adminMovePeer", c.cluster, region, schedule.OpAdmin, fromStoreID, toStoreID, newPeer.GetId()) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -413,7 +413,7 @@ func (h *Handler) AddTransferPeerOperator(regionID uint64, fromStoreID, toStoreI func (h *Handler) AddAddPeerOperator(regionID uint64, toStoreID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -430,7 +430,7 @@ func (h *Handler) AddAddPeerOperator(regionID uint64, toStoreID uint64) error { } newPeer, err := c.cluster.AllocPeer(toStoreID) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } var steps []schedule.OperatorStep @@ -446,7 +446,7 @@ func (h *Handler) AddAddPeerOperator(regionID uint64, toStoreID uint64) error { } op := schedule.NewOperator("adminAddPeer", regionID, region.GetRegionEpoch(), schedule.OpAdmin|schedule.OpRegion, steps...) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -455,7 +455,7 @@ func (h *Handler) AddAddPeerOperator(regionID uint64, toStoreID uint64) error { func (h *Handler) AddRemovePeerOperator(regionID uint64, fromStoreID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -469,7 +469,7 @@ func (h *Handler) AddRemovePeerOperator(regionID uint64, fromStoreID uint64) err op := schedule.CreateRemovePeerOperator("adminRemovePeer", c.cluster, schedule.OpAdmin, region, fromStoreID) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -478,7 +478,7 @@ func (h *Handler) AddRemovePeerOperator(regionID uint64, fromStoreID uint64) err func (h *Handler) AddMergeRegionOperator(regionID uint64, targetID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -509,10 +509,10 @@ func (h *Handler) AddMergeRegionOperator(regionID uint64, targetID uint64) error op1, op2, err := schedule.CreateMergeRegionOperator("adminMergeRegion", c.cluster, region, target, schedule.OpAdmin) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if ok := c.addOperator(op1, op2); !ok { - return errors.Trace(ErrAddOperator) + return errors.WithStack(ErrAddOperator) } return nil } @@ -521,7 +521,7 @@ func (h *Handler) AddMergeRegionOperator(regionID uint64, targetID uint64) error func (h *Handler) AddSplitRegionOperator(regionID uint64, policy string) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -536,7 +536,7 @@ func (h *Handler) AddSplitRegionOperator(regionID uint64, policy string) error { } op := schedule.NewOperator("adminSplitRegion", regionID, region.GetRegionEpoch(), schedule.OpAdmin, step) if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } @@ -545,7 +545,7 @@ func (h *Handler) AddSplitRegionOperator(regionID uint64, policy string) error { func (h *Handler) AddScatterRegionOperator(regionID uint64) error { c, err := h.getCoordinator() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } region := c.cluster.GetRegion(regionID) @@ -558,7 +558,7 @@ func (h *Handler) AddScatterRegionOperator(regionID uint64) error { return nil } if ok := c.addOperator(op); !ok { - return errors.Trace(errAddOperator) + return errors.WithStack(errAddOperator) } return nil } diff --git a/server/id.go b/server/id.go index 10e93a7db6ed..a5bed9b2f94f 100644 --- a/server/id.go +++ b/server/id.go @@ -17,7 +17,7 @@ import ( "sync" "github.com/coreos/etcd/clientv3" - "github.com/juju/errors" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) @@ -40,7 +40,7 @@ func (alloc *idAllocator) Alloc() (uint64, error) { if alloc.base == alloc.end { end, err := alloc.generate() if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } alloc.end = end @@ -56,7 +56,7 @@ func (alloc *idAllocator) generate() (uint64, error) { key := alloc.s.getAllocIDPath() value, err := getValue(alloc.s.client, key) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } var ( @@ -71,7 +71,7 @@ func (alloc *idAllocator) generate() (uint64, error) { // update the key end, err = bytesToUint64(value) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } cmp = clientv3.Compare(clientv3.Value(key), "=", string(value)) @@ -81,7 +81,7 @@ func (alloc *idAllocator) generate() (uint64, error) { value = uint64ToBytes(end) resp, err := alloc.s.leaderTxn(cmp).Then(clientv3.OpPut(key, string(value))).Commit() if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } if !resp.Succeeded { return 0, errors.New("generate id failed, we may not leader") diff --git a/server/join.go b/server/join.go index 1844dfc90d27..335074da8fda 100644 --- a/server/join.go +++ b/server/join.go @@ -21,7 +21,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/embed" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/etcdutil" log "github.com/sirupsen/logrus" ) @@ -84,7 +84,7 @@ func PrepareJoinCluster(cfg *Config) error { // Below are cases without data directory. tlsConfig, err := cfg.Security.ToTLSConfig() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } client, err := clientv3.New(clientv3.Config{ Endpoints: strings.Split(cfg.Join, ","), @@ -92,13 +92,13 @@ func PrepareJoinCluster(cfg *Config) error { TLS: tlsConfig, }) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } defer client.Close() listResp, err := etcdutil.ListEtcdMembers(client) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } existed := false @@ -117,12 +117,12 @@ func PrepareJoinCluster(cfg *Config) error { // - A deleted PD joins to previous cluster. addResp, err := etcdutil.AddEtcdMember(client, []string{cfg.AdvertisePeerUrls}) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } listResp, err = etcdutil.ListEtcdMembers(client) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } pds := []string{} diff --git a/server/leader.go b/server/leader.go index 18f968fb3aa0..20aa0370072c 100644 --- a/server/leader.go +++ b/server/leader.go @@ -15,6 +15,7 @@ package server import ( "context" + "fmt" "math/rand" "path" "strings" @@ -22,10 +23,10 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/mvcc/mvccpb" - "github.com/juju/errors" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/etcdutil" "github.com/pingcap/pd/pkg/logutil" + "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) @@ -112,7 +113,7 @@ func (s *Server) leaderLoop() { } if err = s.campaignLeader(); err != nil { - log.Errorf("campaign leader err %s", errors.ErrorStack(err)) + log.Errorf("campaign leader err %s", fmt.Sprintf("%+v", err)) } } } @@ -160,7 +161,7 @@ func getLeader(c *clientv3.Client, leaderPath string) (*pdpb.Member, error) { leader := &pdpb.Member{} ok, err := getProtoMsg(c, leaderPath, leader) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if !ok { return nil, nil @@ -211,7 +212,7 @@ func (s *Server) campaignLeader() error { } if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } leaderKey := s.getLeaderPath() @@ -221,7 +222,7 @@ func (s *Server) campaignLeader() error { Then(clientv3.OpPut(leaderKey, s.memberValue, clientv3.WithLease(clientv3.LeaseID(leaseResp.ID)))). Commit() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !resp.Succeeded { return errors.New("campaign leader failed, other server may campaign ok") @@ -233,24 +234,24 @@ func (s *Server) campaignLeader() error { ch, err := lessor.KeepAlive(ctx, clientv3.LeaseID(leaseResp.ID)) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Debugf("campaign leader ok %s", s.Name()) err = s.scheduleOpt.reload(s.kv) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // Try to create raft cluster. err = s.createRaftCluster() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } defer s.stopRaftCluster() log.Debug("sync timestamp for tso") if err = s.syncTimestamp(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } defer s.ts.Store(&atomicObject{ physical: zeroTime, @@ -275,7 +276,7 @@ func (s *Server) campaignLeader() error { } case <-tsTicker.C: if err = s.updateTimestamp(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } etcdLeader := s.GetEtcdLeader() if etcdLeader != s.ID() { @@ -330,7 +331,7 @@ func (s *Server) ResignLeader(nextLeader string) error { var leaderIDs []uint64 res, err := etcdutil.ListEtcdMembers(s.client) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } for _, member := range res.Members { if (nextLeader == "" && member.ID != s.id) || (nextLeader != "" && member.Name == nextLeader) { @@ -343,7 +344,7 @@ func (s *Server) ResignLeader(nextLeader string) error { nextLeaderID := leaderIDs[rand.Intn(len(leaderIDs))] log.Infof("%s ready to resign leader, next leader: %v", s.Name(), nextLeaderID) err = s.etcd.Server.MoveLeader(s.serverLoopCtx, s.ID(), nextLeaderID) - return errors.Trace(err) + return errors.WithStack(err) } func (s *Server) deleteLeaderKey() error { @@ -351,7 +352,7 @@ func (s *Server) deleteLeaderKey() error { leaderKey := s.getLeaderPath() resp, err := s.leaderTxn().Then(clientv3.OpDelete(leaderKey)).Commit() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !resp.Succeeded { return errors.New("resign leader failed, we are not leader already") diff --git a/server/namespace/classifier.go b/server/namespace/classifier.go index 988c140fe3a7..af71e5ab5e09 100644 --- a/server/namespace/classifier.go +++ b/server/namespace/classifier.go @@ -16,7 +16,7 @@ package namespace import ( "fmt" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" ) diff --git a/server/option.go b/server/option.go index 6c11fa7a90e0..ebe5b8d1b32d 100644 --- a/server/option.go +++ b/server/option.go @@ -19,7 +19,7 @@ import ( "time" "github.com/coreos/go-semver/semver" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/pd/server/core" "github.com/pingcap/pd/server/schedule" @@ -205,7 +205,7 @@ func (o *scheduleOption) RemoveSchedulerCfg(name string) error { // To create a temporary scheduler is just used to get scheduler's name tmp, err := schedule.CreateScheduler(schedulerCfg.Type, schedule.NewLimiter(), schedulerCfg.Args...) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if tmp.GetName() == name { if IsDefaultScheduler(tmp.GetType()) { @@ -273,7 +273,7 @@ func (o *scheduleOption) persist(kv *core.KV) error { ClusterVersion: o.loadClusterVersion(), } err := kv.SaveConfig(cfg) - return errors.Trace(err) + return errors.WithStack(err) } func (o *scheduleOption) reload(kv *core.KV) error { @@ -290,7 +290,7 @@ func (o *scheduleOption) reload(kv *core.KV) error { } isExist, err := kv.LoadConfig(cfg) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } o.adjustScheduleCfg(cfg) if isExist { diff --git a/server/schedule/basic_cluster.go b/server/schedule/basic_cluster.go index b7c45791d6cd..044649c15065 100644 --- a/server/schedule/basic_cluster.go +++ b/server/schedule/basic_cluster.go @@ -14,7 +14,7 @@ package schedule import ( - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" ) @@ -161,7 +161,7 @@ func (bc *BasicCluster) GetAdjacentRegions(region *core.RegionInfo) (*core.Regio // BlockStore stops balancer from selecting the store. func (bc *BasicCluster) BlockStore(storeID uint64) error { - return errors.Trace(bc.Stores.BlockStore(storeID)) + return errors.WithStack(bc.Stores.BlockStore(storeID)) } // UnblockStore allows balancer to select the store. diff --git a/server/schedule/mockcluster.go b/server/schedule/mockcluster.go index c74479918578..23a2cdfa4fad 100644 --- a/server/schedule/mockcluster.go +++ b/server/schedule/mockcluster.go @@ -17,7 +17,7 @@ import ( "fmt" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/server/core" @@ -77,7 +77,7 @@ func (mc *MockCluster) AllocPeer(storeID uint64) (*metapb.Peer, error) { peerID, err := mc.allocID() if err != nil { log.Errorf("failed to alloc peer: %v", err) - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } peer := &metapb.Peer{ Id: peerID, diff --git a/server/schedule/operator.go b/server/schedule/operator.go index aaaee5e7b95c..a436ab35f11a 100644 --- a/server/schedule/operator.go +++ b/server/schedule/operator.go @@ -20,7 +20,7 @@ import ( "sync/atomic" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" log "github.com/sirupsen/logrus" @@ -465,7 +465,7 @@ func removePeerSteps(cluster Cluster, region *core.RegionInfo, storeID uint64) ( func CreateMergeRegionOperator(desc string, cluster Cluster, source *core.RegionInfo, target *core.RegionInfo, kind OperatorKind) (*Operator, *Operator, error) { steps, kinds, err := matchPeerSteps(cluster, source, target) if err != nil { - return nil, nil, errors.Trace(err) + return nil, nil, errors.WithStack(err) } steps = append(steps, MergeRegion{ @@ -505,7 +505,7 @@ func matchPeerSteps(cluster Cluster, source *core.RegionInfo, target *core.Regio peer, err := cluster.AllocPeer(id) if err != nil { log.Debugf("peer alloc failed: %v", err) - return nil, kind, errors.Trace(err) + return nil, kind, errors.WithStack(err) } if cluster.IsRaftLearnerEnabled() { steps = append(steps, diff --git a/server/schedule/operator_kind.go b/server/schedule/operator_kind.go index eff213d0f4c4..010717a2cf24 100644 --- a/server/schedule/operator_kind.go +++ b/server/schedule/operator_kind.go @@ -16,7 +16,7 @@ package schedule import ( "strings" - "github.com/juju/errors" + "github.com/pkg/errors" ) // OperatorKind is a bit field to identify operator types. diff --git a/server/schedule/scheduler.go b/server/schedule/scheduler.go index c84fba7d126c..89954c051260 100644 --- a/server/schedule/scheduler.go +++ b/server/schedule/scheduler.go @@ -17,7 +17,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/pd/server/core" log "github.com/sirupsen/logrus" diff --git a/server/schedulers/adjacent_region.go b/server/schedulers/adjacent_region.go index 1c76bdc2a95f..82c00e154ea4 100644 --- a/server/schedulers/adjacent_region.go +++ b/server/schedulers/adjacent_region.go @@ -18,7 +18,7 @@ import ( "strconv" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" "github.com/pingcap/pd/server/schedule" log "github.com/sirupsen/logrus" @@ -37,11 +37,11 @@ func init() { if len(args) == 2 { leaderLimit, err := strconv.ParseUint(args[0], 10, 64) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } peerLimit, err := strconv.ParseUint(args[1], 10, 64) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return newBalanceAdjacentRegionScheduler(limiter, leaderLimit, peerLimit), nil } diff --git a/server/schedulers/evict_leader.go b/server/schedulers/evict_leader.go index 2f3bc19a8ddc..28652ea30117 100644 --- a/server/schedulers/evict_leader.go +++ b/server/schedulers/evict_leader.go @@ -17,7 +17,7 @@ import ( "fmt" "strconv" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" "github.com/pingcap/pd/server/schedule" ) @@ -29,7 +29,7 @@ func init() { } id, err := strconv.ParseUint(args[0], 10, 64) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return newEvictLeaderScheduler(limiter, id), nil }) @@ -64,7 +64,7 @@ func (s *evictLeaderScheduler) GetType() string { } func (s *evictLeaderScheduler) Prepare(cluster schedule.Cluster) error { - return errors.Trace(cluster.BlockStore(s.storeID)) + return errors.WithStack(cluster.BlockStore(s.storeID)) } func (s *evictLeaderScheduler) Cleanup(cluster schedule.Cluster) { diff --git a/server/schedulers/grant_leader.go b/server/schedulers/grant_leader.go index ddc6f8a3ad7b..8a4e9c774f17 100644 --- a/server/schedulers/grant_leader.go +++ b/server/schedulers/grant_leader.go @@ -17,7 +17,7 @@ import ( "fmt" "strconv" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" "github.com/pingcap/pd/server/schedule" ) @@ -29,7 +29,7 @@ func init() { } id, err := strconv.ParseUint(args[0], 10, 64) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return newGrantLeaderScheduler(limiter, id), nil }) @@ -61,7 +61,7 @@ func (s *grantLeaderScheduler) GetType() string { return "grant-leader" } func (s *grantLeaderScheduler) Prepare(cluster schedule.Cluster) error { - return errors.Trace(cluster.BlockStore(s.storeID)) + return errors.WithStack(cluster.BlockStore(s.storeID)) } func (s *grantLeaderScheduler) Cleanup(cluster schedule.Cluster) { diff --git a/server/schedulers/scatter_range.go b/server/schedulers/scatter_range.go index e5cb39e27ad1..5e27004694c2 100644 --- a/server/schedulers/scatter_range.go +++ b/server/schedulers/scatter_range.go @@ -18,7 +18,7 @@ import ( "net/url" "strings" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/schedule" ) diff --git a/server/server.go b/server/server.go index 4bd3d9dfb29e..74f1bfac726f 100644 --- a/server/server.go +++ b/server/server.go @@ -29,7 +29,7 @@ import ( "github.com/coreos/etcd/embed" "github.com/coreos/etcd/pkg/types" "github.com/coreos/go-semver/semver" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/etcdutil" @@ -112,7 +112,7 @@ func CreateServer(cfg *Config, apiRegister func(*Server) http.Handler) (*Server, // Adjust etcd config. etcdCfg, err := s.cfg.genEmbedEtcdConfig() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if apiRegister != nil { etcdCfg.UserHandlers = map[string]http.Handler{ @@ -135,20 +135,20 @@ func (s *Server) startEtcd(ctx context.Context) error { log.Info("start embed etcd") etcd, err := embed.StartEtcd(s.etcdCfg) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // Check cluster ID urlmap, err := types.NewURLsMap(s.cfg.InitialCluster) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } tlsConfig, err := s.cfg.Security.ToTLSConfig() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err = etcdutil.CheckClusterID(etcd.Server.Cluster().ID(), urlmap, tlsConfig); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } select { @@ -167,7 +167,7 @@ func (s *Server) startEtcd(ctx context.Context) error { TLS: tlsConfig, }) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } etcdServerID := uint64(etcd.Server.ID()) @@ -175,7 +175,7 @@ func (s *Server) startEtcd(ctx context.Context) error { // update advertise peer urls. etcdMembers, err := etcdutil.ListEtcdMembers(client) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } for _, m := range etcdMembers.Members { if etcdServerID == m.ID { @@ -196,7 +196,7 @@ func (s *Server) startEtcd(ctx context.Context) error { func (s *Server) startServer() error { var err error if err = s.initClusterID(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("init cluster id %v", s.clusterID) // It may lose accuracy if use float64 to store uint64. So we store the @@ -212,7 +212,7 @@ func (s *Server) startServer() error { s.cluster = newRaftCluster(s, s.clusterID) s.hbStreams = newHeartbeatStreams(s.clusterID) if s.classifier, err = namespace.CreateClassifier(s.cfg.NamespaceClassifier, s.kv, s.idAlloc); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // Server has started. @@ -224,16 +224,16 @@ func (s *Server) initClusterID() error { // Get any cluster key to parse the cluster ID. resp, err := kvGet(s.client, pdClusterIDPath) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } // If no key exist, generate a random cluster ID. if len(resp.Kvs) == 0 { s.clusterID, err = initOrGetClusterID(s.client, pdClusterIDPath) - return errors.Trace(err) + return errors.WithStack(err) } s.clusterID, err = bytesToUint64(resp.Kvs[0].Value) - return errors.Trace(err) + return errors.WithStack(err) } // Close closes the server. @@ -279,11 +279,11 @@ func (s *Server) Run(ctx context.Context) error { }) if err := s.startEtcd(ctx); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if err := s.startServer(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } s.startServerLoop() @@ -333,7 +333,7 @@ func (s *Server) bootstrapCluster(req *pdpb.BootstrapRequest) (*pdpb.BootstrapRe log.Infof("try to bootstrap raft cluster %d with %v", clusterID, req) if err := checkBootstrapRequest(clusterID, req); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } clusterMeta := metapb.Cluster{ @@ -344,7 +344,7 @@ func (s *Server) bootstrapCluster(req *pdpb.BootstrapRequest) (*pdpb.BootstrapRe // Set cluster meta clusterValue, err := clusterMeta.Marshal() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } clusterRootPath := s.getClusterRootPath() @@ -363,13 +363,13 @@ func (s *Server) bootstrapCluster(req *pdpb.BootstrapRequest) (*pdpb.BootstrapRe storePath := makeStoreKey(clusterRootPath, storeMeta.GetId()) storeValue, err := storeMeta.Marshal() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } ops = append(ops, clientv3.OpPut(storePath, string(storeValue))) regionValue, err := req.GetRegion().Marshal() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } // Set region meta with region id. @@ -380,7 +380,7 @@ func (s *Server) bootstrapCluster(req *pdpb.BootstrapRequest) (*pdpb.BootstrapRe bootstrapCmp := clientv3.Compare(clientv3.CreateRevision(clusterRootPath), "=", 0) resp, err := s.txn().If(bootstrapCmp).Then(ops...).Commit() if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if !resp.Succeeded { log.Warnf("cluster %d already bootstrapped", clusterID) @@ -390,7 +390,7 @@ func (s *Server) bootstrapCluster(req *pdpb.BootstrapRequest) (*pdpb.BootstrapRe log.Infof("bootstrap cluster %d ok", clusterID) if err := s.cluster.start(); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } return &pdpb.BootstrapResponse{}, nil @@ -480,12 +480,12 @@ func (s *Server) GetScheduleConfig() *ScheduleConfig { // SetScheduleConfig sets the balance config information. func (s *Server) SetScheduleConfig(cfg ScheduleConfig) error { if err := cfg.validate(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } old := s.scheduleOpt.load() s.scheduleOpt.store(&cfg) if err := s.scheduleOpt.persist(s.kv); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("schedule config is updated: %+v, old: %+v", cfg, old) return nil @@ -501,13 +501,13 @@ func (s *Server) GetReplicationConfig() *ReplicationConfig { // SetReplicationConfig sets the replication config. func (s *Server) SetReplicationConfig(cfg ReplicationConfig) error { if err := cfg.validate(); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } old := s.scheduleOpt.rep.load() s.scheduleOpt.rep.store(&cfg) s.scheduleOpt.persist(s.kv) if err := s.scheduleOpt.persist(s.kv); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("replication config is updated: %+v, old: %+v", cfg, old) return nil @@ -565,7 +565,7 @@ func (s *Server) SetLabelProperty(typ, labelKey, labelValue string) error { s.scheduleOpt.SetLabelProperty(typ, labelKey, labelValue) err := s.scheduleOpt.persist(s.kv) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("label property config is updated: %+v", s.scheduleOpt.loadLabelPropertyConfig()) return nil @@ -576,7 +576,7 @@ func (s *Server) DeleteLabelProperty(typ, labelKey, labelValue string) error { s.scheduleOpt.DeleteLabelProperty(typ, labelKey, labelValue) err := s.scheduleOpt.persist(s.kv) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("label property config is updated: %+v", s.scheduleOpt.loadLabelPropertyConfig()) return nil @@ -591,12 +591,12 @@ func (s *Server) GetLabelProperty() LabelPropertyConfig { func (s *Server) SetClusterVersion(v string) error { version, err := ParseVersion(v) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } s.scheduleOpt.SetClusterVersion(*version) err = s.scheduleOpt.persist(s.kv) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } log.Infof("cluster version is updated to %s", v) return nil @@ -658,7 +658,7 @@ func (s *Server) SetMemberLeaderPriority(id uint64, priority int) error { key := s.getMemberLeaderPriorityPath(id) res, err := s.leaderTxn().Then(clientv3.OpPut(key, strconv.Itoa(priority))).Commit() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !res.Succeeded { return errors.New("save leader priority failed, maybe not leader") @@ -671,7 +671,7 @@ func (s *Server) DeleteMemberLeaderPriority(id uint64) error { key := s.getMemberLeaderPriorityPath(id) res, err := s.leaderTxn().Then(clientv3.OpDelete(key)).Commit() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !res.Succeeded { return errors.New("delete leader priority failed, maybe not leader") @@ -684,14 +684,14 @@ func (s *Server) GetMemberLeaderPriority(id uint64) (int, error) { key := s.getMemberLeaderPriorityPath(id) res, err := kvGet(s.client, key) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } if len(res.Kvs) == 0 { return 0, nil } priority, err := strconv.ParseInt(string(res.Kvs[0].Value), 10, 32) if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } return int(priority), nil } diff --git a/server/testutil.go b/server/testutil.go index 858187ba456d..cea372266db1 100644 --- a/server/testutil.go +++ b/server/testutil.go @@ -22,7 +22,7 @@ import ( "time" "github.com/coreos/etcd/embed" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/tempurl" "github.com/pingcap/pd/pkg/typeutil" "github.com/pingcap/pd/server/schedule" @@ -44,10 +44,10 @@ func NewTestServer() (*Config, *Server, CleanupFunc, error) { cfg := NewTestSingleConfig() s, err := CreateServer(cfg, nil) if err != nil { - return nil, nil, nil, errors.Trace(err) + return nil, nil, nil, errors.WithStack(err) } if err = s.Run(context.TODO()); err != nil { - return nil, nil, nil, errors.Trace(err) + return nil, nil, nil, errors.WithStack(err) } cleanup := func() { diff --git a/server/tso.go b/server/tso.go index 41b6ca9fbdc0..80f8abc80419 100644 --- a/server/tso.go +++ b/server/tso.go @@ -19,7 +19,7 @@ import ( "time" "github.com/coreos/etcd/clientv3" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/pdpb" log "github.com/sirupsen/logrus" ) @@ -47,7 +47,7 @@ func (s *Server) getTimestampPath() string { func (s *Server) loadTimestamp() (time.Time, error) { data, err := getValue(s.client, s.getTimestampPath()) if err != nil { - return zeroTime, errors.Trace(err) + return zeroTime, errors.WithStack(err) } if len(data) == 0 { return zeroTime, nil @@ -63,7 +63,7 @@ func (s *Server) saveTimestamp(ts time.Time) error { resp, err := s.leaderTxn().Then(clientv3.OpPut(key, string(data))).Commit() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } if !resp.Succeeded { return errors.New("save timestamp failed, maybe we lost leader") @@ -79,7 +79,7 @@ func (s *Server) syncTimestamp() error { last, err := s.loadTimestamp() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } next := time.Now() @@ -97,7 +97,7 @@ func (s *Server) syncTimestamp() error { save := next.Add(s.cfg.TsoSaveInterval.Duration) if err = s.saveTimestamp(save); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } tsoCounter.WithLabelValues("sync_ok").Inc() @@ -163,7 +163,7 @@ func (s *Server) updateTimestamp() error { if subTimeByWallClock(s.lastSavedTime, next) <= updateTimestampGuard { save := next.Add(s.cfg.TsoSaveInterval.Duration) if err := s.saveTimestamp(save); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } diff --git a/server/util.go b/server/util.go index 5c49c28c0fbf..b194e689a04e 100644 --- a/server/util.go +++ b/server/util.go @@ -24,7 +24,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/golang/protobuf/proto" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/kvproto/pkg/metapb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pingcap/pd/pkg/etcdutil" @@ -85,7 +85,7 @@ func CheckPDVersion(opt *scheduleOption) { func getValue(c *clientv3.Client, key string, opts ...clientv3.OpOption) ([]byte, error) { resp, err := kvGet(c, key, opts...) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } if n := len(resp.Kvs); n == 0 { @@ -102,14 +102,14 @@ func getValue(c *clientv3.Client, key string, opts ...clientv3.OpOption) ([]byte func getProtoMsg(c *clientv3.Client, key string, msg proto.Message, opts ...clientv3.OpOption) (bool, error) { value, err := getValue(c, key, opts...) if err != nil { - return false, errors.Trace(err) + return false, errors.WithStack(err) } if value == nil { return false, nil } if err = proto.Unmarshal(value, msg); err != nil { - return false, errors.Trace(err) + return false, errors.WithStack(err) } return true, nil @@ -133,7 +133,7 @@ func initOrGetClusterID(c *clientv3.Client, key string) (uint64, error) { Else(clientv3.OpGet(key)). Commit() if err != nil { - return 0, errors.Trace(err) + return 0, errors.WithStack(err) } // Txn commits ok, return the generated cluster ID. @@ -213,14 +213,14 @@ func (t *slowLogTxn) Commit() (*clientv3.TxnResponse, error) { txnCounter.WithLabelValues(label).Inc() txnDuration.WithLabelValues(label).Observe(cost.Seconds()) - return resp, errors.Trace(err) + return resp, errors.WithStack(err) } // GetMembers return a slice of Members. func GetMembers(etcdClient *clientv3.Client) ([]*pdpb.Member, error) { listResp, err := etcdutil.ListEtcdMembers(etcdClient) if err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } members := make([]*pdpb.Member, 0, len(listResp.Members)) @@ -240,7 +240,7 @@ func GetMembers(etcdClient *clientv3.Client) ([]*pdpb.Member, error) { func parseTimestamp(data []byte) (time.Time, error) { nano, err := bytesToUint64(data) if err != nil { - return zeroTime, errors.Trace(err) + return zeroTime, errors.WithStack(err) } return time.Unix(0, int64(nano)), nil @@ -254,7 +254,7 @@ func subTimeByWallClock(after time.Time, before time.Time) time.Duration { func InitHTTPClient(svr *Server) error { tlsConfig, err := svr.GetSecurityConfig().ToTLSConfig() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } DialClient = &http.Client{Transport: &http.Transport{ diff --git a/table/codec.go b/table/codec.go index 2ce38ebd8f9e..8868bde9e1fa 100644 --- a/table/codec.go +++ b/table/codec.go @@ -17,7 +17,7 @@ import ( "bytes" "encoding/binary" - "github.com/juju/errors" + "github.com/pkg/errors" ) var ( diff --git a/table/namespace_classifier.go b/table/namespace_classifier.go index 7afbbbe00ff5..baa1fd19db3d 100644 --- a/table/namespace_classifier.go +++ b/table/namespace_classifier.go @@ -23,7 +23,7 @@ import ( "sync" "time" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/server/core" "github.com/pingcap/pd/server/namespace" log "github.com/sirupsen/logrus" @@ -103,7 +103,7 @@ const kvRangeLimit = 1000 func NewTableNamespaceClassifier(kv *core.KV, idAlloc core.IDAllocator) (namespace.Classifier, error) { nsInfo := newNamespacesInfo() if err := nsInfo.loadNamespaces(kv, kvRangeLimit); err != nil { - return nil, errors.Trace(err) + return nil, errors.WithStack(err) } c := &tableNamespaceClassifier{ nsInfo: nsInfo, @@ -197,12 +197,12 @@ func (c *tableNamespaceClassifier) CreateNamespace(name string) error { id, err := c.idAlloc.Alloc() if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } ns := NewNamespace(id, name) err = c.putNamespaceLocked(ns) - return errors.Trace(err) + return errors.WithStack(err) } // AddNamespaceTableID adds table ID to namespace. @@ -317,7 +317,7 @@ func (c *tableNamespaceClassifier) ReloadNamespaces() error { defer c.Unlock() if err := nsInfo.loadNamespaces(c.kv, kvRangeLimit); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } c.nsInfo = nsInfo @@ -327,7 +327,7 @@ func (c *tableNamespaceClassifier) ReloadNamespaces() error { func (c *tableNamespaceClassifier) putNamespaceLocked(ns *Namespace) error { if c.kv != nil { if err := c.nsInfo.saveNamespace(c.kv, ns); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } } c.nsInfo.setNamespace(ns) @@ -407,10 +407,10 @@ func (namespaceInfo *namespacesInfo) namespacePath(nsID uint64) string { func (namespaceInfo *namespacesInfo) saveNamespace(kv *core.KV, ns *Namespace) error { value, err := json.Marshal(ns) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } err = kv.Save(namespaceInfo.namespacePath(ns.GetID()), string(value)) - return errors.Trace(err) + return errors.WithStack(err) } func (namespaceInfo *namespacesInfo) loadNamespaces(kv *core.KV, rangeLimit int) error { @@ -423,12 +423,12 @@ func (namespaceInfo *namespacesInfo) loadNamespaces(kv *core.KV, rangeLimit int) key := namespaceInfo.namespacePath(nextID) res, err := kv.LoadRange(key, endKey, rangeLimit) if err != nil { - return errors.Trace(err) + return errors.WithStack(err) } for _, s := range res { ns := &Namespace{} if err := json.Unmarshal([]byte(s), ns); err != nil { - return errors.Trace(err) + return errors.WithStack(err) } nextID = ns.GetID() + 1 namespaceInfo.setNamespace(ns) diff --git a/table/namespace_handler.go b/table/namespace_handler.go index 00d4ec7e7eee..735d2feabe34 100644 --- a/table/namespace_handler.go +++ b/table/namespace_handler.go @@ -19,7 +19,7 @@ import ( "strconv" "github.com/gorilla/mux" - "github.com/juju/errors" + "github.com/pkg/errors" "github.com/pingcap/pd/pkg/apiutil" "github.com/unrolled/render" )