[...] > > > + HMAPX_FOR_EACH (node, &ni->synced_lses->deleted) { > > > + const struct ovn_synced_logical_switch *synced = node->data; > > > + const struct nbrec_logical_switch *deleted_ls = synced->nb; > > > + > > > + struct ovn_datapath *od = ovn_datapath_find_( > > > + &nd->ls_datapaths.datapaths, > > > + &deleted_ls->header_.uuid); > > > + if (!od) { > > > + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, > > > 1); > > > + VLOG_WARN_RL(&rl, "Internal error: a tracked updated LS > > > doesn't " > > > + "exist in ls_datapaths: "UUID_FMT, > nit: Change updated to deleted
ack, right. I will fix in v5. Thx. Regards, Lorenzo > > > + UUID_ARGS(&deleted_ls->header_.uuid)); > > > + goto fail; > > > + } > > > + > > > + if (deleted_ls->copp || deleted_ls->n_dns_records || > > > + deleted_ls->n_forwarding_groups || deleted_ls->n_qos_rules || > > > + deleted_ls->n_load_balancer || > > > deleted_ls->n_load_balancer_group) { > > > + goto fail; > > > + } > > > + > > > + if (!ls_handle_lsp_changes(ovnsb_idl_txn, deleted_ls, > > > + ni, nd, od, &trk_data->trk_lsps)) { > > > + goto fail; > > > + } > > > + > > > + hmap_remove(&nd->ls_datapaths.datapaths, &od->key_node); > > > + vector_get(&nd->ls_datapaths.dps, od->index, > > > + struct ovn_datapath *) = NULL; > > > + bitmap_set0(nd->ls_datapaths.dps_index_map.map, od->index); > > > + nd->ls_datapaths.dps_index_map.n_elems--; > > > + > > > + const struct sbrec_ip_multicast *ip_mcast = > > > + ip_mcast_lookup(ni->sbrec_ip_mcast_by_dp, od->sdp->sb_dp); > > > + if (ip_mcast) { > > > + sbrec_ip_multicast_delete(ip_mcast); > > > + } > > > + > > > + if (is_ls_acls_changed(deleted_ls)) { > > > + hmapx_add(&trk_data->ls_with_changed_acls, od); > > > + } > > > + hmapx_add(&trk_data->trk_switches.deleted, od); > > > + } > > > + > > > + if (!hmapx_is_empty(&trk_data->trk_switches.crupdated) || > > > + !hmapx_is_empty(&trk_data->trk_switches.deleted)) { > > > + trk_data->type |= NORTHD_TRACKED_SWITCHES; > > > + } > > > + > > > if (!hmapx_is_empty(&trk_data->trk_lsps.created) > > > || !hmapx_is_empty(&trk_data->trk_lsps.updated) > > > || !hmapx_is_empty(&trk_data->trk_lsps.deleted)) { > > > @@ -18949,8 +19082,8 @@ static void > > > ovn_datapaths_destroy(struct ovn_datapaths *datapaths) > > > { > > > struct ovn_datapath *dp; > > > - HMAP_FOR_EACH_SAFE (dp, key_node, &datapaths->datapaths) { > > > - ovn_datapath_destroy(&datapaths->datapaths, dp); > > > + HMAP_FOR_EACH_POP (dp, key_node, &datapaths->datapaths) { > > > + ovn_datapath_destroy(dp); > > > } > > > hmap_destroy(&datapaths->datapaths); > > > > > > diff --git a/northd/northd.h b/northd/northd.h > > > index b71b13ca9..aaa2b0dab 100644 > > > --- a/northd/northd.h > > > +++ b/northd/northd.h > > > @@ -22,6 +22,7 @@ > > > #include "lib/sset.h" > > > #include "northd/en-port-group.h" > > > #include "northd/ipam.h" > > > +#include "northd/lb.h" > > > #include "openvswitch/hmap.h" > > > #include "northd/lb.h" > > > #include "simap.h" > > > @@ -101,7 +102,7 @@ struct ovn_datapaths { > > > static inline size_t > > > ods_size(const struct ovn_datapaths *datapaths) > > > { > > > - return hmap_count(&datapaths->datapaths); > > > + return vector_len(&datapaths->dps); > > > } > > > > > > struct ovn_datapath * > > > @@ -116,6 +117,13 @@ enum redirected_routing_protcol_flag_type { > > > REDIRECT_BFD = (1 << 1), > > > }; > > > > > > +struct tracked_dps { > > > + /* Tracked created or updated datapaths. */ > > > + struct hmapx crupdated; > > > + /* Tracked deleted datapaths. */ > > > + struct hmapx deleted; > > > +}; > > > + > > > struct tracked_ovn_ports { > > > /* tracked created ports. > > > * hmapx node data is 'struct ovn_port *' */ > > > @@ -147,6 +155,7 @@ enum northd_tracked_data_type { > > > NORTHD_TRACKED_LR_NATS = (1 << 2), > > > NORTHD_TRACKED_LS_LBS = (1 << 3), > > > NORTHD_TRACKED_LS_ACLS = (1 << 4), > > > + NORTHD_TRACKED_SWITCHES = (1 << 5), > > > }; > > > > > > /* Track what's changed in the northd engine node. > > > @@ -155,6 +164,7 @@ enum northd_tracked_data_type { > > > struct northd_tracked_data { > > > /* Indicates the type of data tracked. One or all of > > > NORTHD_TRACKED_*. */ > > > enum northd_tracked_data_type type; > > > + struct tracked_dps trk_switches; > > > struct tracked_ovn_ports trk_lsps; > > > struct tracked_lbs trk_lbs; > > > > > > @@ -998,6 +1008,13 @@ northd_has_ls_acls_in_tracked_data(struct > > > northd_tracked_data *trk_nd_changes) > > > return trk_nd_changes->type & NORTHD_TRACKED_LS_ACLS; > > > } > > > > > > +static inline bool > > > +northd_has_lswitches_in_tracked_data( > > > + struct northd_tracked_data *trk_nd_changes) > > > +{ > > > + return trk_nd_changes->type & NORTHD_TRACKED_SWITCHES; > > > +} > > > + > > > /* Returns 'true' if the IPv4 'addr' is on the same subnet with one of > > > the > > > * IPs configured on the router port. > > > */ > > > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at > > > index 11bbb211d..9e0e80418 100644 > > > --- a/tests/ovn-northd.at > > > +++ b/tests/ovn-northd.at > > > @@ -14544,6 +14544,67 @@ AT_CHECK([grep "lr_in_dnat" lr1flows | > > > ovn_strip_lflows | grep "30.0.0.1"], [0], > > > AT_CLEANUP > > > ]) > > > > > > +OVN_FOR_EACH_NORTHD_NO_HV([ > > > +AT_SETUP([Logical switch incremental processing]) > > > + > > > +ovn_start > > > + > > > +check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats > > > +check ovn-nbctl --wait=sb ls-add sw0 > > > +check_engine_stats northd norecompute compute > > > +check_engine_stats ls_stateful recompute nocompute > > > +check_engine_stats lflow recompute nocompute > > > + > > > +# For the below engine nodes, en_northd is input. So check > > > +# their engine status. > > > +check_engine_stats lr_stateful norecompute compute > > > +check_engine_stats route_policies norecompute compute > > > +check_engine_stats routes norecompute compute > > > +check_engine_stats bfd_sync norecompute compute > > > +check_engine_stats sync_to_sb_lb norecompute compute > > > +check_engine_stats sync_to_sb_pb norecompute compute > > > + > > > +CHECK_NO_CHANGE_AFTER_RECOMPUTE((1)) > > > + > > > +# Update the logical switch. > > > +check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats > > > +check ovn-nbctl --wait=sb set logical_switch sw0 other_config:foo=bar > > > + > > > +check_engine_stats northd recompute nocompute > > > +check_engine_stats ls_stateful recompute nocompute > > > +check_engine_stats lflow recompute nocompute > > > + > > > +# For the below engine nodes, en_northd is input. So check > > > +# their engine status. > > > +check_engine_stats lr_stateful recompute nocompute > > > +check_engine_stats route_policies recompute nocompute > > > +check_engine_stats routes recompute nocompute > > > +check_engine_stats bfd_sync recompute nocompute > > > +check_engine_stats sync_to_sb_lb recompute nocompute > > > +check_engine_stats sync_to_sb_pb recompute nocompute > > > + > > > +# Create a logical port > > > +check ovn-nbctl --wait=sb lsp-add sw0 lsp0 > > > + > > > +# Delete the logical switch > > > +check as northd ovn-appctl -t ovn-northd inc-engine/clear-stats > > > +check ovn-nbctl --wait=sb ls-del sw0 > > > +check_engine_stats northd norecompute compute > > > +check_engine_stats ls_stateful recompute nocompute > > > +check_engine_stats lflow recompute nocompute > > > + > > > +# For the below engine nodes, en_northd is input. So check > > > +# their engine status. > > > +check_engine_stats lr_stateful norecompute compute > > > +check_engine_stats route_policies norecompute compute > > > +check_engine_stats routes norecompute compute > > > +check_engine_stats bfd_sync norecompute compute > > > +check_engine_stats sync_to_sb_lb norecompute compute > > > +check_engine_stats sync_to_sb_pb norecompute compute > > > + > > > +AT_CLEANUP > > > +]) > > > + > > > AT_SETUP([RBAC -- Recover builtin role and permissions]) > > > ovn_start > > > > > > -- > > > 2.50.1 > > > > > > _______________________________________________ > > > dev mailing list > > > d...@openvswitch.org > > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > > One small nit, otherwise patch looks good to me. > > > > Acked-by: Mairtin O'Loingsigh <moloi...@redhat.com> > > > > _______________________________________________ > > dev mailing list > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > Sorry, I did not include nit in previous mail >
_______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev