On Thu, Oct 26, 2023 at 11:14 AM <[email protected]> wrote:
>
> From: Numan Siddique <[email protected]>
>
> northd engine tracked data now also stores the logical switches
> and logical routers that got updated due to the changed load balancers.
>
> Eg 1.  For this command 'ovn-nbctl ls-lb-add sw0 lb1 -- lr-lb-add lr0
> lb1', northd engine tracking data will store 'sw0' and 'lr0'.
>
> Eg 2.  If load balancer lb1 is already associated with 'sw0' and 'lr0'
> then for this command 'ovn-nbctl set load_balancer <lb1>
> vips:10.0.0.10=20.0.0.20', northd engine tracking data will store
> 'sw0' and 'lr0'.
>
> An upcoming commit will make use of this tracked data.
>
> Signed-off-by: Numan Siddique <[email protected]>
> ---
>  northd/northd.c | 34 +++++++++++++++++++++++++++++++++-
>  northd/northd.h | 12 ++++++++++++
>  2 files changed, 45 insertions(+), 1 deletion(-)
>
> diff --git a/northd/northd.c b/northd/northd.c
> index df22a9c658..9ce1b2cb5a 100644
> --- a/northd/northd.c
> +++ b/northd/northd.c
> @@ -5146,6 +5146,8 @@ destroy_northd_data_tracked_changes(struct
northd_data *nd)
>      struct northd_tracked_data *trk_changes = &nd->trk_northd_changes;
>      destroy_tracked_ovn_ports(&trk_changes->trk_ovn_ports);
>      destroy_tracked_lbs(&trk_changes->trk_lbs);
> +    hmapx_clear(&trk_changes->ls_with_changed_lbs.crupdated);
> +    hmapx_clear(&trk_changes->lr_with_changed_lbs.crupdated);
>      nd->change_tracked = false;
>  }
>
> @@ -5158,6 +5160,8 @@ init_northd_tracked_data(struct northd_data *nd)
>      hmapx_init(&trk_changes->trk_ovn_ports.deleted);
>      hmapx_init(&trk_changes->trk_lbs.crupdated);
>      hmapx_init(&trk_changes->trk_lbs.deleted);
> +    hmapx_init(&trk_changes->ls_with_changed_lbs.crupdated);
> +    hmapx_init(&trk_changes->lr_with_changed_lbs.crupdated);
>  }
>
>  static void
> @@ -5169,6 +5173,8 @@ destroy_northd_tracked_data(struct northd_data *nd)
>      hmapx_destroy(&trk_changes->trk_ovn_ports.deleted);
>      hmapx_destroy(&trk_changes->trk_lbs.crupdated);
>      hmapx_destroy(&trk_changes->trk_lbs.deleted);
> +    hmapx_destroy(&trk_changes->ls_with_changed_lbs.crupdated);
> +    hmapx_destroy(&trk_changes->lr_with_changed_lbs.crupdated);
>  }
>
>
> @@ -5179,7 +5185,10 @@ northd_has_tracked_data(struct northd_tracked_data
*trk_nd_changes)
>              || !hmapx_is_empty(&trk_nd_changes->trk_ovn_ports.updated)
>              || !hmapx_is_empty(&trk_nd_changes->trk_ovn_ports.deleted)
>              || !hmapx_is_empty(&trk_nd_changes->trk_lbs.crupdated)
> -            || !hmapx_is_empty(&trk_nd_changes->trk_lbs.deleted));
> +            || !hmapx_is_empty(&trk_nd_changes->trk_lbs.deleted)
> +            ||
!hmapx_is_empty(&trk_nd_changes->ls_with_changed_lbs.crupdated)
> +            ||
!hmapx_is_empty(&trk_nd_changes->lr_with_changed_lbs.crupdated)
> +            );
>  }
>
>  bool
> @@ -5188,6 +5197,8 @@ northd_has_only_ports_in_tracked_data(
>  {
>      return (hmapx_is_empty(&trk_nd_changes->trk_lbs.crupdated)
>              && hmapx_is_empty(&trk_nd_changes->trk_lbs.deleted)
> +            &&
hmapx_is_empty(&trk_nd_changes->ls_with_changed_lbs.crupdated)
> +            &&
hmapx_is_empty(&trk_nd_changes->lr_with_changed_lbs.crupdated)
>              && (!hmapx_is_empty(&trk_nd_changes->trk_ovn_ports.created)
>              || !hmapx_is_empty(&trk_nd_changes->trk_ovn_ports.updated)
>              || !hmapx_is_empty(&trk_nd_changes->trk_ovn_ports.deleted)));
> @@ -5828,6 +5839,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>                             lb_dps->nb_ls_map) {
>              od = ls_datapaths->array[index];
>              init_lb_for_datapath(od);
> +
> +            /* Add the ls datapath to the northd tracked data. */
> +            hmapx_add(&nd_changes->ls_with_changed_lbs.crupdated, od);
>          }
>
>          hmap_remove(lb_datapaths_map, &lb_dps->hmap_node);
> @@ -5909,6 +5923,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>          /* Re-evaluate 'od->has_lb_vip' */
>          init_lb_for_datapath(od);
> +
> +        /* Add the ls datapath to the northd tracked data. */
> +        hmapx_add(&nd_changes->ls_with_changed_lbs.crupdated, od);
>      }
>
>      LIST_FOR_EACH (codlb, list_node, &trk_lb_data->crupdated_lr_lbs) {
> @@ -5954,6 +5971,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>          /* Re-evaluate 'od->has_lb_vip' */
>          init_lb_for_datapath(od);
> +
> +        /* Add the lr datapath to the northd tracked data. */
> +        hmapx_add(&nd_changes->lr_with_changed_lbs.crupdated, od);
>      }
>
>      HMAP_FOR_EACH (clb, hmap_node, &trk_lb_data->crupdated_lbs) {
> @@ -5968,6 +5988,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>              od = ls_datapaths->array[index];
>              /* Re-evaluate 'od->has_lb_vip' */
>              init_lb_for_datapath(od);
> +
> +            /* Add the ls datapath to the northd tracked data. */
> +            hmapx_add(&nd_changes->ls_with_changed_lbs.crupdated, od);
>          }
>
>          BITMAP_FOR_EACH_1 (index, ods_size(lr_datapaths),
> @@ -5991,6 +6014,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>              add_neigh_ips_to_lrouter(od, lb->neigh_mode,
>                                       &clb->inserted_vips_v4,
>                                       &clb->inserted_vips_v6);
> +
> +            /* Add the lr datapath to the northd tracked data. */
> +            hmapx_add(&nd_changes->lr_with_changed_lbs.crupdated, od);
>          }
>      }
>
> @@ -6018,6 +6044,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>                  /* Add the lb_ips of lb_dps to the od. */
>                  build_lrouter_lb_ips(od->lb_ips, lb_dps->lb);
> +
> +                /* Add the lr datapath to the northd tracked data. */
> +                hmapx_add(&nd_changes->lr_with_changed_lbs.crupdated,
od);
>              }
>
>              for (size_t i = 0; i < lbgrp_dps->n_ls; i++) {
> @@ -6026,6 +6055,9 @@ northd_handle_lb_data_changes(struct
tracked_lb_data *trk_lb_data,
>
>                  /* Re-evaluate 'od->has_lb_vip' */
>                  init_lb_for_datapath(od);
> +
> +                /* Add the ls datapath to the northd tracked data. */
> +                hmapx_add(&nd_changes->ls_with_changed_lbs.crupdated,
od);
>              }
>
>              /* Add the lb to the northd tracked data. */
> diff --git a/northd/northd.h b/northd/northd.h
> index 2e4f125902..0478826f0a 100644
> --- a/northd/northd.h
> +++ b/northd/northd.h
> @@ -107,12 +107,24 @@ struct tracked_lbs {
>      struct hmapx deleted;
>  };
>
> +/* Tracked logical switches whose load balancers have changed. */
> +struct tracked_lswitches_with_changed_lbs {
> +    struct hmapx crupdated;
> +};
> +
> +/* Tracked logical routers whose load balancers have changed. */
> +struct tracked_lrouters_with_changed_lbs {
> +    struct hmapx crupdated;
> +};
> +
>  /* Track what's changed in the northd engine node.
>   * Now only tracks ovn_ports (of vif type) - created, updated
>   * and deleted. */
>  struct northd_tracked_data {
>      struct tracked_ovn_ports trk_ovn_ports;
>      struct tracked_lbs trk_lbs;
> +    struct tracked_lswitches_with_changed_lbs ls_with_changed_lbs;
> +    struct tracked_lrouters_with_changed_lbs lr_with_changed_lbs;
>  };

The data structure looks a little strange. struct
tracked_lswitches_with_changed_lbs and tracked_lrouters_with_changed_lbs
are the same and both have only a single member. IMHO it would be
unnecessary to define such structures. The vars ls_with_changed_lbs and
lr_with_changed_lbs can be defined as struct hmapx, and the var names are
sufficient to tell their different use. In addition, the name "crupdated"
is also a little misleading. It seems to indicate the tracked objects are
either created or updated but never deleted, but it is not the case. But
anyway, I think it is better not defining the struct at all.

Thanks,
Han

>
>  struct northd_data {
> --
> 2.41.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to