diff options
author | Dumitru Ceara <dceara@redhat.com> | 2020-03-25 21:15:23 +0100 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2020-03-26 22:27:45 +0100 |
commit | 2b7e536fa5e20be10e620b959e05557f88862d2c (patch) | |
tree | e5e4e6d62476830f8283fab7eace80278f375ad1 | |
parent | 3c6d05a02e0fd2cde2f988a0e41a19f47c3d6947 (diff) | |
download | openvswitch-2b7e536fa5e20be10e620b959e05557f88862d2c.tar.gz |
Revert "ovsdb-idl: Avoid sending redundant conditional monitoring updates"
This reverts commit 5351980b047f4dd40be7a59a1e4b910df21eca0a.
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().
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
Commit 5351980b047f tried to optimize sending redundant conditional
monitoring updates but the chances that this scenario happens with the
latest code is quite low since commit 403a6a0cb003 ("ovsdb-idl: Fast
resync from server when connection reset.") changed the behavior of
ovsdb_idl_db_parse_monitor_reply() to avoid calling ovsdb_idl_db_clear()
in most cases.
Reported-by: Dan Williams <dcbw@redhat.com>
Reported-at: https://bugzilla.redhat.com/1808125
CC: Andy Zhou <azhou@ovn.org>
Fixes: 5351980b047f ("ovsdb-idl: Avoid sending redundant conditional monitoring updates")
Acked-by: Han Zhou <hzhou@ovn.org>
Acked-by: Ilya Maximets <i.maximets@ovn.org>
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r-- | lib/ovsdb-idl.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c index 190143f36..1535ad7b5 100644 --- a/lib/ovsdb-idl.c +++ b/lib/ovsdb-idl.c @@ -610,7 +610,6 @@ 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 (hmap_is_empty(&table->rows)) { continue; } @@ -634,7 +633,6 @@ ovsdb_idl_db_clear(struct ovsdb_idl_db *db) } ovsdb_idl_row_destroy_postprocess(db); - db->cond_changed = false; db->cond_seqno = 0; ovsdb_idl_db_track_clear(db); |