Merge pull request #118189 from Miciah/118188-TopologyAwareHints-take-lock-in-HasPopulatedHints

TopologyAwareHints: Take lock in HasPopulatedHints
This commit is contained in:
Kubernetes Prow Robot 2023-08-15 15:16:57 -07:00 committed by GitHub
commit 10a252aa54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 2 deletions

View File

@ -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 {
@ -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{}
@ -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)
}

View File

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