No description
Перший прогін CI завалив роботу agent на TestInformIsAcknowledged: «connection refused» від власного слухача. Локально той самий тест проходив — тобто плаваючий, а плаваючий тест отруює CI сильніше за відсутність CI: він привчає не дивитись на червоне. Причина — гонка в тесті. Run піднімається в горутині, а відправник шле одразу, не чекаючи. Між стартом горутини й зайняттям сокета є вікно, і датаграма, що в нього потрапила, отримує від ядра «port unreachable». На вільній машині вікно програє гонку майже завжди, під навантаженням раннера — виграє. Заодно знайшлось гірше, і вже не в тесті: рядок «приймач трапів слухає» друкувався ПЕРЕД tl.Listen(). Тобто журнал стверджував успіх до спроби, і навіть тоді, коли порт зайняти не вдалося, — а для 162 це саме той випадок, коли приймач, який мовчить, виглядає точнісінько як спокійна мережа. Тепер повідомлення йде після фактичного зайняття, і поруч з'явився Listening(): канал, який закривається тоді ж. Перевірено 20 прогонів поспіль — зелено. І окремо варте уваги: цю ваду не спіймала б жодна з наших перевірок, окрім справжнього CI під навантаженням. Він виправдав себе на першому ж запуску. |
||
|---|---|---|
| .forgejo/workflows | ||
| agent | ||
| db | ||
| deploy | ||
| gen/go | ||
| proto | ||
| scripts | ||
| server | ||
| test/contract | ||
| web | ||
| .gitattributes | ||
| .gitignore | ||
| buf.gen.yaml | ||
| buf.yaml | ||
| docker-compose.yml | ||
| HISTORY.md | ||
| netpulse | ||
| netpulse.conf.example | ||
| ROADMAP.md | ||