On 1/5/24 16:09, Mike Pattrick wrote:
> On Fri, Jan 5, 2024 at 9:30 AM Ilya Maximets <i.maxim...@ovn.org> wrote:
>>
>> On 12/29/23 17:28, Mike Pattrick wrote:
>>> On Sun, Dec 17, 2023 at 9:03 PM Ilya Maximets <i.maxim...@ovn.org> 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 <i.maxim...@ovn.org>
>>>> ---
>>>>  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?
>>
>> We could do that, it just seems a little less error-prone this way.
>> We'll need to initialize both in the common 'else' and also initialize
>> 'removed' in the clone case, i.e.:
>>
>>         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_init_empty(&removed);
>>                 ovsdb_datum_clone(&added, datum);
>>             }
>>         } else {
>>             ovsdb_datum_init_empty(&added);
>>             ovsdb_datum_init_empty(&removed);
>>         }
>>
>> I don't think the initialization here is performance-critical, so
>> I went with a slightly easier to read solution, that also saves
>> a couple lines of code.  But I have no real objections for the
>> 'else' variant above, if you think it is better.
>>
>> What's your opinion?
> 
> I think you're right, your way is much more straightforward.

Thanks!  I applied the fixes from this set to appropriate baranches.
Will re-spin the last two patches as v2 addressing the comments.

Best regards, Ilya Maximets.

> 
> -M
> 
>>
>>>
>>> Otherwise, looks good!
>>>
>>> Acked-by: Mike Pattrick <m...@redhat.com>
>>>
>>>> +        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
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to