As currently implemented, binding_run() normally updates the set of locally owned logical ports on each call. When changes to the membership of this set are detected (i.e. when locally bound logical ports are added or deleted), additional processing to update the sb database with lport binding is performed.
However, the sb database can only be updated when a transaction to the sb database is possible (that is, when ctx->ovnsb_idl_txn is non-NULL). If a new logical port is detected while ctx->ovnsb_idl_txn happens to be NULL, its binding information will not be updated in the the sb database until another change to the set of locally-owned logical ports changes. If no such change ever occurs, the sb database is never updated with the appropriate binding information. Eliminate this issue by only updating the set of locally owned logical ports when an sb database transaction is possible. This addresses a cause of occasional failures in the "3 HVs, 3 LS, 3 lports/LS, 1 LR" test case. Signed-off-by: Lance Richardson <lrich...@redhat.com> --- ovn/controller/binding.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c index 8b439a6..369f8f2 100644 --- a/ovn/controller/binding.c +++ b/ovn/controller/binding.c @@ -266,7 +266,7 @@ binding_run(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int, } if (br_int) { - if (get_local_iface_ids(br_int, &lports)) { + if (ctx->ovnsb_idl_txn && get_local_iface_ids(br_int, &lports)) { process_full_binding = true; } } else { -- 2.5.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev