Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


ee_rpc_poll_any_replies

〈このページの構成〉

名称

非同期応答型RPCの応答受信

形式

ANSI C,C++の形式

#include <eerpc.h>
int ee_rpc_poll_any_replies(int des,
                            EELONG timeout, EELONG flags)

機能

非同期応答型RPC(ee_rpc_call関数のflagsにEERPC_NOWAITを設定)でサービス要求した結果を受信します。

受信する非同期応答を特定する場合は,flagsにEERPC_SPECIFIC_MSGを設定します。このフラグを設定した場合は,desに設定した記述子をリターンした非同期応答型RPCの応答を受信します。

受信する非同期応答を特定しない場合は,flagsにEENOFLAGSを設定します。このとき,desに設定した値は無視されます。flagsにEENOFLAGSを設定したee_rpc_poll_any_replies関数が正常に終了すると,受信した非同期応答の記述子と同じ値をリターンします。

ee_rpc_poll_any_replies関数は,次のどちらかの場合にリターンします。

UAPで値を設定する引数

●des

非同期応答型RPCのee_rpc_call関数(flagsにEERPC_NOWAITを設定)が正常に終了したときに返される記述子を設定します。flagsにEENOFLAGSを設定した場合は,ここに設定した値は無視されます。

●timeout

非同期応答型RPCのee_rpc_call関数の結果が返ってくるまでの待ち時間を,秒単位またはミリ秒単位で設定します。設定できる値の範囲は,-1からEELONG型で表せる最大の数までです。

ee_rpc_poll_any_replies関数で非同期応答を受信する場合は,RPC関連定義のwatch_timeオペランドまたはee_rpc_set_watch_time関数で設定した応答待ち時間を参照しません。

0を設定した場合で,flagsにEERPC_WAIT_MILLISECを設定していないとき,応答が返ってこないとEERPCER_TIMED_OUTですぐにエラーリターンします。flagsにEERPC_WAIT_MILLISECを設定したときは50ミリ秒として処理します。

-1を設定した場合は,応答が返るまで待ち続けます。

●flags

RPCの形態とオプションを次に示す形式で設定します。

{EENOFLAGS|EERPC_SPECIFIC_MSG}〔|EERPC_WAIT_MILLISEC〕
EENOFLAGS

このee_rpc_poll_any_replies関数で受信する非同期の応答を特定しません。

EERPC_SPECIFIC_MSG

desに設定した記述子をリターンした,非同期応答型RPCの応答を受信します。

EERPC_WAIT_MILLISEC

timeoutで設定した待ち時間の単位をミリ秒にします。

リターン値

ここで示すリターン値は,TP1/EEが返す値です。サービス関数から返される値ではありません。

リターン値

意味

正の整数

受信した非同期応答の記述子を示します。正の整数は,flagsにEENOFLAGSを設定したee_rpc_poll_any_replies関数が正常に終了した場合に返されます。

EE_OK

正常に終了しました。EE_OKは,flagsにEERPC_SPECIFIC_MSGを設定したee_rpc_poll_any_replies関数が正常に終了した場合に返されます。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,この機能は使用できません。

EECOMER_CNDUOC

UOCから発行しているため,この機能は使用できません。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EERPCER_ALL_RECEIVED

非同期応答型RPCで要求したサービスの処理結果は,すべて受信しました。

EERPCER_ARGUMENT

引数に設定した値が間違っています。

EERPCER_CONDITION

発行条件が不正です。

EERPCER_INVALID_DES

desに指定した記述子は存在しません。このリターン値は,flagsにEERPC_SPECIFIC_MSGを設定した場合に返されます。

EERPCER_INVALID_REPLY

サービス関数によってOpenTP1に返された応答の長さが,1〜EERPC_MAX_MESSAGE_SIZE_EXで定義されている値の範囲にありません。

EERPCER_MEMORY_SHORT

メモリが不足しました。

EERPCER_NET_DOWN

ネットワークに障害が起こりました。

EERPCER_NO_BUFS_AT_SERVER

ee_rpc_call関数の設定したサービスで,メモリが不足しました。

ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランドの設定値がNの場合,サーバ側のトランザクションがコミットしましたが,応答を返せませんでした。応答を返せなかった原因を次に示します。

  • UAPリターン後の同期点処理でトランザクション決着できない状態で,かつrpc_replymsg_saveオペランドの設定値がN

  • UAPリターン後の同期点処理以降にプロセスダウン

EERPCER_NO_BUFS_RB

メモリが不足しました。このリターン値が返った場合は,トランザクションブランチをコミットできません。

EERPCER_NO_SUCH_SERVICE

ee_rpc_call関数のserviceに設定したサービス名は,定義されていません。

