id:buty4649 が業務で扱っている プライベートクラウド(OpenStack) に rasdaemon を導入してくれたのだけど、ハードウェアの異常を検知してはくれるものの sqlite にレコードを入れるあたりでエラーログを出していたので調べていた
Oct 19 16:06:42 *** rasdaemon[4233]: rasdaemon: Failed to do mc_event step on sqlite: error = 14 Oct 19 16:06:42 *** rasdaemon[4233]: rasdaemon: Failed reset mc_event on sqlite: error = 14
errno 14 は ENFILE で Too many open files
。よくみるやつ
ENFILE Too many open files in system (POSIX.1). On Linux, this is probably a result of encountering the /proc/sys/fs/file-max limit (see proc(5)).
問題を起こしているプロセスの strace を取りつつ rasdaemon のソースを眺めてみたところ、abrtd にレポートを投げる関数があり その関数で socket(2) が成功してかつ connect(2) が失敗するとファイルディスクリプタがリークするというバグを見つた。その旨を linux-edac の ML にバグレポートを投げた
いきなりパッチを投げてもよさそうだが、まずはバグがあることを認識してもらうのがいいのだろうか。さてはて。
ややこしい状況
- 今回 rasaemon を動かしていたディストリビューションは Ubuntu
- abrtd は RedHat の提供するミドルウェアで Ubuntu 向けのパッケージは無い ( id:buty4649 調べ。++ )
... にもかかわらず
- Ubuntu の rasdaemon は abrtd にレポートを投げる
./configure --enable-abrt-report
オプションを有効にしてビルドされている - abrtd が動いていないので connect(2) は必ず失敗する
- つまりハードウェアの異常を検知すると 必ず 冒頭に述べたバグを踏む 🔥
というややこしい条件がついている感じだった。 「Ubuntu のひとたち rasdaemon 使ってないのネー」という話をした
その他調べたこと
- rasdaemon のメインリポジトリはここ git.infradead.org Git - users/mchehab/rasdaemon.git/summary
- rasdaemon のリリースやパッチは linux-edac の ML https://marc.info/?l=linux-edac に投稿されている
感想
- はやくバグ fix されるといいな