Skip to content

Commit

Permalink
remove vpc from cache if it doesn't exist
Browse files Browse the repository at this point in the history
  • Loading branch information
rahulait committed Nov 13, 2024
1 parent 913f2b6 commit 0637f31
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 18 deletions.
16 changes: 5 additions & 11 deletions cloud/linode/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,22 +85,16 @@ func (nc *nodeCache) refreshInstances(ctx context.Context, client client.Client)
if vpcName == "" {
continue
}
vpcID, err := GetVPCID(client, strings.TrimSpace(vpcName))
resp, err := GetVPCIPAddresses(ctx, client, vpcName)
if err != nil {
klog.Errorf("failed updating instances cache for VPC %s. Error: %s", vpcName, err.Error())
continue
}
if vpcID != 0 {
resp, err := client.ListVPCIPAddresses(ctx, vpcID, linodego.NewListOptions(0, ""))
if err != nil {
return err
}
for _, r := range resp {
if r.Address == nil {
continue
}
vpcNodes[r.LinodeID] = append(vpcNodes[r.LinodeID], *r.Address)
for _, r := range resp {
if r.Address == nil {
continue
}
vpcNodes[r.LinodeID] = append(vpcNodes[r.LinodeID], *r.Address)
}
}

Expand Down
6 changes: 1 addition & 5 deletions cloud/linode/route_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,11 @@ func (rc *routeCache) refreshRoutes(ctx context.Context, client client.Client) e
if vpcName == "" {
continue
}
vpcID, err := GetVPCID(client, strings.TrimSpace(vpcName))
resp, err := GetVPCIPAddresses(ctx, client, vpcName)
if err != nil {
klog.Errorf("failed updating cache for VPC %s. Error: %s", vpcName, err.Error())
continue
}
resp, err := client.ListVPCIPAddresses(ctx, vpcID, linodego.NewListOptions(0, ""))
if err != nil {
return err
}
for _, r := range resp {
vpcNodes[r.LinodeID] = append(vpcNodes[r.LinodeID], r)
}
Expand Down
25 changes: 23 additions & 2 deletions cloud/linode/vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ package linode
import (
"context"
"fmt"
"strings"
"sync"

"github.com/linode/linode-cloud-controller-manager/cloud/linode/client"
"github.com/linode/linodego"
"k8s.io/klog/v2"
)

var (
Expand Down Expand Up @@ -35,15 +37,15 @@ func GetAllVPCIDs() []int {
}

// GetVPCID returns the VPC id of given VPC label
func GetVPCID(client client.Client, vpcName string) (int, error) {
func GetVPCID(ctx context.Context, client client.Client, vpcName string) (int, error) {
Mu.Lock()
defer Mu.Unlock()

// check if map contains vpc id for given label
if vpcid, ok := vpcIDs[vpcName]; ok {
return vpcid, nil
}
vpcs, err := client.ListVPCs(context.TODO(), &linodego.ListOptions{})
vpcs, err := client.ListVPCs(ctx, &linodego.ListOptions{})
if err != nil {
return 0, err
}
Expand All @@ -55,3 +57,22 @@ func GetVPCID(client client.Client, vpcName string) (int, error) {
}
return 0, vpcLookupError{vpcName}
}

// GetVPCIPAddresses returns vpc ip's for given VPC label
func GetVPCIPAddresses(ctx context.Context, client client.Client, vpcName string) ([]linodego.VPCIP, error) {
vpcID, err := GetVPCID(ctx, client, strings.TrimSpace(vpcName))
if err != nil {
return nil, err
}
resp, err := client.ListVPCIPAddresses(ctx, vpcID, linodego.NewListOptions(0, ""))
if err != nil {
if strings.Contains(err.Error(), "Not found") {
Mu.Lock()
defer Mu.Unlock()
klog.Errorf("vpc %s not found. Deleting entry from cache", vpcName)
delete(vpcIDs, vpcName)
}
return nil, err
}
return resp, nil
}

0 comments on commit 0637f31

Please sign in to comment.