Skip to content

Commit

Permalink
Clean instance templates for untracked migs.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtrqq committed Jan 27, 2025
1 parent 5cd491a commit 90f9447
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
19 changes: 19 additions & 0 deletions cluster-autoscaler/cloudprovider/gce/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,25 @@ func (gc *GceCache) InvalidateAllMigInstanceTemplates() {
gc.instanceTemplatesCache = map[GceRef]*gce.InstanceTemplate{}
}

// DropMigInstanceTemplatesNotFor clears the instance template
// cache intended MIGs which are no longer present in the cluster
func (gc *GceCache) DropInstanceTemplatesForMissingMigs(currentMigs []Mig) {
gc.cacheMutex.Lock()
defer gc.cacheMutex.Unlock()

requiredKeys := make(map[GceRef]struct{}, len(currentMigs))
for _, mig := range currentMigs {
requiredKeys[mig.GceRef()] = struct{}{}
}

klog.V(5).Infof("Instance template cache partially invalidated")
for key := range gc.instanceTemplatesCache {
if _, exists := requiredKeys[key]; !exists {
delete(gc.instanceTemplatesCache, key)
}
}
}

// GetMigKubeEnv returns the cached KubeEnv for a mig GceRef
func (gc *GceCache) GetMigKubeEnv(ref GceRef) (KubeEnv, bool) {
gc.cacheMutex.Lock()
Expand Down
9 changes: 8 additions & 1 deletion cluster-autoscaler/cloudprovider/gce/gce_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,14 @@ func (m *gceManagerImpl) Refresh() error {
if m.lastRefresh.Add(refreshInterval).After(time.Now()) {
return nil
}
return m.forceRefresh()

if err := m.forceRefresh(); err != nil {
return err
}

migs := m.migLister.GetMigs()
m.cache.DropInstanceTemplatesForMissingMigs(migs)
return nil
}

func (m *gceManagerImpl) CreateInstances(mig Mig, delta int64) error {
Expand Down
13 changes: 13 additions & 0 deletions cluster-autoscaler/cloudprovider/gce/mig_info_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,8 @@ func TestRegenerateMigInstancesCache(t *testing.T) {
expectedErr error
expectedMigInstances map[GceRef][]GceInstance
expectedInstancesToMig map[GceRef]GceRef
expectedInstanceTemplates map[GceRef]*gce.InstanceTemplate
expectedInstanceTemplateNames map[GceRef]InstanceTemplateName
}{
{
name: "fill empty cache for one mig",
Expand Down Expand Up @@ -698,6 +700,9 @@ func TestRegenerateMigInstancesCache(t *testing.T) {
mig1InstancesRefs[0]: mig1.GceRef(),
mig1InstancesRefs[1]: mig1.GceRef(),
},
expectedInstanceTemplateNames: map[GceRef]InstanceTemplateName{
mig1.GceRef(): InstanceTemplateName{Name: "", Regional: false},
},
},
{
name: "bulkGceMigInstancesListingEnabled - fill empty cache for one mig - number of instances are inconsistent in bulk listing result",
Expand All @@ -724,6 +729,9 @@ func TestRegenerateMigInstancesCache(t *testing.T) {
mig2InstancesRefs[0]: mig2.GceRef(),
mig2InstancesRefs[1]: mig2.GceRef(),
},
expectedInstanceTemplateNames: map[GceRef]InstanceTemplateName{
mig2.GceRef(): InstanceTemplateName{Name: "", Regional: false},
},
},
{
name: "bulkGceMigInstancesListingEnabled - fill empty cache for one mig - all instances in running state",
Expand All @@ -748,6 +756,9 @@ func TestRegenerateMigInstancesCache(t *testing.T) {
mig2InstancesRefs[0]: mig2.GceRef(),
mig2InstancesRefs[1]: mig2.GceRef(),
},
expectedInstanceTemplateNames: map[GceRef]InstanceTemplateName{
mig2.GceRef(): InstanceTemplateName{Name: "", Regional: false},
},
},
}

Expand All @@ -766,6 +777,8 @@ func TestRegenerateMigInstancesCache(t *testing.T) {
if tc.expectedErr == nil {
assert.Equal(t, tc.expectedMigInstances, tc.cache.instances)
assert.Equal(t, tc.expectedInstancesToMig, tc.cache.instancesToMig)
assert.Equal(t, tc.expectedInstanceTemplates, tc.cache.instanceTemplatesCache)
assert.Equal(t, tc.expectedInstanceTemplateNames, tc.cache.instanceTemplateNameCache)
}
})
}
Expand Down

0 comments on commit 90f9447

Please sign in to comment.