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 <[email protected]> --- 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. */ }; 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(); + 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); -- 2.30.2 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
