summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDumitru Ceara <dceara@redhat.com>2020-03-25 21:15:23 +0100
committerIlya Maximets <i.maximets@ovn.org>2020-03-26 22:34:52 +0100
commitf52302c7e49740ae82fa9c0114755c2944aa011a (patch)
tree3e733648401bcb734ce681428c95037f504ca71e
parent95bc4bf1247bec724f292047295f0aac9da72965 (diff)
downloadopenvswitch-f52302c7e49740ae82fa9c0114755c2944aa011a.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.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c
index 6f55ea2ac..a7f2106fb 100644
--- a/lib/ovsdb-idl.c
+++ b/lib/ovsdb-idl.c
@@ -353,7 +353,6 @@ ovsdb_idl_clear(struct ovsdb_idl *idl)
struct ovsdb_idl_table *table = &idl->tables[i];
struct ovsdb_idl_row *row, *next_row;
- table->cond_changed = false;
if (hmap_is_empty(&table->rows)) {
continue;
}
@@ -379,7 +378,6 @@ ovsdb_idl_clear(struct ovsdb_idl *idl)
}
}
- idl->cond_changed = false;
idl->cond_seqno = 0;
ovsdb_idl_track_clear(idl);