Thanks Xavier,
Acked-by: Mark Michelson <[email protected]>
On 10/23/23 06:04, Xavier Simonart wrote:
If an ovsdb transaction fails (e.g. adding the same tunnel_key as another
ovn-ic to the same datapath, for a different port (race condition)),
there was no guarentee that ovn-ic would wake up, and that state would stay
until ovn-ic wake up, for instance due to some ovn-ic-sb changes.
Signed-off-by: Xavier Simonart <[email protected]>
---
ic/ovn-ic.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c
index e2023c2ba..bb91bad11 100644
--- a/ic/ovn-ic.c
+++ b/ic/ovn-ic.c
@@ -2216,10 +2216,19 @@ main(int argc, char *argv[])
ovn_db_run(&ctx);
}
- ovsdb_idl_loop_commit_and_wait(&ovnnb_idl_loop);
- ovsdb_idl_loop_commit_and_wait(&ovnsb_idl_loop);
- ovsdb_idl_loop_commit_and_wait(&ovninb_idl_loop);
- ovsdb_idl_loop_commit_and_wait(&ovnisb_idl_loop);
+ int rc1 = ovsdb_idl_loop_commit_and_wait(&ovnnb_idl_loop);
+ int rc2 = ovsdb_idl_loop_commit_and_wait(&ovnsb_idl_loop);
+ int rc3 = ovsdb_idl_loop_commit_and_wait(&ovninb_idl_loop);
+ int rc4 = ovsdb_idl_loop_commit_and_wait(&ovnisb_idl_loop);
+ if (!rc1 || !rc2 || !rc3 || !rc4) {
+ VLOG_DBG(" a transaction failed in: %s %s %s %s",
+ !rc1 ? "nb" : "", !rc2 ? "sb" : "",
+ !rc3 ? "ic_nb" : "", rc4 ? "ic_sb" : "");
+ /* A transaction failed. Wake up immediately to give
+ * opportunity to send the proper transaction
+ */
+ poll_immediate_wake();
+ }
} else {
/* ovn-ic is paused
* - we still want to handle any db updates and update the
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev