On 2/29/20 12:00 AM, 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 <d...@redhat.com> > Reported-at: https://bugzilla.redhat.com/1808125 > CC: Han Zhou <hz...@ovn.org> > Fixes: 403a6a0cb003 ("ovsdb-idl: Fast resync from server when connection > reset.") > Signed-off-by: Dumitru Ceara <dce...@redhat.com>
Hi Han, I was wondering if you could review this change because ovn-kubernetes is trying to enable ovn-monitor-all for scalability reasons but their CI fails due to the bug fixed by the patch below. Thanks, Dumitru > --- > 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; > } > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev