2006/03/02

排他制御の異常系処理

「主筆」の排他制御周辺の正常系が完成した。正常系だけで、異常系はガタガタだが。

昨日の夜は、正常系のテスト項目を挙げ、動作確認を行った。どうせ、無責任なフリーソフトなんだから、それほど綿密な試験を行っているわけではないのだが、異様に時間がかかった。やっぱりテストと言うものはつまらないものであるらしい。

それもそうだろう。会社に首根っこを抑えられた状態で、ミッションクリティカルなシステムを作っているときでも、テストというものは気力や精力を吸い取られる鬱の塊のようなものなのだ。ましてや、道に落ちている毒入りかもしれない饅頭を拾って食うほうが悪いという、全て使う側の自己責任の世界であるフリーソフトにおいて、テストなんてやろうと言うほうが狂気の沙汰だ。他の奴が中毒で倒れたのを見た後で対処すればいいだけなのに。

とはいっても、現状「主筆」を使っているのは俺しかいない。「主筆」の開発には「主筆」を使っている。つまり、真っ先に打たれ死ぬのは俺だということになる。なんということだ。右に行っても左に行っても鬱死じゃないか。

まぁいいさ。どうせ自分で選んだ茨の道だ。進むも地獄、退くも地獄。ハード・ソフトあわせて、すでに100万以上の金をつぎ込んでいる。ならば行き着くところまで行くまでのことさ。鬱死テストにまみれてやるさ。

閑話休題。問題は異常系だ。

異常事態というのは、いろいろと考えられうる。一番疑わしいのはプログラムのバグなのだが、これはまぁ置いておくとしよう。それ以外には、考えにくいところでは宇宙線によるメモリのビット反転とか、起こりがちなところではディスクフルやパーミッションの間違い・環境変数の設定ミスなどが考えられる。

宇宙線だの核実験だのの影響は、アンゴルモアの大王と同じで対処しようが無いからどうでもいいだろう。だが、パーミッションの間違いと環境変数の設定ミスには何とか対処しておきたい気もする。これは結局ユーザがしなければならない設定だし、ユーザにより変更されうるものなのだから、間違ってたら知らねーよとしてしまうのでは、余りにも不親切すぎる。そんな鬼畜なソフト誰が使うものか。

それに今ひとつ気にかかるのが、サーバや主筆のプロセスが死んだ場合だ。残念なことだが、プロセスは突如として落ちることがある。どんなに俺が苦役を耐え忍びテストを完遂したところで、バグは取りきれるものではない。そもそも、俺にはそんなセルフ・マゾの気は無い。そこそこの所で良しとしてしまうつもりだ。

サーバないし主筆のプロセスが落ちると、ちょっと困ったことが発生する。クライアントや主筆は、基本的にサーバ・プロセスが生きていることを前提に通信を試みる。サーバは主筆が生きていることを前提に通信を試みる。クライアントのプロセスは、処理が終了し次第電光石火で消えてなくなるからどうでもいいのだが、サーバと主筆は互いに相手の生存に依存している。

突発的事象で主筆が落ちた場合、サーバは主筆が落ちたことを知らないままでいることになる。正常終了するときは、サーバに落ちる旨を通知するのだが、そうではなく殺された場合には、その通知を行うことができなくなる。そうするとサーバは、すでにご臨終なされた主筆と通信しようと試みる。その結果としてサーバも巻き添えを食ってご臨終なされることになる。

同じことがサーバが荼毘に臥された場合にもいえる。この場合は主筆が巻き添えを食う。

なかなか厄介な問題だ。落ちるときは一蓮托生というのでは使いにくくてかなわない。第15版の公開が多少遅くなったとしても、この問題には何とかけりをつけておきたいものだ。

0 件のコメント: