Skip to content

Commit 9ea7714

Browse files
authored
Merge pull request kubernetes#2908 from nilo19/fix-vm-cache
Provider/Azure: Fix the bug of vm cache that multiple agentpools share one cache.
2 parents e753d97 + bffbd37 commit 9ea7714

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

cluster-autoscaler/cloudprovider/azure/azure_agent_pool.go

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ const (
4444
)
4545

4646
var virtualMachinesStatusCache struct {
47-
lastRefresh time.Time
47+
lastRefresh map[string]time.Time
4848
mutex sync.Mutex
49-
virtualMachines []compute.VirtualMachine
49+
virtualMachines map[string][]compute.VirtualMachine
5050
}
5151

5252
// AgentPool implements NodeGroup interface for agent pools deployed by aks-engine.
@@ -133,22 +133,36 @@ func (as *AgentPool) MaxSize() int {
133133
func (as *AgentPool) getVirtualMachinesFromCache() ([]compute.VirtualMachine, error) {
134134
virtualMachinesStatusCache.mutex.Lock()
135135
defer virtualMachinesStatusCache.mutex.Unlock()
136+
klog.V(4).Infof("getVirtualMachinesFromCache: starts for %+v", as)
136137

137-
if virtualMachinesStatusCache.lastRefresh.Add(vmInstancesRefreshPeriod).After(time.Now()) {
138-
return virtualMachinesStatusCache.virtualMachines, nil
138+
if virtualMachinesStatusCache.virtualMachines == nil {
139+
klog.V(4).Infof("getVirtualMachinesFromCache: initialize vm cache")
140+
virtualMachinesStatusCache.virtualMachines = make(map[string][]compute.VirtualMachine)
141+
}
142+
if virtualMachinesStatusCache.lastRefresh == nil {
143+
klog.V(4).Infof("getVirtualMachinesFromCache: initialize last refresh time cache")
144+
virtualMachinesStatusCache.lastRefresh = make(map[string]time.Time)
139145
}
140146

147+
if virtualMachinesStatusCache.lastRefresh[as.Id()].Add(vmInstancesRefreshPeriod).After(time.Now()) {
148+
klog.V(4).Infof("getVirtualMachinesFromCache: get vms from cache")
149+
return virtualMachinesStatusCache.virtualMachines[as.Id()], nil
150+
}
151+
klog.V(4).Infof("getVirtualMachinesFromCache: get vms from API")
141152
vms, err := as.GetVirtualMachines()
153+
klog.V(4).Infof("getVirtualMachinesFromCache: got vms from API %+v", vms)
154+
142155
if err != nil {
143156
if isAzureRequestsThrottled(err) {
144157
klog.Warningf("getAllVirtualMachines: throttling with message %v, would return the cached vms", err)
145-
return virtualMachinesStatusCache.virtualMachines, nil
158+
return virtualMachinesStatusCache.virtualMachines[as.Id()], nil
146159
}
147160

148161
return []compute.VirtualMachine{}, err
149162
}
150-
virtualMachinesStatusCache.virtualMachines = vms
151-
virtualMachinesStatusCache.lastRefresh = time.Now()
163+
164+
virtualMachinesStatusCache.virtualMachines[as.Id()] = vms
165+
virtualMachinesStatusCache.lastRefresh[as.Id()] = time.Now()
152166

153167
return vms, err
154168
}

cluster-autoscaler/cloudprovider/azure/azure_cache.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,12 @@ func (m *asgCache) regenerate() error {
166166
newCache := make(map[azureRef]cloudprovider.NodeGroup)
167167

168168
for _, nsg := range m.registeredAsgs {
169+
klog.V(6).Infof("regenerate: finding nodes for nsg %+v", nsg)
169170
instances, err := nsg.Nodes()
170171
if err != nil {
171172
return err
172173
}
174+
klog.V(6).Infof("regenerate: found nodes for nsg %v: %+v", nsg, instances)
173175

174176
for _, instance := range instances {
175177
ref := azureRef{Name: instance.Id}

0 commit comments

Comments
 (0)