Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mknmz --checkpoint オプション中に部分文字列 -S が含まれるときに発生するバグ



竹迫です。

サーバのメモリが少ないため、mknmz 実行時に --checkpoint を指定して
運用しているのですが、ちょっと不可解な現象に遭遇しました。

現象をわかりやすく説明するため、若干 mknmz の出力を編集していますが、
以下のコマンドで、インデックスを作成しようとすると、、、

C:\> mknmz --checkpoint -U -O D:\namazu-index\H-SVR E:\H-SVR\Mktg 
────────────────────────────────────
検索対象のファイルを調べています...
697個のファイルがインデックス作成の対象として見つかりました
1/697 - /E|/H-SVR/Mktg/BIZプラン/BIZPLAN.ppt [application/powerpoint]
2/697 - /E|/H-SVR/Mktg/BIZプラン/CAD&CAE.PPT [application/powerpoint]
3/697 - /E|/H-SVR/Mktg/BIZプラン/CAT-PLAN.PPT [application/powerpoint]
4/697 - /E|/H-SVR/Mktg/BIZプラン/CAT.PPT [application/powerpoint]
5/697 - /E|/H-SVR/Mktg/BIZプラン/CAT方針.ppt [application/powerpoint]
6/697 - /E|/H-SVR/Mktg/BIZプラン/FY00_MKTG_1H_KICK-OFF.ppt [application/powerpoint]
インデックスを書き出しています...
チェックポイントに到達しました。mknmz を再実行します...
7/697 - /E|/H-SVR/Mktg/BIZプラン/FY98-CHプラン.ppt [application/powerpoint]
8/697 - /E|/H-SVR/Mktg/BIZプラン/FY99-CAE_SBU質と量の改善.ppt [application/powerpoint]
9/697 - /E|/H-SVR/Mktg/BIZプラン/FY99-CAE_SRのQ&テリトリー.ppt [application/powerpoint]
10/697 - /E|/H-SVR/Mktg/BIZプラン/FY99-CAEフレームワーク素案.ppt [application/powerpoint]
11/697 - /E|/H-SVR/Mktg/BIZプラン/LFP.PPT [application/powerpoint]
インデックスを書き出しています...
チェックポイントに到達しました。mknmz を再実行します...
使い方: mknmz [オプション] <対象>...
`mknmz --help' でより詳しい情報が表示されます
────────────────────────────────────

となって、2回目のチェックポイントに達したときに
必ず mknmz の再実行に失敗してしまうのです。

mknmz スクリプトの re_exec() サブルーチンの中の最後の方で、

    print _("Checkpoint reached: re-exec mknmz...\n");
    util::dprint(join ' ', ("::::", @ARGV, "\n"));
    exec ($0, @ARGV) ;
}

としている部分で、@ARGV の中身を確認してみると、
1回目のチェックポイントに達したときは、

:::: -S --checkpoint -U -O D:\namazu-index\H-SVR E:\H-SVR\Mktg 
     ~~                                     ~~       ~~        
と正しく @ARGV の値が引き継がれていましたが、
2回目のチェックポイントに達したとき、@ARGV の値が

:::: -S --checkpoint -U -O 

となり、部分文字列 -S を含んだオプションが
すべて削除されてしまっているようでした。

デバッグしてみると、mknmz スクリプトの parse_options() サブルーチンの中で
ちょっと怪しい部分がありましたので、以下の修正を commit しました。

--- mknmz.in.orig
+++ mknmz.in
@@ -1152,7 +1152,7 @@
     if ($opt_checkpoint_sub) {
         $CheckPoint{'on'}           = 1;
         $CheckPoint{'continue'}     = 1;
-        @argv = grep {! /-S/} @argv;  # remove -S
+        @argv = grep {! /^-S$/} @argv;  # remove -S
     }

この修正で、上記不具合は起きないようになりました。

もちろん、mknmz --checkpoint のオプション中に -S という部分
文字列が全く存在しない場合は、このような不具合は発生しません。

以上、バグ修正の報告でした。

--
  広島市立大学 情報科学部 情報機械システム工学科 知能ロボット講座
     竹迫 良範 <takesako@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>