Skip to content

Commit

Permalink
Merge pull request #120372 from Miciah/automated-cherry-pick-of-#1181…
Browse files Browse the repository at this point in the history
…89-origin-release-1.28

Automated cherry pick of #118189: TopologyAwareHints: Take lock in HasPopulatedHints
  • Loading branch information
k8s-ci-robot committed Sep 7, 2023
2 parents b8003e6 + dda909d commit afc6b4e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
17 changes: 15 additions & 2 deletions staging/src/k8s.io/endpointslice/topologycache/topologycache.go
Expand Up @@ -153,8 +153,10 @@ func (t *TopologyCache) AddHints(logger klog.Logger, si *SliceInfo) ([]*discover
return slicesToCreate, slicesToUpdate, events
}

hintsEnabled := t.hintsPopulatedByService.Has(si.ServiceKey)
t.SetHints(si.ServiceKey, si.AddressType, allocatedHintsByZone)
t.lock.Lock()
defer t.lock.Unlock()
hintsEnabled := t.hasPopulatedHintsLocked(si.ServiceKey)
t.setHintsLocked(si.ServiceKey, si.AddressType, allocatedHintsByZone)

// if hints were not enabled before, we publish an event to indicate we enabled them.
if !hintsEnabled {
Expand All @@ -174,6 +176,10 @@ func (t *TopologyCache) SetHints(serviceKey string, addrType discovery.AddressTy
t.lock.Lock()
defer t.lock.Unlock()

t.setHintsLocked(serviceKey, addrType, allocatedHintsByZone)
}

func (t *TopologyCache) setHintsLocked(serviceKey string, addrType discovery.AddressType, allocatedHintsByZone EndpointZoneInfo) {
_, ok := t.endpointsByService[serviceKey]
if !ok {
t.endpointsByService[serviceKey] = map[discovery.AddressType]EndpointZoneInfo{}
Expand Down Expand Up @@ -262,6 +268,13 @@ func (t *TopologyCache) SetNodes(logger klog.Logger, nodes []*v1.Node) {

// HasPopulatedHints checks whether there are populated hints for a given service in the cache.
func (t *TopologyCache) HasPopulatedHints(serviceKey string) bool {
t.lock.Lock()
defer t.lock.Unlock()

return t.hasPopulatedHintsLocked(serviceKey)
}

func (t *TopologyCache) hasPopulatedHintsLocked(serviceKey string) bool {
return t.hintsPopulatedByService.Has(serviceKey)
}

Expand Down
Expand Up @@ -690,6 +690,9 @@ func TestTopologyCacheRace(t *testing.T) {
go func() {
cache.AddHints(logger, sliceInfo)
}()
go func() {
cache.HasPopulatedHints(sliceInfo.ServiceKey)
}()
}

// Test Helpers
Expand Down

0 comments on commit afc6b4e

Please sign in to comment.