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

Reply via email to