Skip to content

Commit c8b8494

Browse files
authored
Optimize route reconciliation logic (#2090)
1 parent 31f4751 commit c8b8494

File tree

4 files changed

+151
-151
lines changed

4 files changed

+151
-151
lines changed

pkg/openstack/instances.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -502,14 +502,6 @@ func mapNodeNameToServerName(nodeName types.NodeName) string {
502502
return string(nodeName)
503503
}
504504

505-
// mapServerToNodeName maps an OpenStack Server to a k8s NodeName
506-
func mapServerToNodeName(server *servers.Server) types.NodeName {
507-
// Node names are always lowercase, and (at least)
508-
// routecontroller does case-sensitive string comparisons
509-
// assuming this
510-
return types.NodeName(strings.ToLower(server.Name))
511-
}
512-
513505
func readInstanceID(searchOrder string) (string, error) {
514506
// First, try to get data from metadata service because local
515507
// data might be changed by accident
@@ -699,35 +691,6 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName,
699691
return nodeAddresses(&srv.Server, interfaces, networkingOpts)
700692
}
701693

702-
func getAddressByName(client *gophercloud.ServiceClient, name types.NodeName, needIPv6 bool, networkingOpts NetworkingOpts) (string, error) {
703-
if needIPv6 && networkingOpts.IPv6SupportDisabled {
704-
return "", errors.ErrIPv6SupportDisabled
705-
}
706-
707-
addrs, err := getAddressesByName(client, name, networkingOpts)
708-
if err != nil {
709-
return "", err
710-
} else if len(addrs) == 0 {
711-
return "", errors.ErrNoAddressFound
712-
}
713-
714-
for _, addr := range addrs {
715-
isIPv6 := net.ParseIP(addr.Address).To4() == nil
716-
if (addr.Type == v1.NodeInternalIP) && (isIPv6 == needIPv6) {
717-
return addr.Address, nil
718-
}
719-
}
720-
721-
for _, addr := range addrs {
722-
isIPv6 := net.ParseIP(addr.Address).To4() == nil
723-
if (addr.Type == v1.NodeExternalIP) && (isIPv6 == needIPv6) {
724-
return addr.Address, nil
725-
}
726-
}
727-
// It should never return an address from a different IP Address family than the one needed
728-
return "", errors.ErrNoAddressFound
729-
}
730-
731694
// getAttachedInterfacesByID returns the node interfaces of the specified instance.
732695
func getAttachedInterfacesByID(client *gophercloud.ServiceClient, serviceID string) ([]attachinterfaces.Interface, error) {
733696
var interfaces []attachinterfaces.Interface

pkg/openstack/openstack.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ import (
3434
cloudprovider "k8s.io/cloud-provider"
3535
"k8s.io/klog/v2"
3636

37+
"k8s.io/client-go/informers"
38+
coreinformers "k8s.io/client-go/informers/core/v1"
3739
"k8s.io/cloud-provider-openstack/pkg/client"
3840
"k8s.io/cloud-provider-openstack/pkg/metrics"
3941
"k8s.io/cloud-provider-openstack/pkg/util"
@@ -146,9 +148,11 @@ type OpenStack struct {
146148
metadataOpts metadata.Opts
147149
networkingOpts NetworkingOpts
148150
// InstanceID of the server where this OpenStack object is instantiated.
149-
localInstanceID string
150-
kclient kubernetes.Interface
151-
useV1Instances bool // TODO: v1 instance apis can be deleted after the v2 is verified enough
151+
localInstanceID string
152+
kclient kubernetes.Interface
153+
useV1Instances bool // TODO: v1 instance apis can be deleted after the v2 is verified enough
154+
nodeInformer coreinformers.NodeInformer
155+
nodeInformerHasSynced func() bool
152156
}
153157

154158
// Config is used to read and store information from the cloud configuration file
@@ -455,13 +459,7 @@ func (os *OpenStack) Routes() (cloudprovider.Routes, bool) {
455459
return nil, false
456460
}
457461

458-
compute, err := client.NewComputeV2(os.provider, os.epOpts)
459-
if err != nil {
460-
klog.Errorf("Failed to create an OpenStack Compute client: %v", err)
461-
return nil, false
462-
}
463-
464-
r, err := NewRoutes(compute, network, os.routeOpts, os.networkingOpts)
462+
r, err := NewRoutes(os, network)
465463
if err != nil {
466464
klog.Warningf("Error initialising Routes support: %v", err)
467465
return nil, false
@@ -470,3 +468,11 @@ func (os *OpenStack) Routes() (cloudprovider.Routes, bool) {
470468
klog.V(1).Info("Claiming to support Routes")
471469
return r, true
472470
}
471+
472+
// SetInformers implements InformerUser interface by setting up informer-fed caches to
473+
// leverage Kubernetes API for caching
474+
func (os *OpenStack) SetInformers(informerFactory informers.SharedInformerFactory) {
475+
klog.V(1).Infof("Setting up informers for Cloud")
476+
os.nodeInformer = informerFactory.Core().V1().Nodes()
477+
os.nodeInformerHasSynced = os.nodeInformer.Informer().HasSynced
478+
}

0 commit comments

Comments
 (0)