On Tue, Aug 26, 2025 at 12:38 PM Ales Musil <amu...@redhat.com> wrote:
> The SB MAC_Binding and Static_MAC_Binding use the same columns > as an indication of logical port and datapath. However, the check > if any of those rows is stale wasn't consistent. Unify it in a single > function to make sure that both tables have the same condition to > identify stale entries. > > Fixes: 417f1415b2f5 ("northd: Clean up SB MAC bindings for deleted ports.") > Fixes: 6856adc616a7 ("ovn-northd: Clear SB records depending on stale > datapaths.") > I forgot to add Reported-at: https://issues.redhat.com/browse/FDP-1623, I'll add it later in v2 or during marge depending on the reviews. > Signed-off-by: Ales Musil <amu...@redhat.com> > --- > northd/northd.c | 35 ++++++++++++++++++++++++++--------- > tests/ovn-northd.at | 8 ++++++++ > 2 files changed, 34 insertions(+), 9 deletions(-) > > diff --git a/northd/northd.c b/northd/northd.c > index 015f30a35..f9f132386 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -2867,6 +2867,26 @@ common: > } > } > > +static bool > +mac_binding_is_stale(const struct hmap *lr_datapaths, > + const struct hmap *lr_ports, > + const struct sbrec_datapath_binding *dp, > + const char *logical_port) > +{ > + const struct ovn_datapath *od = > + ovn_datapath_from_sbrec(NULL, lr_datapaths, dp); > + if (!od || ovn_datapath_is_stale(od)) { > + return true; > + } > + > + const struct ovn_port *op = ovn_port_find(lr_ports, logical_port); > + if (!op || !op->nbrp) { > + return true; > + } > + > + return false; > +} > + > /* Remove mac_binding entries that refer to logical_ports which are > * deleted. */ > static void > @@ -2876,11 +2896,8 @@ cleanup_mac_bindings( > { > const struct sbrec_mac_binding *b; > SBREC_MAC_BINDING_TABLE_FOR_EACH_SAFE (b, sbrec_mac_binding_table) { > - const struct ovn_datapath *od = > - ovn_datapath_from_sbrec(NULL, lr_datapaths, b->datapath); > - > - if (!od || ovn_datapath_is_stale(od) || > - !ovn_port_find(lr_ports, b->logical_port)) { > + if (mac_binding_is_stale(lr_datapaths, lr_ports, b->datapath, > + b->logical_port)) { > sbrec_mac_binding_delete(b); > } > } > @@ -18850,7 +18867,7 @@ build_static_mac_binding_table( > struct ovsdb_idl_txn *ovnsb_txn, > const struct nbrec_static_mac_binding_table *nbrec_static_mb_table, > const struct sbrec_static_mac_binding_table *sbrec_static_mb_table, > - struct hmap *lr_ports) > + const struct hmap *lr_datapaths, const struct hmap *lr_ports) > { > /* Cleanup SB Static_MAC_Binding entries which do not have > corresponding > * NB Static_MAC_Binding entries, and SB Static_MAC_Binding entries > for > @@ -18866,8 +18883,8 @@ build_static_mac_binding_table( > continue; > } > > - struct ovn_port *op = ovn_port_find(lr_ports, > nb_smb->logical_port); > - if (!op || !op->nbrp || !op->od || !op->od->sdp->sb_dp) { > + if (mac_binding_is_stale(lr_datapaths, lr_ports, sb_smb->datapath, > + sb_smb->logical_port)) { > sbrec_static_mac_binding_delete(sb_smb); > } > } > @@ -19187,7 +19204,7 @@ ovnnb_db_run(struct northd_input *input_data, > build_static_mac_binding_table(ovnsb_txn, > input_data->nbrec_static_mac_binding_table, > input_data->sbrec_static_mac_binding_table, > - &data->lr_ports); > + &data->lr_datapaths.datapaths, &data->lr_ports); > stopwatch_stop(BUILD_LFLOWS_CTX_STOPWATCH_NAME, time_msec()); > stopwatch_start(CLEAR_LFLOWS_CTX_STOPWATCH_NAME, time_msec()); > > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > index 11bbb211d..1a4910924 100644 > --- a/tests/ovn-northd.at > +++ b/tests/ovn-northd.at > @@ -8518,6 +8518,14 @@ wait_row_count sb:Static_MAC_Binding 1 > logical_port=lr-lrp ip=1.1.1.2 mac="00\:0 > check ovn-nbctl lr-del lr > wait_row_count sb:Static_MAC_Binding 0 > > +dnl Also check for router (and router port) being recreated in the same > +dnl transaction. > +check ovn-nbctl lr-add lr -- lrp-add lr lr-lrp 00:00:00:00:00:01 > 1.1.1.1/24 > +wait_row_count sb:Static_MAC_Binding 1 logical_port=lr-lrp ip=1.1.1.2 > mac="00\:00\:00\:00\:00\:02" > +check ovn-nbctl lrp-del lr-lrp -- lr-del lr -- lr-add lr -- lrp-add lr > lr-lrp 00:00:00:00:00:01 1.1.1.1/24 > +wait_row_count sb:Static_MAC_Binding 1 > +check ovn-nbctl --wait=sb sync > + > AT_CLEANUP > ]) > > -- > 2.50.1 > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev