nodejsのバグを見つけたのでPRを投げてみた
概要
要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。
バグ自体は既知のものだったようで、修正がされていました。
ただ、手元で使っていたv22では修正が配布されていなかったので、PRを投げたという形です。
今回取り込んだのは、無限ループを防ぐ修正と、データの長さを符号なし整数として扱う修正の2つです。
感想
V8のビルド時間が長かった。作業時間的には3時間ぐらい。
続編
PRを投げてしばらく待っていたら、続々とApproveがされていった。たまに裏の自動化システムがCIを走らせてくれたのだが、ことごとくfail。
何かまずいことでもしたのかなとJenkinsの方を見てみてもPermissionがなく何も見れないので、静観を決め込む。

それとは別に頻繁に出されるCIのリクエスト、どれも撃沈。

何が起きているんだろうなあと思いつつも、よくわからないので静観していたわけだが、リリース担当者からコメントが投稿される。
Sadly this is not gonna make it to the v22.23.3 release due to CI and timing. I've pospone this release too much now.

ということで、次回リリースに間に合わないんだと。原因はCIがコケてること。
ほうほう、まあ仕方ないなあと思いつつ、どうやらCI起因で相手も大変そうなので私の方でできるかわからないが調査してみることに。
完全なログではないが、ざっくり何が起こっているかはnodejs/reliability/reportsにまとまっていることが分かったので軽く眺めてみることに。

9/11から9/16までのログを眺めてみると以下のエラーが出ているとわかる。
Error: [WinError 5] Access is denied: '...\clcache\stats.txt.new' -> '...\clcache\stats.txt'なるほど、どうやらビルドでclcacheとやらが上手くいっていないようだな、と。

件のファイルはこれ。
clcacheというのはfrerich/clcacheというプロジェクトのもので、いってしまえばnodejsに関係なく上流の問題というわけ。
さて、じゃあfrerich/clcacheにPR出せばいいかと思いきやそうともいかない。
というのも、すでにこのプロジェクトはarchiveされているのである。readonlyなので新規にどうもこうもできない。
いやはやここで手詰まりか、いやそんなことはないのだ。
調べてみれば、全く同じ問題にぶち当たっている人がいるではないか!

ここの書き込みによれば、次の通りである。
you should move clcache dir, not clcache binary. It can be configured through CLCACHE_DIR environment
It works with threads > 4 after I set CLCACHE_DIR=C:\clcache_dirということなので、nodejsでも同じ対応をしようじゃないか。

調査結果と修正をIssueで起票してみた
ということで、作ってみたPRがこちら。
変更内容は jenkins/scripts/windows/compile.cmd に set CLCACHE_DIR=C:\clcache_dir を追記するだけ。
一旦これで直るはず。即効性が欲しい時は DISABLE_CLCACHE=1 でイケるはずと、Issueにも書いておいた。
上手くいくといいな。








