local_ids is supposed to be the set of interface iface-id values from this chassis that correspond to OVN logical ports. We use this for detecting when an interface has been removed as well as if child-ports should be bound to this chassis.
Old values were not being removed from local_ids. The most immediate effect of this was that once an interface has been removed from a chassis, we would think a removal has occured *every* time through binding_run and trigger the full binding processing. This was a performance problem. The second problem this would cause is if a port that had child ports was moved to another chassis. We would end up with two chassis fighting over the binding of the child ports. Signed-off-by: Russell Bryant <russ...@ovn.org> --- ovn/controller/binding.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c index 78ebec4..41165bc 100644 --- a/ovn/controller/binding.c +++ b/ovn/controller/binding.c @@ -103,6 +103,11 @@ get_local_iface_ids(const struct ovsrec_bridge *br_int, * that has been removed. */ if (!changed && !sset_is_empty(&old_local_ids)) { changed = true; + + const char *cur_id; + SSET_FOR_EACH(cur_id, &old_local_ids) { + sset_find_and_delete(&local_ids, cur_id); + } } sset_destroy(&old_local_ids); -- 2.7.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev