Skip to content

Commit 367ae89

Browse files
authored
Merge pull request #50 from onmetal/fix/lb_del_path
Cached LB Server should be deletable without VNI information
2 parents b3ad248 + 0f9d5e2 commit 367ae89

2 files changed

Lines changed: 14 additions & 25 deletions

File tree

controllers/loadbalancer_controller.go

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,15 @@ func (r *LoadBalancerReconciler) delete(ctx context.Context, log logr.Logger, lb
9595

9696
log.V(1).Info("Getting dpdk loadbalancer")
9797
dpdkLoadBalancer, err := r.DPDK.GetLoadBalancer(ctx, lb.UID)
98+
ip := lb.Spec.IP.Addr.String()
9899
if err != nil {
99100
if !dpdk.IsStatusErrorCode(err, dpdk.NOT_FOUND) {
100101
return ctrl.Result{}, fmt.Errorf("error getting dpdk loadbalancer: %w", err)
101102
}
103+
log.V(1).Info("Remove LoadBalancer server", "ip", ip)
104+
if err := r.MBInternal.RemoveLoadBalancerServer(ip, lb.UID); err != nil {
105+
return ctrl.Result{}, fmt.Errorf("error deleting dpdk loadbalancer from internal cache: %w", err)
106+
}
102107
log.V(1).Info("No dpdk loadbalancer, removing finalizer")
103108
if err := clientutils.PatchRemoveFinalizer(ctx, r.Client, lb, loadBalancerFinalizer); err != nil {
104109
return ctrl.Result{}, fmt.Errorf("error removing finalizer: %w", err)
@@ -109,36 +114,16 @@ func (r *LoadBalancerReconciler) delete(ctx context.Context, log logr.Logger, lb
109114
}
110115

111116
vni := dpdkLoadBalancer.Spec.VNI
112-
ip := lb.Spec.IP.Addr.String()
113117
underlayRoute := dpdkLoadBalancer.Status.UnderlayRoute
114118
log.V(1).Info("Got dpdk LoadBalancer", "VNI", vni, "UnderlayRoute", underlayRoute)
115119

116-
if err != nil {
117-
if !dpdk.IsStatusErrorCode(err, dpdk.NOT_FOUND) {
118-
return ctrl.Result{}, fmt.Errorf("error getting dpdk loadbalancer: %w", err)
119-
}
120-
121-
log.V(1).Info("Remove LoadBalancer server", "vni", vni, "ip", ip)
122-
if err := r.MBInternal.RemoveLoadBalancerServer(vni, ip, lb.UID); err != nil {
123-
return ctrl.Result{}, fmt.Errorf("error deleting dpdk loadbalancer from internal cache: %w", err)
124-
}
125-
126-
log.V(1).Info("No dpdk loadbalancer, removing finalizer")
127-
if err := clientutils.PatchRemoveFinalizer(ctx, r.Client, lb, loadBalancerFinalizer); err != nil {
128-
return ctrl.Result{}, fmt.Errorf("error removing finalizer: %w", err)
129-
}
130-
log.V(1).Info("Removed finalizer")
131-
132-
return ctrl.Result{}, nil
133-
}
134-
135120
log.V(1).Info("Deleting LoadBalancer")
136121
if err := r.deleteLoadBalancer(ctx, log, lb, vni, underlayRoute); err != nil {
137122
return ctrl.Result{}, fmt.Errorf("error deleting underlay route: %w", err)
138123
}
139124
log.V(1).Info("Deleted Loadbalancer")
140125
log.V(1).Info("Remove LoadBalancer server", "vni", vni, "ip", ip)
141-
if err := r.MBInternal.RemoveLoadBalancerServer(vni, ip, lb.UID); err != nil {
126+
if err := r.MBInternal.RemoveLoadBalancerServer(ip, lb.UID); err != nil {
142127
return ctrl.Result{}, fmt.Errorf("error deleting dpdk loadbalancer from internal cache: %w", err)
143128
}
144129

dpdkmetalbond/dpdkmetalbond.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ type MbInternalAccess interface {
3131
AddRoute(vni mb.VNI, dest mb.Destination, hop mb.NextHop) error
3232
RemoveRoute(vni mb.VNI, dest mb.Destination, hop mb.NextHop) error
3333
AddLoadBalancerServer(vni uint32, ip string, uid types.UID) error
34-
RemoveLoadBalancerServer(vni uint32, ip string, uid types.UID) error
34+
RemoveLoadBalancerServer(ip string, uid types.UID) error
3535
IsVniPeered(vni uint32) bool
3636
GetPeerVnis(vni uint32) (sets.Set[uint32], error)
3737
AddVniToPeerVnis(log logr.Logger, vni, peeredVNI uint32) error
@@ -106,9 +106,13 @@ func (c *Client) AddLoadBalancerServer(vni uint32, ip string, uid types.UID) err
106106
return nil
107107
}
108108

109-
func (c *Client) RemoveLoadBalancerServer(vni uint32, ip string, uid types.UID) error {
110-
if _, exists := c.lbServerMap[vni]; exists {
111-
delete(c.lbServerMap[vni], ip)
109+
func (c *Client) RemoveLoadBalancerServer(ip string, uid types.UID) error {
110+
for _, innerMap := range c.lbServerMap {
111+
for keyIp, value := range innerMap {
112+
if ip == keyIp && value == uid {
113+
delete(innerMap, ip)
114+
}
115+
}
112116
}
113117
return nil
114118
}

0 commit comments

Comments
 (0)