Resumo

  • Os limites QUIC autorizam cumulativamente aberturas por tipo de stream.
  • Fechar um stream não devolve sua abertura nem cria uma vaga reutilizável.
  • A autorização de transporte deve ser separada da concorrência da aplicação, dos workers disponíveis, dos recursos downstream e da capacidade operacional.

O erro aparece quando um painel transforma initial_max_streams_bidi, initial_max_streams_uni ou MAX_STREAMS em uma métrica de concorrência. Ele subtrai streams fechados e chama o resultado de capacidade disponível. Essa conta não corresponde ao protocolo. A autorização indica quantos streams de determinado tipo o par pode abrir cumulativamente durante a vida da conexão. Ela não informa quantos permanecem abertos agora.

Os IDs de stream codificam iniciador e direção. Streams bidirecionais e unidirecionais têm espaços numéricos e limites separados. A autorização de um tipo não pode ser usada para outro, e a autorização de um iniciador não muda de dono. O registro deve preservar essas distinções antes de interpretar qualquer número.

Um parâmetro inicial ausente ou zero impede a abertura daquele tipo até um MAX_STREAMS posterior. A atualização pode aumentar o limite acumulado, mas nunca reduzi-lo. Um valor não crescente não tem efeito e é ignorado. A comparação correta é entre a autorização acumulada e o maior ordinal de stream aberto, não entre o limite e o número de streams vivos.

Registre em campos independentes: limite acumulado, maior ordinal aberto, estados aberto e fechado, concorrência solicitada pela aplicação, fila de trabalho, workers disponíveis, memória, CPU, recursos downstream, vazão alcançável, latência, conclusão e resultado operacional ou de negócio. Encerrar um stream altera seu estado vivo, mas não libera novamente a abertura. O número fechado não é reciclável.

Abrir além da autorização causa STREAM_LIMIT_ERROR. Valores acima de 2^60 também são inválidos porque não podem ser representados de modo consistente com o ID de stream. São regras de validade e exposição de estado, não uma promessa de capacidade implantável, de vazão ou de capacidade operacional. Limites baixos podem prejudicar aplicações que esperam muitos streams; limites altos podem ampliar o estado que um par pode fazer o endpoint manter.

STREAMS_BLOCKED tem um significado restrito: o remetente quis criar um novo stream, mas o limite atual de transporte impediu a criação. O frame não concede autoridade e não prova a razão da demanda, a existência de trabalho, a disponibilidade de workers, os recursos downstream, a vazão, o sucesso ou a capacidade operacional. É evidência de demanda bloqueada na fronteira do transporte.

A separação com outros registros é obrigatória. TR-046 trata de permissão de fluxo em bytes. TR-057 trata da contabilidade do tamanho final. TR-054 trata de STOP_SENDING e cancelamento de uma direção. TR-053 trata do encerramento da conexão. TR-040 trata de IDs de conexão e roteamento. Nenhum deles substitui a contagem cumulativa de aberturas deste tema.