Skip to content

Commit

Permalink
fix lrp deletion after upgrade (#2548)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangzujian committed Mar 28, 2023
1 parent ed92834 commit e19620b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 8 deletions.
27 changes: 27 additions & 0 deletions pkg/ovs/ovn-nb-logical_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package ovs
import (
"context"
"fmt"
"strings"

"github.com/ovn-org/libovsdb/model"
"github.com/ovn-org/libovsdb/ovsdb"
"k8s.io/klog/v2"

"github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb"
"github.com/kubeovn/kube-ovn/pkg/util"
Expand Down Expand Up @@ -155,6 +157,31 @@ func (c *ovnClient) LogicalRouterUpdatePortOp(lrName, lrpUUID string, op ovsdb.M
return nil, nil
}

if lrName == "" && op == ovsdb.MutateOperationDelete {
lrList, err := c.ListLogicalRouter(false, func(lr *ovnnb.LogicalRouter) bool {
return util.ContainsString(lr.Ports, lrpUUID)
})
if err != nil {
klog.Error(err)
return nil, fmt.Errorf("failed to list LR by LRP UUID %s: %v", lrpUUID, err)
}
if len(lrList) == 0 {
err = fmt.Errorf("no LR found for LRP %s", lrpUUID)
klog.Error(err)
return nil, err
}
if len(lrList) != 1 {
lrNames := make([]string, len(lrList))
for i := range lrList {
lrNames[i] = lrList[i].Name
}
err = fmt.Errorf("multiple LR found for LRP %s: %s", lrpUUID, strings.Join(lrNames, ", "))
klog.Error(err)
return nil, err
}
lrName = lrList[0].Name
}

mutation := func(lr *ovnnb.LogicalRouter) *model.Mutation {
mutation := &model.Mutation{
Field: &lr.Ports,
Expand Down
6 changes: 1 addition & 5 deletions pkg/ovs/ovn-nb-logical_router_port.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,12 +268,8 @@ func (c *ovnClient) DeleteLogicalRouterPortOp(lrpName string) ([]ovsdb.Operation
return nil, nil
}

lrName, ok := lrp.ExternalIDs[logicalRouterKey]
if !ok {
return nil, fmt.Errorf("key %s does not exist in external_ids of lrp %s", logicalRouterKey, lrpName)
}

// remove logical router port from logical router
lrName := lrp.ExternalIDs[logicalRouterKey]
lrpRemoveOp, err := c.LogicalRouterUpdatePortOp(lrName, lrp.UUID, ovsdb.MutateOperationDelete)
if err != nil {
return nil, err
Expand Down
6 changes: 3 additions & 3 deletions pkg/ovs/ovn-nb-logical_switch.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ func (c *ovnClient) LogicalSwitchUpdatePortOp(lsName string, lspUUID string, op
return nil, nil
}

if lsName == "" {
if lsName == "" && op == ovsdb.MutateOperationDelete {
lsList, err := c.ListLogicalSwitch(false, func(ls *ovnnb.LogicalSwitch) bool {
return util.ContainsString(ls.Ports, lspUUID)
})
Expand All @@ -253,8 +253,8 @@ func (c *ovnClient) LogicalSwitchUpdatePortOp(lsName string, lspUUID string, op
}
if len(lsList) != 1 {
lsNames := make([]string, len(lsList))
for _, ls := range lsList {
lsNames = append(lsNames, ls.Name)
for i := range lsList {
lsNames[i] = lsList[i].Name
}
err = fmt.Errorf("multiple LS found for LSP %s: %s", lspUUID, strings.Join(lsNames, ", "))
klog.Error(err)
Expand Down

0 comments on commit e19620b

Please sign in to comment.