On Tue, Dec 16, 2025 at 7:45 PM Mark Michelson via dev < [email protected]> wrote:
> This removes the "index" field from struct ovn_datapath, since we can > now use the embedded struct ovn_synced_datapath's index instead. When > adding the ovn_datapath to its own sparse array, we use the > sparse_array_add_at() function to ensure that the indexes match up. > > Signed-off-by: Mark Michelson <[email protected]> > --- > northd/en-lr-nat.c | 2 +- > northd/en-lr-stateful.c | 2 +- > northd/en-ls-arp.c | 2 +- > northd/en-ls-stateful.c | 2 +- > northd/lb.c | 4 ++-- > northd/lflow-mgr.c | 30 +++++++++++++++--------------- > northd/northd.c | 8 ++++---- > northd/northd.h | 3 --- > 8 files changed, 25 insertions(+), 28 deletions(-) > > diff --git a/northd/en-lr-nat.c b/northd/en-lr-nat.c > index 5a1f47697..45bdbab39 100644 > --- a/northd/en-lr-nat.c > +++ b/northd/en-lr-nat.c > @@ -376,7 +376,7 @@ lr_nat_record_init(struct lr_nat_record *lrnat_rec, > const struct ovn_datapath *od, > const struct hmap *lr_ports) > { > - lrnat_rec->lr_index = od->index; > + lrnat_rec->lr_index = od->sdp->index; > lrnat_rec->nbr_uuid = od->nbr->header_.uuid; > > shash_init(&lrnat_rec->snat_ips); > diff --git a/northd/en-lr-stateful.c b/northd/en-lr-stateful.c > index 5eec1e11a..212c0641c 100644 > --- a/northd/en-lr-stateful.c > +++ b/northd/en-lr-stateful.c > @@ -464,7 +464,7 @@ lr_stateful_record_create(struct lr_stateful_table > *table, > xzalloc(sizeof *lr_stateful_rec); > lr_stateful_rec->nbr_uuid = od->nbr->header_.uuid; > lr_stateful_rec->lrnat_rec = lrnat_rec; > - lr_stateful_rec->lr_index = od->index; > + lr_stateful_rec->lr_index = od->sdp->index; > lr_stateful_rec->lflow_ref = lflow_ref_create(); > > > diff --git a/northd/en-ls-arp.c b/northd/en-ls-arp.c > index 72622fce5..d571dc941 100644 > --- a/northd/en-ls-arp.c > +++ b/northd/en-ls-arp.c > @@ -130,7 +130,7 @@ ls_arp_record_create(struct ls_arp_table *table, > { > struct ls_arp_record *ls_arp_record = xzalloc(sizeof *ls_arp_record); > > - ls_arp_record->ls_index = od->index; > + ls_arp_record->ls_index = od->sdp->index; > ls_arp_record->nbs_uuid = od->nbs->header_.uuid; > > hmapx_init(&ls_arp_record->nat_records); > diff --git a/northd/en-ls-stateful.c b/northd/en-ls-stateful.c > index 0dea24aee..bfef7bd91 100644 > --- a/northd/en-ls-stateful.c > +++ b/northd/en-ls-stateful.c > @@ -333,7 +333,7 @@ ls_stateful_record_create(struct ls_stateful_table > *table, > { > struct ls_stateful_record *ls_stateful_rec = > xzalloc(sizeof *ls_stateful_rec); > - ls_stateful_rec->ls_index = od->index; > + ls_stateful_rec->ls_index = od->sdp->index; > ls_stateful_rec->nbs_uuid = od->nbs->header_.uuid; > uuidset_init(&ls_stateful_rec->related_acls); > ls_stateful_record_init(ls_stateful_rec, od, ls_pgs); > diff --git a/northd/lb.c b/northd/lb.c > index 919557ec4..0b9a3ee87 100644 > --- a/northd/lb.c > +++ b/northd/lb.c > @@ -655,7 +655,7 @@ ovn_lb_datapaths_add_lr(struct ovn_lb_datapaths > *lb_dps, size_t n, > { > dynamic_bitmap_realloc(&lb_dps->nb_lr_map, n_lr_datapaths); > for (size_t i = 0; i < n; i++) { > - dynamic_bitmap_set1(&lb_dps->nb_lr_map, ods[i]->index); > + dynamic_bitmap_set1(&lb_dps->nb_lr_map, ods[i]->sdp->index); > } > } > > @@ -666,7 +666,7 @@ ovn_lb_datapaths_add_ls(struct ovn_lb_datapaths > *lb_dps, size_t n, > { > dynamic_bitmap_realloc(&lb_dps->nb_ls_map, n_ls_datapaths); > for (size_t i = 0; i < n; i++) { > - dynamic_bitmap_set1(&lb_dps->nb_ls_map, ods[i]->index); > + dynamic_bitmap_set1(&lb_dps->nb_ls_map, ods[i]->sdp->index); > } > } > > diff --git a/northd/lflow-mgr.c b/northd/lflow-mgr.c > index c5501ae95..38ea42f5a 100644 > --- a/northd/lflow-mgr.c > +++ b/northd/lflow-mgr.c > @@ -500,10 +500,10 @@ lflow_table_sync_to_sb(struct lflow_table > *lflow_table, > * L3 is referenced by E1 and E2 > * L4 is referenced by just E2 > * > - * L1->dpg_bitmap = [E1->od->index, E2->od->index] > - * L2->dpg_bitmap = [E1->od->index] > - * L3->dpg_bitmap = [E1->od->index, E2->od->index] > - * L4->dpg_bitmap = [E2->od->index] > + * L1->dpg_bitmap = [E1->od->sdp->index, E2->od->index] > + * L2->dpg_bitmap = [E1->od->sdp->index] > + * L3->dpg_bitmap = [E1->od->sdp->index, E2->od->index] > + * L4->dpg_bitmap = [E2->od->sdp->index] > * > * > * When 'E' gets updated, > @@ -519,10 +519,10 @@ lflow_table_sync_to_sb(struct lflow_table > *lflow_table, > * > * bitmap status of all lflows in the lflows table > * ----------------------------------------------- > - * L1->dpg_bitmap = [E2->od->index] > + * L1->dpg_bitmap = [E2->od->sdp->index] > * L2->dpg_bitmap = [] > - * L3->dpg_bitmap = [E2->od->index] > - * L4->dpg_bitmap = [E2->od->index] > + * L3->dpg_bitmap = [E2->od->sdp->index] > + * L4->dpg_bitmap = [E2->od->sdp->index] > * > * 2. In step (2), client should generate the logical flows again for > 'E1'. > * Lets say it calls: > @@ -539,11 +539,11 @@ lflow_table_sync_to_sb(struct lflow_table > *lflow_table, > * > * bitmap status of all lflows in the lflow table after end of step > (2) > * > -------------------------------------------------------------------- > - * L1->dpg_bitmap = [E2->od->index] > + * L1->dpg_bitmap = [E2->od->sdp->index] > * L2->dpg_bitmap = [] > - * L3->dpg_bitmap = [E1->od->index, E2->od->index] > - * L4->dpg_bitmap = [E2->od->index] > - * L5->dpg_bitmap = [E1->od->index] > + * L3->dpg_bitmap = [E1->od->sdp->index, E2->od->index] > + * L4->dpg_bitmap = [E2->od->sdp->index] > + * L5->dpg_bitmap = [E1->od->sdp->index] > * > * 3. In step (3), client should sync the E1's lflows by calling > * lflow_ref_sync_lflows(E1->lflow_ref,....); > @@ -720,7 +720,7 @@ lflow_ref_sync_lflows(struct lflow_ref *lflow_ref, > * > * If a logical flow L(M, A) for the 'match' and 'actions' already exist > then > * - It will be no-op if L(M,A) was already added for the same datapath. > - * - if its a different datapath, then the datapath index (od->index) > + * - if its a different datapath, then the datapath index > (od->sdp->index) > * is set in the lflow dp group bitmap. > * > * If 'lflow_ref' is not NULL then > @@ -776,7 +776,7 @@ lflow_table_add_lflow(struct lflow_table *lflow_table, > lrn->dpgrp_bitmap = bitmap_clone(dp_bitmap, > dp_bitmap_len); > lrn->dpgrp_bitmap_len = dp_bitmap_len; > } else { > - lrn->dp_index = od->index; > + lrn->dp_index = od->sdp->index; > } > ovs_list_insert(&lflow->referenced_by, &lrn->ref_list_node); > hmap_insert(&lflow_ref->lflow_ref_nodes, &lrn->ref_node, > hash); > @@ -856,7 +856,7 @@ ovn_dp_group_create(struct ovsdb_idl_txn *ovnsb_txn, > if (!datapath_od || ovn_datapath_is_stale(datapath_od)) { > break; > } > - dynamic_bitmap_set1(&dpg_bitmap, datapath_od->index); > + dynamic_bitmap_set1(&dpg_bitmap, datapath_od->sdp->index); > } > if (!sb_group || i != sb_group->n_datapaths) { > /* No group or stale group. Not going to be used. */ > @@ -1334,7 +1334,7 @@ ovn_dp_group_add_with_reference(struct ovn_lflow > *lflow_ref, > OVS_REQUIRES(fake_hash_mutex) > { > if (od) { > - dynamic_bitmap_set1(&lflow_ref->dpg_bitmap, od->index); > + dynamic_bitmap_set1(&lflow_ref->dpg_bitmap, od->sdp->index); > } > if (dp_bitmap) { > dynamic_bitmap_or(&lflow_ref->dpg_bitmap, dp_bitmap, bitmap_len); > diff --git a/northd/northd.c b/northd/northd.c > index abd67ee4d..e869b8dd5 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -894,7 +894,7 @@ ods_build_array_index(struct ovn_datapaths *datapaths) > * doesn't matter if they are different on every iteration. */ > struct ovn_datapath *od; > HMAP_FOR_EACH (od, key_node, &datapaths->datapaths) { > - od->index = sparse_array_add(&datapaths->dps, &od); > + sparse_array_add_at(&datapaths->dps, &od, od->sdp->index); > od->datapaths = datapaths; > } > } > @@ -903,7 +903,7 @@ static void > ods_assign_array_index(struct ovn_datapaths *datapaths, > struct ovn_datapath *od) > { > - od->index = sparse_array_add(&datapaths->dps, &od); > + sparse_array_add_at(&datapaths->dps, &od, od->sdp->index); > od->datapaths = datapaths; > } > > @@ -4917,7 +4917,7 @@ northd_handle_ls_changes(struct ovsdb_idl_txn > *ovnsb_idl_txn, > } > > hmap_remove(&nd->ls_datapaths.datapaths, &od->key_node); > - sparse_array_remove(&nd->ls_datapaths.dps, od->index); > + sparse_array_remove(&nd->ls_datapaths.dps, od->sdp->index); > > const struct sbrec_ip_multicast *ip_mcast = > ip_mcast_lookup(ni->sbrec_ip_mcast_by_dp, od->sdp->sb_dp); > @@ -5227,7 +5227,7 @@ northd_handle_lr_changes(const struct northd_input > *ni, > } > > hmap_remove(&nd->lr_datapaths.datapaths, &od->key_node); > - sparse_array_remove(&nd->lr_datapaths.dps, od->index); > + sparse_array_remove(&nd->lr_datapaths.dps, od->sdp->index); > > hmapx_add(&nd->trk_data.trk_routers.deleted, od); > } > diff --git a/northd/northd.h b/northd/northd.h > index a9cfacb1c..ffaa78d10 100644 > --- a/northd/northd.h > +++ b/northd/northd.h > @@ -401,9 +401,6 @@ struct ovn_datapath { > struct hmap_node key_node; /* Index on 'key'. */ > struct uuid key; /* (nbs/nbr)->header_.uuid. */ > > - size_t index; /* A unique index across all datapaths. > - * Datapath indexes start from zero. */ > - > struct ovn_datapaths *datapaths; /* The collection of datapaths that > contains this datapath. */ > > -- > 2.51.1 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > With the potential sparse_array changes accounted for: Acked-by: Ales Musil <[email protected]> Thanks, Ales _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
