mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-15 22:20:51 +00:00
Add cache for load balancer
This commit is contained in:
@@ -136,6 +136,7 @@ type Cloud struct {
|
|||||||
VirtualMachineScaleSetVMsClient VirtualMachineScaleSetVMsClient
|
VirtualMachineScaleSetVMsClient VirtualMachineScaleSetVMsClient
|
||||||
|
|
||||||
vmCache *timedCache
|
vmCache *timedCache
|
||||||
|
lbCache *timedCache
|
||||||
|
|
||||||
*BlobDiskController
|
*BlobDiskController
|
||||||
*ManagedDiskController
|
*ManagedDiskController
|
||||||
@@ -252,6 +253,12 @@ func NewCloud(configReader io.Reader) (cloudprovider.Interface, error) {
|
|||||||
}
|
}
|
||||||
az.vmCache = vmCache
|
az.vmCache = vmCache
|
||||||
|
|
||||||
|
lbCache, err := az.newLBCache()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
az.lbCache = lbCache
|
||||||
|
|
||||||
if err := initDiskControllers(&az); err != nil {
|
if err := initDiskControllers(&az); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -142,7 +142,12 @@ func (az *Cloud) CreateOrUpdateLBWithRetry(lb network.LoadBalancer) error {
|
|||||||
resp := <-respChan
|
resp := <-respChan
|
||||||
err := <-errChan
|
err := <-errChan
|
||||||
glog.V(10).Infof("LoadBalancerClient.CreateOrUpdate(%s): end", *lb.Name)
|
glog.V(10).Infof("LoadBalancerClient.CreateOrUpdate(%s): end", *lb.Name)
|
||||||
return processRetryResponse(resp.Response, err)
|
done, err := processRetryResponse(resp.Response, err)
|
||||||
|
if done && err == nil {
|
||||||
|
// Invalidate the cache right after updating
|
||||||
|
az.lbCache.Delete(*lb.Name)
|
||||||
|
}
|
||||||
|
return done, err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,7 +288,12 @@ func (az *Cloud) DeleteLBWithRetry(lbName string) error {
|
|||||||
respChan, errChan := az.LoadBalancerClient.Delete(az.ResourceGroup, lbName, nil)
|
respChan, errChan := az.LoadBalancerClient.Delete(az.ResourceGroup, lbName, nil)
|
||||||
resp := <-respChan
|
resp := <-respChan
|
||||||
err := <-errChan
|
err := <-errChan
|
||||||
return processRetryResponse(resp, err)
|
done, err := processRetryResponse(resp, err)
|
||||||
|
if done && err == nil {
|
||||||
|
// Invalidate the cache right after deleting
|
||||||
|
az.lbCache.Delete(lbName)
|
||||||
|
}
|
||||||
|
return done, err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -879,6 +879,7 @@ func getTestCloud() (az *Cloud) {
|
|||||||
az.VirtualMachinesClient = newFakeAzureVirtualMachinesClient()
|
az.VirtualMachinesClient = newFakeAzureVirtualMachinesClient()
|
||||||
az.vmSet = newAvailabilitySet(az)
|
az.vmSet = newAvailabilitySet(az)
|
||||||
az.vmCache, _ = az.newVMCache()
|
az.vmCache, _ = az.newVMCache()
|
||||||
|
az.lbCache, _ = az.newLBCache()
|
||||||
|
|
||||||
return az
|
return az
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
vmCacheTTL = time.Minute
|
vmCacheTTL = time.Minute
|
||||||
|
lbCacheTTL = 2 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
// checkExistsFromError inspects an error and returns a true if err is nil,
|
// checkExistsFromError inspects an error and returns a true if err is nil,
|
||||||
@@ -139,19 +140,16 @@ func (az *Cloud) getSubnet(virtualNetworkName string, subnetName string) (subnet
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (az *Cloud) getAzureLoadBalancer(name string) (lb network.LoadBalancer, exists bool, err error) {
|
func (az *Cloud) getAzureLoadBalancer(name string) (lb network.LoadBalancer, exists bool, err error) {
|
||||||
var realErr error
|
cachedLB, err := az.lbCache.Get(name)
|
||||||
|
if err != nil {
|
||||||
lb, err = az.LoadBalancerClient.Get(az.ResourceGroup, name, "")
|
return lb, false, err
|
||||||
exists, realErr = checkResourceExistsFromError(err)
|
|
||||||
if realErr != nil {
|
|
||||||
return lb, false, realErr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !exists {
|
if cachedLB == nil {
|
||||||
return lb, false, nil
|
return lb, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return lb, exists, err
|
return *(cachedLB.(*network.LoadBalancer)), true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (az *Cloud) newVMCache() (*timedCache, error) {
|
func (az *Cloud) newVMCache() (*timedCache, error) {
|
||||||
@@ -171,3 +169,21 @@ func (az *Cloud) newVMCache() (*timedCache, error) {
|
|||||||
|
|
||||||
return newTimedcache(vmCacheTTL, getter)
|
return newTimedcache(vmCacheTTL, getter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (az *Cloud) newLBCache() (*timedCache, error) {
|
||||||
|
getter := func(key string) (interface{}, error) {
|
||||||
|
lb, err := az.LoadBalancerClient.Get(az.ResourceGroup, key, "")
|
||||||
|
exists, realErr := checkResourceExistsFromError(err)
|
||||||
|
if realErr != nil {
|
||||||
|
return nil, realErr
|
||||||
|
}
|
||||||
|
|
||||||
|
if !exists {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &lb, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return newTimedcache(lbCacheTTL, getter)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user