diff mbox series

[ovs-dev,v2,1/2] controller: Update related ports when parent of container is deleted.

Message ID 20241015133543.1391024-1-xsimonar@redhat.com
State New
Headers show
Series [ovs-dev,v2,1/2] controller: Update related ports when parent of container is deleted. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Xavier Simonart Oct. 15, 2024, 1:35 p.m. UTC
There were a few cases where container ports was not removed from related ports
when the parent was deleted.
For instance, when a vif is bound to chassis 1 becomes claimed by chassis 2 and
is deleted before it's postponed on chassis 1.

Signed-off-by: Xavier Simonart <xsimonar@redhat.com>
---
v2: Remove unused variable.
---
 controller/binding.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/controller/binding.c b/controller/binding.c
index 492aef530..f3df5edb7 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -2782,27 +2782,25 @@  handle_deleted_vif_lport(const struct sbrec_port_binding *pb,
                          struct binding_ctx_out *b_ctx_out)
 {
     struct local_binding *lbinding = NULL;
-    bool bound = false;
 
     struct shash *binding_lports = &b_ctx_out->lbinding_data->lports;
     struct binding_lport *b_lport = binding_lport_find(binding_lports, pb->logical_port);
     if (b_lport) {
         lbinding = b_lport->lbinding;
-        bound = is_binding_lport_this_chassis(b_lport, b_ctx_in->chassis_rec);
 
          /* Remove b_lport from local_binding. */
          binding_lport_delete(binding_lports, b_lport);
     }
 
-    if ((lbinding && lport_type == LP_VIF) &&
-        (bound || sset_find_and_delete(b_ctx_out->postponed_ports,
-                                       pb->logical_port))) {
+    if (lbinding && lport_type == LP_VIF) {
+        sset_find_and_delete(b_ctx_out->postponed_ports, pb->logical_port);
         /* We need to release the container/virtual binding lports (if any) if
          * deleted 'pb' type is LP_VIF. */
         struct binding_lport *c_lport;
         LIST_FOR_EACH (c_lport, list_node, &lbinding->binding_lports) {
             sset_find_and_delete(b_ctx_out->postponed_ports, c_lport->name);
             remove_local_lports(c_lport->pb->logical_port, b_ctx_out);
+            remove_related_lport(c_lport->pb, b_ctx_out);
             if (!release_binding_lport(b_ctx_in->chassis_rec, c_lport,
                                        !b_ctx_in->ovnsb_idl_txn,
                                        b_ctx_out)) {