Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 運用と操作


10.4.4 ユーザサーバのコネクション切断検知

クライアントUAPとサーバUAPとの間で確立したコネクションは,次のサービス要求のときに再度使用します。

このコネクションは,UAPを停止したときに切断されますが,停止したUAPがクライアントUAPの場合,コネクションが切断されたことにサーバUAPが気付かないことがあります。

そのような状態でクライアントUAPからのサービス要求を受けた場合,応答を送信したときに,メッセージの吸い込み(送信元ではメッセージの送信に成功したように見えるものの,実際には送信に失敗する事象)が発生します。

また,コネクションを確立した状態で相手先のマシンがダウンした場合,RSTパケットが送信されないため,コネクションの切断を検知できません。この場合も,切断されたコネクションを使用してメッセージを送信すると,メッセージの吸い込みが発生します。

図10‒1 応答の送信に失敗する事象の流れ

[図データ]

  1. クライアントUAP-AからサーバUAPへサービス要求をする。

  2. サーバUAPからクライアントUAP-Aへ応答を返す。

  3. クライアントUAP-Aを停止し,コネクションを切断する。

    このとき,サーバUAPはサービス要求の受信待ちのため,コネクションの切断に気付けない。

  4. クライアントUAP-Bを起動し,サーバUAPへサービス要求をする。

    このとき,クライアントUAP-Bの受信ポートに,停止したクライアントUAP-Aと同じ受信ポート10000が割り当たる。

  5. サーバUAPは,停止したクライアントUAP-Aとの間で確立したコネクションを使用して応答を送信するが,3.でコネクションが切断されているため,送信に失敗する。

この現象を軽減するため,サーバUAP側のユーザサービス定義に次のオペランドを指定し,コネクション切断の監視をしてください。

なお,thread_yield_intervalオペランドには最大値を指定しないでください。

最大値を指定した場合,コネクション切断の監視はしません。

オペランドの詳細については,マニュアル「OpenTP1 システム定義」のユーザサービス定義のpolling_control_dataオペランド,およびthread_yield_intervalオペランドを参照してください。