Hitachi

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


tx_set_commit_return

〈このページの構成〉

名称

commit_return特性の設定

形式

ANSI C ,C++ の形式

#include <tx.h>
int  tx_set_commit_return(COMMIT_RETURN  when_return)

K&R版 Cの形式

#include <tx.h>
int  tx_set_commit_return(when_return)
COMMIT_RETURN   when_return;

機能

関数tx_set_commit_return()は,commit_return特性をwhen_returnに指定した値に設定します。commit_return特性は,tx_commit()が呼び出し元に制御を戻す方法に対して影響します。

tx_set_commit_return()は,呼び出し元がトランザクションモードかどうかに関係なく呼び出せます。when_returnに設定したcommit_return特性は,あとから呼び出されるtx_set_commit_return()で変更されるまで引き継がれて,効力を発揮します。

commit_return特性の初期設定値は,製品の仕様に依存します。『OpenTP1の場合は,TX_COMMIT_COMPLETEDです。』

『引数』

『●when_return』

次の二つのどちらかの値が,when_returnの妥当な設定です。

{TX_COMMIT_DECISION_LOGGED|TX_COMMIT_COMPLETED}
  • TX_COMMIT_DECISION_LOGGED『この引数は,OpenTP1の該当バージョンでは使えません。when_returnにTX_COMMIT_DECISION_LOGGEDを設定した場合は,リターン値TX_NOT_SUPPORTEDでエラーリターンします。』

    このフラグは,コミット決定を2相コミットプロトコルの1相目でジャーナルに書いたが,2相目がまだ完了していないときに,tx_commit()がリターンすることを示します。このフラグを設定すれば,tx_commit()の呼び出し元に早くリターンできますが,トランザクションの参加者がヒューリスティック決定をしてしまう危険性があります。この場合,tx_commit()はすでにリターンしているので『トランザクションマネジャは,それ独自の方法でリソースマネジャがヒューリスティック決定をしたことを示すことに注意』,ヒューリスティック決定が起こると,呼び出し元にリターンコードで示すことはできません。

    通常の条件では,1相目にコミットを約束した参加者は,2相目の処理の間にコミットをします。一定の特殊な条件下では,長期間のネットワーク,サイト障害などによって,2相目の完了ができないで,ヒューリスティック決定が起こるようなこともあります。トランザクションマネジャは,このフラグは選択しないことにした場合,この値が設定されていないことを示すため,TX_NOT_SUPPORTEDを返します。

  • TX_COMMIT_COMPLETED

    このフラグは,2相コミットプロトコルが完全に終了したあとでtx_commit()がリターンすることを示します。このフラグを設定すると,コミットの2相目でヒューリスティックな決着が起こっても,tx_commit()の呼び出し元にリターンコードで知らせることができます。トランザクションマネジャは,この機能を使えないようにできます。そしてTX_NOT_SUPPORTEDを返す理由にこのフラグを使えない意味を含めることができます。

リターン値

『リターン値が0で』成功した場合,tx_set_commit_return()はTX_OKを返します。これは,負ではないリターン値です。『この場合,commit_return特性の設定は,when_returnに設定した値に変更されます。』

『リターン値が正の値で』成功した場合,tx_set_commit_return()はTX_NOT_SUPPORTEDを返します。これは,負ではないリターン値です。『when_returnに設定した値は,システムのトランザクションマネジャでは使えません。』

この場合のcommit_return特性は,変更されません。トランザクションマネジャはTX_COMMIT_COMPLETEDまたはTX_COMMIT_DECISION_LOGGEDのどちらかは,when_returnの値として使えるようにしておく必要があります。『OpenTP1の場合は,TX_COMMIT_RETURNです。』

エラー

次のような場合,tx_set_commit_return()はエラーリターンして,次のうちどれか一つの値を返します。これは,負のリターン値です。負のリターン値が返った場合は,tx_set_commit_return()はcommit_return特性を変更しません。

リターン値

リターン値(数値)

意味

TX_PROTOCOL_ERROR

-5

関数は,適切でないコンテクストで呼ばれました(例えば,呼び出し元がtx_open()を呼び出していない)。

TX_FAIL

-7

トランザクションマネジャで,回復できないエラーが起こりました。トランザクションマネジャが,すでにアプリケーションに代わって作業できないことが,エラーの原因です。

TX_EINVAL

-8

when_returnに設定した値が,TX_COMMIT_DECISION_LOGGEDでも,TX_COMMIT_COMPLETEDでもありません。

参照

tx_commit(),tx_open(),tx_info()

『指定例』

『if (tx_set_commit_return(TX_COMMIT_COMPLETED) == 0 &&
                                            tx_commit() < 0 )
    fputs("cannot commit transaction\n",stderr);』

『OpenTP1で使う場合の注意事項』

  1. 『tx_set_commit_return()とdc_trn_〜の関数は併用できません。』