Ticket #1176 (closed 改善提案: 修正済)

Opened 10 years ago

Last modified 8 years ago

商品登録CSVにて、入力エラーがあった場合に無駄にシーケンス番号が消費される

Reported by: shutta Owned by: somebody
Priority: Milestone: EC-CUBE2.11.0
Component: 管理画面 Version: 2.11.0 β2
Keywords: 要仕様検討 Cc:
修正済み: no

Description

現在は、トランザクションの中で、1行毎に、

入力チェック -> DB登録(挿入or更新)

を行なっており、入力チェックでエラーになった場合にbreakし、トランザクションをrollbackしている。

そのため、シーケンス値が無駄に消費されてしまう。(シーケンス値はロールバックしても戻らないため)

全行入力チェックを行った後に、DB更新をするように処理を変更した方が良い。

Change History

comment:1 Changed 10 years ago by shutta

  • Owner changed from somebody to shutta
  • Status changed from new to assigned

comment:2 Changed 10 years ago by shutta

  • Type changed from バグ指摘 to 改善提案

comment:3 Changed 10 years ago by shutta

  • Status changed from assigned to closed
  • Resolution set to 修正済

r20731 にて修正。

comment:4 follow-up: ↓ 7 Changed 10 years ago by kotani

  • Status changed from closed to reopened
  • Resolution 修正済 deleted

shutta様

株式会社ロックオン小谷です。お世話になっております。

r20731 で、PHP4でサポートされていない"clone"が使用されているため、PHP4環境でシンタックスエラーがが発生しています。

Parse error: parse error, unexpected T_VARIABLE in /var/www/html/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php on line 237

現在弊社で実施中のシステム検証に支障がございますため、
大変恐縮ではございますが、r20731 のコミットを一旦キャンセルさせて頂きました。

もし可能でしたら、PHP4にも対応できた形でご修正頂けますと幸いです。

comment:5 Changed 10 years ago by AMUAMU

どのみちclone以外を使っても、メモリ上でデータを格納し再利用する内容だったので、メモリオーバーする問題もあったので、当方も直そうかと思っていました。

どちらにしろ本件自体も問題視するかどうかも検討が必要かと思います。 ※たぶんPostgreSQLの処理系に依存した問題ですよね?

問題視するのであれば、チェックのループを回した後、ファイルポインタを戻して、再度登録する処理をする方針で作り直すのが妥当かと思います。

comment:6 Changed 10 years ago by AMUAMU

  • Keywords 要仕様検討 added
  • Priority changed from to

comment:7 in reply to: ↑ 4 ; follow-up: ↓ 12 Changed 10 years ago by shutta

kotani への返信

r20731 で、PHP4でサポートされていない"clone"が使用されているため、PHP4環境でシンタックスエラーがが発生しています。

Parse error: parse error, unexpected T_VARIABLE in /var/www/html/version-2_5-dev/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSV.php on line 237

現在弊社で実施中のシステム検証に支障がございますため、
大変恐縮ではございますが、r20731 のコミットを一旦キャンセルさせて頂きました。

もし可能でしたら、PHP4にも対応できた形でご修正頂けますと幸いです。

思慮不足ですみません。
PHP4にも対応する形で再修正しました。(r20740)

AMUAMU への返信

どのみちclone以外を使っても、メモリ上でデータを格納し再利用する内容だったので、メモリオーバーする問題もあったので、当方も直そうかと思っていました。

どちらにしろ本件自体も問題視するかどうかも検討が必要かと思います。

軽微な問題(問題とも言えないか)と思いますが、意図せずシーケンス番号が飛んでしまうのが気になるので修正を試みた次第です。
また、入力エラー時に途中まで登録したデータのROLLBACKする負荷を減らすことも目的としております。

※たぶんPostgreSQLの処理系に依存した問題ですよね?

#780 にて、本バージョンから、auto_increment を利用しない実装に変わっているようですが、MySQL(+MDB2)でのシーケンスは、トランザクションセーフになっていて問題ないんですかね。
(検証しようとしたのですが、現在、MySQLで新規新ストールできませんでした。)

問題視するのであれば、チェックのループを回した後、ファイルポインタを戻して、再度登録する処理をする方針で作り直すのが妥当かと思います。

取り急ぎ、ご提案の通りに、もとの実装をなるべく変えずに、全行チェック後にファイルポインターを戻し、登録処理が走るように修正し直しました。


また、カテゴリー登録CSVの方も同様な状態だと思いますが、本チケットと同じadhocな修正で良ければ、同様な変更を施しておこうかと思いますが、どうでしょうか?
カテゴリーだとカテゴリーIDが関係しますので、少しは気になるかと思います。

comment:8 Changed 10 years ago by kotani

  • Owner changed from shutta to kotani
  • 修正済み unset
  • Status changed from reopened to new

確認します

comment:9 Changed 10 years ago by kotani

  • Milestone changed from EC-CUBE2.11.1 to EC-CUBE2.12.0(仮)

comment:10 Changed 8 years ago by kajiwara

  • Owner changed from kotani to somebody

comment:11 Changed 8 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.12.2 to EC-CUBE 2.12.3

comment:12 in reply to: ↑ 7 Changed 8 years ago by kim

  • Status changed from new to closed
  • Resolution set to 修正済
  • Milestone changed from EC-CUBE2.12.3 to EC-CUBE2.11.0

shutta様長期に渡りチケットが対応できておらず申し訳ありません。 本件については、2.11.0をもって完了しているものとさせて頂きます。

shutta への返信

また、カテゴリー登録CSVの方も同様な状態だと思いますが、本チケットと同じadhocな修正で良ければ、同様な変更を施しておこうかと思いますが、どうでしょうか?
カテゴリーだとカテゴリーIDが関係しますので、少しは気になるかと思います。

こちらについては、2.12.2でも、同様の問題が発生していれば、 お手数ですが、2.12.4以降のマイルストーンでチケットを別途ご登録いただけますと幸いです。

Note: See TracTickets for help on using tickets.