On Sun, Dec 17, 2023 at 9:03 PM Ilya Maximets <[email protected]> wrote: > > While reassessing weak references the code attempts to collect added > and removed atoms, even if the column didn't change. In case the > column contains a large set, it may take significant amount of time > to process. > > Add a check for the column actually being changed either by removing > references to deleted rows or by direct removal. > > For example, rows in OVN Port_Group tables frequently have two large > sets - 'ports' and 'acls'. In case a new ACL is added to the set > without changing the ports, ports don't need to be reassessed. > > Fixes: 4dbff9f0a685 ("ovsdb: transaction: Incremental reassessment of weak > refs.") > Signed-off-by: Ilya Maximets <[email protected]> > --- > ovsdb/transaction.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/ovsdb/transaction.c b/ovsdb/transaction.c > index bbe4cddc1..a482588a0 100644 > --- a/ovsdb/transaction.c > +++ b/ovsdb/transaction.c > @@ -745,13 +745,17 @@ assess_weak_refs(struct ovsdb_txn *txn, struct > ovsdb_txn_row *txn_row) > ovsdb_datum_destroy(&deleted_refs, &column->type); > > /* Generating the difference between old and new data. */ > - if (txn_row->old) { > - ovsdb_datum_added_removed(&added, &removed, > - &txn_row->old->fields[column->index], > - datum, &column->type); > - } else { > - ovsdb_datum_init_empty(&removed); > - ovsdb_datum_clone(&added, datum); > + ovsdb_datum_init_empty(&added); > + ovsdb_datum_init_empty(&removed);
Nit: Why init these here if they will be overwritten in ovsdb_datum_added_removed and ovsdb_datum_clone? Couldn't this be included in an else? Otherwise, looks good! Acked-by: Mike Pattrick <[email protected]> > + if (datum->n != orig_n > + || bitmap_is_set(txn_row->changed, column->index)) { > + if (txn_row->old) { > + ovsdb_datum_added_removed(&added, &removed, > + > &txn_row->old->fields[column->index], > + datum, &column->type); > + } else { > + ovsdb_datum_clone(&added, datum); > + } > } > > /* Checking added data and creating new references. */ > -- > 2.43.0 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
