インデックスの更新中等、インデックスにアクセスしてはいけない時に、インデックスをロックする機能があります。
インデックスディレクトリに NMZ.lock という名前のファイルが存在する場合(厳密にはファイルの読み出しができる場合)、namazu, namazu.cgi の検索がブロックされ、ERR_INDEX_IS_LOCKED エラーが発生します。 これにより更新中のインデックスを使用を避けることができます。
ただし、mknmz 他、Namazu のツール群で NMZ.lock ファイルを作成してインデックスをロックする機能はありません。
きちんとロックしないといけないですね。
ただし、手動でインデックスの置き換えをする場合等では、NMZ.lock ファイルを作成した後に、インデックスを上書きして、NMZ.lock を削除することで安全に運用することができますね。
もっとも mknmz ではインデックスの更新中はテンポラリのインデックスを作成します。そして mknmz の最後にテンポラリをインデックスに差し替えますので、namazu, namazu.cgi がインデックスにアクセスしてはいけない時間というのは、この最後のわずかな時間だけ(ファイルの置き換え時間だけ)ですのでそれほど問題になることはありません。
また、何らかの理由で検索サービスを一時的に中止する場合にも、 NMZ.lock ファイルを作成すれば良いでしょう。 検索はエラーになりますが、「インデックスは保守作業の最中です」と表示されるはずです。
なお、NMZ.lock2 というロックファイルも NMZ.lock とは別にありまして、こちらは mknmz 実行時に作成し、インデックスの更新作業中かどうかをしめします。
NMZ.lock2 でインデックスがロックされている間(mknmz 実行中)は、他の mknmz や gcnmz, kwnmz はエラーが発生し、実行できないようにしています。(インデックスを二重に書き換えて破壊しないため)
もちろん、前述のようにインデックスの更新作業中でも最後のわずかな時間を除いて namazu, namazu.cgi で検索しても問題ありません。
mknmz が異常終了した場合には NMZ.lock2 ファイルが残ったままになることがあります。 この場合は、NMZ.lock2 ファイルを作成した mknmz が実行されていないことを確認した上で、NMZ.lock2 ファイルを削除してください。 再度 mknmz をやり直すことができます。
セコメントをする