Configuration of Gateway Chassis with different name than the default format of "$lrp-$chassis" could lead to duplicates when priority was changed for the GW Chassis with different name e.g.:
lrp0_chassis1 1 --> inserted by cms lrp0-chassis1 2 --> change priority with ovn-nbctl lrp-set-gateway-chassis ovn-controller would then create a log message every time it tried recalculate priorities. Search the GW Chassis linked to specified LRP by chassis_name first before resorting to uuid or name search. Signed-off-by: Lucas Vargas Dias <lucas.vd...@luizalabs.com> --- tests/ovn-nbctl.at | 16 +++++++++++++++- utilities/ovn-nbctl.c | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at index bdeb3aeee..fe4a984d0 100644 --- a/tests/ovn-nbctl.at +++ b/tests/ovn-nbctl.at @@ -1958,7 +1958,21 @@ AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl lrp0-chassis2 10 lrp0-chassis3 5 lrp0-chassis1 1 -])]) +]) +gc_uuid=$(ovn-nbctl --bare --colum _uuid find gateway_chassis name='lrp0-chassis1') +AT_CHECK([ovn-nbctl set gateway_chassis $gc_uuid name='lrp0_chassis1']) +AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl +lrp0-chassis2 10 +lrp0-chassis3 5 +lrp0_chassis1 1 +]) +AT_CHECK([ovn-nbctl lrp-set-gateway-chassis lrp0 chassis1 2]) +AT_CHECK([ovn-nbctl lrp-get-gateway-chassis lrp0], [0], [dnl +lrp0-chassis2 10 +lrp0-chassis3 5 +lrp0_chassis1 2 +]) +]) dnl --------------------------------------------------------------------- diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c index 56a513217..34caf599b 100644 --- a/utilities/ovn-nbctl.c +++ b/utilities/ovn-nbctl.c @@ -5829,12 +5829,22 @@ lr_get_name(const struct nbrec_logical_router *lr, char uuid_s[UUID_LEN + 1], } static char * OVS_WARN_UNUSED_RESULT -gc_by_name_or_uuid(struct ctl_context *ctx, const char *id, bool must_exist, - const struct nbrec_gateway_chassis **gc_p) +gc_by_chassis_name_or_name_or_uuid(struct ctl_context *ctx, const char *id, + const char *chassis_name, bool must_exist, + const struct nbrec_gateway_chassis **gc_p, + const struct nbrec_logical_router_port *lrp + ) { const struct nbrec_gateway_chassis *gc = NULL; *gc_p = NULL; + for (size_t i = 0; i < lrp->n_gateway_chassis; i++) { + if (!strcmp(lrp->gateway_chassis[i]->chassis_name, chassis_name)) { + *gc_p = lrp->gateway_chassis[i]; + return NULL; + } + } + struct uuid gc_uuid; bool is_uuid = uuid_from_string(&gc_uuid, id); if (is_uuid) { @@ -5867,6 +5877,7 @@ nbctl_pre_lrp_set_gateway_chassis(struct ctl_context *ctx) ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_name); ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_priority); + ovsdb_idl_add_column(ctx->idl, &nbrec_gateway_chassis_col_chassis_name); } static void @@ -5897,7 +5908,8 @@ nbctl_lrp_set_gateway_chassis(struct ctl_context *ctx) gc_name = xasprintf("%s-%s", lrp_name, chassis_name); const struct nbrec_gateway_chassis *gc; - error = gc_by_name_or_uuid(ctx, gc_name, false, &gc); + error = gc_by_chassis_name_or_name_or_uuid(ctx, gc_name, chassis_name, + false, &gc, lrp); if (error) { ctx->error = error; free(gc_name); -- 2.34.1 -- _'Esta mensagem é direcionada apenas para os endereços constantes no cabeçalho inicial. Se você não está listado nos endereços constantes no cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão imediatamente anuladas e proibidas'._ * **'Apesar do Magazine Luiza tomar todas as precauções razoáveis para assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por quaisquer perdas ou danos causados por esse e-mail ou por seus anexos'.* _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev