Every LR datapath references to some LR group, but not every LR group has HA chassis groups. This patch avoids collecting LR groups and reference chassis for the LR groups without HA chassis groups.
In addition, this patch also refactors the function build_ha_chassis_group_ref_chassis to avoid the unnecessary SB ha_chassis_group lookup by name, because the only field used is the name. Signed-off-by: Han Zhou <[email protected]> --- northd/en-sync-from-sb.c | 6 +----- northd/northd.c | 23 +++++------------------ northd/northd.h | 1 - 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/northd/en-sync-from-sb.c b/northd/en-sync-from-sb.c index 4109aebe4517..2df02ad12067 100644 --- a/northd/en-sync-from-sb.c +++ b/northd/en-sync-from-sb.c @@ -53,13 +53,9 @@ en_sync_from_sb_run(struct engine_node *node, void *data OVS_UNUSED) EN_OVSDB_GET(engine_get_input("SB_port_binding", node)); const struct sbrec_ha_chassis_group_table *sb_ha_ch_grp_table = EN_OVSDB_GET(engine_get_input("SB_ha_chassis_group", node)); - struct ovsdb_idl_index *sb_ha_ch_grp_by_name = - engine_ovsdb_node_get_index( - engine_get_input("SB_ha_chassis_group", node), - "sbrec_ha_chassis_grp_by_name"); stopwatch_start(OVNSB_DB_RUN_STOPWATCH_NAME, time_msec()); ovnsb_db_run(eng_ctx->ovnnb_idl_txn, eng_ctx->ovnsb_idl_txn, - sb_pb_table, sb_ha_ch_grp_table, sb_ha_ch_grp_by_name, + sb_pb_table, sb_ha_ch_grp_table, &nd->ls_ports, &nd->lr_ports); stopwatch_stop(OVNSB_DB_RUN_STOPWATCH_NAME, time_msec()); } diff --git a/northd/northd.c b/northd/northd.c index bb56bfac6c0f..83f341438c3b 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -17647,7 +17647,7 @@ collect_lr_groups_for_ha_chassis_groups(const struct sbrec_port_binding *sb, break; } - if (!lr_group) { + if (!lr_group || sset_is_empty(&lr_group->ha_chassis_groups)) { return; } @@ -17656,8 +17656,7 @@ collect_lr_groups_for_ha_chassis_groups(const struct sbrec_port_binding *sb, } static void -build_ha_chassis_group_ref_chassis(struct ovsdb_idl_index *ha_ch_grp_by_name, - struct hmapx *lr_groups, +build_ha_chassis_group_ref_chassis(struct hmapx *lr_groups, struct shash *ha_ref_chassis_map) { struct hmapx_node *node; @@ -17667,16 +17666,8 @@ build_ha_chassis_group_ref_chassis(struct ovsdb_idl_index *ha_ch_grp_by_name, const char *ha_group_name; SSET_FOR_EACH (ha_group_name, &lr_group->ha_chassis_groups) { - const struct sbrec_ha_chassis_group *sb_ha_chassis_grp; - - sb_ha_chassis_grp = ha_chassis_group_lookup_by_name( - ha_ch_grp_by_name, ha_group_name); - if (!sb_ha_chassis_grp) { - continue; - } - struct ha_ref_chassis_info *ref_ch_info = - shash_find_data(ha_ref_chassis_map, sb_ha_chassis_grp->name); + shash_find_data(ha_ref_chassis_map, ha_group_name); ovs_assert(ref_ch_info); add_to_ha_ref_chassis_info(ref_ch_info, @@ -17711,7 +17702,6 @@ static void handle_port_binding_changes(struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_port_binding_table *sb_pb_table, const struct sbrec_ha_chassis_group_table *sb_ha_ch_grp_table, - struct ovsdb_idl_index *sb_ha_ch_grp_by_name, struct hmap *ls_ports, struct hmap *lr_ports, struct shash *ha_ref_chassis_map) @@ -17784,8 +17774,7 @@ handle_port_binding_changes(struct ovsdb_idl_txn *ovnsb_txn, } /* Update ha chassis group's ref_chassis if required. */ - build_ha_chassis_group_ref_chassis(sb_ha_ch_grp_by_name, &lr_groups, - ha_ref_chassis_map); + build_ha_chassis_group_ref_chassis(&lr_groups, ha_ref_chassis_map); hmapx_destroy(&lr_groups); } @@ -17795,7 +17784,6 @@ ovnsb_db_run(struct ovsdb_idl_txn *ovnnb_txn, struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_port_binding_table *sb_pb_table, const struct sbrec_ha_chassis_group_table *sb_ha_ch_grp_table, - struct ovsdb_idl_index *sb_ha_ch_grp_by_name, struct hmap *ls_ports, struct hmap *lr_ports) { @@ -17806,8 +17794,7 @@ ovnsb_db_run(struct ovsdb_idl_txn *ovnnb_txn, struct shash ha_ref_chassis_map = SHASH_INITIALIZER(&ha_ref_chassis_map); handle_port_binding_changes(ovnsb_txn, sb_pb_table, sb_ha_ch_grp_table, - sb_ha_ch_grp_by_name, ls_ports, lr_ports, - &ha_ref_chassis_map); + ls_ports, lr_ports, &ha_ref_chassis_map); if (ovnsb_txn) { update_sb_ha_group_ref_chassis(sb_ha_ch_grp_table, &ha_ref_chassis_map); diff --git a/northd/northd.h b/northd/northd.h index 2bb691094596..f03e32b2d0b2 100644 --- a/northd/northd.h +++ b/northd/northd.h @@ -320,7 +320,6 @@ void ovnsb_db_run(struct ovsdb_idl_txn *ovnnb_txn, struct ovsdb_idl_txn *ovnsb_txn, const struct sbrec_port_binding_table *, const struct sbrec_ha_chassis_group_table *, - struct ovsdb_idl_index *sb_ha_ch_grp_by_name, struct hmap *ls_ports, struct hmap *lr_ports); bool northd_handle_ls_changes(struct ovsdb_idl_txn *, -- 2.38.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
