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