On 6/18/23 08:17, Han Zhou wrote: > For incremental processing, we need to maintain SB lflow uuids in > northd. For this reason, we generate the row uuid when creating the > Logical_Flow record in SB DB, rather than waiting for SB DB to populate > back. > > Signed-off-by: Han Zhou <hz...@ovn.org> > --- > northd/northd.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/northd/northd.c b/northd/northd.c > index a45c8b53ad4e..98f528f93cfc 100644 > --- a/northd/northd.c > +++ b/northd/northd.c > @@ -5592,6 +5592,8 @@ struct ovn_lflow { > * 'dpg_bitmap'. */ > struct ovn_dp_group *dpg; /* Link to unique Sb datapath group. */ > const char *where; > + > + struct uuid sb_uuid; /* SB DB row uuid, specified by northd. > */
Nit: can you please align this comment with the ones above? > }; > > static void ovn_lflow_destroy(struct hmap *lflows, struct ovn_lflow *lflow); > @@ -5649,6 +5651,7 @@ ovn_lflow_init(struct ovn_lflow *lflow, struct > ovn_datapath *od, > lflow->ctrl_meter = ctrl_meter; > lflow->dpg = NULL; > lflow->where = where; > + lflow->sb_uuid = UUID_ZERO; > } > > /* The lflow_hash_lock is a mutex array that protects updates to the shared > @@ -16020,6 +16023,7 @@ void build_lflows(struct ovsdb_idl_txn *ovnsb_txn, > size_t n_datapaths; > bool is_switch; > > + lflow->sb_uuid = sbflow->header_.uuid; > is_switch = ovn_stage_to_datapath_type(lflow->stage) == > DP_SWITCH; > if (is_switch) { > n_datapaths = ods_size(input_data->ls_datapaths); > @@ -16095,7 +16099,9 @@ void build_lflows(struct ovsdb_idl_txn *ovnsb_txn, > dp_groups = &lr_dp_groups; > } > > - sbflow = sbrec_logical_flow_insert(ovnsb_txn); > + lflow->sb_uuid = uuid_random(); If we ever decide to parallelize the lflow synchronization code this will hurt performance. Until then we're fine I guess. > + sbflow = sbrec_logical_flow_insert_persist_uuid(ovnsb_txn, > + &lflow->sb_uuid); > if (lflow->od) { > sbrec_logical_flow_set_logical_datapath(sbflow, lflow->od->sb); > } else { > @@ -16305,7 +16311,9 @@ bool lflow_handle_northd_ls_changes(struct > ovsdb_idl_txn *ovnsb_txn, > > /* Sync to SB. */ > const struct sbrec_logical_flow *sbflow; > - sbflow = sbrec_logical_flow_insert(ovnsb_txn); > + lflow->sb_uuid = uuid_random(); > + sbflow = sbrec_logical_flow_insert_persist_uuid(ovnsb_txn, > + &lflow->sb_uuid); > const char *pipeline = ovn_stage_get_pipeline_name(lflow->stage); > uint8_t table = ovn_stage_get_table(lflow->stage); > sbrec_logical_flow_set_logical_datapath(sbflow, lflow->od->sb); With the small nit about the comment indentation addressed: Acked-by: Dumitru Ceara <dce...@redhat.com> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev