mail-entry重複登録の原因判明?かも
一晩寝たら、なぜ重複登録されるか見当が付きました。それが当たっているとすると、まだ対策が完全ではないようです。
POPサーバの動作に詳しくないのですが、メールの削除は、正常にログアウト出来た場合に行われるようです(あってます?)。mail-entryは、すべてのメールを処理してからログアウトしますから、途中でエラーが出てしまうと正常にログアウトされず、削除コマンドは発行していても実際には削除されないことになる、と推測されます。
今回の対策は、一通だけのメールの時はうまくかいくぐってくれますが、複数になるとたぶん、だめです。
テスト1、テスト2というメールを送ったとします。このとき、テスト1は正常に処理できて、テスト2でリビルドもしくはpingでエラーが出たとします。MTオブジェクト側でタイムアウトすると、うまくエラーが拾えないようなので、mail-entryごと途中で終了してしまいます。この場合は、テスト2というエントリーも登録自体はされている可能性が非常に高いです。
つまり、最新エントリーのタイトルは「テスト2」になります。この状態で再度mail-entryが実行されると、前回正常に終了できていないので、POPサーバにはまだテスト1とテスト2というメールが残っています。mail-entryはまず「テスト1」を読み出し、最新エントリーのタイトルと照会しますが、タイトルは「テスト2」です。今登録しようとしているのは「テスト1」なので、問題ないとして登録されます。そして、次はテスト2が同じ理由で登録されます。
もしまたテスト2の時にエラーが出ると、延々とこれを繰り返すことになるので、驚くほどたくさんの重複エントリーが誕生することになります。おおおっ。
こうやって考えると、前回の修正はあまり意味がないものに・・・一応新たな対策案があるので、実際にとりかかりたいところですが、体調不良でしばらく無理かもしれませんです。すいませんです。申し訳ないです。
いいわけ:iBookにローカルサーバをたてて実験しているものですから、タイムアウトエラーっで出ないんです。検証作業が大変です・・・
POPサーバの動作に詳しくないのですが、メールの削除は、正常にログアウト出来た場合に行われるようです(あってます?)。mail-entryは、すべてのメールを処理してからログアウトしますから、途中でエラーが出てしまうと正常にログアウトされず、削除コマンドは発行していても実際には削除されないことになる、と推測されます。
今回の対策は、一通だけのメールの時はうまくかいくぐってくれますが、複数になるとたぶん、だめです。
テスト1、テスト2というメールを送ったとします。このとき、テスト1は正常に処理できて、テスト2でリビルドもしくはpingでエラーが出たとします。MTオブジェクト側でタイムアウトすると、うまくエラーが拾えないようなので、mail-entryごと途中で終了してしまいます。この場合は、テスト2というエントリーも登録自体はされている可能性が非常に高いです。
つまり、最新エントリーのタイトルは「テスト2」になります。この状態で再度mail-entryが実行されると、前回正常に終了できていないので、POPサーバにはまだテスト1とテスト2というメールが残っています。mail-entryはまず「テスト1」を読み出し、最新エントリーのタイトルと照会しますが、タイトルは「テスト2」です。今登録しようとしているのは「テスト1」なので、問題ないとして登録されます。そして、次はテスト2が同じ理由で登録されます。
もしまたテスト2の時にエラーが出ると、延々とこれを繰り返すことになるので、驚くほどたくさんの重複エントリーが誕生することになります。おおおっ。
こうやって考えると、前回の修正はあまり意味がないものに・・・一応新たな対策案があるので、実際にとりかかりたいところですが、体調不良でしばらく無理かもしれませんです。すいませんです。申し訳ないです。
いいわけ:iBookにローカルサーバをたてて実験しているものですから、タイムアウトエラーっで出ないんです。検証作業が大変です・・・
コメント
コメントを投稿