Ticket #573 (closed バグ指摘: 修正済)
SC_Query#insert DBエラー時無限ループ
Reported by: | Seasoft | Owned by: | nanasess |
---|---|---|---|
Priority: | 低 | Milestone: | EC-CUBE2.5.0alpha |
Component: | その他 | Version: | コミュニティ (eccube-comu) |
Keywords: | Cc: | ||
修正済み: |
Description
現状詳細を把握できていませんが、SC_Query#insert でDB周りのエラーが発生すると、無限ループするようです。
- 正式版 2.4.1 / PostgreSQL
- コミュニティ / PostgreSQL / PHP 5.2.9
スタックトレース
# | Time | Memory | Function | Location |
1 | 0.0003 | 100200 | {main}( ) | ../product.php:0 |
2 | 0.1311 | 5591192 | LC_Page_Admin_Products_Product_Ex->process( ) | ../product.php:34 |
3 | 0.1311 | 5591192 | LC_Page_Admin_Products_Product->process( ) | ../LC_Page_Admin_Products_Product_Ex.php:56 |
4 | 0.1376 | 5651616 | LC_Page_Admin_Products_Product->lfRegistProduct( ) | ../LC_Page_Admin_Products_Product.php:170 |
5 | 0.1524 | 5689608 | LC_Page_Admin_Products_Product->lfInsertProductClass( ) | ../LC_Page_Admin_Products_Product.php:504 |
6 | 0.1543 | 5689608 | SC_Query->insert( ) | ../LC_Page_Admin_Products_Product.php:815 |
7 | 0.1545 | 5690100 | SC_DbConn->query( ) | ../SC_Query.php:268 |
8 | 0.1566 | 5705484 | SC_DbConn->send_err_mail( ) | ../SC_DbConn.php:84 |
9 | 0.1586 | 5786368 | LC_Page_Error_SystemError_Ex->init( ) | ../SC_DbConn.php:219 |
10 | 0.1586 | 5786368 | LC_Page_Error_SystemError->init( ) | ../LC_Page_Error_SystemError_Ex.php:48 |
11 | 0.1586 | 5786368 | LC_Page_Error->init( ) | ../LC_Page_Error_SystemError.php:55 |
12 | 0.1586 | 5786368 | LC_Page->init( ) | ../LC_Page_Error.php:62 |
13 | 0.1587 | 5786524 | SC_Helper_PageLayout->sfGetPageLayout( ) | ../LC_Page.php:87 |
14 | 0.1587 | 5787296 | SC_Helper_PageLayout->lfgetPageData( ) | ../SC_Helper_PageLayout.php:58 |
15 | 0.1588 | 5789640 | SC_Query->select( ) | ../SC_Helper_PageLayout.php:161 |
16 | 0.1588 | 5790152 | SC_DbConn->getAll( ) | ../SC_Query.php:92 |
17 | 0.1604 | 5818760 | SC_DbConn->send_err_mail( ) | ../SC_DbConn.php:171 |
18 | 0.1605 | 5819228 | LC_Page_Error_SystemError_Ex->init( ) | ../SC_DbConn.php:219 |
19 | 0.1605 | 5819228 | LC_Page_Error_SystemError->init( ) | ../LC_Page_Error_SystemError_Ex.php:48 |
20 | 0.1605 | 5819228 | LC_Page_Error->init( ) | ../LC_Page_Error_SystemError.php:55 |
21 | 0.1605 | 5819228 | LC_Page->init( ) | ../LC_Page_Error.php:62 |
Change History
comment:1 Changed 13 years ago by Seasoft
- Summary changed from SC_Query#insert to SC_Query#insert DBエラー時無限ループ
comment:2 Changed 13 years ago by nanasess
おそらく, エラー画面を表示させる際に DB 接続を行ってしまい, それがエラーとなって, またエラー画面... といった状況に陥っているのではないでしょうか.
#567 で, エラーハンドリングの修正を試みています.
set_error_handler で, DB 接続に依存しないエラー画面を定義しておき, DB エラーが発生した場合は trigger_error でエラーをスローさせるのが良いかなぁと思っています.
comment:3 Changed 13 years ago by nanasess
- Owner changed from somebody to nanasess
- Status changed from new to assigned
comment:4 Changed 13 years ago by nanasess
以下のように対応しようと思います
- data/require_base.php の中で, DB アクセスを伴うクラスと, 伴わないクラスを分離
- DB アクセスを伴わない data/require_nondb.php を作成
- エラーページでは, data/require_nondb.php を require する
- SC_Inital.php で set_error_handler を定義
- SC_DbConn のエラーハンドリングを trigger_error で行う
comment:5 Changed 13 years ago by nanasess
set_error_handler では Fatal Error は補足できないようなので, ob_start で捕捉するのが良さそうです.
参考
comment:6 Changed 13 years ago by nanasess
r18500 で version-2_4-dev へコミット. set_error_handler を定義し, SC_DbConn のエラーハンドリングを trigger_error を使用するように修正.
これで, 少なくとも無限ループは解消できるはず...
comment:7 Changed 13 years ago by nanasess
r18538 で comu-ver2 へコミット. 問題なければ, version-2_4 にもマージしようと思います.
comment:8 Changed 13 years ago by kajiwara
- Milestone changed from EC-CUBE2.4.3 to EC-CUBE2.4.4
こちらですが、もう少し確認が必要かと思いますので、次期バージョンにマイルストーンを変更させていただきたいと思います。
申し訳ございませんが、よろしくお願いいたします。
comment:9 Changed 13 years ago by nanasess
影響が大きそうですので、 milestone:EC-CUBE2.5.0 へ変更します
comment:11 Changed 13 years ago by Seasoft
- Version changed from 2.4.1 to コミュニティ (eccube-comu)
2.4系での対応は難しいと思いますので、コミュニティ版で動作確認します。
comment:12 Changed 13 years ago by Seasoft
- Status changed from assigned to closed
- Resolution set to 修正済
本件問題が発生しなくなっていることを確認しました。
エラー時の動作が不十分に感じる部分はありますが、本件の範疇を超えますので、#567 辺りでの継続対応と考えています。