Repository navigation
fix(ci): a fatia do servidor não trava no process.exit; os arquivos saem sozinhos, sem --test-force-exit - #862
Merged
Conversation
…n não segura o processo
…am o processo; sai a sonda temporária
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O defeito
Às vezes a fatia
server (3)parava de imprimir e batia o tempo limite de 10 min, sem nenhum teste falhar e sem disparar o--test-timeout. Desde queagents.eval.test.tsentrou (2026-11-07), 7 das ~79 execuções daserver (3)travaram assim, cerca de 1 em 11. Todas pararam logo depois dos dois testes pulados deagents.eval.test.ts:Nos jobs da 3/6, o órfão que o runner encerra no cancelamento tem o pid do runner + 6, que é o primeiro filho: o processo do próprio
agents.eval.test.ts, que nunca saiu.Uma correção ao brief: a tabela "Test files" do job 128806809277 que vimos com
gh run view --jobé da tentativa 3, que passou. As duas tentativas canceladas param depois dos pulos do eval, como as outras. O job 128628213122 (04:40) é outro caso: imprimiu até o cancelamento, então foi lentidão, não travamento.A causa
O gdb no filho travado, no runner do GitHub (
ubuntu-24.04, Node 24.21.0), mostra um deadlock dentro deprocess.exit():A thread principal espera os workers do V8 terminarem. Um worker, no meio de uma compilação concorrente (Sparkplug ou Maglev), espera a thread principal coletar lixo. Quem chama esse
process.exit()em cada arquivo é o--test-force-exit(node:internal/test_runner/test:1492).O
agents.eval.test.tscai nessa janela porque carrega ~2000 módulos com o cache de compilação frio, pula os dois testes e sai uns 2 s depois, com o V8 ainda compilando em segundo plano.É o bug aberto do Node nodejs/node#54918:
process.exit()junta os workers sem descartar o isolate. A correção nodejs/node#66171 ainda está aberta. Quando o processo termina sozinho, o caminho de saída descarta o isolate, e isso acorda o worker parado.A correção
apps/server/package.json: sai o--test-force-exit. O processo de cada arquivo termina quando nada o segura, semprocess.exit().--test-force-exit:within(test-questions.ts, 86 usos) deixava umsleepde até 30 s vivo depois que a promessa respondia. Agora usaref: false, opção nativa denode:timers/promises.conversation-preview.test.ts:66ecode-tool.test.ts:165seguem o mesmo padrão (ref: falsee.unref()), como os prazos vizinhos já faziam.ci.yml: o comentário do passo diz por que não há--test-force-exit.Antes, o motivo do
--test-force-exit(d98064c) era um teste falho com um turno parado no cartão manter o processo vivo pelo heartbeat. Desde então, o fechamento do Hub ganhou o prazo de 15 s e a limpeza roda depois dele. Para conferir, forcei a falha emapproval.test.tslogo depois do cartão: sem--test-force-exit, o teste falhou em 1,8 s e o arquivo saiu em 4 s.Contornos descartados, com medição
main--no-concurrent-sparkplug--no-concurrent-sparkplug --no-maglev-build-code-on-backgroundDeoptimizationDatano worker)--test-force-exit(este PR)O Node 24.21 recusa
--no-concurrent-maglev. Desligar compiladores um a um seria remendo e não fecha a classe.O que rodei
As provas rodaram num workflow temporário no meu branch, já removido no último commit:
main: 25 em 75, todos com a pilha acima (run 42519629274).npm test -w @conexus/serverdeste PR (run 42525250258): todas com exit 0. Wall menos o tempo de teste dá ~1,4–2,0 s por arquivo, que é a partida do processo; nenhum arquivo fica esperando timer.--test-force-exit:conversation-update.test.tslevava 35,1 s e agora leva 5 s (osleepde 30 s dewithin, achado comasync_hooks).conversation-preview.test.tsecode-tool.test.tspassam e saem logo. Typecheck do servidor e Biome nos arquivos tocados passam.O que não provei
withinem si (helper de teste, T5). A prova é o tempo de saída medido.e2eda raiz também usa--test-force-exite está exposto ao mesmo bug do Node, mas nunca travou no CI. Sem--test-force-exit, a execução saiu normalmente (292 s) e um teste falhou com 502 emtests/e2e/versions.test.ts:109. Não consegui separar essa falha da mudança, então oe2efica como está. Proponho uma issue para ele.