[Namazu-users-ja 418] インデックス作成に時間がかかった場合の暫定対処について

nakashima-k nakashima-k @ nttd-fr.com
2005年 6月 8日 (水) 17:08:31 JST


以前「[Namazu-users-ja 268] Re: Out of Memory」でお世話になりました、
中島と申します。

現在以下の二つの原因でインデックス作成に時間がかかり、他のファイルがイン
デックス化されにくいという事象で困っています。

1.最終セルが広い範囲に設定されたExcelで、xlhtmlにより大きなHTMLファイ
ルが生成されてしまう場合
「[Namazu-devel-ja 405] Re: Excel の INDEX 作成に異常に時間がかかる」と
同事象

2.ファイル自体が破損している場合(MS-Wordで確認)


最初のExcelの事象については「2.0.15」で本格対処となると言っていただけて
いるので、基本的には「2.0.15」を採用したいと考えておりますが、それまでの
暫定的な対処および、ファイルが破損している場合の対処として、以下の方法を
考えました。

・filterの処理が一定時間以上かかった場合、その処理(ファイル)をスキップす
る

そこで、素人ながら以下のようにexcel.plとmsword.plファイルを変更してみま
した。動作を確認したところ、一応長時間かかるファイルがスキップされて、全ファイ
ル処理が行われるようになりましたが、他の処理への影響やコーディングなどな
ど有識者殿のアドバイスをいただきたくメールしました。

以下にソースを示します。

excel.plの117行目、xlHTMLの処理「util::systemcmd("$xlconvpath -m
$tmpfile > $tmpfile2");」の前後にタイムアウト処理を挿入。
------------以下ソース--------------
# -m: No encoding for multibyte. It's necessary to
# handle a Japanese Excel 5.0 or 95 document correctly.
$SIG{ALRM} = sub {die "timeout"};
eval {
   my $alarm_time = 20;
   alarm $alarm_time;
  
   util::systemcmd("$xlconvpath -m $tmpfile > $tmpfile2");
   alarm 0;
};
if ($@) {
    if ($@ =~ /timeout/) {
        my $xlpid = util::systemcmd("/sbin/pidof -s xlhtml");
        util::systemcmd("kill -14 $xlpid");
        unlink($tmpfile);
        unlink($tmpfile2);
        return undef;
    } else {
        alarm 0;
        die $@;
    }
}
------------------------------------


mswork.plの143行目、wvWareの処理「system("$wordconvpath $options
$tmpfile $ofile 2>/dev/null");」の前後にタイムアウト処理を挿入。
------------以下ソース--------------
$SIG{ALRM} = sub {die "timeout"};
eval {
    my $alarm_time = 20;
    alarm $alarm_time;
    system("$wordconvpath $options $tmpfile $ofile 2>/dev/null");
    alarm 0;
};
if ($@) {
    if ($@ =~ /timeout/) {
      my $wvpid = util::systemcmd("/sbin/pidof -s wvWare");
      util::systemcmd("kill -14 $wvpid");
      unlink($tmpfile);
      unlink($tmpfile2);
      return undef;
    }
}
------------------------------------

上記よろしくお願いいたします。






Namazu-users-ja メーリングリストの案内