見出し画像

プログラマー探偵の事件簿:7年の空白がpanicを多発した

新しい助手の猫さんが働き方改革で週に2,3日しか働かなくなった頃の事件である。

事件のはじまり

すごいログサーバー(TwLogEye)とTWSNMP FCを連携するための改造をしている時の話である。突然、TWSNMP FCがNetFlow v9のパケットを受信するたびにpanicを多発するようになった。

panicはプログラムが異常停止すること

潜在的なバグが浮き彫りになったのか?

しばらく、TWSNNMP FCでNetFlow v9のテストをしていなかったので、潜在的にあったバグが浮き彫りになったのかと思い自分の作ったソースコードを、いろいろ調べてpanicの発生している箇所を修正した。いくら修正しても正しい動作にはならならい。何故だ?しばらく、観察しているとpanicは自分の作った部分ではなく、他の人の作ったGO言語のNetFlow処理パッケージで発生していることがわかった。

NetFlowのパッケージが更新されていた

NetFlowのパッケージを調べてみると、いつの間にか新しいバージョンの更新されていた。自分で更新した覚えはないのに何故だ!
どうやら、すごいログサーバー(TwLogEye)と連携するためのAPIのパッケージを読み込んだことでNetFlowのパッケージも新しいものに更新されたのだった。

古いパッケージに戻すとpanicが止まった

NetFlowのパッケージを新しいバージョン(2024年)から前のバージョン(2017年)に戻してみた。ピタリとpanicが止まった。

7年間の間に何があったのか?

先代助手の猫が天から
「真実を知るためには歴史から学べ」
と言っている。
NetFlowのパッケージの歴史を調べることにした。歴史は

にある。

どうやら開発者が、まじめに開発していたのは2017年までのようである。7年後の2024年に誰かの修正提案を取り入れたようである。この修正が原因で、今回のpanic多発問題が発生してる。7年間もブランクがあれば、あまり覚えていないかもしれない。修正案を取り入れる時に、厳しくチェックしなかったかもしれない。

バージョンを下げて解決

今回は、NetFlowパッケージのバージョンを下げて解決することにした。将来のことを考えると、このパッケージを自分でメンテナンスするほうが良さそうである。他にも、そのようなパッケージが、いくつかある。

GO言語のパッケージの仕組みを学んだ

問題を解決することで、より深く理解できることがよくある。今回の問題では、GO言語のパッケージの仕組みをより深く理解できた。他のソフトで使うAPIのパッケージは、依存関係を少なくしてできるだけ分離するほうがよい。
先代助手の猫が、また天から一言
「何かを新しくした時には何か新しい問題が起こる」
たしかに、今回GO言語、Wails、Dockerを新しいバージョンに更新したことで、細かな問題が多発してる。

新しい助手の猫さんは、最近、外に出たいと騒いで困っている。先代は自由に出入りできたことは内緒である。

いいなと思ったら応援しよう!

twsnmp
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。