Skip to content

Commit

Permalink
fix lsp gc after upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangzujian committed Mar 17, 2023
1 parent f8aabdf commit e91b7af
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 7 deletions.
2 changes: 1 addition & 1 deletion pkg/controller/gc.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ func (c *Controller) markAndCleanLSP() error {

klog.Infof("gc logical switch port %s", lsp.Name)
if err := c.ovnClient.DeleteLogicalSwitchPort(lsp.Name); err != nil {
klog.Errorf("failed to delete lsp %s, %v", lsp, err)
klog.Errorf("failed to delete lsp %s: %v", lsp.Name, err)
return err
}

Expand Down
28 changes: 27 additions & 1 deletion 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 @@ -208,7 +209,7 @@ func (c *ovnClient) LogicalSwitchExists(lsName string) (bool, error) {
}

// ListLogicalSwitch list logical switch
func (c *ovnClient) ListLogicalSwitch(needVendorFilter bool, filter func(lr *ovnnb.LogicalSwitch) bool) ([]ovnnb.LogicalSwitch, error) {
func (c *ovnClient) ListLogicalSwitch(needVendorFilter bool, filter func(ls *ovnnb.LogicalSwitch) bool) ([]ovnnb.LogicalSwitch, error) {
ctx, cancel := context.WithTimeout(context.Background(), c.Timeout)
defer cancel()

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 @@ -560,12 +560,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 e91b7af

Please sign in to comment.