From: Lorenzo Bianconi <lorenzo.bianc...@redhat.com>

This is a preliminary patch to introduce Incremental Processing to
Datapath-sync node.

Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com>
---
 northd/datapath-sync.h    |  5 +++++
 northd/en-datapath-sync.c | 28 ++++++++++++++--------------
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/northd/datapath-sync.h b/northd/datapath-sync.h
index 081d0af93..58f5f1382 100644
--- a/northd/datapath-sync.h
+++ b/northd/datapath-sync.h
@@ -78,6 +78,11 @@ struct ovn_synced_datapath {
 
 struct ovn_synced_datapaths {
     struct hmap synced_dps;
+    struct hmap dp_tnlids;
+
+    struct hmapx new;
+    struct hmapx updated;
+    struct hmapx deleted;
 };
 
 struct ovn_unsynced_datapath *ovn_unsynced_datapath_alloc(
diff --git a/northd/en-datapath-sync.c b/northd/en-datapath-sync.c
index ec25b0b2c..db84448e0 100644
--- a/northd/en-datapath-sync.c
+++ b/northd/en-datapath-sync.c
@@ -35,6 +35,7 @@ en_datapath_sync_init(struct engine_node *node OVS_UNUSED,
         = xmalloc(sizeof *synced_datapaths);
     *synced_datapaths = (struct ovn_synced_datapaths) {
         .synced_dps = HMAP_INITIALIZER(&synced_datapaths->synced_dps),
+        .dp_tnlids = HMAP_INITIALIZER(&synced_datapaths->dp_tnlids),
     };
 
     return synced_datapaths;
@@ -102,6 +103,8 @@ reset_synced_datapaths(struct ovn_synced_datapaths 
*synced_datapaths)
     HMAP_FOR_EACH_POP (sdp, hmap_node, &synced_datapaths->synced_dps) {
         free(sdp);
     }
+    ovn_destroy_tnlids(&synced_datapaths->dp_tnlids);
+    hmap_init(&synced_datapaths->dp_tnlids);
 }
 
 static void
@@ -169,7 +172,6 @@ create_synced_datapath_candidates_from_nb(
 
 static void
 assign_requested_tunnel_keys(struct vector *candidate_sdps,
-                             struct hmap *dp_tnlids,
                              struct ovn_synced_datapaths *synced_datapaths)
 {
     struct candidate_sdp *candidate;
@@ -177,7 +179,8 @@ assign_requested_tunnel_keys(struct vector *candidate_sdps,
         if (!candidate->requested_tunnel_key) {
             continue;
         }
-        if (!ovn_add_tnlid(dp_tnlids, candidate->requested_tunnel_key)) {
+        if (!ovn_add_tnlid(&synced_datapaths->dp_tnlids,
+                           candidate->requested_tunnel_key)) {
             static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
             VLOG_WARN_RL(&rl, "Logical datapath "UUID_FMT" requests same "
                          "tunnel key %"PRIu32" as another logical datapath",
@@ -195,7 +198,6 @@ assign_requested_tunnel_keys(struct vector *candidate_sdps,
 
 static void
 assign_existing_tunnel_keys(struct vector *candidate_sdps,
-                            struct hmap *dp_tnlids,
                             struct ovn_synced_datapaths *synced_datapaths)
 {
     struct candidate_sdp *candidate;
@@ -207,7 +209,8 @@ assign_existing_tunnel_keys(struct vector *candidate_sdps,
         /* Existing southbound DP. If this key is available,
          * reuse it.
          */
-        if (ovn_add_tnlid(dp_tnlids, candidate->existing_tunnel_key)) {
+        if (ovn_add_tnlid(&synced_datapaths->dp_tnlids,
+                          candidate->existing_tunnel_key)) {
             hmap_insert(&synced_datapaths->synced_dps,
                         &candidate->sdp->hmap_node,
                         uuid_hash(candidate->sdp->sb_dp->nb_uuid));
@@ -218,7 +221,6 @@ assign_existing_tunnel_keys(struct vector *candidate_sdps,
 
 static void
 allocate_tunnel_keys(struct vector *candidate_sdps,
-                     struct hmap *dp_tnlids,
                      uint32_t max_dp_tunnel_id,
                      struct ovn_synced_datapaths *synced_datapaths)
 {
@@ -229,7 +231,8 @@ allocate_tunnel_keys(struct vector *candidate_sdps,
             continue;
         }
         uint32_t tunnel_key =
-            ovn_allocate_tnlid(dp_tnlids, "datapath", OVN_MIN_DP_KEY_LOCAL,
+            ovn_allocate_tnlid(&synced_datapaths->dp_tnlids, "datapath",
+                               OVN_MIN_DP_KEY_LOCAL,
                                max_dp_tunnel_id, &hint);
         if (!tunnel_key) {
             continue;
@@ -293,18 +296,14 @@ en_datapath_sync_run(struct engine_node *node , void 
*data)
                                               &candidate_sdps);
     uuidset_destroy(&visited);
 
-    struct hmap dp_tnlids = HMAP_INITIALIZER(&dp_tnlids);
-    assign_requested_tunnel_keys(&candidate_sdps, &dp_tnlids,
-                                 synced_datapaths);
-    assign_existing_tunnel_keys(&candidate_sdps, &dp_tnlids, synced_datapaths);
-    allocate_tunnel_keys(&candidate_sdps, &dp_tnlids,
-                         global_config->max_dp_tunnel_id, synced_datapaths);
+    assign_requested_tunnel_keys(&candidate_sdps, synced_datapaths);
+    assign_existing_tunnel_keys(&candidate_sdps, synced_datapaths);
+    allocate_tunnel_keys(&candidate_sdps, global_config->max_dp_tunnel_id,
+                         synced_datapaths);
 
     delete_unassigned_candidates(&candidate_sdps);
     vector_destroy(&candidate_sdps);
 
-    ovn_destroy_tnlids(&dp_tnlids);
-
     return EN_UPDATED;
 }
 
@@ -317,4 +316,5 @@ void en_datapath_sync_cleanup(void *data)
         free(sdp);
     }
     hmap_destroy(&synced_datapaths->synced_dps);
+    ovn_destroy_tnlids(&synced_datapaths->dp_tnlids);
 }
-- 
2.49.0

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to