Compartilhar tickets de terminal entre pods, ou metade deles são recusados

FixSecurityService
Navios
4 de setembro de 2026 às 23:45 UTC
Autor
Kamo
Enviar
37c5494

A abertura de um terminal falha cerca da metade do tempo com "O servidor recusou o ligação terminal. Seu ticket pode ter expirado", e o registro diz: Aperto de mão do terminal recusado: nenhum ticket válido Ambos os terminais foram mantidos em um ConcurrentHashMap dentro de uma cápsula, e ambas estão divididas em duas conversas independentes que não aterram juntas: - o Ticket é cunhado por POST **************** que o o navegador envia para as proxies kamo-internas e kamo-internas a partir de uma das Cápsulas ITS — e é resgatado por um aperto de mão WebSocket o navegador abre diretamente no bordo em /desktop-ws; e recolhidos pelo pedido de ticket que o segue. Eles chegam a diferentes conexões de diferentes fontes, então nenhuma sessão afinidade pode ligá-los: uma regra cliente-IP veria o pod do kamo-internal para um e o navegador do membro para o outro. O Estado tem de ser partilhado. Isto estava latente enquanto o serviço funcionava uma cápsula, e ambos os registos Argumentou nas suas próprias observações que a memória era a loja certa — que era. `replicas` tornou-se 2 em 4bd25e7, mas que commit também quebrou o contexto, então não A segunda cápsula já começou e o estado de duas cápsulas nunca foi alcançado. Corrigir a inicialização tornou-a real e isto surgiu imediatamente. Então: um terminal estreitoHandoffStore sobre Redis, que este serviço já require (@ EnableRedisHttpSession não começará sem ele). Estadias de utilização única atômico — GETDEL em uma operação, porque um get-then-delete permite dois apertos de mão corrida em um ticket ambos ganham, e um ticket replayable fica no histórico do navegador. Não há deliberadamente no-memory fallback bean: um que se degrada silenciosamente para o estado por-pod reproduziria esta falha e o faria parecer flakiness. Duas coisas surgiram porque são o mesmo defeito na mesma classe: - A PAC terminal por membro contada por cápsula, para que um membro pudesse segurar duas vezes o limite — oito PTY e clientes tmux numa VM partilhada que tenha sido tomada para baixo pela pressão da memória antes. O contador é compartilhado agora, atualiza seu TTL Em cada mudança, assim uma contagem órfã decai em vez de bloquear alguém, e pinças a zero para que um decrement que vive o seu incremento não pode comprar headroom. - O registo de expedição teve o erro idêntico e uma falha QUIETER: um vazio resultado é a resposta comum lá (quase cada terminal é um alguém Abriu-se para si), pelo que uma entrega perdida não recusou nada - abriu uma planície Sete novos testes soletram "duas cápsulas, uma loja" compartilhando uma loja entre dois instâncias de registro: um ticket cunhado em um resgata no outro, é então gasto em todos os lugares, carrega sua hand-off através, e a tampa e sua liberação são vistos por As duas coisas. Verificado em uma árvore de trabalho isolada — 2137 testes, 0 falhas — porque o compartilhado A árvore de trabalho mantém atualmente o trabalho de outra sessão no voo. Aquela árvore de trabalho precisava de uma solução de código-fonte principal não relacionada para compilar: um enum bibliotecário compartilhado ganho PROGRESSIVO LOGIN LOCKOUT, o que torna SuspiciousDetection Serviço Interruptor exaustivo não exaustivo, por isso a origem/principal não se constrói actualmente. Isso. A correção não está neste commit e não é meu; isto não irá implantar-se até que pouse.

Todas as alterações

Como o que vês no transporte?

Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.

Começar Livre Para SempreVer Preços