xxx_is_deleted() is an interface that is expected to be used for OVSDB
tracked changes only, but handle_updated_port() function handles both
tracked and untracked rows. It may happen to behave as expected in this
case but it is risky if the OVSDB IDL implementation changes.

Fixes: 3103487e087b ("Split out code to handle port binding db updates")
Signed-off-by: Han Zhou <hz...@ovn.org>
---
 controller/binding.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/controller/binding.c b/controller/binding.c
index 9f5393a92..efb747d52 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -2580,11 +2580,6 @@ handle_updated_port(struct binding_ctx_in *b_ctx_in,
                     const struct sbrec_port_binding *pb,
                     struct hmap *qos_map_ptr)
 {
-    /* Handle create and update changes only. */
-    if (sbrec_port_binding_is_deleted(pb)) {
-        return true;
-    }
-
     update_active_pb_ras_pd(pb, b_ctx_out->local_active_ports_ipv6_pd,
                             "ipv6_prefix_delegation");
 
@@ -2825,6 +2820,11 @@ delete_done:
 
     SBREC_PORT_BINDING_TABLE_FOR_EACH_TRACKED (pb,
                                                b_ctx_in->port_binding_table) {
+        /* Loop to handle create and update changes only. */
+        if (sbrec_port_binding_is_deleted(pb)) {
+            continue;
+        }
+
         handled = handle_updated_port(b_ctx_in, b_ctx_out, pb, qos_map_ptr);
         if (!handled) {
             break;
-- 
2.30.2

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to