Namazu-users-ja(旧)


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

Re: mknmz-squid 実行時にメディアタイプの取得に失敗し停止



>   とりこぼしがあるようなら、認識に必要な entry を追加すれば良いので、
> できればその辺りを調べていただけませんでしょうか? 時間がとれればこちら
> でも調べますけど...
> 
とりこぼしの件はSquidCache内のHTTPヘッダを元にadd_magicを書いていることに起因します。前回のメールで書いたのですが、例えば、対象のファイルが 8777 個に対して、
「Server:」ヘッダを含むSquidCacheが 8559、 「Content-Type:」ヘッダを含む文書が、
7835。add_magicを詳しく書けば書くほどとりこぼしが多くなります。
バイナリの部分については以下のページ程度しか分かっていません。
ほかの内容についてもまとめておきました。

Squidヘッダ考 : http://tat6.ice.ous.ac.jp/akita/memo/memo.cgi?view=mknmz-squid.thtml

>   これはあまり正しくない対処で、より良い方法は squid cache data から
> header 部分を完全に取り除き、data 部分のみにすることです。
> 
>   そのような実装に変更するための patch をこのメールの末尾につけておき
> ますので、試してみて下さい。
> 
> -- 
パッチを当ててから正規表現の関係でうまく動かなくなったのであくまで推測ですが、
以前失敗の元になったキャッシュ:http://tat6.ice.ous.ac.jp/akita/filez/0000123A
からヘッダ部分を取り除いたデータ部分を再びMMagicが読み間違える気がします。

ところで、パッチを適用したところ、はじめはスムーズにいきそうな感じでしたが、
以下のファイルで、何度もループしてしまいます。原因は純粋に Perlの問題だと
分かるのですが、正しいはずのプログラムがまともに動きませんでした。

認識に失敗したSquidCache : http://tat6.ice.ous.ac.jp/akita/filez/000000A7

SquidCacheの構造が大まかに [binary][http][\r\n\r\n][data] なので、
\r\n\r\n以降を渡せばいいことが分かっているのですが正規表現が\r\n\r\nを
全く認識しません。簡単なサンプルプログラムでも駄目でした。
もう少し調べてみます。

sub desquidcache ($) {
  my $contref = shift @_;
  if (m/^(.*?)\r\n\r\n/s) {
    util::vprint "match : $1\n"; exit;
  }
  # ファイルの先頭から空行まで非欲張り型でマッチング。正しそうだが…。
  $$contref =~ s/^(?:.*?)\r\n\r\n//s;
  #$$contref =~ s/^([^\r\n]+\r\n)+\r\n//s;
}

--
秋田一輝 (Kazuki Akita)
kai13@xxxxxxxxxxxxxxxxxxxx
http://tat6.ice.ous.ac.jp/akita/