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 の実行中に例外が起きることがある