On Wed, May 28, 2025 at 1:18 PM Felix Huettner <[email protected]> wrote:
> There can be endge cases where an advertised_route has a tracked_port > field but the local IDL has not yet loaded the corresponding logical > port. > Once that issue resolves we need to trigger a recompute of the route > node so that tracked_ports_local and tracked_ports_remote can be fixed. > > Reported-at: > https://mail.openvswitch.org/pipermail/ovs-dev/2025-May/423309.html > Reported-by: Ales Musil <[email protected]> > Fixes: 7a7f727e2f6d ("ovn-controller: Update handlers for route changes.") > Signed-off-by: Felix Huettner <[email protected]> > --- > controller/ovn-controller.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c > index 89207bb4b..10c7ffa26 100644 > --- a/controller/ovn-controller.c > +++ b/controller/ovn-controller.c > @@ -5260,9 +5260,9 @@ route_sb_advertised_route_data_handler(struct > engine_node *node, void *data) > * datapath locally. > * > * Updates to advertised_route can generally be ignored as northd > will not > - * update these entries. We also get update notifications if a > referenced > - * port_binding is updated, but these are handled in the runtime_data > - * handler. */ > + * update these entries. For exceptions see below. > + * We also get update notifications if a referenced port_binding is > + * updated, but these are handled in the runtime_data handler. */ > const struct sbrec_advertised_route *sbrec_route; > SBREC_ADVERTISED_ROUTE_TABLE_FOR_EACH_TRACKED (sbrec_route, > > advertised_route_table) { > @@ -5279,6 +5279,20 @@ route_sb_advertised_route_data_handler(struct > engine_node *node, void *data) > * request recompute. */ > return EN_UNHANDLED; > } > + > + if (sbrec_route->tracked_port) { > + const char *name = sbrec_route->tracked_port->logical_port; > + if (!(sset_contains(&re_data->tracked_ports_local, name) || > + sset_contains(&re_data->tracked_ports_remote, name))) { > + /* Advertised_Routes are generally not changed by northd. > + * However if we did not monitor for the Port_Binding > + * referenced by tracked_port previously then it would > have > + * been NULL. If we notice that we have now loaded the > + * Port_Binding we need to recompute to correctly update > + * the route priority. */ > + return EN_UNHANDLED; > + } > + } > } > return EN_HANDLED_UNCHANGED; > } > > base-commit: a5b1478282b6afce4169be250d66d23d74f7064d > -- > 2.43.0 > > Thank you Felix, I went ahead and merged the patch to main and backported it to 25.03. Regards, Ales _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
