MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について https://forums.mozillazine.jp/viewtopic.php?f=3&t=22132 |
ページ 1 / 1 |
作成者: | EarlgreyTea [ 2023年6月04日(日) 20:02 ] |
記事の件名: | 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
このフォーラムで下記2件のトピックにて、Thunderbirdの送信処理中に「NS_ERROR_FILE_TOO_BIG」エラーが発生して送信が失敗するという事例が報告されています。 どちらの事例もWindowsのTempフォルダーに溜まっていた一時ファイルを掃除することによって不具合が解消されましたが、実際に何が起きていたのか、エラーが発生する状況に至った原因は何なのか等、詳細な部分が不明なままです。 このトピックでは情報の整理と類似事例の情報提供を募り、エラー発生に至る状況を検証し、防止策を考えていきたいと思っています。 1つ目のトピックの発生バージョンは「91.13.1」、2つ目のトピックは「102.11.0」になります。 しかし、私が行った簡易検証ではその2つのバージョンでの再現には成功しておらず、バージョン68以前でしか再現しませんでした。 用意すべき条件に不足があったものと思われますが、ひとまずバージョン68.12.1で再現させた際の再現手順と症状を以下に記載しておきます。
ThunderbirdのNS_ERROR_FILE_TOO_BIGエラーに関して下記のバグチケットがあります。
同様の現象に遭遇された方、情報提供をお願いいたします。 |
作成者: | EarlgreyTea [ 2023年6月06日(火) 01:52 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
「Re: メールの送信が出来なくて困っています・・」に記載されたエラーログを調べました。 コード: mailnews.send: 上記のログによれば、「NS_ERROR_FILE_TOO_BIG」の例外エラーの発生元は「nsIFile.createUnique」で「MimeMessage.jsm」の72行目から呼ばれているようです。Exception { name: "NS_ERROR_FILE_TOO_BIG", message: "Component returned failure code: 0x8052000f (NS_ERROR_FILE_TOO_BIG) [nsIFile.createUnique]", result: 2152857615, filename: "resource:///modules/MimeMessage.jsm", lineNumber: 72, columnNumber: 0, data: null, stack: "createMessageFile@resource:///modules/MimeMessage.jsm:72:10\ncreateAndSendMessage@resource:///modules/MessageSend.jsm:128:41\nCompleteGenericSendMessage@chrome://messenger/content/messengercompose/MsgComposeCommands.js:6108:23\nGenericSendMessage@chrome://messenger/content/messengercompose/MsgComposeCommands.js:6024:11\n", location: XPCWrappedNative_NoHelper } MessageSend.jsm:130:27 該当箇所のソースコードを調べてみます。 https://searchfox.org/comm-esr102/sourc ... age.jsm#72 コード: async createMessageFile() { どうやら、送信メール作成時に使われる一時ファイルは「nsemail.eml」だったようです。let topPart = this._initMimePart(); let file = Services.dirsvc.get("TmpD", Ci.nsIFile); file.append("nsemail.eml"); file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0o600); さっそく「nsemail.eml」と「nsemail-1.eml ~ nsemail-9999.eml」をTempフォルダーに置いてメール送信を試してみますと、 「メッセージを送信できませんでした。」のエラーダイアログが表示され、エラーコンソールには下記が出力されました。 コード: mailnews.send: Exception { name: "NS_ERROR_FILE_TOO_BIG", message: "Component returned failure code: 0x8052000f (NS_ERROR_FILE_TOO_BIG) [nsIFile.createUnique]", result: 2152857615, filename: "resource:///modules/MimeMessage.jsm", lineNumber: 72, columnNumber: 0, data: null, stack: "createMessageFile@resource:///modules/MimeMessage.jsm:72:10\ncreateAndSendMessage@resource:///modules/MessageSend.jsm:128:41\nCompleteGenericSendMessage@chrome://messenger/content/messengercompose/MsgComposeCommands.js:6108:23\nGenericSendMessage@chrome://messenger/content/messengercompose/MsgComposeCommands.js:6024:11\n", location: XPCWrappedNative_NoHelper } MessageSend.jsm:130:27 同じ状況の再現に成功しました。 しかも、「nsmail.tmp」ですと Thunderbirdの起動時に削除されるのですが、「nsemail.eml」は削除されないようです。 したがいまして、条件としては
ただし、一時ファイルが削除されずに枝番ファイルを作って9999まで増殖するに至る原因についてはまだ不明です。 |
作成者: | EarlgreyTea [ 2023年6月09日(金) 02:56 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
メール処理関連で同じ名前で使い回す主要な一時ファイルを調べてみました。 ■「nsemail.eml」
■「nsqmail.tmp」
■「nsmail.tmp」
■「nscopy.tmp」
|
作成者: | EarlgreyTea [ 2023年6月11日(日) 14:47 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
「nsmail.tmp」と「nscopy.tmp」については、Thunderbirdが起動する際に下記の処理にて削除が行われています。 https://searchfox.org/comm-central/sour ... ce.cpp#121 コード: nsresult nsMsgComposeService::Init() { nsresult rv = NS_OK; Reset(); AddGlobalHtmlDomains(); // Since the compose service should only be initialized once, we can // be pretty sure there aren't any existing compose windows open. MsgCleanupTempFiles("nsmail", "tmp"); MsgCleanupTempFiles("nsemail", "html"); MsgCleanupTempFiles("nscopy", "tmp"); return rv; } したがって、私がやったように意図的に状況を作らない限り、枝番ファイルが9999に到達してNS_ERROR_FILE_TOO_BIGエラーが発生することは考えにくいです。 一方、「nsemail.eml」と「nsqmail.tmp」は上記処理の対象に含まれておらず、送信処理や後で送信の処理が完了する前に異常終了するような状況があれば一時ファイルが消去されずに残り、それを繰り返せば少しづつ枝番ファイルは増えていくでしょう。 ただ、そういうトラブルが1万回も続き、ユーザーもそれをおかしいと思わずに放置するという状況は現実的ではない気がします。 仮に毎日1回トラブルが起きる状況だったとして、9999に到達するまでには27年以上かかる計算です。一気に千個単位で一時ファイルが増殖するような状況が無いと厳しいかと思います。 そこについては不明ではありますが、Thunderbird起動時の初期処理「nsMsgComposeService::Init()」に、 コード: MsgCleanupTempFiles("nsemail", "eml"); を追加すれば、発生を防止することが可能でしょう。MsgCleanupTempFiles("nsqmail", "tmp"); Bug 673703 にファイル削除処理の追加についてコメントしておきました。 |
作成者: | EarlgreyTea [ 2023年6月11日(日) 19:40 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
EarlgreyTea さんが書きました: 一方、「nsemail.eml」と「nsqmail.tmp」は上記処理の対象に含まれておらず、送信処理や後で送信の処理が完了する前に異常終了するような状況があれば一時ファイルが消去されずに残り、それを繰り返せば少しづつ枝番ファイルは増えていくでしょう。 検証してみました。
という結果となりました。 nsemail.eml の枝番ファイルを作成してそれが消えないという状況を発生させることができましたが、一度にせいぜい86個が限度という感じです。 しかも毎度Thunderbirdが操作不能になって強制終了をかける、そんな異常事態を100回以上も放置しているとか、ちょっと考えにくいですね。 |
作成者: | EarlgreyTea [ 2023年7月18日(火) 21:54 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
ついに、 Bug 673703 に Magnus Melin さんが反応してくれました。 解決に向かいそうな予感・・・ |
作成者: | EarlgreyTea [ 2023年8月08日(火) 00:30 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
Bug 673703 なのですが、どうにも歯がゆい状況になってまして・・・ 私が提案した対策のための修正コードは、他の方のアドバイス意見も加味されてきっちり確定しました。 にもかかわらず、それを修正パッチとして登録する手続きに手間取って停滞しています。 修正パッチの作成に手を上げてくれた方がいて、お試しで try-comm-central レポジトリ(Thunderbirdの本番レポジトリは comm-central)にコミットされたのですが、phabricator を経由してパッチを提出する必要があるという指摘を受けました。 その方は phabricator をセットアップして動作させるには数日必要ということでしたが、結局 phabricator にパッチが登録されたのはそこから1.5週間ほど後となりました。 そして、そのパッチ内容に不足があり更新が必要となったのですが、その手順も手探りの状況です。 1~2日待ってくださいということだったのですが、そこからさらに1週間経ちますが動きがない状況です。 私がビルド環境も必要なアカウントもないのでやっていただけることはありがたいのですが、普段から修正パッチの提出フローに慣れている方ならサクッと終わる作業のはず。 そもそもまだ「Assignee: Unassigned」でして、こういうのってQAの人が適切な担当者をアサインするものだと思ってたのですが・・・どうなんでしょうね。 |
作成者: | EarlgreyTea [ 2023年9月15日(金) 01:34 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
Bug 673703 ですが、無事修正されてクローズされました。 Thunderbird 118.0b4 にも反映されています。 下記PowerShellスクリプトで一時ファイルがThunderbird起動時に残らず削除されることを確認しました。 コード: # Testing MsgCleanupTempFiles() New-Item $env:temp\nsmail.tmp -type file -Force New-Item $env:temp\nscopy.tmp -type file -Force New-Item $env:temp\nsemail.eml -type file -Force New-Item $env:temp\nsemail.tmp -type file -Force New-Item $env:temp\nsqmail.tmp -type file -Force for ($i=1; $i -le 9999; $i++) { $f = $env:temp + "\nsmail-" + $i + ".tmp" New-Item $f -type file -Force $f = $env:temp + "\nscopy-" + $i + ".tmp" New-Item $f -type file -Force $f = $env:temp + "\nsemail-" + $i + ".eml" New-Item $f -type file -Force $f = $env:temp + "\nsemail-" + $i + ".tmp" New-Item $f -type file -Force $f = $env:temp + "\nsqmail-" + $i + ".tmp" New-Item $f -type file -Force } Start-Process -FilePath "C:\Program Files\Mozilla Thunderbird beta\thunderbird.exe" あとはリリース版への反映を待つのみです。 |
作成者: | EarlgreyTea [ 2023年9月26日(火) 06:44 ] |
記事の件名: | Re: 一時ファイルの増殖で「NS_ERROR_FILE_TOO_BIG」エラーが発生する事例について |
Bug 673703 の修正がリリース版 115.3.0 に反映されました。 引用: Thunderbird 115.3.0:
https://hg.mozilla.org/releases/comm-es ... 63abfca36b |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |