mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 21:17:23 +00:00
Use RWMutex to improve locking for serviceCache
This commit is contained in:
parent
1894889314
commit
e86b0d3cd3
@ -78,7 +78,7 @@ type cachedService struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type serviceCache struct {
|
type serviceCache struct {
|
||||||
mu sync.Mutex // protects serviceMap
|
mu sync.RWMutex // protects serviceMap
|
||||||
serviceMap map[string]*cachedService
|
serviceMap map[string]*cachedService
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,8 +378,8 @@ func (s *ServiceController) ensureLoadBalancer(service *v1.Service) (*v1.LoadBal
|
|||||||
// ListKeys implements the interface required by DeltaFIFO to list the keys we
|
// ListKeys implements the interface required by DeltaFIFO to list the keys we
|
||||||
// already know about.
|
// already know about.
|
||||||
func (s *serviceCache) ListKeys() []string {
|
func (s *serviceCache) ListKeys() []string {
|
||||||
s.mu.Lock()
|
s.mu.RLock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.RUnlock()
|
||||||
keys := make([]string, 0, len(s.serviceMap))
|
keys := make([]string, 0, len(s.serviceMap))
|
||||||
for k := range s.serviceMap {
|
for k := range s.serviceMap {
|
||||||
keys = append(keys, k)
|
keys = append(keys, k)
|
||||||
@ -389,8 +389,8 @@ func (s *serviceCache) ListKeys() []string {
|
|||||||
|
|
||||||
// GetByKey returns the value stored in the serviceMap under the given key
|
// GetByKey returns the value stored in the serviceMap under the given key
|
||||||
func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) {
|
func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) {
|
||||||
s.mu.Lock()
|
s.mu.RLock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.RUnlock()
|
||||||
if v, ok := s.serviceMap[key]; ok {
|
if v, ok := s.serviceMap[key]; ok {
|
||||||
return v, true, nil
|
return v, true, nil
|
||||||
}
|
}
|
||||||
@ -400,8 +400,8 @@ func (s *serviceCache) GetByKey(key string) (interface{}, bool, error) {
|
|||||||
// ListKeys implements the interface required by DeltaFIFO to list the keys we
|
// ListKeys implements the interface required by DeltaFIFO to list the keys we
|
||||||
// already know about.
|
// already know about.
|
||||||
func (s *serviceCache) allServices() []*v1.Service {
|
func (s *serviceCache) allServices() []*v1.Service {
|
||||||
s.mu.Lock()
|
s.mu.RLock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.RUnlock()
|
||||||
services := make([]*v1.Service, 0, len(s.serviceMap))
|
services := make([]*v1.Service, 0, len(s.serviceMap))
|
||||||
for _, v := range s.serviceMap {
|
for _, v := range s.serviceMap {
|
||||||
services = append(services, v.state)
|
services = append(services, v.state)
|
||||||
@ -410,8 +410,8 @@ func (s *serviceCache) allServices() []*v1.Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *serviceCache) get(serviceName string) (*cachedService, bool) {
|
func (s *serviceCache) get(serviceName string) (*cachedService, bool) {
|
||||||
s.mu.Lock()
|
s.mu.RLock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.RUnlock()
|
||||||
service, ok := s.serviceMap[serviceName]
|
service, ok := s.serviceMap[serviceName]
|
||||||
return service, ok
|
return service, ok
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user