Skip to content

Commit

Permalink
libovsdb: various bug fixes (#2998)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangzujian committed Jun 30, 2023
1 parent af04530 commit d5462b1
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 39 deletions.
8 changes: 4 additions & 4 deletions mocks/pkg/ovs/interface.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions pkg/controller/node.go
Expand Up @@ -1061,15 +1061,15 @@ func (c *Controller) getPolicyRouteParas(cidr string, priority int) (*strset.Set
ipSuffix = "ip6"
}
match := fmt.Sprintf("%s.src == %s", ipSuffix, cidr)
policy, err := c.ovnClient.GetLogicalRouterPolicy(c.config.ClusterRouter, priority, match, true)
policyList, err := c.ovnClient.GetLogicalRouterPolicy(c.config.ClusterRouter, priority, match, true)
if err != nil {
klog.Errorf("failed to get logical router policy: %v", err)
return nil, nil, err
}
if policy == nil {
return nil, nil, err
if len(policyList) == 0 {
return strset.New(), map[string]string{}, nil
}
return strset.New(policy.Nexthops...), policy.ExternalIDs, nil
return strset.New(policyList[0].Nexthops...), policyList[0].ExternalIDs, nil
}

func (c *Controller) checkPolicyRouteExistForNode(nodeName, cidr, nexthop string, priority int) (bool, error) {
Expand Down
2 changes: 1 addition & 1 deletion pkg/ovs/interface.go
Expand Up @@ -138,7 +138,7 @@ type LogicalRouterPolicy interface {
DeleteLogicalRouterPolicyByNexthop(lrName string, priority int, nexthop string) error
ClearLogicalRouterPolicy(lrName string) error
ListLogicalRouterPolicies(lrName string, priority int, externalIDs map[string]string) ([]*ovnnb.LogicalRouterPolicy, error)
GetLogicalRouterPolicy(lrName string, priority int, match string, ignoreNotFound bool) (*ovnnb.LogicalRouterPolicy, error)
GetLogicalRouterPolicy(lrName string, priority int, match string, ignoreNotFound bool) ([]*ovnnb.LogicalRouterPolicy, error)
}

type NAT interface {
Expand Down
23 changes: 8 additions & 15 deletions pkg/ovs/ovn-nb-logical_router_policy.go
Expand Up @@ -87,18 +87,15 @@ func (c *ovnClient) CreateLogicalRouterPolicies(lrName string, policies ...*ovnn

// DeleteLogicalRouterPolicy delete policy from logical router
func (c *ovnClient) DeleteLogicalRouterPolicy(lrName string, priority int, match string) error {
policy, err := c.GetLogicalRouterPolicy(lrName, priority, match, true)
policyList, err := c.GetLogicalRouterPolicy(lrName, priority, match, true)
if err != nil {
return err
}

// not found, skip
if policy == nil {
return nil
}

if err := c.DeleteLogicalRouterPolicyByUUID(lrName, policy.UUID); err != nil {
return err
for _, p := range policyList {
if err := c.DeleteLogicalRouterPolicyByUUID(lrName, p.UUID); err != nil {
return err
}
}

return nil
Expand Down Expand Up @@ -182,7 +179,7 @@ func (c *ovnClient) ClearLogicalRouterPolicy(lrName string) error {

// GetLogicalRouterPolicy get logical router policy by priority and match,
// be consistent with ovn-nbctl which priority and match determine one policy in logical router
func (c *ovnClient) GetLogicalRouterPolicy(lrName string, priority int, match string, ignoreNotFound bool) (*ovnnb.LogicalRouterPolicy, error) {
func (c *ovnClient) GetLogicalRouterPolicy(lrName string, priority int, match string, ignoreNotFound bool) ([]*ovnnb.LogicalRouterPolicy, error) {
// this is necessary because may exist same priority and match policy in different logical router
if len(lrName) == 0 {
return nil, fmt.Errorf("the logical router name is required")
Expand All @@ -204,11 +201,7 @@ func (c *ovnClient) GetLogicalRouterPolicy(lrName string, priority int, match st
return nil, fmt.Errorf("not found policy priority %d match %s in logical router %s", priority, match, lrName)
}

if len(policyList) > 1 {
return nil, fmt.Errorf("more than one policy with same priority %d match %s in logical router %s", priority, match, lrName)
}

return policyList[0], nil
return policyList, nil
}

// GetLogicalRouterPolicyByUUID get logical router policy by UUID
Expand All @@ -218,7 +211,7 @@ func (c *ovnClient) GetLogicalRouterPolicyByUUID(uuid string) (*ovnnb.LogicalRou

policy := &ovnnb.LogicalRouterPolicy{UUID: uuid}
if err := c.Get(ctx, policy); err != nil {
return nil, fmt.Errorf("get logical router policy by UUID %s: %v", uuid, err)
return nil, err
}

return policy, nil
Expand Down
29 changes: 16 additions & 13 deletions pkg/ovs/ovn-nb-logical_router_policy_test.go
Expand Up @@ -42,9 +42,10 @@ func (suite *OvnClientTestSuite) testAddLogicalRouterPolicy() {
lr, err := ovnClient.GetLogicalRouter(lrName, false)
require.NoError(t, err)

policy, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
policyList, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
require.NoError(t, err)
require.Contains(t, lr.Policies, policy.UUID)
require.Len(t, policyList, 1)
require.Contains(t, lr.Policies, policyList[0].UUID)

err = ovnClient.AddLogicalRouterPolicy(lrName, priority, match, action, nextHops, nil)
require.NoError(t, err)
Expand Down Expand Up @@ -80,11 +81,11 @@ func (suite *OvnClientTestSuite) testCreateLogicalRouterPolicies() {

for i := 0; i < 3; i++ {
match := fmt.Sprintf("%s && tcp.dst == %d", matchPrefix, basePort+i)
policy, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
policyList, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
require.NoError(t, err)
require.Equal(t, match, policy.Match)

require.Contains(t, lr.Policies, policy.UUID)
require.Len(t, policyList, 1)
require.Equal(t, match, policyList[0].Match)
require.Contains(t, lr.Policies, policyList[0].UUID)
}
})
}
Expand All @@ -110,9 +111,10 @@ func (suite *OvnClientTestSuite) testDeleteLogicalRouterPolicy() {
lr, err := ovnClient.GetLogicalRouter(lrName, false)
require.NoError(t, err)

policy, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
policyList, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
require.NoError(t, err)
require.Contains(t, lr.Policies, policy.UUID)
require.Len(t, policyList, 1)
require.Contains(t, lr.Policies, policyList[0].UUID)

err = ovnClient.DeleteLogicalRouterPolicy(lrName, priority, match)
require.NoError(t, err)
Expand All @@ -122,7 +124,7 @@ func (suite *OvnClientTestSuite) testDeleteLogicalRouterPolicy() {

lr, err = ovnClient.GetLogicalRouter(lrName, false)
require.NoError(t, err)
require.NotContains(t, lr.Policies, policy.UUID)
require.NotContains(t, lr.Policies, policyList[0].UUID)
})
}

Expand Down Expand Up @@ -255,11 +257,12 @@ func (suite *OvnClientTestSuite) testGetLogicalRouterPolicy() {

t.Run("priority and match are same", func(t *testing.T) {
t.Parallel()
policy, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
policyList, err := ovnClient.GetLogicalRouterPolicy(lrName, priority, match, false)
require.NoError(t, err)
require.Equal(t, priority, policy.Priority)
require.Equal(t, match, policy.Match)
require.Equal(t, ovnnb.LogicalRouterPolicyActionAllow, policy.Action)
require.Len(t, policyList, 1)
require.Equal(t, priority, policyList[0].Priority)
require.Equal(t, match, policyList[0].Match)
require.Equal(t, ovnnb.LogicalRouterPolicyActionAllow, policyList[0].Action)
})

t.Run("priority and match are not all same", func(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion pkg/ovs/ovn-nb-logical_router_route.go
Expand Up @@ -183,7 +183,7 @@ func (c *ovnClient) GetLogicalRouterStaticRouteByUUID(uuid string) (*ovnnb.Logic

route := &ovnnb.LogicalRouterStaticRoute{UUID: uuid}
if err := c.Get(ctx, route); err != nil {
return nil, fmt.Errorf("get logical router static route by UUID %s: %v", uuid, err)
return nil, err
}

return route, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/ovs/ovn-nb-nat.go
Expand Up @@ -199,7 +199,7 @@ func (c *ovnClient) GetNATByUUID(uuid string) (*ovnnb.NAT, error) {

nat := &ovnnb.NAT{UUID: uuid}
if err := c.Get(ctx, nat); err != nil {
return nil, fmt.Errorf("get NAT by UUID %s: %v", uuid, err)
return nil, err
}

return nat, nil
Expand Down

0 comments on commit d5462b1

Please sign in to comment.