2011年6月26日

[Namazu-devel-ja 1800] Re:テンポラリファイル作成について

寺西です。

# 臼田さんがすでにフォローされているので、簡単に。

(2011/06/26 11:30), Shigekazu Aoyagi wrote:
> 今回はコーディング規則と違って実害のある話です。ただし、実害が起こりえる
> 可能性は事実上ゼロに等しく、そういう意味ではこれも放置しても特に問題が
> ある話ではありません。気になったのでご報告いたします。


設計方針は、臼田さんが書かれていますが、
実運用上問題のないレベルで使える程度のものを目指しています。

ここに限らず Namazu では 100% のものを目指すのではなく、
例えば 80% でもそこそこ使えるなら、それでも役に立つだろうから
その程度のものを目指そうという感じです。

> このコードには三つ問題点があると考えます。
>
> 1. -fでファイル存在確認を行っているため、同名のディレクトリが存在した
>  場合にはループを脱出してファイルオープン処理に移行し、オープンに失敗
>  してcdie()してしまう。

これは運用でカバーできると考えています。
cdie する場合のほとんどのケースは、前回実行した時に作成した
ゴミが残っているとかかと思われます。

> 2.0000から9999までのファイルが既に存在した場合、無限ループになる。

無限ループになる可能性ぐらいは排除したいですね。
すべてある場合は cdie するとかは追加した方が良いかも
しれません。

> 3.ファイル名を取得してからファイル作成までにタイムラグがあるので、その
>  間に他のプロセスから同名のファイルを作成される可能性があるという
>  mktemp(3)と同様の問題がある。

これも運用でカバーしてもらうという考えです。
他のプログラムでそのタイミングでファイルが作られるのは避けて
もらえば、Namazu 側では特に問題は発生しないはずです。

もっとも同じディレクトリを対象として、mknmz を複数実行したり
はしないというのも運用でカバーしてください。

> 修正方法としては、これらの問題を抱えていないIO::File->new_tmpfile()や
> File::Tempなどを使用するのがいいのではないかと考えます。

少なくとも Namazu 2.0.X では Perl 5.004 以降を対象として
いますので、フィルタと違って mknmz は Perl 5.004 で動かなければ
なりません。
最新の Perl モジュールだと、要求する Perl のバージョンがより
新しいものだったりするので、簡単には導入できなかったりします。

また、Perl 5.004 で動く Perl モジュールであっても、リリース時に
標準で入っているモジュールだと良いのですが、そうでない場合は
Perl モジュールをインストールしないといけないという問題が生じます。
それはできれば避けたいと考えています。

ただし、Namazu 2.2.X ではそのしがらみはばっさり捨て去ります。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja


投稿者 xml-rpc : 2011年6月26日 15:31
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/104916
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。