diff --git a/pkg/controller/service/service_controller.go b/pkg/controller/service/service_controller.go index bd70b39876b..c642bbef4a6 100644 --- a/pkg/controller/service/service_controller.go +++ b/pkg/controller/service/service_controller.go @@ -75,7 +75,7 @@ type cachedService struct { } type serviceCache struct { - mu sync.Mutex // protects serviceMap + mu sync.RWMutex // protects serviceMap serviceMap map[string]*cachedService } @@ -375,8 +375,8 @@ func (s *ServiceController) ensureLoadBalancer(service *v1.Service) (*v1.LoadBal // ListKeys implements the interface required by DeltaFIFO to list the keys we // already know about. func (s *serviceCache) ListKeys() []string { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() keys := make([]string, 0, len(s.serviceMap)) for k := range s.serviceMap { keys = append(keys, k) @@ -386,8 +386,8 @@ func (s *serviceCache) ListKeys() []string { // GetByKey returns the value stored in the serviceMap under the given key func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() if v, ok := s.serviceMap[key]; ok { return v, true, nil } @@ -397,8 +397,8 @@ func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) { // ListKeys implements the interface required by DeltaFIFO to list the keys we // already know about. func (s *serviceCache) allServices() []*v1.Service { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() services := make([]*v1.Service, 0, len(s.serviceMap)) for _, v := range s.serviceMap { services = append(services, v.state) @@ -407,8 +407,8 @@ func (s *serviceCache) allServices() []*v1.Service { } func (s *serviceCache) get(serviceName string) (*cachedService, bool) { - s.mu.Lock() - defer s.mu.Unlock() + s.mu.RLock() + defer s.mu.RUnlock() service, ok := s.serviceMap[serviceName] return service, ok }