Before refactoring the main loop to reuse ovsdb_idl_loop_* functions, we would use a sequence to see if anything changed in NB database to compute and notify the SB database, and vice versa. This logic got dropped with the refactor, causing a testsuite failure in the ovn-sbctl test. Reintroduce the IDL sequence number checking.
Fixes: 331e7aefe1c6 ("ovn-northd: Refactor main loop to use ovsdb_idl_loop_* functions") Suggested-by: Numan Siddique <nusid...@redhat.com> Signed-off-by: Joe Stringer <j...@ovn.org> --- ovn/northd/ovn-northd.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 01f289d1c746..7f3a92e3539d 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -1799,6 +1799,7 @@ int main(int argc, char *argv[]) { extern struct vlog_module VLM_reconnect; + unsigned int ovnnb_seqno, ovnsb_seqno; int res = EXIT_SUCCESS; struct unixctl_server *unixctl; int retval; @@ -1868,6 +1869,9 @@ main(int argc, char *argv[]) add_column_noalert(ovnsb_idl_loop.idl, &sbrec_port_binding_col_mac); ovsdb_idl_add_column(ovnsb_idl_loop.idl, &sbrec_port_binding_col_chassis); + ovnnb_seqno = ovsdb_idl_get_seqno(ovnnb_idl_loop.idl); + ovnsb_seqno = ovsdb_idl_get_seqno(ovnsb_idl_loop.idl); + /* Main loop. */ exiting = false; while (!exiting) { @@ -1878,8 +1882,14 @@ main(int argc, char *argv[]) .ovnsb_txn = ovsdb_idl_loop_run(&ovnsb_idl_loop), }; - ovnnb_db_run(&ctx); - ovnsb_db_run(&ctx); + if (ovnnb_seqno != ovsdb_idl_get_seqno(ctx.ovnnb_idl)) { + ovnnb_seqno = ovsdb_idl_get_seqno(ctx.ovnnb_idl); + ovnnb_db_run(&ctx); + } + if (ovnsb_seqno != ovsdb_idl_get_seqno(ctx.ovnsb_idl)) { + ovnsb_seqno = ovsdb_idl_get_seqno(ctx.ovnsb_idl); + ovnsb_db_run(&ctx); + } unixctl_server_run(unixctl); unixctl_server_wait(unixctl); -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev