daily memorandum 2.3.0

CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ |


2004-07-07 (Wed)

_ [tdiary] tdiary-2.0.0 の不具合 其の二

昨日の続き。*.td2 が消されてしまう問題について。

再現させる方法

  1. 日記データをまだ置かず、cache も空っぽの状態で日記を表示させる。これで cache ができる。
  2. 最新の .td2 (今なら 200407.td2)を @data_path 以下にコピー。
  3. 再び日記を表示させると 200407.td2 が消えている。
  4. 一旦 cache を消してから 200407.td2 をコピーすると問題ない。

というわけで、まぁコピーする前に cache 消しとけよって 話なのかもしれないけど、 日記データが消えてしまうのはアブなっかしいので、 原因を追ってみた。

原因

今回は割とアッサリ原因が見付かった。 DefaultIO#transaction() の最後で

   File::delete( @dfile ) if diaries.empty?

としているのをコメントアウトすれば問題は発生しなくなった。 要するに、cache が空っぽの場合 diaries.empty? が true になるので File::delete が実行されてしまう、と。

で、ここで delete 意図がよくわからないのだけど、 消してしまってもいいのではないだろうか? delete するならするで、

   File::delete( @dfile ) if FileTest.zero?(@dfile)

とかするのが正しいんじゃないかという気もするし。

本日のツッコミ(全1件) [ツッコミを入れる]
_ name (2011-02-14 (Mon) 09:00)

Great site. Keep doing.,

[]