When multiple OVSDB updates have been received since the last northd run
it's possible that the IDL tracks changes for database entities that
were added _and also_ removed from the last time the northd processing
engine run. In some cases, those may appear as being simultaneously
"new" and "deleted".

This might cause an issue when we try to update row, but end up
asserting on the row being invalid:
assertion row->new_datum != NULL failed in ovsdb_idl_txn_write__()

To prevent that skip those entries that appear as both "new" and
"deleted" at the same time.

Reported-at: https://issues.redhat.com/browse/FDP-2784
Reported-by: Dumitru Ceara <[email protected]>
Signed-off-by: Ales Musil <[email protected]>
---
 northd/northd.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/northd/northd.c b/northd/northd.c
index a8d435be8..d99aec0b8 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -5239,6 +5239,12 @@ northd_handle_sb_port_binding_changes(
     const struct sbrec_port_binding *pb;
     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
     SBREC_PORT_BINDING_TABLE_FOR_EACH_TRACKED (pb, sbrec_port_binding_table) {
+        /* "New" + "Deleted" is a no-op. */
+        if (sbrec_port_binding_is_new(pb) &&
+            sbrec_port_binding_is_deleted(pb)) {
+            continue;
+        }
+
         bool is_lrp =
             !strcmp(datapath_get_nb_type(pb->datapath),
                     ovn_datapath_type_to_string(DP_ROUTER));
-- 
2.51.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to