$ZMAXTPTI[ME] は、現在のトランザクションの最も外側のTSTART / TCOMMITペアによって囲われた完了されたすべての活動のために、GT.Mが待つべき期間を示された、整数値が入ります。
$ZMAXTPTIMEは、SETはできますが、NEWはできません。
$ZMAXTPTIME は、その値を環境変数 gtm_zmaxtptime からとります。gtm_zmaxtptime が定義されていない場合、$ZMAXTPTIMEの初期値はゼロ(0)秒であり、 "タイムアウトなし"(無制限の時間)を示します。トランザクションの一番外側のTSTARTの操作が実行する時に、$ZMAXTPTIMEの値は、そのトランザクションのタイムアウト設定を決定します。
$ZMAXTPTIMEの期限が切れると、GT.Mは、現在有効な$ETRAP/$ZTRAPの例外ハンドラを実行します。
注意 | |
---|---|
$ZMAXTPTIMEの負の値も、"タイムアウトなし"として扱われます。タイムアウトは最も外側のトランザクションにのみ適用されます、すなわち、$ZMAXTPTIMEは、TSTARTが別のトランザクション内にネストされても効果はありません。 |
例:
Test;testing TP timeouts set $ZMAXTPTIME=6,^X=0,^Y=0,^Z=0 write "Start with $ZMAXTPTIME=",$ZMAXTPTIME,":",! for sleep=3:2:9 do . set retlvl=$zlevel . do longtran;ztrap on longtran ;continues execution ;on next line . write "(^X,^Y)=(",^X,",",^Y,")",! write !,"Done TP Timeout test.",! quit longtran ;I/O in TP doesn't get rolled back set $etrap=" goto err" tstart ():serial set ^X=1+^X write !,"^X=",^X,",will set ^Y to ",sleep write " in ",sleep," seconds..." hang sleep set ^Y=sleep write "^Y=",^Y tcommit write "...committed.",! quit err; write !,"In $ETRAP handler. Error was: " write !," ",$zstatus if $TLEVEL do ;test allows handler use outside of TP . trollback . write "Rolled back transaction." write ! set $ecode="" zgoto retlvl
結果:
Start with $ZMAXTPTIME=6: ^X=1,will set ^Y to 3 in 3 seconds...^Y=3...committed. ^X=2,will set ^Y to 5 in 5 seconds...^Y=5...committed. ^X=3,will set ^Y to 7 in 7 seconds... In $ETRAP handler. Error was: 150377322,longtran+7^tptime,%GTM-E-TPTIMEOUT, Transaction timeoutRolled back transaction. ^X=3,will set ^Y to 9 in 9 seconds... In $ETRAP handler. Error was: 150377322,longtran+7^tptime,%GTM-E-TPTIMEOUT, Transaction timeoutRolled back transaction. Done TP Timeout test.