Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
nilo19 committed Aug 17, 2023
1 parent f50daac commit 745c706
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 15 deletions.
1 change: 1 addition & 0 deletions pkg/provider/azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ type Cloud struct {
multipleStandardLoadBalancersActiveServicesLock sync.Mutex
multipleStandardLoadBalancersActiveNodesLock sync.Mutex
localServiceNameToServiceInfoMap sync.Map
endpointSlicesCache sync.Map
}

// NewCloud returns a Cloud with initialized clients
Expand Down
75 changes: 60 additions & 15 deletions pkg/provider/azure_local_services.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,11 @@ func (az *Cloud) setUpEndpointSlicesInformer(informerFactory informers.SharedInf
endpointSlicesInformer := informerFactory.Discovery().V1().EndpointSlices().Informer()
_, _ = endpointSlicesInformer.AddEventHandler(
cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
es := obj.(*discovery_v1.EndpointSlice)
az.endpointSlicesCache.Store(strings.ToLower(es.Name), es)
klog.Infof("test: add endpoint slice %s", es.Name)
},
UpdateFunc: func(oldObj, newObj interface{}) {
previousES := oldObj.(*discovery_v1.EndpointSlice)
newES := newObj.(*discovery_v1.EndpointSlice)
Expand All @@ -301,6 +306,7 @@ func (az *Cloud) setUpEndpointSlicesInformer(informerFactory informers.SharedInf
}

klog.V(4).Infof("Detecting EndpointSlice %s/%s update", newES.Namespace, newES.Name)
az.endpointSlicesCache.Store(strings.ToLower(newES.Name), newES)

key := strings.ToLower(fmt.Sprintf("%s/%s", newES.Namespace, svcName))
si, found := az.getLocalServiceInfo(key)
Expand Down Expand Up @@ -357,6 +363,11 @@ func (az *Cloud) setUpEndpointSlicesInformer(informerFactory informers.SharedInf
}
}
},
DeleteFunc: func(obj interface{}) {
es := obj.(*discovery_v1.EndpointSlice)
az.endpointSlicesCache.Delete(strings.ToLower(es.Name))
klog.Infof("test: delete endpoint slice %s", es.Name)
},
})
}

Expand Down Expand Up @@ -461,25 +472,59 @@ func newServiceInfo(ipFamily, lbName string) *serviceInfo {

// getLocalServiceEndpointsNodeNames gets the node names that host all endpoints of the local service.
func (az *Cloud) getLocalServiceEndpointsNodeNames(service *v1.Service) (sets.Set[string], error) {
eps, err := az.KubeClient.DiscoveryV1().EndpointSlices(service.Namespace).List(context.Background(), metav1.ListOptions{})
if err != nil {
klog.Errorf("Failed to list EndpointSlices for service %s/%s: %s", service.Namespace, service.Name, err.Error())
return nil, err
}

for _, endpointSlice := range eps.Items {
endpointSlice := endpointSlice
if strings.EqualFold(getServiceNameOfEndpointSlice(&endpointSlice), service.Name) {
var nodeNames []string
for _, ep := range endpointSlice.Endpoints {
klog.V(4).Infof("EndpointSlice %s/%s has endpoint %s on node %s", endpointSlice.Namespace, endpointSlice.Name, ep.Addresses, pointer.StringDeref(ep.NodeName, ""))
nodeNames = append(nodeNames, pointer.StringDeref(ep.NodeName, ""))
var ep *discovery_v1.EndpointSlice
az.endpointSlicesCache.Range(func(key, value interface{}) bool {
endpointSlice := value.(*discovery_v1.EndpointSlice)
if strings.EqualFold(getServiceNameOfEndpointSlice(endpointSlice), service.Name) {
ep = endpointSlice
return false
}
return true
})
if ep == nil {
klog.Infof("EndpointSlice for service %s/%s not found, try to list EndpointSlices", service.Namespace, service.Name)
eps, err := az.KubeClient.DiscoveryV1().EndpointSlices(service.Namespace).List(context.Background(), metav1.ListOptions{})
if err != nil {
klog.Errorf("Failed to list EndpointSlices for service %s/%s: %s", service.Namespace, service.Name, err.Error())
return nil, err
}
for _, endpointSlice := range eps.Items {
endpointSlice := endpointSlice
if strings.EqualFold(getServiceNameOfEndpointSlice(&endpointSlice), service.Name) {
ep = &endpointSlice
break
}
return sets.New[string](nodeNames...), nil
}
}
if ep == nil {
return nil, fmt.Errorf("failed to find EndpointSlice for service %s/%s", service.Namespace, service.Name)
}

return nil, nil
klog.Infof("test: found endpointslice %+v", *ep)
var nodeNames []string
for _, endpoint := range ep.Endpoints {
klog.V(4).Infof("EndpointSlice %s/%s has endpoint %s on node %s", ep.Namespace, ep.Name, endpoint.Addresses, pointer.StringDeref(endpoint.NodeName, ""))
nodeNames = append(nodeNames, pointer.StringDeref(endpoint.NodeName, ""))
}
//eps, err := az.KubeClient.DiscoveryV1().EndpointSlices(service.Namespace).List(context.Background(), metav1.ListOptions{})
//if err != nil {
// klog.Errorf("Failed to list EndpointSlices for service %s/%s: %s", service.Namespace, service.Name, err.Error())
// return nil, err
//}
//
//for _, endpointSlice := range eps.Items {
// endpointSlice := endpointSlice
// if strings.EqualFold(getServiceNameOfEndpointSlice(&endpointSlice), service.Name) {
// var nodeNames []string
// for _, ep := range endpointSlice.Endpoints {
// klog.V(4).Infof("EndpointSlice %s/%s has endpoint %s on node %s", endpointSlice.Namespace, endpointSlice.Name, ep.Addresses, pointer.StringDeref(ep.NodeName, ""))
// nodeNames = append(nodeNames, pointer.StringDeref(ep.NodeName, ""))
// }
// return sets.New[string](nodeNames...), nil
// }
//}

return sets.New[string](nodeNames...), nil
}

// cleanupLocalServiceBackendPool cleans up the backend pool of
Expand Down

0 comments on commit 745c706

Please sign in to comment.