Skip to content

Commit

Permalink
libovsdb: improve performance for listing logical router policies
Browse files Browse the repository at this point in the history
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
  • Loading branch information
zhangzujian committed Oct 12, 2024
1 parent 1251e78 commit 4576044
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions pkg/ovs/ovn-nb-logical_router_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import (
"maps"
"slices"

"github.com/ovn-org/libovsdb/client"
"github.com/ovn-org/libovsdb/model"
"github.com/ovn-org/libovsdb/ovsdb"
"github.com/scylladb/go-set/strset"
"k8s.io/klog/v2"
"k8s.io/utils/ptr"
"k8s.io/utils/set"

ovsclient "github.com/kubeovn/kube-ovn/pkg/ovsdb/client"
"github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb"
Expand Down Expand Up @@ -348,20 +348,25 @@ func (c *OVNNbClient) listLogicalRouterPoliciesByFilter(lrName string, filter fu
return nil, err
}

policyList := make([]*ovnnb.LogicalRouterPolicy, 0, len(lr.Policies))
for _, uuid := range lr.Policies {
policy, err := c.GetLogicalRouterPolicyByUUID(uuid)
if err != nil {
if errors.Is(err, client.ErrNotFound) {
continue
}
klog.Error(err)
return nil, err
if filter == nil {
filter = func(_ *ovnnb.LogicalRouterPolicy) bool {
return true
}
if filter == nil || filter(policy) {
policyList = append(policyList, policy)
}

policyList := make([]*ovnnb.LogicalRouterPolicy, 0, len(lr.Policies))
if err = c.WhereCache(filter).List(context.Background(), &policyList); err != nil {
klog.Error(err)
return nil, err
}

uuidSet := set.New(lr.Policies...)
result := make([]*ovnnb.LogicalRouterPolicy, 0, min(len(lr.Policies), len(policyList)))
for _, policy := range policyList {
if uuidSet.Has(policy.UUID) {
result = append(result, policy)
}
}

return policyList, nil
return result, nil
}

0 comments on commit 4576044

Please sign in to comment.