[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:3322

From: "okkez (okkez _)" <redmine@r...>
Date: Mon, 24 Sep 2012 23:38:02 +0900
Subject: [ruby-reference-manual:3322] [るりまプロジェクト - Bug #7034][Assigned] 一部環境で bitclust setup の実行中に例外が起きることがある


Issue #7034 has been updated by okkez (okkez _).

Status changed from Open to Assigned
Assignee set to okkez (okkez _)

まず ENOMEM は BitClust ではすぐには対処できないと思います。
たぶん、メモリが足りてないだけなんだと思います。

Errno::EEXIST は Dir.mkdir したときにディレクトリが残っているからだと思います。
直前で FileUtils.#rm_rf しているのでここでこの例外が発生することはないはずなのですが。。。
ディレクトリが残ってしまっている理由はわかりませんが、ファイル数が多いので削除が追いついていないのかもしれません。
Windows では小さいファイルをたくさん作ると性能的に不利になる傾向があるので、ある程度は仕方ないんだと思います。
例えば、ウィルス対策ソフトのような別プロセスがファイルをロックしていると、Ruby がファイルを消せなくて

FileUtils.#rm_rf したのにファイルやディレクトリが中途半端に残ってしまうということは考えられます。

上記仮説を検証するために FileUtils.#rm_rf -> FileUtils.#rm_r に書き換えることができます。
FileUtils.#rm_r 実行中に発生した例外の種類を確認すると仮説を検証することができると思います。

----------------------------------------
Bug #7034: 一部環境で bitclust setup の実行中に例外が起きることがある
https://bugs.ruby-lang.org/issues/7034#change-29704

Author: pypypy567 (py _)
Status: Assigned
Priority: Low
Assignee: okkez (okkez _)
Category: bitclust
Target version: 
reporter: 
ruby_version: 


#7020 でミスってた件です。
Bitclust の問題じゃなさそうに思えますが一応現象の報告だけしておきます。


OS: Windows XP ServicePack3 32bit
ruby: 1.9.3p125 (2012-02-16) [i386-mswin32_100]
bitclust: 0.5.2 相当(書きかえてた所を確実に元に戻すため svn の working copy からコピペしました)
現象: bitclust setup を実行すると時々途中で例外が起きる
例外の種類:
2種類有ります。
1) atomic_write_open (database.rb) の処理中に Errno::ENOMEM
2) MethodDatabase#init (methoddatabase.rb) 内の mkdir でErrno::EEXIST
1はさらに2通りに分かれます。
1a) fopen (compat.rb) 内の open の処理中にエラー

1b) File.rename でエラー


$ bitclust setup 2> 00.txt
などとやって取ったログを添付します。(log.zip)


ログの内容説明:
まず10回やってみたら全部失敗しました。(00.txt-09.txt)
内訳は一つだけ 2 で後は 1a か 1b。
ほぼ全部 ENOMEM ということでとりあえずPCを再起動してみたら 1 は起こらなくなりました。(10.txt-20.txt)
ファイルが空なのは正常終了したということです。
11_method_dir.txt とかは終了直後に db 内に残っていたディレクトリのリストです。method と付いてるのは method ディレクトリ内だけ。ディレクトリ以外は残っていませんでした。

2 は FileUtils.rm_rf した直後に mkdir で失敗してるわけですが、この rm_rf でなぜか時々ファイルを消し切れていないということのように思えます。

エラーに関係有りそうな部分を模倣するスクリプトを書いて実験してみたら時々再現しました。
僕が観測した範囲では消し損ねることが有るのはディレクトリだけのようです。
使ったスクリプトも添付します。 (rm_rf_test.rb) 
これのエラー表示はこんな感じです:
C:/ruby193/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir': File exists - a (Errno::EEXIST)
        from C:/ruby193/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
        from C:/ruby193/lib/ruby/1.9.1/fileutils.rb:176:in `block in mkdir'
        from C:/ruby193/lib/ruby/1.9.1/fileutils.rb:175:in `each'
        from C:/ruby193/lib/ruby/1.9.1/fileutils.rb:175:in `mkdir'
        from rm_rf_test.rb:9:in `<main>'
失敗したときは a/b が残っているようです。a だけ残るパターンは確認出来ませんでした。

対処法:
1 の方はよく分かりませんがPC再起動で消えてなくなりました。
2 は簡単で、setup しなおしたい時は bitclust に任せず手動で古いのを削除しておけばよいと思います。
どちらも bitclust 側で出来ること/すべきことは特になさそうな気がします。

他の環境:
いちいち時間がかかるのであまり試してませんが、
・上記の環境で ruby 1.8.7 (2012-06-29 patchlevel 370) [i386-mingw32] でも再現する模様。
・Win7 64bit の環境で数回 bitclust setup してみたがエラーは出ず。



-- 
http://bugs.ruby-lang.org/

--
ML: ruby-reference-manual@m...
Info: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      3304 2012-09-17 11:27 [redmine@r...        ] [るりまプロジェクト - Bug #7034][Open] 一部環境で bitclust setup の実行中に例外が起きることがある
      3306 2012-09-17 18:32 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7034] 一部環境で bitclust setup の実行中に例外が起きることがある
->    3322 2012-09-24 16:38 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7034][Assigned] 一部環境で bitclust setup の実行中に例外が起きることがある
      3336 2012-09-27 16:17 ┣[redmine@r...        ] [るりまプロジェクト - Bug #7034] 一部環境で bitclust setup の実行中に例外が起きることがある
      3343 2012-09-30 10:44 ┗[redmine@r...        ] [るりまプロジェクト - Bug #7034][Rejected] 一部環境で bitclust setup の実行中に例外が起きることがある