Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 解説


3.4.2 MHPのスケジュール

〈この項の構成〉

(1) MHPのスケジュールの方法

OpenTP1は,MHPのサービスグループ単位にスケジュールキューを作成してスケジュールします。まず,MCFはメッセージに組み込まれたアプリケーション名をサービスグループ名とサービス名に変換し,受信メッセージを入力キューに登録します。アプリケーション名と,サービスグループ名・サービス名の対応は,アプリケーション属性定義で指定します。MCFは,入力キューに受信メッセージの最終セグメントを格納した時点で,変換されたサービスグループ名とサービス名を基に,MHPへのサービス要求をスケジュールキューに登録します。登録したサービス要求は,スケジュールキューから先入れ先出しで取り出します。

MHPのサービスグループが,メッセージを受信したMCFと同じノードにないとスケジュールできません。

MHPのスケジュールを次の図に示します。

図3‒50 MHPのスケジュール

[図データ]

(2) MHPのスケジュールの閉塞

(a) OpenTP1のコマンドによる閉塞

コマンドでMHPのアプリケーション名を指定して,対応するアプリケーションを閉塞できます。MHPを閉塞,閉塞を解除するコマンドを次に示します。

  • 閉塞するコマンド

    mcfadctapコマンド:アプリケーション単位の閉塞

    mcftdctsgコマンド:サービスグループ単位の閉塞

    mcftdctsvコマンド:サービス単位の閉塞

  • 閉塞を解除するコマンド

    mcfaactapコマンド:アプリケーション単位の閉塞の解除

    mcftactsgコマンド:サービスグループ単位の閉塞の解除

    mcftactsvコマンド:サービス単位の閉塞の解除

コマンドを入力してMHPを閉塞した場合のMHPの閉塞状態は,オンラインシステム停止後の全面回復時に引き継げます。閉塞状態を引き継ぐかどうかを,状態引き継ぎ定義で指定します。なお,mcftdctsgコマンドでサービスグループを閉塞するとき,閉塞状態を引き継がない指定ができます。この場合,全面回復時にmcftactsgコマンドで閉塞を解除する必要はありません。

  • アプリケーション単位の閉塞

    MHPをアプリケーション名単位で閉塞するときは,mcfadctapコマンドを使います。コマンドの引数によって,次に示す3種類の閉塞を選べます。

    MHPのアプリケーション名による閉塞を次の表に示します。

    表3‒12 MHPのアプリケーション名による閉塞

    閉塞種別

    タイミング

    閉塞したあとに到着したメッセージに対する処理

    閉塞する前に到着してすでに入力キューに登録されているメッセージに対する処理

    入力とスケジュールを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

    入力だけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    該当するMHPを正常に起動します。

    スケジュールだけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

    サービス名に対応するアプリケーション名を,プロトコルごとに付けることができます。プロトコルごとにアプリケーション名を変えておくと,アプリケーション名によって閉塞することで,特定のプロトコルからのサービス要求だけを拒否できます。

    アプリケーション名による閉塞を次の図に示します。

    図3‒51 アプリケーション名による閉塞

    [図データ]

  • サービス単位の閉塞

    MHPをサービス単位で閉塞するときは,mcftdctsvコマンドを使います。コマンドの引数によって,次に示す3種類の閉塞を選べます。あるサービスを閉塞しても,同じMHPのサービスグループにあるほかのサービスは使えます。

    MHPのサービスを閉塞する方法を次の表に示します。

    表3‒13 MHPのサービスの閉塞

    閉塞種別

    タイミング

    閉塞したあとに到着したメッセージに対する処理

    閉塞する前に到着してすでに入力キューに登録したメッセージに対する処理

    入力とスケジュールを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

    入力だけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    該当するMHPを正常に起動します。

    スケジュールだけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

  • サービスグループ単位の閉塞

    MHPをサービスグループ単位で閉塞するときは,mcftdctsgコマンドを使います。コマンドの引数によって,次に示す3種類の閉塞を選べます。さらに,入力キューがディスクキューかメモリキューかによって,一部の処理が異なります。

    MHPのサービスグループの閉塞を次の表に示します。

    表3‒14 MHPのサービスグループの閉塞

    閉塞種別

    タイミング

    閉塞したあとに到着したメッセージに対する処理

    閉塞する前に到着してすでに入力キューに登録されているメッセージに対する処理

    ディスク入力キュー

    入力とスケジュールを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    スケジュール待ち状態にし,閉塞解除後に該当するMHPを正常に起動します。

    入力だけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    該当するMHPを正常に起動します。

    スケジュールだけを閉塞

    入力キューに登録し,スケジュール待ち状態にします。

    スケジュール待ち状態にし,閉塞解除後に該当するMHPを正常に起動します。

    メモリ入力キュー

    入力とスケジュールを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

    入力だけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    該当するMHPを正常に起動します。

    スケジュールだけを閉塞

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

    MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録し直します。

    注※

    ディスク入力キューに登録されたメッセージの数が最大格納数を超えたときには,格納数を超えた分のメッセージは,MCFイベント処理用MHP(ERREVT2)対応の入力キューに登録します。

(b) 異常終了による自動閉塞

MHPがサービスを実行中に異常終了したときの閉塞単位をアプリケーション属性定義で指定すると,異常終了したときに,定義した単位で自動的に閉塞できます。

アプリケーション単位で閉塞するには,アプリケーション属性定義のapliholdにアプリケーション単位で閉塞する指定をします。

サービス単位で閉塞するには,アプリケーション属性定義のservholdにサービス単位で閉塞する指定をします。

サービスグループ単位で閉塞するには,アプリケーション属性定義のsrvgholdにサービスグループ単位で閉塞する指定をします。

