Repository navigation
Commit ababe91
Stop two test workers from being handed the same port
Gecelik regresyon 13 Ağustos'ta kodla ilgisi olmayan bir sebeple kırmızı
oldu: workerd `Address already in use (127.0.0.1:32829)` diyerek öldü,
arkasından üç süit ECONNREFUSED çığına döndü. Aynı commit ikinci
denemede baştan sona yeşil geçti.
Sebep port ayırıcısıydı. Yedi D1 test dosyası kendi `wrangler dev`'ini
başlatıyor, `test:d1` onları beşerli koşuyor ve her dosya portunu şöyle
seçiyordu: 0'a bağlan, verilen portu oku, soketi kapat, wrangler'ı o
portla başlat. Soketi kapatmakla wrangler'ın bağlamasi arasında saniyeler
var ve o aralıkta port işletim sistemi için boş — ikinci bir süreç
sorarsa aynı portu alabiliyor.
Portu soket kapandıktan sonra da rezerve tutuyoruz. Süreçler ayrı olduğu
için rezervasyon süreç içi bir küme olamaz; `open(..., 'wx')` ile
dosya sisteminde duruyor, çekirdek düzeyinde atomik. İşaret sahibinin
pid'ini taşıyor: çöken bir koşunun bıraktığı işaret, sahibi ölmüşse geri
alınıyor — yoksa düzeltme zamanla kendi arızasına dönerdi.
Yedi kopya yardımcı fonksiyon tek modüle indi ve her çağıranın kendi
yazdığı "aynı portu iki kez alma" kontrolü de onunla birlikte gitti.
Ölçüm konusunda dürüst olmak gerekiyor: eşzamanlılık testi bir gerilemeyi
şanstan yakalar. Eski ayırıcıyla aynı deneyi macOS'ta 40 tur koşturdum,
tek çakışma çıkmadı — pencere dar ve işletim sistemi portları sırayla
veriyor; Linux runner'da bir kez çakıştığını biliyoruz çünkü olmuş. Asıl
kanıt diğer iki testte: tutulan bir port ikinci kez dağıtılmıyor, ölmüş
bir sürecin bıraktığı rezervasyon geri alınıyor. İkisi de determinist.
Yerel kanıt: `npm run test:d1` iki kez uçtan uca, 269 test, 0 hata; iki
koşudan sonra rezervasyon dizini boş, yani çıkış kancası işini yapıyor.
`npm run check` 0 hata, `production:config:check` 85 iddia,
`actions:scope:test` yeni dosyayı tam bir bölünmede görüyor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 42107f2 commit ababe91
10 files changed
Lines changed: 272 additions & 129 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
39 | | - | |
| 38 | + | |
| 39 | + | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | 50 | | |
68 | 51 | | |
69 | 52 | | |
| |||
129 | 112 | | |
130 | 113 | | |
131 | 114 | | |
132 | | - | |
133 | | - | |
134 | | - | |
| 115 | + | |
135 | 116 | | |
136 | 117 | | |
137 | 118 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | 78 | | |
96 | 79 | | |
97 | 80 | | |
| |||
263 | 246 | | |
264 | 247 | | |
265 | 248 | | |
266 | | - | |
267 | | - | |
268 | | - | |
| 249 | + | |
269 | 250 | | |
270 | 251 | | |
271 | 252 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | 16 | | |
18 | 17 | | |
19 | 18 | | |
20 | 19 | | |
| 20 | + | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | 65 | | |
83 | 66 | | |
84 | 67 | | |
85 | 68 | | |
86 | | - | |
87 | | - | |
88 | | - | |
| 69 | + | |
89 | 70 | | |
90 | 71 | | |
91 | 72 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | 94 | | |
107 | 95 | | |
108 | 96 | | |
| |||
310 | 298 | | |
311 | 299 | | |
312 | 300 | | |
313 | | - | |
314 | | - | |
315 | | - | |
| 301 | + | |
316 | 302 | | |
317 | 303 | | |
318 | 304 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | 49 | | |
62 | 50 | | |
63 | 51 | | |
| |||
88 | 76 | | |
89 | 77 | | |
90 | 78 | | |
91 | | - | |
92 | | - | |
93 | | - | |
| 79 | + | |
94 | 80 | | |
95 | 81 | | |
96 | 82 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | 73 | | |
86 | | - | |
87 | | - | |
88 | | - | |
| 74 | + | |
89 | 75 | | |
90 | 76 | | |
91 | 77 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | 62 | | |
75 | | - | |
76 | | - | |
77 | | - | |
| 63 | + | |
78 | 64 | | |
79 | 65 | | |
80 | 66 | | |
| |||
0 commit comments