Skip to content

Commit

Permalink
fix lsp deletion failure when external-ids:ls is empty (#2544)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangzujian committed Mar 23, 2023
1 parent 6b9cdd3 commit 98dc2f2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
26 changes: 26 additions & 0 deletions pkg/ovs/ovn-nb-logical_switch.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"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 @@ -237,6 +238,31 @@ func (c *ovnClient) LogicalSwitchUpdatePortOp(lsName string, lspUUID string, op
return nil, nil
}

if lsName == "" {
lsList, err := c.ListLogicalSwitch(false, func(ls *ovnnb.LogicalSwitch) bool {
return util.ContainsString(ls.Ports, lspUUID)
})
if err != nil {
klog.Error(err)
return nil, fmt.Errorf("failed to list LS by LSP UUID %s: %v", lspUUID, err)
}
if len(lsList) == 0 {
err = fmt.Errorf("no LS found for LSP %s", lspUUID)
klog.Error(err)
return nil, err
}
if len(lsList) != 1 {
lsNames := make([]string, len(lsList))
for _, ls := range lsList {
lsNames = append(lsNames, ls.Name)
}
err = fmt.Errorf("multiple LS found for LSP %s: %s", lspUUID, strings.Join(lsNames, ", "))
klog.Error(err)
return nil, err
}
lsName = lsList[0].Name
}

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

lsName, ok := lsp.ExternalIDs[logicalSwitchKey]
if !ok {
return nil, fmt.Errorf("no %s exist in lsp's external_ids", logicalSwitchKey)
}

// remove logical switch port from logical switch
lsName := lsp.ExternalIDs[logicalSwitchKey]
lspRemoveOp, err := c.LogicalSwitchUpdatePortOp(lsName, lsp.UUID, ovsdb.MutateOperationDelete)
if err != nil {
return nil, fmt.Errorf("generate operations for removing port %s from logical switch %s: %v", lspName, lsName, err)
Expand Down

0 comments on commit 98dc2f2

Please sign in to comment.