Skip to content

[ENG-45620] fix: render and persist custom QUIC ports in workload protocol settings#3540

Open
gdsantana wants to merge 3 commits into
devfrom
ENG-45620-console-ui-campo-http-3-port-nao-e-renderizado-corretamente-ao-usar-valores-customizados
Open

[ENG-45620] fix: render and persist custom QUIC ports in workload protocol settings#3540
gdsantana wants to merge 3 commits into
devfrom
ENG-45620-console-ui-campo-http-3-port-nao-e-renderizado-corretamente-ao-usar-valores-customizados

Conversation

@gdsantana

Copy link
Copy Markdown
Contributor

Bug fix

What was the problem?

Workloads criados via API/CLI/Terraform com suporte a HTTP/3 e quic_ports diferente de 443 quebravam a tela de edição no Console:

  • O campo HTTP3 Port renderizava vazio (apenas o ícone de cadeado), apesar de a API ter retornado o valor corretamente.
  • Qualquer modificação salva nessa tela (ex.: trocar o Firewall) disparava um erro, pois o adapter de save tentava acessar .value em undefined.

A causa raiz: o adapter usava HTTP3_PORT_LIST_OPTIONS (uma lista fechada contendo apenas { value: 443 }) como tabela de lookup. Quando a porta vinda da API não estava nessa lista, Array.prototype.find retornava undefined, colapsando o valor tanto no load quanto no save (parseInt(undefined.value)TypeError). O mesmo padrão estava em httpPorts e httpsPorts.

Expected behavior

A UI deve renderizar qualquer valor de QUIC port considerado válido pela API e preservar esse valor no round-trip de save, sem corromper o workload.

How was it solved

src/services/v2/workload/workload-adapter.js

  • Novo helper mapPortToOption(port, options) que sintetiza { name: String(port), value: port } quando a porta vinda da API não existe na lista de defaults, em vez de retornar undefined.
  • Aplicado nos três tipos de porta (HTTP, HTTPS, HTTP3) em transformLoadWorkload e transformCachedWorkloadToEdit.
  • convertPortsArrayToIntegers agora aceita number direto ou { value }, filtra entradas nulas e descarta NaN, eliminando o TypeError no save.

src/views/Workload/FormFields/blocks/protocolSettingsBlock.vue

  • Helper mergePortOptions + computeds httpPortOptions / httpsPortOptions / http3PortOptions que injetam o valor corrente do form nas options do MultiSelect, garantindo que o chip seja renderizado mesmo quando a porta não está na lista padrão.
  • Comportamento de produto preservado: o campo HTTP3 continua disabled; apenas passa a exibir o valor real que veio da API.

How to test

  1. Via API/CLI/Terraform, crie um workload com protocols.http.versions incluindo http3 e quic_ports customizado (ex.: [9443]):
    {
      "name": "test-http3-custom-quic-port",
      "active": true,
      "infrastructure": 1,
      "protocols": {
        "http": {
          "versions": ["http1", "http2", "http3"],
          "http_ports": [80],
          "https_ports": [443],
          "quic_ports": [9443]
        }
      }
    }
  2. No Console, abra a tela de edição desse workload e role até Protocol Settings.
  3. Verifique que o campo HTTP3 Port exibe o chip 9443 (e não mais um campo vazio com cadeado).
  4. Altere outro campo da tela (ex.: Firewall) e clique em Save.
  5. Confirme que o save é bem-sucedido e que quic_ports permanece [9443] após o reload.
  6. Regressão: edite um workload com quic_ports: [443] e confirme que o chip 443 (Default) continua aparecendo e o save funciona normalmente.

🤖 Generated with Claude Code

@gdsantana

Copy link
Copy Markdown
Contributor Author

Ainda deve ser validado porque não possivel configurar as portas de http3

@gdsantana gdsantana force-pushed the ENG-45620-console-ui-campo-http-3-port-nao-e-renderizado-corretamente-ao-usar-valores-customizados branch from 9b97dcf to b329f48 Compare June 2, 2026 17:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working do-not-merge

Development

Successfully merging this pull request may close these issues.

2 participants