Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


dc_rpc_service_retry

〈このページの構成〉

名称

サービス関数のリトライ

形式

ANSI C ,C++の形式

#include <dcrpc.h>
int  dc_rpc_service_retry(void)

K&R版 C の形式

#include <dcrpc.h>
int  dc_rpc_service_retry()

機能

実行中のサービス関数の処理をリトライします。リトライする場合は,サービス関数でdc_rpc_service_retry関数を呼び出したあとで,リトライするサービス関数をリターンしてください。リターンしたあと,同じプロセスで同じサービス関数が再起動されます。

応答型RPCで呼ばれたサービス関数がリトライされた場合は,リトライ前のサービス関数が設定した値(応答を格納する領域と応答の長さ)は無効になります。

ユーザサービス定義のrpc_service_retry_countオペランドに指定した回数を超えた(rpc_service_retry_countオペランドに0を指定した場合も含む)あとでdc_rpc_service_retry関数を呼び出した場合,関数は DCRPCER_RETRY_COUNT_OVER でエラーリターンします。このとき,サービス関数はリトライされません。応答型RPCで呼ばれたサービス関数の場合は,応答を格納する領域の内容をクライアントUAPに返します。

リターン値

リターン値

リターン値(数値)

意味

DC_OK

0

正常に終了しました。

DCRPCER_PROTO

-302

dc_rpc_service_retry関数を呼び出す条件が間違っています。次に示すことが考えられます。

  • サービス関数の中で呼び出していません。

  • グローバルトランザクションの範囲の中で呼び出しています。

DCRPCER_RETRY_COUNT_OVER

-377

ユーザサービス定義のrpc_service_retry_countオペランドに指定したサービスリトライ回数最大値を超えて,dc_rpc_service_retry関数を呼び出しています。これ以上サービス関数をリトライできません。

注意事項

  1. dc_rpc_service_retry関数を呼び出す場合は,次に示す条件を満たしてください。この条件を満たしていない場合,dc_rpc_service_retry関数はエラーリターンします。

    • サービス関数の中でdc_rpc_service_retry関数を呼び出していること。

    • 実行中のサービス関数が,グローバルトランザクションの範囲でないこと。

  2. dc_rpc_service_retry関数を呼び出すサービス関数では,クライアントUAPから渡されたデータは参照できますが,変更できません。入力データ領域の内容を変更した場合,システムの動作は保証しません。

  3. dc_rpc_service_retry関数は,OpenTP1独自のリモートプロシジャコール(dc_rpc_call関数)でサービスを要求されたサービス関数でだけ呼び出せます。それ以外のサービス関数の処理は,dc_rpc_service_retry関数でリトライできません。