intra-mart Accel Platform IM-Propagation 仕様書 初版 2014-05-01

6. 付録

デッドロック管理

デッドロック管理の概要

IM-Propagation では、複数のスレッドから同一の「データ処理クラス」が実行されないようロック制御されています。
そのため、複数のスレッドでデータの伝搬が発生し、かつ、実行される「データ変換クラス」が連続する場合、デッドロックが発生する可能性があります。
IM-Propagation には、デッドロックが発生した場合の検出機能が組み込まれています。
「データ処理クラス」をロックする際の待機時間や、デッドロック検知時間の設定は、「IM-Propagation 設定」に定義します。
設定ファイルの詳細は、「設定ファイルリファレンス - IM-Propagation 設定 」を参照してください。

デッドロック時の動作

デッドロックが発生する代表的なパターンを下図に示します。
../../_images/appendix_1.png
図 デッドロック発生時の例
デッドロックを検出すると、データの伝搬は失敗扱いとなり、PropagationManager#send() メソッドを実行した際に SendException が発生します。
送信側では、SendException を捕捉した場合、PropagationManager#abort() メソッドを呼び出してセッションの中断処理を行います。
すると、受信側にもセッションの中断処理を行わせるため、「データ処理クラス」の onAbort メソッドが呼び出されますので、後処理が必要な場合、このメソッド内で処理を行います。