dddd63
From e8922fefa62184cdd0ff808f4e52de74e8d9bbe5 Mon Sep 17 00:00:00 2001
773311
From: Dumitru Ceara <dceara@redhat.com>
773311
Date: Wed, 25 Mar 2020 21:15:23 +0100
dddd63
Subject: [PATCH 1/4] Revert "ovsdb-idl: Avoid sending redundant conditional
773311
 monitoring updates"
773311
773311
This reverts commit 5351980b047f4dd40be7a59a1e4b910df21eca0a.
773311
773311
If the ovsdb-server reply to "monitor_cond_since" requests has
773311
"found" == false then ovsdb_idl_db_parse_monitor_reply() calls
773311
ovsdb_idl_db_clear() which iterates through all tables and
773311
unconditionally sets table->cond_changed to false.
773311
773311
However, if the client had already set a new condition for some of the
773311
tables, this new condition request will never be sent to ovsdb-server
773311
until the condition is reset to a different value. This is due to the
773311
check in ovsdb_idl_db_set_condition().
773311
773311
One way to replicate the issue is described in the bugzilla reporting
773311
the bug, when ovn-controller is configured to use "ovn-monitor-all":
773311
https://bugzilla.redhat.com/show_bug.cgi?id=1808125#c6
773311
773311
Commit 5351980b047f tried to optimize sending redundant conditional
773311
monitoring updates but the chances that this scenario happens with the
773311
latest code is quite low since commit 403a6a0cb003 ("ovsdb-idl: Fast
773311
resync from server when connection reset.") changed the behavior of
773311
ovsdb_idl_db_parse_monitor_reply() to avoid calling ovsdb_idl_db_clear()
773311
in most cases.
773311
773311
Reported-by: Dan Williams <dcbw@redhat.com>
773311
Reported-at: https://bugzilla.redhat.com/1808125
773311
CC: Andy Zhou <azhou@ovn.org>
773311
Fixes: 5351980b047f ("ovsdb-idl: Avoid sending redundant conditional monitoring updates")
773311
Acked-by: Han Zhou <hzhou@ovn.org>
773311
Acked-by: Ilya Maximets <i.maximets@ovn.org>
773311
Signed-off-by: Dumitru Ceara <dceara@redhat.com>
773311
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
773311
(cherry picked from upstream OVS commit 2b7e536fa5e20be10e620b959e05557f88862d2c)
773311
773311
Change-Id: Iaa24bc949d648e8fa29abea1fe8fb5878ba45864
773311
---
773311
 openvswitch-2.13.0/lib/ovsdb-idl.c | 2 --
773311
 1 file changed, 2 deletions(-)
773311
773311
diff --git a/openvswitch-2.13.0/lib/ovsdb-idl.c b/openvswitch-2.13.0/lib/ovsdb-idl.c
dddd63
index 190143f36..1535ad7b5 100644
773311
--- a/openvswitch-2.13.0/lib/ovsdb-idl.c
773311
+++ b/openvswitch-2.13.0/lib/ovsdb-idl.c
773311
@@ -610,7 +610,6 @@ ovsdb_idl_db_clear(struct ovsdb_idl_db *db)
773311
         struct ovsdb_idl_table *table = &db->tables[i];
773311
         struct ovsdb_idl_row *row, *next_row;
773311
 
773311
-        table->cond_changed = false;
773311
         if (hmap_is_empty(&table->rows)) {
773311
             continue;
773311
         }
773311
@@ -634,7 +633,6 @@ ovsdb_idl_db_clear(struct ovsdb_idl_db *db)
773311
     }
773311
     ovsdb_idl_row_destroy_postprocess(db);
773311
 
773311
-    db->cond_changed = false;
773311
     db->cond_seqno = 0;
773311
     ovsdb_idl_db_track_clear(db);
773311
 
773311
-- 
dddd63
2.26.2
773311