From 2959bc7ba9e887a928c24be0d6a7c603f80fecda Mon Sep 17 00:00:00 2001 From: zhangshen023 <1292369127@qq.com> Date: Sat, 12 Sep 2020 15:38:32 +0800 Subject: [PATCH] use rwlock --- registry/consul/service_discovery.go | 28 +++++++++++------------ registry/consul/service_discovery_test.go | 8 +------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/registry/consul/service_discovery.go b/registry/consul/service_discovery.go index 698758735..db039508e 100644 --- a/registry/consul/service_discovery.go +++ b/registry/consul/service_discovery.go @@ -84,7 +84,7 @@ func newConsulServiceDiscovery(name string) (registry.ServiceDiscovery, error) { tag: remoteConfig.Params[constant.QUERY_TAG], consulClient: client, deregisterCriticalServiceAfter: getDeregisterAfter(remoteConfig.Params), - clientLock: sync.Mutex{}, + clientLock: sync.RWMutex{}, }, nil } @@ -99,7 +99,7 @@ type consulServiceDiscovery struct { address string deregisterCriticalServiceAfter string ttl sync.Map - clientLock sync.Mutex + clientLock sync.RWMutex *consul.Config } @@ -132,11 +132,11 @@ func (csd *consulServiceDiscovery) Register(instance registry.ServiceInstance) e consulClient *consul.Client ) ins, _ := csd.buildRegisterInstance(instance) - csd.clientLock.Lock() + csd.clientLock.RLock() if consulClient, err = csd.getConsulClient(); err == nil { err = consulClient.Agent().ServiceRegister(ins) } - csd.clientLock.Unlock() + csd.clientLock.RUnlock() if err != nil { logger.Errorf("consul register the instance %s fail:%v", instance.GetServiceName(), err) return perrors.WithMessage(err, "consul could not register the instance. "+instance.GetServiceName()) @@ -163,11 +163,11 @@ func (csd *consulServiceDiscovery) registerTtl(instance registry.ServiceInstance for { select { case <-timer.C: - csd.clientLock.Lock() + csd.clientLock.RLock() if consulClient, err = csd.getConsulClient(); err == nil { err = consulClient.Agent().PassTTL(fmt.Sprintf("service:%s", checkID), "") } - csd.clientLock.Unlock() + csd.clientLock.RUnlock() if err != nil { logger.Warnf("pass ttl heartbeat fail:%v", err) break @@ -189,8 +189,8 @@ func (csd *consulServiceDiscovery) Update(instance registry.ServiceInstance) err consulClient *consul.Client ) ins, _ := csd.buildRegisterInstance(instance) - csd.clientLock.Lock() - defer csd.clientLock.Unlock() + csd.clientLock.RLock() + defer csd.clientLock.RUnlock() if consulClient, err = csd.getConsulClient(); err == nil { err = consulClient.Agent().ServiceDeregister(buildID(instance)) } @@ -205,11 +205,11 @@ func (csd *consulServiceDiscovery) Unregister(instance registry.ServiceInstance) err error consulClient *consul.Client ) - csd.clientLock.Lock() + csd.clientLock.RLock() if consulClient, err = csd.getConsulClient(); err == nil { err = consulClient.Agent().ServiceDeregister(buildID(instance)) } - csd.clientLock.Unlock() + csd.clientLock.RUnlock() if err != nil { logger.Errorf("unregister service instance %s,error: %v", instance.GetId(), err) return err @@ -235,11 +235,11 @@ func (csd *consulServiceDiscovery) GetServices() *gxset.HashSet { services map[string][]string ) var res = gxset.NewSet() - csd.clientLock.Lock() + csd.clientLock.RLock() if consulClient, err = csd.getConsulClient(); err == nil { services, _, err = consulClient.Catalog().Services(nil) } - csd.clientLock.Unlock() + csd.clientLock.RUnlock() if err != nil { logger.Errorf("get services,error: %v", err) return res @@ -283,13 +283,13 @@ func (csd *consulServiceDiscovery) GetInstances(serviceName string) []registry.S consulClient *consul.Client instances []*consul.ServiceEntry ) - csd.clientLock.Lock() + csd.clientLock.RLock() if consulClient, err = csd.getConsulClient(); err == nil { instances, _, err = consulClient.Health().Service(serviceName, csd.tag, true, &consul.QueryOptions{ WaitTime: time.Duration(csd.checkPassInterval), }) } - csd.clientLock.Unlock() + csd.clientLock.RUnlock() if err != nil { logger.Errorf("get instances for service %s,error: %v", serviceName, err) diff --git a/registry/consul/service_discovery_test.go b/registry/consul/service_discovery_test.go index 43d1cd173..ed7220f2d 100644 --- a/registry/consul/service_discovery_test.go +++ b/registry/consul/service_discovery_test.go @@ -44,13 +44,7 @@ var ( consulCheckPassInterval = 17000 consulDeregisterCriticalServiceAfter = "20s" consulWatchTimeout = 60000 - registryURL = common.URL{ - Path: "", - Username: "", - Password: "", - Methods: nil, - SubURL: nil, - } + registryURL = common.URL{} ) func TestConsulServiceDiscovery_newConsulServiceDiscovery(t *testing.T) { -- GitLab