サービスの要求先がTP1/EEであり,かつ要求先の転送機能が無効(rpc_loadbalanceオペランドの設定値がN,かつrpc_transfer_othersvgオペランドの設定値がN)の場合は,サービスグループ名不正のおそれがあります。

EERPCER_NO_SUCH_SERVICE_GROUP

ee_rpc_call関数のgroupに設定したサービスグループ名は,定義されていません。

EERPCER_OLTF_INITIALIZING

サービスを要求されたノードにあるOpenTP1は,開始処理中です。

EERPCER_OLTF_NOT_UP

ee_rpc_call関数のserviceに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了,停止中,終了処理中,または通信障害が起こったことが考えられます。

EERPCER_TIMED_OUT

ee_rpc_call関数の処理が時間切れ(タイムアウト)になりました。

サービスを要求されたSPPが,処理を完了する前に異常終了しました。

ee_rpc_call関数の非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランドの設定値がJの場合,サーバ側のトランザクションがロールバック以外です。

EERPCER_SERVICE_NOT_UP

ee_rpc_call関数のserviceに設定したサービスのUAPプロセスが,稼働していません。

timeoutに-1を指定した場合に,サービスを要求されたSPPが,処理を完了する前に異常終了しました。

EERPCER_REPLY_TOO_BIG

返ってきた応答が,クライアントUAPで用意した領域に入り切りません。

EERPCER_REPLY_TOO_BIG_RB

返ってきた応答が,クライアントUAPで用意した領域に入り切りません。このリターン値が返った場合は,トランザクションブランチをコミットできません。

EERPCER_SERVER_BUSY

サービスを要求されたソケット受信型サーバが,サービス要求を受け取れません。

EERPCER_SERVICE_CLOSED

ee_rpc_call関数のserviceに設定したサービス名があるサービスグループは,閉塞しています。

EERPCER_SERVICE_TERMINATING

ee_rpc_call関数のserviceに設定したサービスは,終了処理中です。

EERPCER_SYSERR

システムエラーが起こりました。

EERPCER_SYSERR_AT_SERVER

ee_rpc_call関数の設定したサービスで,システムエラーが起こりました。

EERPCER_SYSERR_AT_SERVER_RB

設定したサービスで,システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。

EERPCER_SYSERR_RB

システムエラーが起こりました。このリターン値が返った場合は,トランザクションブランチをコミットできません。

EERPCER_TESTMODE

オンラインテスタを使っている環境で,テストモードのUAPからテストモードでないSPPへサービスを要求しています。または,テストモードでないUAPからテストモードのSPPへサービスを要求しています。

EERPCER_TRNCHK

ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で,複数のSPPのトランザクション属性が一致していません。または,負荷を分散する先のノードにあるOpenTP1のバージョンが,クライアントのOpenTP1のバージョンよりも低いため,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。

このリターン値は,ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPPにサービスを要求した場合にだけリターンされます。

EERPCER_TRNCHK_EXTEND

一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。

ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1modeオペランドまたはrpc_reply_tp1mode_downオペランドの設定値がNの場合,サーバ側のトランザクションがコミットできませんでした。

ee_rpc_call関数で非トランザクショナルRPC(EERPC_TPNOTRAN指定)の要求先サーバがTP1/EEであり,かつサーバ側のrpc_reply_tp1mode_downオペランドの設定値がJの場合,サーバ側のトランザクションがロールバックしました。

注意事項

  1. 記述子を特定しないee_rpc_poll_any_replies関数がエラーリターンした場合,エラーとなった応答の記述子を特定できません。ee_rpc_poll_any_replies関数がエラーリターンしたときに該当する記述子がわかるようにしておきたい場合は,flagsにEERPC_SPECIFIC_MSGを設定しておいてください。または,ee_rpc_get_error_descriptor関数を使用することで,エラーリターンした記述子を取得できることもあります。

  2. 別スレッドで送信した非同期応答型RPC(ee_rpc_call関数のflagsにEERPC_NOWAITを設定)は,この関数で受信できません。非同期応答型RPCは同一スレッドでee_rpc_poll_any_replies関数を使用して受信する必要があります。

  3. 非同期応答型RPCでサービスを要求したUAPが次に示す関数を呼び出すと,ee_rpc_poll_any_replies関数で応答を受け取れません。

    • ee_rpc_discard_further_replies関数で,非同期応答の受信を拒否した場合

    • トランザクショナルRPCの場合,同期点処理の関数でコミットまたはロールバックしたとき

    上記の関数を使ったあとで返ってきた応答は,破棄されます。非同期応答型RPCでは,上記の関数を呼び出す前に,必要な非同期の応答をee_rpc_poll_any_replies関数ですべて受け取ってください。