[ovs-dev] [PATCH v2] ovsdb-idl.c: Clear conditions when clearing IDL.
Dumitru Ceara
dceara at redhat.com
Wed Mar 25 20:18:24 UTC 2020
On 3/25/20 7:24 PM, Ilya Maximets wrote:
> On 3/10/20 5:39 PM, Dumitru Ceara wrote:
>> If the ovsdb-server reply to "monitor_cond_since" requests has
>> "found" == false then ovsdb_idl_db_parse_monitor_reply() calls
>> ovsdb_idl_db_clear() which iterates through all tables and
>> unconditionally sets table->cond_changed to false.
>>
>> However, if the client had already set a new condition for some of the
>> tables, this new condition request will never be sent to ovsdb-server
>> until the condition is reset to a different value. This is due to the
>> check in ovsdb_idl_db_set_condition().
>>
>> In order to fix this we now also call ovsdb_idl_condition_clear() for
>> each table condition in ovsdb_idl_db_clear(). This ensures that
>> resetting the condition to the same value as before the
>> "monitor_cond_since" reply will trigger a new request.
>>
>> One way to replicate the issue is described in the bugzilla reporting
>> the bug, when ovn-controller is configured to use "ovn-monitor-all":
>> https://bugzilla.redhat.com/show_bug.cgi?id=1808125#c6
>>
>> Reported-by: Dan Williams <dcbw at redhat.com>
>> Reported-at: https://bugzilla.redhat.com/1808125
>> CC: Andy Zhou <azhou at ovn.org>
>> Fixes: 5351980b047f ("ovsdb-idl: Avoid sending redundant conditional monitoring updates")
>> Signed-off-by: Dumitru Ceara <dceara at redhat.com>
>>
>> ---
>> v2:
>> - Updated commit log so that the "Fixes:" tag reflects the correct
>> commit that introduced the issue.
>> ---
>> lib/ovsdb-idl.c | 6 +++++-
>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c
>> index 190143f..64721ca 100644
>> --- a/lib/ovsdb-idl.c
>> +++ b/lib/ovsdb-idl.c
>> @@ -610,7 +610,11 @@ ovsdb_idl_db_clear(struct ovsdb_idl_db *db)
>> struct ovsdb_idl_table *table = &db->tables[i];
>> struct ovsdb_idl_row *row, *next_row;
>>
>> - table->cond_changed = false;
>> + if (table->cond_changed) {
>> + table->cond_changed = false;
>> + ovsdb_idl_condition_clear(&table->condition);
>> + }
>> +
>> if (hmap_is_empty(&table->rows)) {
>> continue;
>> }
>>
>
> See my comment in v1 thread:
> https://mail.openvswitch.org/pipermail/ovs-dev/2020-March/369144.html
>
> Best regards, Ilya Maximets.
>
Thanks, Numan, Ilya, Han for reviewing this change.
I sent a v3 that reverts 5351980b047f ("ovsdb-idl: Avoid sending
redundant conditional monitoring updates") as suggested:
https://patchwork.ozlabs.org/patch/1261637/
Regards,
Dumitru
More information about the dev
mailing list