diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6036c58 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +tmp/ diff --git a/client/client.go b/client/client.go index 50b0d8a..1b67f64 100644 --- a/client/client.go +++ b/client/client.go @@ -2,8 +2,6 @@ package client import ( "time" - - "github.com/gmsec/micro/registry" ) // Client is the interface used to make requests to services. @@ -53,11 +51,11 @@ var ( func newNamingClient(opts ...Option) Client { options := newOptions(opts...) - if options.Registry == nil { - options.Registry = ®istry.Registry{ - RegNaming: registry.NewDNSNamingRegistry(), - } - } + // if options.Registry == nil { + // options.Registry = ®istry.Registry{ + // RegNaming: registry.NewDNSNamingRegistry(), + // } + // } rc := &namingResolver{ opts: options, diff --git a/client/grpc_pool.go b/client/grpc_pool.go index 9289011..c18e46f 100644 --- a/client/grpc_pool.go +++ b/client/grpc_pool.go @@ -9,9 +9,8 @@ import ( ) type pool struct { - isIPAddr bool // if IP direct connection - size int - ttl int64 + size int + ttl int64 // max streams on a *poolConn maxStreams int @@ -64,7 +63,6 @@ func newPool(size int, ttl time.Duration, idle int, ms int, isIPAddr bool) *pool maxStreams: ms, maxIdle: idle, conns: make(map[string]*streamsPool), - isIPAddr: isIPAddr, } } @@ -76,8 +74,6 @@ func (p *pool) getConn(addr string, opts ...grpc.DialOption) (*poolConn, error) sp = &streamsPool{head: &poolConn{}, busy: &poolConn{}, count: 0, idle: 0} p.conns[addr] = sp } - - // fmt.Println("=======pool_len:", sp.count) // while we have conns check streams and then return one // otherwise we'll create a new conn conn := sp.head.next @@ -88,21 +84,19 @@ func (p *pool) getConn(addr string, opts ...grpc.DialOption) (*poolConn, error) case connectivity.Connecting: conn = conn.next continue - // case connectivity.Shutdown: - // next := conn.next - // if conn.streams == 0 { - // removeConn(conn) - // sp.idle-- - // } - // conn = next - // continue - case connectivity.TransientFailure, connectivity.Shutdown: + case connectivity.Shutdown: + next := conn.next + if conn.streams == 0 { + removeConn(conn) + sp.idle-- + } + conn = next + continue + case connectivity.TransientFailure: next := conn.next if conn.streams == 0 { removeConn(conn) - if conn.GetState() == connectivity.TransientFailure { - conn.ClientConn.Close() - } + conn.ClientConn.Close() sp.idle-- } conn = next @@ -110,7 +104,6 @@ func (p *pool) getConn(addr string, opts ...grpc.DialOption) (*poolConn, error) case connectivity.Ready: case connectivity.Idle: } - // a old conn if now-conn.created > p.ttl { next := conn.next diff --git a/go.mod b/go.mod index 080834e..1e2512f 100644 --- a/go.mod +++ b/go.mod @@ -6,13 +6,13 @@ require ( github.com/google/uuid v1.1.2 github.com/gookit/color v1.3.8 // indirect github.com/micro/mdns v0.3.0 - github.com/xxjwxc/public v0.0.0-20210303034518-3d2086731fb9 + github.com/xxjwxc/public v0.0.0-20210518123934-6cc0965f0bc5 go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.16.0 // indirect golang.org/x/text v0.3.5 // indirect golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc // indirect google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a // indirect - google.golang.org/grpc v1.21.1 + google.golang.org/grpc v1.29.1 gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index ce5f2c6..1d64d2b 100644 --- a/go.sum +++ b/go.sum @@ -15,9 +15,11 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -31,6 +33,9 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xb github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -47,13 +52,13 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -142,6 +147,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -175,8 +181,8 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xxjwxc/gowp v0.0.0-20200603130651-4d7368b0e285/go.mod h1:yJ/fY5BorWARfDDsxBU/MyQTHc5MVyNcqBQQYD6MN0k= github.com/xxjwxc/public v0.0.0-20200603115833-341beff27850/go.mod h1:fp3M+FEQrCgWD1fZ/PLwZkCTglf086OEhC9LcydAUnc= -github.com/xxjwxc/public v0.0.0-20210303034518-3d2086731fb9 h1:GAF/PlgWqldmUNmkvAPE21FqkjfPxrlQv8A5Aivo0Q4= -github.com/xxjwxc/public v0.0.0-20210303034518-3d2086731fb9/go.mod h1:eEooPAer8T/WuVbu+gP4Xl2YjFb6v56NpCOb4IJibvc= +github.com/xxjwxc/public v0.0.0-20210518123934-6cc0965f0bc5 h1:PYu1xvS3JoXfLl3Yz5H0vdxdlvsMItQoFOZccJMIG54= +github.com/xxjwxc/public v0.0.0-20210518123934-6cc0965f0bc5/go.mod h1:za2pkqdDH64CbdyuZz6dqI+IhjCgstXeoWD3IAWbiAc= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -259,6 +265,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -270,12 +277,15 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a h1:Ob5/580gVHBJZgXnff1cZDbG+xLtMVE5mDRTe+nIsX4= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -285,8 +295,9 @@ google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyz google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/eapache/queue.v1 v1.1.0/go.mod h1:wNtmx1/O7kZSR9zNT1TTOJ7GLpm3Vn7srzlfylFbQwU= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -309,5 +320,6 @@ gorm.io/driver/mysql v1.0.1/go.mod h1:KtqSthtg55lFp3S5kUXqlGaelnWpKitn4k1xZTnoiP gorm.io/gorm v1.9.19/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.20.2/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/micro_test.go b/micro_test.go index b359e3f..3b29247 100644 --- a/micro_test.go +++ b/micro_test.go @@ -10,7 +10,6 @@ import ( ) func TestMain(t *testing.T) { - reg := registry.NewDNSNamingRegistry() os.Setenv("MICRO_DEBUG_PROFILE", "true") // 初始化服务 @@ -19,6 +18,8 @@ func TestMain(t *testing.T) { WithRegisterTTL(time.Second*30), //指定服务注册时间 WithRegisterInterval(time.Second*15), //让服务在指定时间内重新注册 ) + + reg := registry.NewDNSNamingRegistry() service.Init(WithRegistryNaming(reg)) // server @@ -44,5 +45,5 @@ func TestMain(t *testing.T) { // process, _ := os.FindProcess(os.Getpid()) // process.Signal(syscall.SIGTERM) - // time.Sleep(1 * time.Second) + time.Sleep(10 * time.Second) } diff --git a/option.go b/option.go index cb362ce..d867366 100644 --- a/option.go +++ b/option.go @@ -47,6 +47,13 @@ func newOptions(opts ...Option) Options { o(&opt) } + if opt.Registry == nil { + opt.Registry = ®istry.Registry{ + RegNaming: registry.NewDNSNamingRegistry(), + } + opt.Client.Init(client.WithRegistryNaming(opt.Registry.RegNaming)) + opt.Server.Init(server.WithRegistryNaming(opt.Registry.RegNaming)) + } return opt } diff --git a/profile/pprof/pprof.go b/profile/pprof/pprof.go index 49943e4..845ebca 100644 --- a/profile/pprof/pprof.go +++ b/profile/pprof/pprof.go @@ -10,6 +10,7 @@ import ( "time" "github.com/gmsec/micro/profile" + "github.com/xxjwxc/public/tools" ) type profiler struct { @@ -50,15 +51,20 @@ func (p *profiler) Start() error { return nil } + tmp := "/tmp" + if runtime.GOOS == "windows" { // windows系统 + tmp = filepath.Join(tools.GetCurrentDirectory(), "/tmp") + tools.BuildDir(tmp + "/") + } // create exit channel p.exit = make(chan bool) - cpuFile := filepath.Join("/tmp", "cpu.pprof") - memFile := filepath.Join("/tmp", "mem.pprof") + cpuFile := filepath.Join(tmp, "cpu.pprof") + memFile := filepath.Join(tmp, "mem.pprof") if len(p.opts.Name) > 0 { - cpuFile = filepath.Join("/tmp", p.opts.Name+".cpu.pprof") - memFile = filepath.Join("/tmp", p.opts.Name+".mem.pprof") + cpuFile = filepath.Join(tmp, p.opts.Name+".cpu.pprof") + memFile = filepath.Join(tmp, p.opts.Name+".mem.pprof") } f1, err := os.Create(cpuFile) diff --git a/registry/dns_naming_register.go b/registry/dns_naming_register.go index 4830e1a..b22f331 100644 --- a/registry/dns_naming_register.go +++ b/registry/dns_naming_register.go @@ -30,10 +30,6 @@ type DNSNamingRegister struct { sync.Mutex node *mdns.Server - // watch mabey - cancel context.CancelFunc - ctx context.Context - isInit bool // listener // listener chan *mdns.ServiceEntry } @@ -68,6 +64,15 @@ func newDNSNamingRegistry(opts ...Option) RegNaming { } } +// Init init option +func (r *DNSNamingRegister) Init(opts ...Option) error { + for _, o := range opts { + o(&r.opts) + } + + return nil +} + func (r *DNSNamingRegister) String() string { return r.opts.ServiceName } @@ -132,65 +137,68 @@ func (r *DNSNamingRegister) Deregister() error { func (r *DNSNamingRegister) Resolve(target string) (naming.Watcher, error) { r.Lock() defer r.Unlock() - r.ctx, r.cancel = context.WithCancel(context.Background()) - // w := &dnsNamingWatcher{ - // node: dnr.node, - // timeout: dnr.opts.Timeout, - // serviceName: dnr.opts.serviceName, - // domain: dnr.domain, - // ctx: ctx, - // cancel: cancel, - // } - return r, nil + ctx, cancel := context.WithCancel(context.Background()) + w := &dnsNamingWatcher{ + node: r.node, + timeout: r.opts.Timeout, + serviceName: target, + domain: r.domain, + ctx: ctx, + cancel: cancel, + } + return w, nil } -// type dnsNamingWatcher struct { -// node *mdns.Server -// timeout time.Duration - -// serviceName string -// domain string +type dnsNamingWatcher struct { + sync.Mutex + node *mdns.Server + timeout time.Duration -// ctx context.Context + serviceName string + domain string -// // c *etcd.Client -// // target string -// // wch etcd.WatchChan -// // err error -// } + // watch mabey + cancel context.CancelFunc + ctx context.Context + isInit bool + // c *etcd.Client + // target string + // wch etcd.WatchChan + // err error +} // Next gets the next set of updates from the etcd resolver. // Calls to Next should be serialized; concurrent calls are not safe since // there is no way to reconcile the update ordering. -func (r *DNSNamingRegister) Next() ([]*naming.Update, error) { +func (r *dnsNamingWatcher) Next() ([]*naming.Update, error) { r.Lock() defer r.Unlock() if !r.isInit { // first r.isInit = true - timeout := r.opts.Timeout + timeout := r.timeout defer func() { if timeout > time.Second*3 { timeout = time.Second * 3 } - r.opts.Timeout = timeout + r.timeout = timeout }() - r.opts.Timeout = time.Millisecond * 100 + r.timeout = time.Millisecond * 100 return r.getService() } return r.getService() } -func (r *DNSNamingRegister) getService() ([]*naming.Update, error) { +func (r *dnsNamingWatcher) getService() ([]*naming.Update, error) { var serviceList []*naming.Update entries := make(chan *mdns.ServiceEntry, 10) done := make(chan bool) - p := mdns.DefaultParams(r.opts.ServiceName) + p := mdns.DefaultParams(r.serviceName) // set context with timeout var cancel context.CancelFunc - p.Context, cancel = context.WithTimeout(context.Background(), r.opts.Timeout) + p.Context, cancel = context.WithTimeout(context.Background(), r.timeout) defer cancel() // set entries channel p.Entries = entries @@ -242,16 +250,7 @@ func (r *DNSNamingRegister) getService() ([]*naming.Update, error) { } // Close close watcher -func (r *DNSNamingRegister) Close() { r.cancel() } - -// Init init option -func (r *DNSNamingRegister) Init(opts ...Option) error { - for _, o := range opts { - o(&r.opts) - } - - return nil -} +func (r *dnsNamingWatcher) Close() { r.cancel() } // Options get opts list func (r *DNSNamingRegister) Options() Options { diff --git a/server/server.go b/server/server.go index 01c7e3a..7cf463d 100644 --- a/server/server.go +++ b/server/server.go @@ -4,8 +4,6 @@ import ( "net" "time" - "github.com/gmsec/micro/registry" - "github.com/google/uuid" "google.golang.org/grpc" ) @@ -50,11 +48,11 @@ var ( func newNamingServer(opts ...Option) Server { options := newOptions(opts...) - if options.Registry == nil { - options.Registry = ®istry.Registry{ - RegNaming: registry.NewDNSNamingRegistry(), - } - } + // if options.Registry == nil { + // options.Registry = ®istry.Registry{ + // RegNaming: registry.NewDNSNamingRegistry(), + // } + // } return &namingResolver{ opts: options,