Skip to content
Snippets Groups Projects
Commit b7a07470 authored by fangyincheng's avatar fangyincheng
Browse files

Dep:change github.com/juju/errors to github.com/pkg/errors

parent ca33a9a5
Branches
Tags
No related merge requests found
Showing
with 106 additions and 85 deletions
......@@ -15,8 +15,8 @@
package cluster_impl
import (
gxnet "github.com/AlexStocks/goext/net"
jerrors "github.com/juju/errors"
"github.com/AlexStocks/goext/net"
"github.com/pkg/errors"
"go.uber.org/atomic"
)
......@@ -60,7 +60,7 @@ func (invoker *baseClusterInvoker) IsAvailable() bool {
func (invoker *baseClusterInvoker) checkInvokers(invokers []protocol.Invoker, invocation protocol.Invocation) error {
if len(invokers) == 0 {
ip, _ := gxnet.GetLocalIP()
return jerrors.Errorf("Failed to invoke the method %v . No provider available for the service %v from "+
return errors.Errorf("Failed to invoke the method %v. No provider available for the service %v from "+
"registry %v on the consumer %v using the dubbo version %v .Please check if the providers have been started and registered.",
invocation.MethodName(), invoker.directory.GetUrl().SubURL.Key(), invoker.directory.GetUrl().String(), ip, version.Version)
}
......@@ -72,7 +72,7 @@ func (invoker *baseClusterInvoker) checkInvokers(invokers []protocol.Invoker, in
func (invoker *baseClusterInvoker) checkWhetherDestroyed() error {
if invoker.destroyed.Load() {
ip, _ := gxnet.GetLocalIP()
return jerrors.Errorf("Rpc cluster invoker for %v on consumer %v use dubbo version %v is now destroyed! can not invoke any more. ",
return errors.Errorf("Rpc cluster invoker for %v on consumer %v use dubbo version %v is now destroyed! can not invoke any more. ",
invoker.directory.GetUrl().Service(), ip, version.Version)
}
return nil
......
......@@ -15,9 +15,10 @@
package cluster_impl
import (
gxnet "github.com/AlexStocks/goext/net"
jerrors "github.com/juju/errors"
"github.com/AlexStocks/goext/net"
"github.com/pkg/errors"
)
import (
"github.com/dubbo/go-for-apache-dubbo/cluster"
"github.com/dubbo/go-for-apache-dubbo/common/constant"
......@@ -92,7 +93,7 @@ func (invoker *failoverClusterInvoker) Invoke(invocation protocol.Invocation) pr
}
}
ip, _ := gxnet.GetLocalIP()
return &protocol.RPCResult{Err: jerrors.Errorf("Failed to invoke the method %v in the service %v . Tried %v times of "+
return &protocol.RPCResult{Err: errors.Errorf("Failed to invoke the method %v in the service %v . Tried %v times of "+
"the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. Last error is %v.",
methodName, invoker.GetUrl().Service(), retries, providers, len(providers), len(invokers), invoker.directory.GetUrl(), ip, version.Version, result.Error().Error(),
)}
......
......@@ -16,13 +16,13 @@ package cluster_impl
import (
"context"
"errors"
"fmt"
"net/url"
"testing"
)
import (
log "github.com/AlexStocks/log4go"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
......
......@@ -17,13 +17,17 @@ package directory
import (
"context"
"fmt"
"github.com/dubbo/go-for-apache-dubbo/protocol/invocation"
"github.com/stretchr/testify/assert"
"testing"
)
import (
"github.com/stretchr/testify/assert"
)
import (
"github.com/dubbo/go-for-apache-dubbo/common"
"github.com/dubbo/go-for-apache-dubbo/protocol"
"github.com/dubbo/go-for-apache-dubbo/protocol/invocation"
)
func Test_StaticDirList(t *testing.T) {
......
......@@ -17,17 +17,21 @@ package loadbalance
import (
"context"
"fmt"
"github.com/dubbo/go-for-apache-dubbo/common/constant"
"github.com/dubbo/go-for-apache-dubbo/protocol/invocation"
"github.com/stretchr/testify/assert"
"net/url"
"strconv"
"testing"
"time"
)
import (
"github.com/stretchr/testify/assert"
)
import (
"github.com/dubbo/go-for-apache-dubbo/common"
"github.com/dubbo/go-for-apache-dubbo/common/constant"
"github.com/dubbo/go-for-apache-dubbo/protocol"
"github.com/dubbo/go-for-apache-dubbo/protocol/invocation"
)
func Test_RandomlbSelect(t *testing.T) {
......
......@@ -16,12 +16,12 @@ package proxy
import (
"context"
"errors"
"reflect"
"testing"
)
import (
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
......
......@@ -16,7 +16,6 @@ package common
import (
"context"
"errors"
"reflect"
"strings"
"sync"
......@@ -26,7 +25,7 @@ import (
import (
log "github.com/AlexStocks/log4go"
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
)
// rpc service interface
......@@ -130,17 +129,17 @@ func (sm *serviceMap) Register(protocol string, rcvr RPCService) (string, error)
if sname == "" {
s := "no service name for type " + s.rcvrType.String()
log.Error(s)
return "", jerrors.New(s)
return "", errors.New(s)
}
if !isExported(sname) {
s := "type " + sname + " is not exported"
log.Error(s)
return "", jerrors.New(s)
return "", errors.New(s)
}
sname = rcvr.Service()
if server := sm.GetService(protocol, sname); server != nil {
return "", jerrors.New("service already defined: " + sname)
return "", errors.New("service already defined: " + sname)
}
s.name = sname
s.methods = make(map[string]*MethodType)
......@@ -152,7 +151,7 @@ func (sm *serviceMap) Register(protocol string, rcvr RPCService) (string, error)
if len(s.methods) == 0 {
s := "type " + sname + " has no exported methods of suitable type"
log.Error(s)
return "", jerrors.New(s)
return "", errors.New(s)
}
sm.mutex.Lock()
sm.serviceMap[protocol][s.name] = s
......
......@@ -24,8 +24,9 @@ import (
)
import (
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
)
import (
"github.com/dubbo/go-for-apache-dubbo/common/constant"
)
......@@ -156,18 +157,18 @@ func NewURL(ctx context.Context, urlString string, opts ...option) (URL, error)
rawUrlString, err = url.QueryUnescape(urlString)
if err != nil {
return s, jerrors.Errorf("url.QueryUnescape(%s), error{%v}", urlString, err)
return s, errors.Errorf("url.QueryUnescape(%s), error{%v}", urlString, err)
}
//rawUrlString = "//" + rawUrlString
serviceUrl, err = url.Parse(rawUrlString)
if err != nil {
return s, jerrors.Errorf("url.Parse(url string{%s}), error{%v}", rawUrlString, err)
return s, errors.Errorf("url.Parse(url string{%s}), error{%v}", rawUrlString, err)
}
s.Params, err = url.ParseQuery(serviceUrl.RawQuery)
if err != nil {
return s, jerrors.Errorf("url.ParseQuery(raw url string{%s}), error{%v}", serviceUrl.RawQuery, err)
return s, errors.Errorf("url.ParseQuery(raw url string{%s}), error{%v}", serviceUrl.RawQuery, err)
}
s.PrimitiveURL = urlString
......@@ -179,7 +180,7 @@ func NewURL(ctx context.Context, urlString string, opts ...option) (URL, error)
if strings.Contains(s.Location, ":") {
s.Ip, s.Port, err = net.SplitHostPort(s.Location)
if err != nil {
return s, jerrors.Errorf("net.SplitHostPort(Url.Host{%s}), error{%v}", s.Location, err)
return s, errors.Errorf("net.SplitHostPort(Url.Host{%s}), error{%v}", s.Location, err)
}
}
//
......
......@@ -26,7 +26,7 @@ import (
import (
"github.com/AlexStocks/goext/log"
log "github.com/AlexStocks/log4go"
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
)
......@@ -74,10 +74,10 @@ func logInit() error {
confFile = os.Getenv(constant.APP_LOG_CONF_FILE)
if confFile == "" {
return fmt.Errorf("log configure file name is nil")
return errors.Errorf("log configure file name is nil")
}
if path.Ext(confFile) != ".xml" {
return fmt.Errorf("log configure file name{%v} suffix must be .xml", confFile)
return errors.Errorf("log configure file name{%v} suffix must be .xml", confFile)
}
log.LoadConfiguration(confFile)
......@@ -87,28 +87,28 @@ func logInit() error {
func consumerInit(confConFile string) error {
if confConFile == "" {
return fmt.Errorf("application configure(consumer) file name is nil")
return errors.Errorf("application configure(consumer) file name is nil")
}
if path.Ext(confConFile) != ".yml" {
return fmt.Errorf("application configure file name{%v} suffix must be .yml", confConFile)
return errors.Errorf("application configure file name{%v} suffix must be .yml", confConFile)
}
confFileStream, err := ioutil.ReadFile(confConFile)
if err != nil {
return fmt.Errorf("ioutil.ReadFile(file:%s) = error:%s", confConFile, jerrors.ErrorStack(err))
return errors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confConFile, errors.Cause(err))
}
consumerConfig = &ConsumerConfig{}
err = yaml.Unmarshal(confFileStream, consumerConfig)
if err != nil {
return fmt.Errorf("yaml.Unmarshal() = error:%s", jerrors.ErrorStack(err))
return errors.Errorf("yaml.Unmarshal() = error:%v", errors.Cause(err))
}
if consumerConfig.RequestTimeout, err = time.ParseDuration(consumerConfig.Request_Timeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(Request_Timeout{%#v})", consumerConfig.Request_Timeout)
return errors.WithMessagef(err, "time.ParseDuration(Request_Timeout{%#v})", consumerConfig.Request_Timeout)
}
if consumerConfig.ConnectTimeout, err = time.ParseDuration(consumerConfig.Connect_Timeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(Connect_Timeout{%#v})", consumerConfig.Connect_Timeout)
return errors.WithMessagef(err, "time.ParseDuration(Connect_Timeout{%#v})", consumerConfig.Connect_Timeout)
}
gxlog.CInfo("consumer config{%#v}\n", consumerConfig)
......@@ -117,21 +117,21 @@ func consumerInit(confConFile string) error {
func providerInit(confProFile string) error {
if confProFile == "" {
return fmt.Errorf("application configure(provider) file name is nil")
return errors.Errorf("application configure(provider) file name is nil")
}
if path.Ext(confProFile) != ".yml" {
return fmt.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
return errors.Errorf("application configure file name{%v} suffix must be .yml", confProFile)
}
confFileStream, err := ioutil.ReadFile(confProFile)
if err != nil {
return fmt.Errorf("ioutil.ReadFile(file:%s) = error:%s", confProFile, jerrors.ErrorStack(err))
return errors.Errorf("ioutil.ReadFile(file:%s) = error:%v", confProFile, errors.Cause(err))
}
providerConfig = &ProviderConfig{}
err = yaml.Unmarshal(confFileStream, providerConfig)
if err != nil {
return fmt.Errorf("yaml.Unmarshal() = error:%s", jerrors.ErrorStack(err))
return errors.Errorf("yaml.Unmarshal() = error:%v", errors.Cause(err))
}
gxlog.CInfo("provider config{%#v}\n", providerConfig)
......
......@@ -15,7 +15,6 @@
package config
import (
"github.com/dubbo/go-for-apache-dubbo/common"
"path/filepath"
"testing"
)
......@@ -26,6 +25,7 @@ import (
import (
"github.com/dubbo/go-for-apache-dubbo/cluster/cluster_impl"
"github.com/dubbo/go-for-apache-dubbo/common"
"github.com/dubbo/go-for-apache-dubbo/common/extension"
)
......
......@@ -14,14 +14,20 @@
package config
import (
"sync"
"testing"
)
import (
"github.com/stretchr/testify/assert"
)
import (
"github.com/dubbo/go-for-apache-dubbo/cluster/cluster_impl"
"github.com/dubbo/go-for-apache-dubbo/common"
"github.com/dubbo/go-for-apache-dubbo/common/extension"
"github.com/dubbo/go-for-apache-dubbo/protocol"
"github.com/stretchr/testify/assert"
"sync"
"testing"
)
var regProtocol protocol.Protocol
......
......@@ -24,7 +24,7 @@ import (
)
import (
log "github.com/AlexStocks/log4go"
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
"go.uber.org/atomic"
)
import (
......@@ -72,7 +72,7 @@ func (srvconfig *ServiceConfig) Export() error {
//TODO:delay export
if srvconfig.unexported != nil && srvconfig.unexported.Load() {
err := jerrors.Errorf("The service %v has already unexported! ", srvconfig.InterfaceName)
err := errors.Errorf("The service %v has already unexported! ", srvconfig.InterfaceName)
log.Error(err.Error())
return err
}
......@@ -88,7 +88,7 @@ func (srvconfig *ServiceConfig) Export() error {
//registry the service reflect
methods, err := common.ServiceMap.Register(proto.Name, srvconfig.rpcService)
if err != nil {
err := jerrors.Errorf("The service %v export the protocol %v error! Error message is %v .", srvconfig.InterfaceName, proto.Name, err.Error())
err := errors.Errorf("The service %v export the protocol %v error! Error message is %v .", srvconfig.InterfaceName, proto.Name, err.Error())
log.Error(err.Error())
return err
}
......@@ -114,7 +114,7 @@ func (srvconfig *ServiceConfig) Export() error {
srvconfig.cacheMutex.Unlock()
exporter := srvconfig.cacheProtocol.Export(invoker)
if exporter == nil {
panic(jerrors.New("New exporter error"))
panic(errors.New("New exporter error"))
}
srvconfig.exporters = append(srvconfig.exporters, exporter)
}
......
......@@ -15,11 +15,17 @@
package config
import (
"github.com/dubbo/go-for-apache-dubbo/common/extension"
"github.com/stretchr/testify/assert"
"testing"
)
import (
"github.com/stretchr/testify/assert"
)
import (
"github.com/dubbo/go-for-apache-dubbo/common/extension"
)
func doinit() {
providerConfig = &ProviderConfig{
ApplicationConfig: ApplicationConfig{
......
......@@ -4,8 +4,8 @@ require (
github.com/AlexStocks/getty v0.0.0-20190513203438-4a52b6874223
github.com/AlexStocks/goext v0.3.2
github.com/AlexStocks/log4go v1.0.2
github.com/dubbogo/hessian2 v0.0.0-20190515104320-57ac2e777dc6
github.com/juju/errors v0.0.0-20190207033735-e65537c515d7
github.com/dubbogo/hessian2 v0.0.0-20190521160428-dff5b932f479
github.com/pkg/errors v0.8.1
github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec
github.com/stretchr/testify v1.3.0
go.uber.org/atomic v1.3.2
......
......@@ -25,7 +25,7 @@ import (
"github.com/AlexStocks/goext/sync/atomic"
log "github.com/AlexStocks/log4go"
"github.com/dubbogo/hessian2"
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
)
......@@ -36,11 +36,11 @@ import (
)
var (
errInvalidCodecType = jerrors.New("illegal CodecType")
errInvalidAddress = jerrors.New("remote address invalid or empty")
errSessionNotExist = jerrors.New("session not exist")
errClientClosed = jerrors.New("client closed")
errClientReadTimeout = jerrors.New("client read timeout")
errInvalidCodecType = errors.New("illegal CodecType")
errInvalidAddress = errors.New("remote address invalid or empty")
errSessionNotExist = errors.New("session not exist")
errClientClosed = errors.New("client closed")
errClientReadTimeout = errors.New("client read timeout")
clientConf *ClientConfig
)
......@@ -168,7 +168,7 @@ func (c *Client) CallOneway(addr string, svcUrl common.URL, method string, args
o(&copts)
}
return jerrors.Trace(c.call(CT_OneWay, addr, svcUrl, method, args, nil, nil, copts))
return errors.WithStack(c.call(CT_OneWay, addr, svcUrl, method, args, nil, nil, copts))
}
// if @reply is nil, the transport layer will get the response without notify the invoker.
......@@ -184,7 +184,7 @@ func (c *Client) Call(addr string, svcUrl common.URL, method string, args, reply
ct = CT_OneWay
}
return jerrors.Trace(c.call(ct, addr, svcUrl, method, args, reply, nil, copts))
return errors.WithStack(c.call(ct, addr, svcUrl, method, args, reply, nil, copts))
}
func (c *Client) AsyncCall(addr string, svcUrl common.URL, method string, args interface{},
......@@ -195,7 +195,7 @@ func (c *Client) AsyncCall(addr string, svcUrl common.URL, method string, args i
o(&copts)
}
return jerrors.Trace(c.call(CT_TwoWay, addr, svcUrl, method, args, reply, callback, copts))
return errors.WithStack(c.call(CT_TwoWay, addr, svcUrl, method, args, reply, callback, copts))
}
func (c *Client) call(ct CallType, addr string, svcUrl common.URL, method string,
......@@ -246,7 +246,7 @@ func (c *Client) call(ct CallType, addr string, svcUrl common.URL, method string
defer c.pool.release(conn, err)
if err = c.transfer(session, p, rsp, opts); err != nil {
return jerrors.Trace(err)
return errors.WithStack(err)
}
if ct == CT_OneWay || callback != nil {
......@@ -261,7 +261,7 @@ func (c *Client) call(ct CallType, addr string, svcUrl common.URL, method string
err = rsp.err
}
return jerrors.Trace(err)
return errors.WithStack(err)
}
func (c *Client) Close() {
......@@ -274,7 +274,7 @@ func (c *Client) Close() {
func (c *Client) selectSession(addr string) (*gettyRPCClient, getty.Session, error) {
rpcClient, err := c.pool.getGettyRpcClient(DUBBO, addr)
if err != nil {
return nil, nil, jerrors.Trace(err)
return nil, nil, errors.WithStack(err)
}
return rpcClient, rpcClient.selectSession(), nil
}
......@@ -316,7 +316,7 @@ func (c *Client) transfer(session getty.Session, pkg *DubboPackage,
rsp.readStart = time.Now()
}
return jerrors.Trace(err)
return errors.WithStack(err)
}
func (c *Client) addPendingResponse(pr *PendingResponse) {
......
......@@ -16,7 +16,6 @@ package dubbo
import (
"context"
"errors"
"sync"
"testing"
"time"
......@@ -24,6 +23,7 @@ import (
import (
"github.com/dubbogo/hessian2"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
......
......@@ -23,7 +23,7 @@ import (
import (
"github.com/dubbogo/hessian2"
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
)
// serial ID
......@@ -64,7 +64,7 @@ func (p *DubboPackage) Marshal() (*bytes.Buffer, error) {
pkg, err := codec.Write(p.Service, p.Header, p.Body)
if err != nil {
return nil, jerrors.Trace(err)
return nil, errors.WithStack(err)
}
return bytes.NewBuffer(pkg), nil
......@@ -76,7 +76,7 @@ func (p *DubboPackage) Unmarshal(buf *bytes.Buffer, opts ...interface{}) error {
// read header
err := codec.ReadHeader(&p.Header)
if err != nil {
return jerrors.Trace(err)
return errors.WithStack(err)
}
if len(opts) != 0 { // for client
......@@ -84,11 +84,11 @@ func (p *DubboPackage) Unmarshal(buf *bytes.Buffer, opts ...interface{}) error {
r := client.pendingResponses[SequenceType(p.Header.ID)]
if r == nil {
return fmt.Errorf("pendingResponses[%v] = nil", p.Header.ID)
return errors.Errorf("pendingResponses[%v] = nil", p.Header.ID)
}
p.Body = client.pendingResponses[SequenceType(p.Header.ID)].reply
} else {
return fmt.Errorf("opts[0] is not *Client")
return errors.Errorf("opts[0] is not *Client")
}
}
......@@ -98,7 +98,7 @@ func (p *DubboPackage) Unmarshal(buf *bytes.Buffer, opts ...interface{}) error {
// read body
err = codec.ReadBody(p.Body)
return jerrors.Trace(err)
return errors.WithStack(err)
}
////////////////////////////////////////////
......
......@@ -19,7 +19,7 @@ import (
)
import (
jerrors "github.com/juju/errors"
"github.com/pkg/errors"
)
type (
......@@ -101,19 +101,19 @@ func (c *GettySessionParam) CheckValidity() error {
var err error
if c.keepAlivePeriod, err = time.ParseDuration(c.KeepAlivePeriod); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(KeepAlivePeriod{%#v})", c.KeepAlivePeriod)
return errors.WithMessagef(err, "time.ParseDuration(KeepAlivePeriod{%#v})", c.KeepAlivePeriod)
}
if c.tcpReadTimeout, err = time.ParseDuration(c.TcpReadTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(TcpReadTimeout{%#v})", c.TcpReadTimeout)
return errors.WithMessagef(err, "time.ParseDuration(TcpReadTimeout{%#v})", c.TcpReadTimeout)
}
if c.tcpWriteTimeout, err = time.ParseDuration(c.TcpWriteTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(TcpWriteTimeout{%#v})", c.TcpWriteTimeout)
return errors.WithMessagef(err, "time.ParseDuration(TcpWriteTimeout{%#v})", c.TcpWriteTimeout)
}
if c.waitTimeout, err = time.ParseDuration(c.WaitTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(WaitTimeout{%#v})", c.WaitTimeout)
return errors.WithMessagef(err, "time.ParseDuration(WaitTimeout{%#v})", c.WaitTimeout)
}
return nil
......@@ -123,30 +123,30 @@ func (c *ClientConfig) CheckValidity() error {
var err error
if c.heartbeatPeriod, err = time.ParseDuration(c.HeartbeatPeriod); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(HeartbeatPeroid{%#v})", c.HeartbeatPeriod)
return errors.WithMessagef(err, "time.ParseDuration(HeartbeatPeroid{%#v})", c.HeartbeatPeriod)
}
if c.sessionTimeout, err = time.ParseDuration(c.SessionTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(SessionTimeout{%#v})", c.SessionTimeout)
return errors.WithMessagef(err, "time.ParseDuration(SessionTimeout{%#v})", c.SessionTimeout)
}
if c.failFastTimeout, err = time.ParseDuration(c.FailFastTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(FailFastTimeout{%#v})", c.FailFastTimeout)
return errors.WithMessagef(err, "time.ParseDuration(FailFastTimeout{%#v})", c.FailFastTimeout)
}
return jerrors.Trace(c.GettySessionParam.CheckValidity())
return errors.WithStack(c.GettySessionParam.CheckValidity())
}
func (c *ServerConfig) CheckValidity() error {
var err error
if c.sessionTimeout, err = time.ParseDuration(c.SessionTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(SessionTimeout{%#v})", c.SessionTimeout)
return errors.WithMessagef(err, "time.ParseDuration(SessionTimeout{%#v})", c.SessionTimeout)
}
if c.failFastTimeout, err = time.ParseDuration(c.FailFastTimeout); err != nil {
return jerrors.Annotatef(err, "time.ParseDuration(FailFastTimeout{%#v})", c.FailFastTimeout)
return errors.WithMessagef(err, "time.ParseDuration(FailFastTimeout{%#v})", c.FailFastTimeout)
}
return jerrors.Trace(c.GettySessionParam.CheckValidity())
return errors.WithStack(c.GettySessionParam.CheckValidity())
}
......@@ -15,13 +15,13 @@
package dubbo
import (
"errors"
"strconv"
"sync"
)
import (
log "github.com/AlexStocks/log4go"
"github.com/pkg/errors"
)
import (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment