頭痛の種

検証でトラブル発生。
一つはRHEL ES4 U3/U4 + mod_jk 1.2.20の組み合わせでのOSリブート問題。
これは、どうやらOS側の問題で、flock()にrace conditionが発生するらしい。
てか、mod_jkが1.2.20になって、リクエストを処理するたびにflock()を
使うために踏んじゃったバグ。
OSにパッチ当てればよいんだが、RedHatが直してくれるのか。
某社さんに期待!

もう一つはHTTPステータス503を返却する問題。
バックエンドサーバが生きているのに、なぜか503。
これは、mod_jkのlb workerでrace conditionが発生する可能性があったため。
共有メモリのワーカ状態フラグ(is_error_state)が、あるスレッドでJK_FALSEに
設定された後で、別のスレッドによってJK_TRUEに設定されてしまう可能性がある。
JK_FALSEに設定したほうのスレッドは、リトライするわけだが、get_most_suitable_worker()で
失敗した方のワーカが選択される事になる。この場合、即リトライ失敗なわけで・・・
ログには、片側のワーカしかerror stateになったって出てないのに、
すべてのTomcatがエラーだと出る。
一日悩んで、出た結論がこれ。
とはいえ、回避策無いよなぁ・・・
あるかなぁ・・・