Avoid expesive pointer copy in capi nodegroup

This commit is contained in:
enxebre 2024-05-07 13:40:30 +02:00
parent 3fd892a37b
commit 31fdc397fd
4 changed files with 15 additions and 19 deletions

View File

@ -672,13 +672,13 @@ func (c *machineController) findScalableResourceProviderIDs(scalableResource *un
return providerIDs, nil
}
func (c *machineController) nodeGroups() ([]*nodegroup, error) {
func (c *machineController) nodeGroups() ([]cloudprovider.NodeGroup, error) {
scalableResources, err := c.listScalableResources()
if err != nil {
return nil, err
}
nodegroups := make([]*nodegroup, 0, len(scalableResources))
nodegroups := make([]cloudprovider.NodeGroup, 0, len(scalableResources))
for _, r := range scalableResources {
ng, err := newNodeGroupFromScalableResource(c, r)
@ -688,6 +688,7 @@ func (c *machineController) nodeGroups() ([]*nodegroup, error) {
if ng != nil {
nodegroups = append(nodegroups, ng)
klog.V(4).Infof("discovered node group: %s", ng.Debug())
}
}
return nodegroups, nil

View File

@ -2113,7 +2113,7 @@ func Test_machineController_nodeGroups(t *testing.T) {
// Sort results as order is not guaranteed.
sort.Slice(got, func(i, j int) bool {
return got[i].scalableResource.Name() < got[j].scalableResource.Name()
return got[i].(*nodegroup).scalableResource.Name() < got[j].(*nodegroup).scalableResource.Name()
})
sort.Slice(tc.expectedScalableResources, func(i, j int) bool {
return tc.expectedScalableResources[i].GetName() < tc.expectedScalableResources[j].GetName()
@ -2121,7 +2121,7 @@ func Test_machineController_nodeGroups(t *testing.T) {
if err == nil {
for i := range got {
if !reflect.DeepEqual(got[i].scalableResource.unstructured, tc.expectedScalableResources[i]) {
if !reflect.DeepEqual(got[i].(*nodegroup).scalableResource.unstructured, tc.expectedScalableResources[i]) {
t.Errorf("nodeGroups() got = %v, expected to consist of nodegroups for scalable resources: %v", got, tc.expectedScalableResources)
}
}

View File

@ -261,7 +261,7 @@ func TestNodeGroupIncreaseSizeErrors(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
currReplicas, err := ng.TargetSize()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -348,7 +348,7 @@ func TestNodeGroupIncreaseSize(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
currReplicas, err := ng.TargetSize()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -427,7 +427,7 @@ func TestNodeGroupDecreaseTargetSize(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
gvr, err := ng.scalableResource.GroupVersionResource()
if err != nil {
@ -596,7 +596,7 @@ func TestNodeGroupDecreaseSizeErrors(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
currReplicas, err := ng.TargetSize()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -676,7 +676,7 @@ func TestNodeGroupDeleteNodes(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
nodeNames, err := ng.Nodes()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -889,7 +889,7 @@ func TestNodeGroupDeleteNodesTwice(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
nodeNames, err := ng.Nodes()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -961,7 +961,7 @@ func TestNodeGroupDeleteNodesTwice(t *testing.T) {
t.Fatalf("unexpected error: %v", err)
}
ng = nodegroups[0]
ng = nodegroups[0].(*nodegroup)
// Check the nodegroup is at the expected size
actualSize, err := ng.TargetSize()
@ -1066,7 +1066,7 @@ func TestNodeGroupDeleteNodesSequential(t *testing.T) {
t.Fatalf("expected 1 nodegroup, got %d", l)
}
ng := nodegroups[0]
ng := nodegroups[0].(*nodegroup)
nodeNames, err := ng.Nodes()
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -1132,7 +1132,7 @@ func TestNodeGroupDeleteNodesSequential(t *testing.T) {
t.Fatalf("unexpected error: %v", err)
}
ng = nodegroups[0]
ng = nodegroups[0].(*nodegroup)
// Check the nodegroup is at the expected size
actualSize, err := ng.scalableResource.Replicas()

View File

@ -59,17 +59,12 @@ func (p *provider) GetResourceLimiter() (*cloudprovider.ResourceLimiter, error)
}
func (p *provider) NodeGroups() []cloudprovider.NodeGroup {
var result []cloudprovider.NodeGroup
nodegroups, err := p.controller.nodeGroups()
if err != nil {
klog.Errorf("error getting node groups: %v", err)
return nil
}
for _, ng := range nodegroups {
klog.V(4).Infof("discovered node group: %s", ng.Debug())
result = append(result, ng)
}
return result
return nodegroups
}
func (p *provider) NodeGroupForNode(node *corev1.Node) (cloudprovider.NodeGroup, error) {