Repository navigation
Commit 9cd7219
Test koşumundaki keep-alive soket flake'ini kapat (#61)
CI'da ara sıra düşen `orbit-slice3-tests.ts` feed testinin kök nedenini
kapatır.
## Belirti
Test ilk `fetch`'te, hiçbir iddiaya varmadan 3-4 ms içinde düşüyordu:
```
TypeError: fetch failed
cause: SocketError: other side closed (UND_ERR_SOCKET)
socket: { bytesWritten: 370, bytesRead: 1631 }
```
## Kök neden
Sunucunun ayakta olmamasıyla ilgili değil. `bytesRead` sıfır değil, yani
o soket
daha önce bir yanıt taşımış: undici'nin havuzundan gelen bir keep-alive
bağlantısı. Sunucu onu kapatmış, istemci ölü sokete yazmış.
İstemcinin kapanmayı neden kaçırdığı: bu dosyalar worker ayaktayken
`spawnSync`
ile ikinci wrangler süreçleri koşturuyor. `spawnSync` olay döngüsünü
saniyelerce
tamamen durduruyor; o sürede undici ne FIN'i işleyebiliyor ne de soketi
havuzdan
atacak zamanlayıcıyı çalıştırabiliyor. Blok biter bitmez gelen `fetch`
aynı
senkron adımda ölü sokete yazıyor.
HTTP/1.1'de yazmadan önce bağlantının açık olduğunu bilmenin yolu yok.
Normal
istemciler bunu tekrar denemeyle örter; testte örtmek istemiyoruz. Kalan
sağlam
seçenek bağlantıyı hiç yeniden kullanmamak.
## Değişiklik
`scripts/support/test-http.ts` (yeni): `useFreshConnectionPerRequest()`
—
`setGlobalDispatcher(new Agent({ pipelining: 0 }))`. `pipelining: 0`
undici'de
keep-alive'ı kapatır; undici dokümanında belgeli yol, tip tanımları da
`keepAlive` yerine bunu öneriyor.
Yerel worker'a HTTP yapan dokuz dosyada import + tek satır çağrı.
`undici`
devDependencies'e eklendi (zaten `overrides`ta pinliydi ve ağaçtaydı;
artık
doğrudan içe aktarıldığı için açıkça duruyor).
İkinci commit bir bekçi ekliyor: `setGlobalDispatcher` global bir
sembole yazıp
Node'un yerleşik `fetch`'inin onu okumasına güveniyor. Bu bağ ileride
koparsa
çağrı sessizce hiçbir şey yapmaz — keep-alive geri gelir, yarış yeniden
açılır ve
hiçbir test kırılmaz, çünkü geri gelen şey ara sıra düşen bir yarış.
Bekçi ayarın
yerleştiğini kurulum anında doğruluyor.
Hiçbir iddia gevşetilmedi, `skip` yok, süre uzatılmadı, retry yok. 126
ekleme,
sıfır silme.
## Ölçüm
`orbit-slice3-tests`, `diagnostics_channel` ile aynı 63 istek üzerinden:
| | bağlantı | istek | yeniden kullanım |
|---|---|---|---|
| önce | 2 | 57 | **55** |
| sonra | 57 | 57 | **0** |
Bekçi mutasyonla sınandı: `setGlobalDispatcher` devre dışı
bırakıldığında
ateşliyor, geri alındığında sessiz.
Çıkış kodu 0 dönenler: `npm run check` (213 dosya, 0 hata), `npm run
test:d1`
(341/341, birkaç kez).
## Dürüstlük notu
Gerçek testi istekle düşüremedik. Mekanizma izole ortamda tetiklendi
(düz fetch
8 turun 4'ünde düşüyor, `pipelining: 0` ile 0/8), ama asıl dosyada yarış
penceresi
zamanlanamayacak kadar dar. Yani: bütün kanıtlarla tutarlı olan
mekanizma
ortadan kaldırıldı; "flake kesin bitti" iddiası bu kadarıyla kanıtlanmış
değil.
Ayrıca workerd'in FIN'i tam olarak neden gönderdiği açık kalıyor.
Düzeltme
tetikleyiciden bağımsız çalışıyor (yeniden kullanılan soket yoksa yarış
da yok),
ama sebep kapatılmış sayılmamalı.
## Ayrı iş olarak kalanlar
- `orbit-slice3-tests.ts:127,134` — worker ayaktayken aynı persist
dizinine
ikinci wrangler süreci. Bu kalıp #51'de slice1'den deterministik
ECONNRESET
sebebi olarak kaldırılmıştı, burada kalmış; bu flake'in ön koşulu olan
bloklamayı da o yaratıyor.
- `waitForWorker` ilk 200'ü hazır sayıyor; sonradan bir yeniden başlatma
olursa
fark edilmez.
- Altı test dosyası ortak dev registry'ye aynı worker adıyla yazıyor.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>1 parent 05727ee commit 9cd7219
12 files changed
Lines changed: 126 additions & 0 deletions
File tree
- scripts
- support
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
15 | 20 | | |
16 | 21 | | |
17 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
33 | 38 | | |
34 | 39 | | |
35 | 40 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
26 | 31 | | |
27 | 32 | | |
28 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
27 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
28 | 33 | | |
29 | 34 | | |
30 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
24 | 29 | | |
25 | 30 | | |
26 | 31 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
10 | 15 | | |
11 | 16 | | |
12 | 17 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
18 | 23 | | |
19 | 24 | | |
20 | 25 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
20 | 25 | | |
21 | 26 | | |
22 | 27 | | |
| |||
0 commit comments