diff --git a/go-controller/pkg/libovsdb/libovsdb.go b/go-controller/pkg/libovsdb/libovsdb.go index a7c7cfb6ee..7d168dbae7 100644 --- a/go-controller/pkg/libovsdb/libovsdb.go +++ b/go-controller/pkg/libovsdb/libovsdb.go @@ -146,6 +146,11 @@ func NewNBClientWithConfig(cfg config.OvnAuthConfig, promRegistry prometheus.Reg enableMetricsOption := client.WithMetricsRegistryNamespaceSubsystem(promRegistry, "ovnkube", "master_libovsdb") + // define client indexes for objects that are using dbIDs + dbModel.SetIndexes(map[string][]model.ClientIndex{ + "Load_Balancer": {{Columns: []model.ColumnKey{{Column: "name"}}}}, + }) + c, err := newClient(cfg, dbModel, stopCh, enableMetricsOption) if err != nil { return nil, err diff --git a/go-controller/pkg/libovsdbops/loadbalancer.go b/go-controller/pkg/libovsdbops/loadbalancer.go index a6b909b4cc..5cc074c9fd 100644 --- a/go-controller/pkg/libovsdbops/loadbalancer.go +++ b/go-controller/pkg/libovsdbops/loadbalancer.go @@ -57,25 +57,6 @@ func BuildLoadBalancer(name string, protocol nbdb.LoadBalancerProtocol, vips, op } } -// CreateLoadBalancersOps creates the provided load balancers returning the -// corresponding ops -func CreateLoadBalancersOps(nbClient libovsdbclient.Client, ops []libovsdb.Operation, lbs ...*nbdb.LoadBalancer) ([]libovsdb.Operation, error) { - opModels := make([]operationModel, 0, len(lbs)) - for i := range lbs { - lb := lbs[i] - opModel := operationModel{ - Model: lb, - OnModelUpdates: onModelUpdatesNone(), - ErrNotFound: false, - BulkOp: false, - } - opModels = append(opModels, opModel) - } - - modelClient := newModelClient(nbClient) - return modelClient.CreateOrUpdateOps(ops, opModels...) -} - // CreateOrUpdateLoadBalancersOps creates or updates the provided load balancers // returning the corresponding ops func CreateOrUpdateLoadBalancersOps(nbClient libovsdbclient.Client, ops []libovsdb.Operation, lbs ...*nbdb.LoadBalancer) ([]libovsdb.Operation, error) { @@ -85,7 +66,6 @@ func CreateOrUpdateLoadBalancersOps(nbClient libovsdbclient.Client, ops []libovs lb := lbs[i] opModel := operationModel{ Model: lb, - ModelPredicate: func(item *nbdb.LoadBalancer) bool { return item.Name == lb.Name }, OnModelUpdates: getNonZeroLoadBalancerMutableFields(lb), ErrNotFound: false, BulkOp: false, @@ -107,7 +87,6 @@ func RemoveLoadBalancerVipsOps(nbClient libovsdbclient.Client, ops []libovsdb.Op } opModel := operationModel{ Model: lb, - ModelPredicate: func(item *nbdb.LoadBalancer) bool { return item.Name == lb.Name }, OnModelMutations: []interface{}{&lb.Vips}, ErrNotFound: true, BulkOp: false, @@ -127,11 +106,9 @@ func DeleteLoadBalancersOps(nbClient libovsdbclient.Client, ops []libovsdb.Opera // can't use i in the predicate, for loop replaces it in-memory lb := lbs[i] opModel := operationModel{ - Model: lb, - // TODO: remove UUID match from predicate once model_client prioritizes indexed search over predicate - ModelPredicate: func(item *nbdb.LoadBalancer) bool { return item.UUID == lb.UUID || item.Name == lb.Name }, - ErrNotFound: false, - BulkOp: false, + Model: lb, + ErrNotFound: false, + BulkOp: false, } opModels = append(opModels, opModel) } diff --git a/go-controller/pkg/libovsdbops/model.go b/go-controller/pkg/libovsdbops/model.go index a7d3e27eb0..d2c116d85f 100644 --- a/go-controller/pkg/libovsdbops/model.go +++ b/go-controller/pkg/libovsdbops/model.go @@ -152,6 +152,8 @@ func copyIndexes(model model.Model) model.Model { case *nbdb.LoadBalancer: return &nbdb.LoadBalancer{ UUID: t.UUID, + // client index + Name: t.Name, } case *nbdb.LoadBalancerGroup: return &nbdb.LoadBalancerGroup{ @@ -362,9 +364,6 @@ func buildFailOnDuplicateOps(c client.Client, m model.Model) ([]ovsdb.Operation, var field interface{} var value string switch t := m.(type) { - case *nbdb.LoadBalancer: - field = &t.Name - value = t.Name case *nbdb.LogicalRouter: field = &t.Name value = t.Name diff --git a/go-controller/pkg/ovn/loadbalancer/loadbalancer.go b/go-controller/pkg/ovn/loadbalancer/loadbalancer.go index 7b8778f84b..07ed45beba 100644 --- a/go-controller/pkg/ovn/loadbalancer/loadbalancer.go +++ b/go-controller/pkg/ovn/loadbalancer/loadbalancer.go @@ -55,8 +55,6 @@ func EnsureLBs(nbClient libovsdbclient.Client, service *corev1.Service, LBs []LB } lbs := make([]*nbdb.LoadBalancer, 0, len(LBs)) - existinglbs := make([]*nbdb.LoadBalancer, 0, len(LBs)) - newlbs := make([]*nbdb.LoadBalancer, 0, len(LBs)) addLBsToSwitch := map[string][]*nbdb.LoadBalancer{} removeLBsFromSwitch := map[string][]*nbdb.LoadBalancer{} addLBsToRouter := map[string][]*nbdb.LoadBalancer{} @@ -74,13 +72,10 @@ func EnsureLBs(nbClient libovsdbclient.Client, service *corev1.Service, LBs []LB existingGroups := sets.String{} if existingLB != nil { blb.UUID = existingLB.UUID - existinglbs = append(existinglbs, blb) toDelete.Delete(existingLB.UUID) existingRouters = existingLB.Routers existingSwitches = existingLB.Switches existingGroups = existingLB.Groups - } else { - newlbs = append(newlbs, blb) } wantRouters := sets.NewString(lb.Routers...) wantSwitches := sets.NewString(lb.Switches...) @@ -93,12 +88,7 @@ func EnsureLBs(nbClient libovsdbclient.Client, service *corev1.Service, LBs []LB mapLBDifferenceByKey(removeLBsFromGroups, existingGroups, wantGroups, blb) } - ops, err := libovsdbops.CreateOrUpdateLoadBalancersOps(nbClient, nil, existinglbs...) - if err != nil { - return err - } - - ops, err = libovsdbops.CreateLoadBalancersOps(nbClient, ops, newlbs...) + ops, err := libovsdbops.CreateOrUpdateLoadBalancersOps(nbClient, nil, lbs...) if err != nil { return err }