また,異常終了した回数によって,アプリケーション,サービスまたはサービスグループを閉塞するかどうかを,アプリケーション属性定義で指定します。このとき,連続して異常終了した回数を数えるか,または異常終了した回数の合計を数えるかのどちらかを選択します。異常終了した回数には,MHPからdc_mcf_rollback関数(ノーリターン指定)でロールバックした回数も含めます。ロールバックの関数については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

サービスグループ単位でスケジュールだけを閉塞する場合,MHPがサービスを実行中に異常終了したときの受信メッセージを,エラーイベントに切り替えるか,スケジュールキューの先頭に再スケジュールするかを指定できます。スケジュールキューの先頭に再スケジュールするには,アプリケーション属性定義のrecvmsgにrを指定します。

異常終了による自動閉塞でのMHPの閉塞状態は,オンラインシステム停止後の全面回復時に引き継ぎません。

アプリケーション属性定義のaplihold,servholdまたはsrvgholdに,異常終了した場合に閉塞しない指定をした場合には,アプリケーション,サービスまたはサービスグループを閉塞しません。この場合,異常終了が続くときには,コマンドを使って,アプリケーション,サービスまたはサービスグループを閉塞してください。

(c) MHPの再スケジュール

トランザクション処理を実行しているMHPは,障害発生時に再スケジュールできます。

MCFは,次に示す場合にMHPを再スケジュールします。

  • MHPからdc_mcf_rollback関数(RETRY指定)でロールバックした場合

  • アプリケーション属性定義(mcfaalcap)またはUAP共通定義(mcfmuap)のreschedulecntオペランドの指定値が1以上の場合に,MHPがサービス実行中に異常終了してロールバックしたとき

MHPの再スケジュール時の処理の流れを,次の図に示します。

図3‒52 MHPの再スケジュールの処理の流れ

[図データ]

異常終了したMHPを再スケジュールする場合,アプリケーション属性定義(mcfaalcap)またはUAP共通定義(mcfmuap)の次のオペランドで,再スケジュールの回数や間隔などを指定できます。

  • reschedulecntオペランド

  • rescheduleintオペランド

  • reschedulelogオペランド

指定した回数を超えてMHPが異常終了すると,再スケジュールされません。KFCA11163-Eメッセージが出力され,エラーイベントが通知されます。

なお,MHPからdc_mcf_rollback関数(RETRY指定)でロールバックした場合やMHPが異常終了した場合に,MHPを再スケジュールすると,アプリケーション,サービス,またはサービスグループの自動閉塞で使用する,MHPが連続して異常終了した回数には含まれません。

MHPを再スケジュールする場合,受信メッセージを入力キューに再度格納する際に,先頭に格納するか最後に格納するかを選択できます。

先頭に格納する場合の注意事項を次に示します。

  • システム共通定義のwatch_timeオペランドを省略するか,180以上を指定してください。

  • プロセスサービス定義のprc_recovery_residentオペランドを省略するか,Yを指定してください。

  • MHPのユーザサービス定義またはユーザサービスデフォルト定義のscd_process_ctl_optオペランドに1を指定してください。

  • アプリケーション起動プロセスがなくても,MHPの再スケジュールができます。

    ただし,アプリケーション異常終了時の再スケジュール回数(アプリケーション属性定義(mcfaalcap -d)のreschedulecntオペランドまたはUAP共通定義(mcfmuap -r)のreschedulecntオペランド)の指定値に1以上を指定していて,指定値を超えて異常終了したあとにエラーイベントを起動したい場合には,アプリケーション起動プロセスが必要となります。

  • MHPの多重度が1の場合,MHPの再スケジュールをしたときにあとから受信したメッセージが前に受信したメッセージを追い越すことはありません。このため,繰り返しMHPの再スケジュールをする場合,エラーが解消されて正常に処理されるなどにより再スケジュールをしなくなるまで後続のメッセージを処理できませんので注意してください。

最後に格納する場合の注意事項を次に示します。

  • MHPを再スケジュールするためには,アプリケーション起動プロセスが必要です。このため,アプリケーション起動プロセス用のMCF通信構成定義を作成する必要があります。

  • 受信メッセージを,入力キューに再度格納してから再スケジュールします。このため,MHPの多重度を1にしていたとしても,再スケジュールするメッセージよりもあとに受信したメッセージが,再スケジュールするメッセージを追い越すことがあります。

何らかの理由によってMHPの再スケジュールに失敗した場合,受信メッセージを破棄します。このとき,エラーイベントは通知されません。

MHPのサービス実行中にエラーが発生して繰り返しMHPの再スケジュールをしているときに,OpenTP1を正常終了,強制正常終了または計画停止Aで終了した場合,エラーが解消されて正常に処理されるなどにより再スケジュールをしなくなるまでOpenTP1の終了処理を待ち合わせます。

このため,MHPを停止するまで回復の見込みがない障害に対して無条件にRETRY指定のロールバックをしないでください。

また,MHPのサービス実行中にエラーが発生して繰り返しMHPの再スケジュールをしているときに,OpenTP1を正常終了,強制正常終了または計画停止Aで終了してしまい,MHPを停止するまで回復の見込みがない場合,OpenTP1を強制停止してください。

(d) アプリケーション名とMHPの不整合による自動閉塞

MCFはMHPのスケジュール時に,アプリケーション属性定義で指定したアプリケーション名に対応するサービスグループがあるかどうかをチェックします。アプリケーション名に対応するサービスグループがない場合,該当するサービスグループが存在しないというメッセージログを出力して,サービスグループへのスケジュールだけを閉塞します。

アプリケーション名とMHPの不整合による自動閉塞でのMHPの閉塞状態は,オンラインシステム停止後の全面回復時に引き継ぎません。