図1は、本発明の実施の形態に係る疎結合システム1の構成を示すブロック図である。m台のホストコンピュータ3(以後単にホスト3という)と、n台のMSCP10とが、同一のネットワーク2に接続されている。mとnは、いずれも2以上の整数である。n台のMSCP10のうち、n−1台が運用系MSCP11として、残る1台が待機系MSCP12としてそれぞれ動作する。運用系MSCP11と待機系MSCP12とを総称してMSCP10という。各々の動作の詳細は後述する。
なお、MSCP10による排他制御の対象となる共有資源の存在は自明なことであり、またネットワーク2におけるホスト3およびMSCP10との物理的な接続関係などは限定されないので、図1には図示していない。以後の説明において、共有資源のことを単に資源ということがある。
図2は、疎結合システム1上で通信されるデータの基本フォーマットを示すブロック図である。データ201は、該データの発信元のコンピュータのアドレスを表す送信元アドレス(FROM:)202と、該データが送信先のコンピュータのアドレスを表す送信先アドレス(TO:)203と、通信内容を表す個別データ204からなる。
図3は、ホスト3とMSCP10との間での排他制御関連の通信における個別データ204の内容を示すブロック図である。図3の(A)に示すロック・アンロック要求データ211は、ホスト3からMSCP10に対してロック要求もしくはアンロック要求が送られるときの個別データ204であり、メッセージID212、要求種別213、資源ID214、タスクID215、遅延タイマ値216からなる。
メッセージID212は、「ロック・アンロック要求データ」「ロック・アンロック要求応答データ」などのようなメッセージの種別を表すIDである。要求種別213は、ロック要求およびアンロック要求のうちのいずれかである。資源ID214は、ロック要求もしくはアンロック要求の対象となる共有資源を表す。タスクID215は、ロック要求もしくはアンロック要求をしたホスト3上のタスクに対して付与されるIDである。遅延タイマ値216は後述する排他制御タイマ部115にセットされる遅延タイマの時刻である。
図3の(B)に示すロック・アンロック要求応答データ221は、ロック・アンロック要求データ211に対する返信としてMSCP10からホスト3に送られる個別データ204であり、メッセージID212、資源ID214、タスクID215、処理結果222からなる。メッセージID212、資源ID214、タスクID215については、図3の(A)と同一の定義で表されるので、参照番号も同一として説明を省略する。処理結果222はロック要求もしくはアンロック要求に基づいてロックもしくはアンロックの処理を行った結果であり、ロック可、ロック待ち、アンロック完了、再試行応答のうちいずれか1つである。
図3の(C)に示すアテンション通知データ231は、MSCP10からホスト3上のタスクへの通知に使用される個別データ204であり、メッセージID212、資源ID214、タスクID215、状態232からなる。メッセージID212、資源ID214、タスクID215については、図3の(A)と同一の定義で表されるので、参照番号も同一として説明を省略する。
ホスト3上の特定のタスクが特定の共有資源に対してロックを保持していた場合、同一の共有資源にアクセスしようとした別のホスト3上のタスクはロック待ち状態となる。ここで、該共有資源に対してロックを保持していたタスクが該ロックをアンロックし、ロック待ち状態にあったタスクが該共有資源をロック可となる場合に、アテンション通知データ231が使用される。または、ロック待ち状態にあったタスクが、その状態が一定時間継続してもロック可とならない場合にも、アテンション通知データ231が使用される。状態232は、ロック可およびロック不可のいずれかである。
図4は、MSCP10とMSCP10との相互間での排他制御関連の通信における個別データ204の内容を示すブロック図である。図4の(A)に示す待機系MSCP12から運用系MSCP11へのモード移行要求241は、メッセージID212、自MSCP番号242、および要求モード243からなる。メッセージID212については、図3の(A)と同一の定義で表されるので、参照番号も同一として説明を省略する。自MSCP番号242は、MSCP10相互間で定義される通し番号である。要求モード243は、通常モードおよびリカバリモードのいずれかである。なお、通常モードおよびリカバリモードの各々の詳細については後述する。
図4の(B)に示す運用系MSCP11から待機系MSCP12へのモード移行完了応答251は、モード移行要求241への応答として送信されるものであり、メッセージID212および自MSCP番号242からなる。これらのデータ内容はモード移行要求241と同一の定義で表されるので、参照番号も同一として説明を省略する。
図5は、本実施の形態に係るMSCP10の構成を示すブロック図である。運用系MSCP11と待機系MSCP12とでは内部の構成は同一であるので、図5ではこれらの両者を総称してMSCP10として説明する。MSCP10は、送受信処理部102、MSCPモード管理部103、ロック処理監視部104、応答監視タイマ処理部105、待機系運用系切り替え処理部106、排他制御処理部107、タイマ部108、及び、初期記憶部101、運用モード記憶部111、リカバリフラグ記憶部112、応答カウンタ記憶部113、排他制御タイマ部115、ロックデータ蓄積部120、排他制御テーブル130、応答監視タイマテーブル140から構成される。
運用系MSCP11の基本的な動作は、排他制御処理部107、排他制御タイマ部115、および排他制御テーブル130で実現される。排他制御処理部107は、ホスト3からロック・アンロック要求データ211に含まれる要求種別213によってロック要求を受け取ると、排他制御テーブル130に記録されたロック状態から、ロック要求された共有資源をロックすることが可能であるか否かについて判定する。以後、それが可能である状態をロック可、そうでない状態をロック不可という。なお、排他制御テーブル130については後述する。
ロック可であれば、ロック情報を排他制御テーブル130中の資源情報のロックリストに登録し、ロック要求を行ったホスト上のタスクに対して処理結果222をロック可として、ロック・アンロック要求応答データ221を送信する。ロック不可であれば、ロック情報を排他制御テーブル130中の資源情報のロック待ちリストに登録し、排他制御タイマ部115に遅延タイマをセットし、ロック要求を行ったホスト上のタスクに対して処理結果222をロック待ちとして、ロック・アンロック要求応答データ221を送信する。
なお、後述するタイマ部108は待機系MSCP12において利用されるものであり、運用系MSCP11において利用される排他制御タイマ部115とは異なる。排他制御タイマ部115の仕組みは本発明の要点ではなく、また当業者に公知であるので、詳細な説明は省略する。ただし、タイマ部108と排他制御タイマ部115とを、同一のモジュールもしくはルーチンなどによって機能させることを妨げるものではない。
排他制御処理部107が、ホスト3からロック・アンロック要求データ211に含まれる要求種別213によってアンロック要求を受け取ると、アンロック要求に該当するタスクのロック情報を、排他制御テーブル130の資源情報のロックリストから削除し、処理結果222をアンロック完了として、ロック・アンロック要求応答データ221を送信してアンロック完了を報告する。
更に、アンロックされた該共有資源に対してロック待ち状態であるタスクがあれば、排他制御テーブル130中の資源情報のロック待ちリスト上のロック情報をロックリストに移動し、状態232をロック可としたアテンション通知データ231によって当該タスクにロック可を通知する。排他制御タイマ部115にセットされた遅延タイマがタイムアウトした時は、状態232をロック不可としたアテンション通知データ231によって、タイムアウトしたロック待ち状態のロック要求の要求元であるホスト上のタスクにロック不可を通知する。
図6は、排他制御テーブル130で資源情報301のデータ構成を示すブロック図である。図7は、排他制御テーブル130でタスク情報311のデータ構成を示すブロック図である。図8は、排他制御テーブル130で資源情報301とタスク情報311との間のデータの関係を示すブロック図である。排他制御テーブル130は、ホスト3からのロック要求に基づいた共有資源の排他制御状態を管理するテーブル群で、通常は排他制御処理部107によって生成・更新される。但し、待機系MSCP12においては、障害発生時に待機系運用系切り替え処理部106によりロックデータ蓄積部120のデータを元に生成される。
図6に示す資源情報301は、資源ID214、ロックリスト303、ロック待ちリスト304からなる。資源ID214は、図3の(A)と同一の定義で表される。ロックリスト303は、資源ID214に該当する共有資源をロックしているタスクリストへのアドレスを表す。ロック待ちリスト304は、資源ID214に該当する共有資源でロック待ちの状態であるタスクリストへのアドレスを表す。
図7に示すタスク情報311は、タスクID215、ロック種別313、遅延タイマ値314、継続タスクリスト315からなる。タスクID215は、図3の(A)と同一の定義で表される。ロック種別313は、各々のタスクが共有資源に対して取得するロックの種類であり、独占的にロックを取得するXロックと、共有的にロックを取得するSロックのいずれかである。遅延タイマ値314は、該タスクがロック待ちになった場合に、待ち状態の持続する最大時間を表す。継続タスクリスト315は、ロックやロック待ち列に繋がるタスク情報のアドレスを表す。
図8は排他制御テーブル130で資源情報301とタスク情報311との間のデータの関係を示す。資源情報301の資源ID214は資源Pを表す。ロックリスト303は、資源Pを現在ロックしているタスクAの先頭アドレスを示す。ロック待ちリスト304は、資源Pに対してロック待ち状態となっているタスクCの先頭アドレスを示す。
タスク情報311で、タスクID215aで示されるタスクAは、ロック種別313がSロックで、遅延タイマ値314は空欄、そして継続タスクリスト315はタスクBに続く。タスクID215bで示されるタスクBは、ロック種別313がSロックで、遅延タイマ値314および継続タスクリスト315は空欄(NULL)である。
一方、タスクID215cで示されるロック待ち状態のタスクCは、ロック種別313がXロックで、遅延タイマ値314は「5秒」、継続タスクリスト315は空欄(NULL)である。以上の各データは、次のことを表す。タスクAとタスクBが、資源PをSロックしている。タスクCは資源PをXロックするため、タスクAとタスクBが資源Pをアンロックするのを最大5秒まで待つ。
図5に戻って、送受信処理部102はネットワーク2上に流れる全ての通信データを取り込み、MSCPモード管理部103にデータを渡し、また、各処理部からの送信要求をネットワークに送信する処理部である。初期記憶部101は、自身の運用モード(運用系または待機系)の初期値を記憶している記憶媒体である。運用モード記憶部111は、現在の自身の役割が運用系か待機系かを記憶する記憶部である。リカバリフラグ記憶部112は、リカバリ中か否かを記憶するリカバリフラグを保存する記憶部である。
MSCPモード管理部103は、送受信処理部102から渡された通信データを処理する処理部である。またMSCPモード管理部103は、MSCP10を起動する時に初期記憶部101からMSCP10自身の運用モード(運用系または待機系)の初期値を取り出し、運用モード記憶部111に格納する。
ロック処理監視部104、ロックデータ蓄積部120、応答監視タイマ処理部105、待機系運用系切り替え処理部106、タイマ部108、応答カウンタ記憶部113、応答監視タイマテーブル140は待機系MSCP12のみで機能する処理部である。ロック処理監視部104は、自身が待機系MSCP12であるとき、MSCPモード管理部103から他のホスト3またはMSCP10宛の通信データを受け取り、受け取ったデータの種類に応じて後述の処理を行う。
図9は、ロックデータ蓄積部120および応答監視タイマテーブル140に記録されるデータエントリの形式を示すブロック図である。図9の(A)に示すロックデータ蓄積部120は、ロック処理監視部104によって登録されるエントリ401の集合である。エントリ401は、エントリアドレス402、資源ID214、タスクID215、状態403、管理MSCP404と遅延タイマ値216からなる。状態403は、資源ID214で表される共有資源の状態であり、ロック可、ロック待ち、ロック要求中、アンロック要求中のいずれかの状態を表す。管理MSCP404は、該資源ID214を管理するMSCP10のIDである。タスクID215および遅延タイマ値216は、該資源に対するロック・アンロック要求データ211に含まれるものが設定される。
図9の(B)に示す応答監視タイマテーブル140は、ロックデータ蓄積部120のエントリアドレス402と、タイマID412との間の対応を管理するエントリ411である。タイマがセットされると、エントリアドレス402とタイマID412とがエントリ411に登録され、タイマリセットされた場合およびタイムアウトした場合に消去される。
ロック・アンロック要求データ211を受けたら、ロック処理監視部104はロックデータ蓄積部120にエントリ401を蓄積し、タイマ部108にタイマをセットさせる。ここでタイマ部108にセットされる待ち時間は、ロック処理監視部104において任意に設定することができる。ロック・アンロック要求応答データ221を受けたら、ロック処理監視部104は、タイマ部108にタイマのリセットを依頼し、ロックデータ蓄積部120を検索し対応するデータに処理結果を反映する。アテンション通知データ231を受けたら、ロック処理監視部104はロックデータ蓄積部120を検索し対応するデータに処理結果を反映する。その他のデータを受けた場合は、ロック処理監視部104は特に何もしない。
タイマ部108は、ロック処理監視部104からのタイマセット指示時は、受け取ったロックデータ蓄積部120内のエントリアドレス402をキーにしてタイマをセットし、セットしたタイマID412とエントリアドレス402を応答監視タイマテーブル140に登録する。ロック処理監視部104からのタイマリセット指示時は、タイマ部108は受け取ったエントリアドレス402をキーに応答監視タイマテーブル140からタイマID412を検索して該当するタイマをリセットし、応答監視タイマテーブル140から該当するデータを削除する。
セットされたタイマがタイムアップとなったら、タイマ部108はタイムアップしたタイマID412をキーに応答監視タイマテーブル140からエントリアドレス402を検索し、応答監視タイマ処理部105に通知する。応答監視タイマ処理部105は、タイマ部108からエントリアドレス402を受け取ると、リカバリフラグ記憶部112にリカバリフラグをセットし、また、エントリ401に登録されたタスクIDから要求元ホスト3のタスクに障害の発生した運用系MSCP11xに代わってリカバリ中のため再試行を促す応答を送信する。
また応答監視タイマ処理部105は、ロックデータ蓄積部120のエントリ401の管理MSCP404に登録された情報から障害の発生した運用系MSCP11xを特定し、これ以外の運用系MSCP11へリカバリモードへの移行を要求する。その際、リカバリモードへの移行要求を送信した運用系MSCP11の台数を応答カウンタ記憶部113に設定する。
待機系運用系切り替え処理部106は、ロックデータ蓄積部120から運用系MSCP11xが管理していたロック可またはロック待ちのデータのみを排他制御テーブル130に再生し、再生し終えたら運用系MSCP11xを除く運用系MSCP11に通常モードへのモード移行要求を送受信処理部102経由で送信し、自身の運用モード記憶部111を「運用系」に変更し、リカバリフラグ記憶部112のリカバリフラグを解除する。応答カウンタ記憶部113は、待機系MSCP12から運用系MSCP11への要求の応答を計数するカウンタである。
次に実施例の動作について説明する。図10は、MSCP10が起動されるとMSCPモード管理部103が実行する動作を表すフローチャートである。MSCP10が起動されると(S10)、MSCPモード管理部103は初期記憶部101より自身の運用モード(運用系もしくは待機系)を読み出して運用モード記憶部111に設定し(S11)、以後は送受信処理部102からの通信データを待ち合わせる(S12)。
S12で送受信処理部102が通信データを受信したら、MSCPモード管理部103は該通信データが自身宛のものであるか否かを判断する(S13)。自身宛であれば後述の図11に示す処理を実行して(S14)、S12に戻る。自身宛でなければ(他宛)、該通信データがホスト3−MSCP10間の排他制御関連の通信であるか否かを判断する(S15)。ホスト3−MSCP10間の排他制御関連の通信であり、かつ自身の運用モードが待機系であれば(S16)、後述の図16に示す処理を実行して(S17)、S12に戻る。それ以外は全て、そのままS12に戻る。
MSCP10の運用モードが運用系MSCP11であり、ネットワーク2のどこにも障害が発生していない状態で運用されている状態(以後通常運用中という)での動作をまず説明する。この場合の動作においては、運用系MSCP11は送受信処理部102でホスト3からのロック・アンロック要求データ211を受付け、MSCPモード管理部103を介して排他制御処理部107で排他制御の処理を行い、その処理結果を排他制御テーブル130に格納し、ホスト3に処理結果を含むロック・アンロック要求応答データ221を送信する。また排他制御タイマ部115にセットされていた遅延タイマがタイムアウトした場合には、ホスト3に対して状態を含むアテンション通知データ231を通知する。
図11は、MSCP10が自身宛の通信データを受信した場合にMSCPモード管理部103が実行する動作を表すフローチャートである。まず、送受信処理部102で受信した自身宛の要求が、ホスト3−MSCP10間の通信かMSCP10−MSCP10間の通信かチェックする(S20)。S20でホスト3−MSCP10間の通信であれば、リカバリフラグ記憶部112にリカバリフラグがセットされているか否かを判断する(S21)。S20でMSCP10−MSCP10間の通信である場合の処理については後述する。
S21でリカバリフラグがセットされていず、かつ自身の運用モードが運用系であれば(S23)、後述の図12に示す排他制御処理部107を実行して(S24)、図10に戻る。それ以外は全て、そのまま図10に戻る。ここでは運用モードは運用系であり、通常運用中である(リカバリフラグがセットされていない)状態を考えているので、S24の排他制御処理部107が実行される。また、この処理の対象となる自身宛の受信データは、ロック・アンロック要求データ211である。
図12は、MSCP10において排他制御処理部107が実行する動作を表すフローチャートである。ロック・アンロック要求データ211を受信して起動された排他制御処理部107は(S100)、受信した要求の種類を判断する(S101)。ロック要求の場合は後述の図13に示すロック要求処理を実行し(S102)、アンロック要求の場合は後述の図14に示すアンロック要求処理を実行し(S103)、ホスト3にロック・アンロック要求応答データ221を送信して(S105)呼び出し元に戻る。
図13は、排他制御処理部107が実行するロック要求処理(S102)の動作を表すフローチャートである。まず排他制御処理部107は、排他制御テーブル130から図4のロック・アンロック要求データ211の資源ID214と一致する資源情報を検索し(S121)、要求された資源をロックしているタスクが存在するか否かを判断する(S122)。存在しなければ、新規に資源情報301を作成し(S123)、次に要求データからタスク情報311を作成し(S124)、作成した資源情報301のロックリスト303にタスク情報311を図8に示した形でリンクする(S125)。S105に戻って、ホスト3に処理結果222「ロック成功」を含むロック・アンロック要求応答データ221を通知する。
S122で要求された資源を既にロックしているタスクが存在する場合は、既に該資源をロックしているタスクのロック種別313をチェックし、該タスクと同時にロックが可能(ロック種別313が「S」)であるか否かを判断する(S126)。同時にロックが可能であれば、S124に進んでタスク情報311を作成し、既存のタスクの継続タスクリスト315にタスク情報311をリンクする(S125)。S105に戻って、ホスト3に処理結果222「ロック成功」を含むロック・アンロック要求応答データ221を通知する。
S126で既存のタスクのロック種別313が「X」であり、同時にロックが不可能である場合は、S127に進んでタスク情報311を作成し、資源情報301のロック待ちリスト304にタスク情報311をリンクする(S125)。また、ロック・アンロック要求データ211に遅延タイマ値216が指定されている場合は、指定された値で排他制御タイマ部115に遅延タイマをセットする(S129)。S105に戻って、ホスト3に処理結果222「ロック待ち」を含むロック・アンロック要求応答データ221を通知する。
図14は、排他制御処理部107が実行するアンロック要求処理(S103)の動作を表すフローチャートである。まず排他制御処理部107は、排他制御テーブル130からロック・アンロック要求データ211の資源ID214と一致する資源情報を検索し(S147)、要求された資源をロックしているタスク情報311を(S122)資源情報301から外す(S140)。次に、該資源の資源情報301のロック待ちリスト304に登録されているタスクが存在するか否かを判断する(S141)。
S141で、ロック待ちリスト304にタスクが存在しない場合は、さらに該資源の資源情報301のロックリスト303に登録されているタスクが存在するか否かを判断する(S142)。S142でロックリスト303にタスクが存在すれば、そのままS105に戻って、ホスト3には処理結果「アンロック完了」が通知される。S142でロックリスト303にタスクが存在しなければ、該資源情報301を削除して(S143)からS105に戻って、ホスト3に処理結果222「アンロック完了」を含むロック・アンロック要求応答データ221を通知する。
S141で、ロック待ちリスト304にタスクが存在する場合は、さらに該資源の資源情報301のロックリスト303に登録されているタスクが存在するか否かを判断する(S144)。S144でロックリスト303にタスクが存在すれば、そのままS105に戻って、ホスト3に処理結果222「アンロック完了」を含むロック・アンロック要求応答データ221を通知する。
S144でロックリスト303にタスクが存在しなければ、ロック待ちのタスクに遅延タイマが設定されていれば排他制御タイマ部115から該当する遅延タイマを解除して(S145)、ロック待ちリスト304に登録されていたタスクをロックリスト303に移動して、ホスト3に処理結果222「ロック成功」を含むロック・アンロック要求応答データ221が通知される(S146)。そしてS105に戻って、ホスト3に処理結果222「アンロック完了」を含むロック・アンロック要求応答データ221を通知する。
図15は、排他制御タイマ部115にセットされていた遅延タイマがタイムアウトした場合に排他制御処理部107が実行するタイムアウト処理の動作を表すフローチャートである。排他制御処理部107は、該資源の資源情報301のロック待ちリスト304から、該遅延タイマをセットしたタスク情報311を外す(S150)。そしてタスク情報311のタスクID215の属するホスト3に対して状態232「ロック不可」を含むアテンション通知データ231を通知する。
次に、MSCP10の運用モードが待機系MSCP12であり、ネットワーク2が通常運用中である場合の動作について説明する。この場合の動作においては、待機系MSCP12は送受信処理部102でネットワーク上の通信データを取り込み、図10のS15〜17として既に示したように、取り込んだ通信データが「自身宛でなく、ホスト3−MSCP10間の通信で排他制御に関わるもの」である場合に、MSCPモード管理部103が該通信データをロック処理監視部104に処理させる。
図16は、MSCP10が自身宛でない通信データを受信した場合にロック処理監視部104が実行する動作を表すフローチャートである。図17は、MSCP10が受信した自身宛でない通信データがホスト3からMSCP10への要求通信である場合に、ロック処理監視部104が実行する動作を表すフローチャートである。まずロック処理監視部104は、送受信処理部102で受信した自身宛でない要求が、ホスト3からMSCP10へのロック・アンロック要求データ211であるか否かを判断する(S40)。ロック・アンロック要求データ211であれば、図17に示すホストコマンド要求処理を実行する(S41)。
図17のホストコマンド要求処理において、まずロック処理監視部104は該要求がロック要求かアンロック要求であるかを判断する(S50)。ロック要求であれば、ロック処理監視部104はロックデータ蓄積部120に新規のエントリ401を作成し(S51)、これにロック・アンロック要求データ211に含まれる資源ID214、タスクID215および遅延タイマ値216をセットする(S52)。さらに該エントリ401の管理MSCP404に通信ヘッダ201の宛先アドレス203をセットし(S53)、状態403に「ロック要求中」をセットする(S54)。最後に、タイマ部108に作成したエントリアドレス402と共にタイマをセットさせる(S57)。
S50で、該要求がアンロック要求であれば、ロック処理監視部104はロックデータ蓄積部120からロック・アンロック要求データ211に含まれる資源ID214、タスクID215と一致するエントリ401を検索し(S55)、該エントリ401の状態403に「ロック要求中」をセットする(S56)。最後に、ロック要求の場合と同様にS57に進み、タイマ部108に作成したエントリアドレス402と共にタイマをセットさせる。なお、S57でタイマ部108にセットされる待ち時間は、ロック処理監視部104内部において任意に設定することができる。
S40で、通信データがホスト3からMSCP10への要求通信でない場合は、該通信データはMSCP10からホスト3へのロック・アンロック要求応答データ221か、もしくはアテンション通知データ231のいずれかである。ロック処理監視部104は、該通信データがそのいずれであるかを判断する(S42)。
ロック・アンロック要求応答データ221であれば、ロック処理監視部104はロックデータ蓄積部120から該ロック・アンロック応答データ221に含まれる資源ID214、タスクID215と一致するエントリ401を検索し(S43)、タイマ部108にエントリ401に対応するタイマをリセットさせる(S44)。ここでロック・アンロック要求応答データ221がロック要求に対する応答であるかアンロック要求に対する応答であるかを判定する(S45)。
ロック・アンロック応答データ221の処理結果222が「ロック可」もしくは「ロック待ち」であれば、該ロック・アンロック応答データ221はロック要求に対する応答である。この場合は、処理結果222の「ロック可」もしくは「ロック待ち」と同一の状態を状態403にセットして(S46a)参照元に戻る。S45で、ロック・アンロック応答データ221の処理結果222が「ロック可」でも「ロック待ち」でもなければ、該ロック・アンロック応答データ221はアンロック要求に対する応答である。この場合は、該エントリを削除して(S46b)参照元に戻る。
S42で、通信データがアテンション通知データ231であれば、ロック処理監視部104はロックデータ蓄積部120から該アテンション通知データ231に含まれる資源ID214、タスクID215と一致するエントリ401を検索する(S47)。ここでアテンション通知データ231の状態232の内容を判断し(S48)、状態232が「ロック成功」であれば、検索されたエントリの状態403を「ロック可」にセットして(S49a)参照元に戻る。「ロック不可」であれば、該エントリ401を削除して(S49b)参照元に戻る。
運用系MSCP11がロック・アンロック要求データ211を受けるとS57でタイマ108がセットされ、それに対してロック・アンロック要求応答データ221を返すとS44でタイマ108がリセットされる。運用系MSCP11が正常に動作していれば、ロック・アンロック要求データ211を受けてからロック・アンロック要求応答データ221を返すまでの処理が所定の時間内で行われるので、タイマ108がタイムアップすることはない。
さて、ここで運用系MSCP11の中の一つである運用系MSCP11xに障害が発生した。その場合、運用系MSCP11xが受けたロック・アンロック要求データ211に対するロック・アンロック要求応答データ221は無い。従って、ロック・アンロック要求データ211に対応してセットされたタイマ108は、リセットされずにタイムアップする。これによって、待機系MSCP12は、運用系MSCP11xに障害が発生したことを検出する。タイマ部108は、タイムアップが発生すると、該タイムアップしたエントリに対応するロックデータ蓄積部120のエントリアドレス402を応答監視タイマ処理部105に通知する。
図18は、タイマ部108からの通知を受けた応答監視タイマ処理部105が実行する動作を表すフローチャートである。応答監視タイマ処理部105は、リカバリフラグ記憶部112のリカバリフラグをセットし(S60)、障害が発生した運用系MSCP11x以外の運用系MSCP11へ要求モード243が「リカバリモード」であるモード移行要求241を送信し(S61)、モード移行要求241を送信した運用系MSCP11の数を応答カウンタ記憶部113に設定する(S62)。また、タイムアップの対象となったロック・アンロック要求データ211を送信したホスト3に対して、処理結果222が「再試行応答」であるロック・アンロック要求応答データ221を送信して(S63)参照元に戻る。
リカバリモードへのモード移行要求241を受け取った運用系MSCP11のMSCPモード管理部103は、モード移行要求241を図10のS13において自身宛の通信であると判断し、S14で図11の処理に進む。該通信はMSCP10−MSCP10間の通信であるので、S20においてホスト3−MSCP10間の通信ではないと判断してS25に進む。ここで自らの動作モードを運用系であると判断して、リカバリフラグ記憶部112のリカバリフラグをセットし(S26)、モード移行要求241を発信した待機系MSCP12に対してモード変更応答242を返信する(S27)。
モード変更応答242を受け取った待機系MSCP12のMSCPモード管理部103は、該モード変更応答242を図10のS13において自身宛の通信であると判断し、S14で図11の処理に進む。該通信はMSCP10−MSCP10間の通信であるので、S20においてホスト3−MSCP10間の通信ではないと判断してS25に進む。ここで自らの動作モードを待機系であると判断して、図18のS62でセットされた応答カウンタ記憶部113をディクリメントし(S28)、続いて応答カウンタ記憶部113の設定値が0になったか否かを判断する(S29)。
応答カウンタ記憶部113はモード移行要求241を送信した運用系MSCP11の数が初期設定されているので、その設定値が0になったということは、モード移行要求241を送信した全ての運用系MSCP11からモード変更応答242を受けたことを意味する。そこで、応答カウンタ記憶部113の設定値が0となれば、図19に示す待機系運用系切り替え処理部106の処理を実行する。
ちなみに、ここでいうリカバリモードとは、運用系MSCP11のリカバリフラグ記憶部112にリカバリフラグがセットされている状態である。リカバリモードでの動作となった運用系MSCP11は、ホストからロック・アンロック要求データ211を受けると、該通信を図10のS13において自身宛の通信であると判断してS14で図11の処理に進み、さらにS20においてホスト3−MSCP10間の通信であると判断してS21に進む。しかし、ここでリカバリフラグがセットされているので、排他制御処理を行わずに処理結果222が「再試行応答」であるロック・アンロック要求応答データ221を送信する(S22)。
図19は、待機系MSCP12において、待機系運用系切り替え処理部106が実行する動作を表すフローチャートである。待機系運用系切り替え処理部106は、ロックデータ蓄積部120からエントリ401を1データずつ取り出し(S71〜72)、エントリ401の管理MSCP404が障害の発生した運用系MSCP11xに該当し、かつ状態403が「ロック可」もしくは「ロック待ち」であるものについて、図20に示す排他制御テーブル130の再生の処理を行う(S73〜74)。
図20は待機系運用系切り替え処理部106が実行する排他制御テーブル130の再生の処理の動作を表すフローチャートである。待機系運用系切り替え処理部106は、エントリ401の資源ID214に一致する資源情報301が、排他制御テーブル130に存在するか否かを検索して判定する(S80〜81)。該資源が存在しなければ、資源情報301を作成する(S82)。
続いてエントリ401からタスク情報311を作成し(S83)、エントリ401の状態403を判断し(S84)、状態403が「ロック状態」であればタスク情報311を該当する資源情報301のロックリスト303にリンクして(S85)参照元に戻る。状態403が「ロック待ち状態」であれば、排他制御タイマ部115に遅延タイマをセットし(S87)、タスク情報311を該当する資源情報301のロック待ちリスト304にリンクして(S88)参照元に戻る。
これらの動作は、運用系MSCP11xが排他制御テーブル130に対して実行していた動作と同一であるので、排他制御タイマ部115による動作が含まれたとしても、排他制御テーブル130を正確に再現することが可能である。
以上、ロックデータ蓄積部120から全てのエントリ401を読み取って排他制御テーブル130の再生を完了したら、待機系運用系切り替え処理部106は図19のS72で「データ無し」と判断してS75に進む。S75で、全ての運用系MSCP11に要求モード243が「通常モード」であるモード移行要求241を送信する。運用系MSCP11の側においては、前述のリカバリモードへの移行要求と同様の動作(図11S26)で、リカバリフラグ記憶部112のリカバリフラグを削除する。この場合はS27のモード変更応答242は返信しない。
そして待機系運用系切り替え処理部106は、自身の運用モード記憶部111を「運用系」に変更し(S76)、リカバリフラグ記憶部112のリカバリフラグを解除する(S77)。以上の処理を経て、待機系MSCP12は、障害の発生した運用系MSCP11xの後継として動作する運用系MSCP12xとなる。
以上、フローチャートによって説明してきた動作をまとめると、次のようになる。図21は、本実施の形態に係るMSCP10が通信データを受信した際の動作をまとめた表である。
自らの動作モードが運用系MSCP11である場合、自身宛の通信で、「リカバリフラグ記憶部112にリカバリフラグがセットされていて、かつロック・アンロック要求データ211を受信した場合」には、処理結果222が「再試行応答」であるロック・アンロック要求応答データ221を返信する(図11S21〜22)。「リカバリフラグ記憶部112にリカバリフラグがセットされていて、かつ要求モード243が『通常モード』であるモード移行要求241を受信した場合」には、リカバリフラグ記憶部112のリカバリフラグを削除する(図11S25〜26)。
「リカバリフラグ記憶部112にリカバリフラグがセットされていなくて、かつ要求モード243が『リカバリモード』であるモード移行要求241を受信した場合」には、リカバリフラグ記憶部112のリカバリフラグをセットして、モード変更応答242を返信する(図11S25〜27)。「リカバリフラグ記憶部112にリカバリフラグがセットされていなくて、かつロック・アンロック要求データ211を受信した場合」には、排他制御処理部107が要求に基づいて排他制御処理を実行し、処理結果に対応したロック・アンロック要求応答データ221を返信する(図11S24)。それらの場合以外は何もしない。また、他宛の通信に対しても何もしない。
自らの動作モードが待機系MSCP12である場合、自身宛の通信で「モード変更応答242を受信した場合」には、応答カウンタ記憶部113をディクリメントし、続いて応答カウンタ記憶部113の設定値が0になったか否かを判断する(図11S28〜30)。また、他宛の通信で「ロック・アンロック要求データ211またはロック・アンロック要求応答データ221を受信した場合」には、ロック処理監視部104による動作を行う(図10S17)。それらの場合以外は何もしない。このとき、自身宛の通信でロック・アンロック要求データ211を受信することは通常あり得ないが、万一そのようなことがあったとしても何もしない。
図22は、本発明の実施の形態に係る疎結合システム1において、全ての運用系MSCP11が正常に動作している状態での各ホスト3およびMSCP10を表す概念図である。
ホスト3が、運用系MSCP11にロック・アンロック要求データ211を送ると、運用系MSCP11はそれに対してロック・アンロック要求応答データ221を返す。同時に、ネットワーク2上での全ての通信データを監視することのできる待機系MSCP12は、それらのロック・アンロック要求データ211をロックデータ蓄積部120に蓄積し、同時にロック・アンロック要求データ211に対するロック・アンロック要求応答データ221が所定の時間内に返されたか否かを監視する。所定の時間内に返されたロック・アンロック要求応答データ221は、ロックデータ蓄積部120に反映される。
図23は、本発明の実施の形態に係る疎結合システム1において運用系MSCP11xに障害が発生した状態での各ホスト3およびMSCP10を表す概念図である。待機系MSCP12は、ロック・アンロック要求データ211に対するロック・アンロック要求応答データ221が所定の時間内に返されなかったことを検出して、運用系MSCP11xに障害が発生したことを検出する。その際待機系MSCP12は、ロック・アンロック要求データ211を発したホスト3に対して、運用系MSCP11xのかわりにロック・アンロック要求応答データ221を返して再試行応答を行い、引き続いてリカバリの処理に入る。
図24は、本発明の実施の形態に係る疎結合システム1においてリカバリの処理を行った後の各ホスト3およびMSCP10を表す概念図である。待機系MSCP12は、ロックデータ蓄積部120に蓄積されたデータの中から運用系MSCP11xに関連するものを抽出し、運用系MSCP11xの排他制御テーブル130を再生する。そして自身の動作モードを切り替えて運用系MSCP12xとなり、障害が発生した運用系MSCP11xの後継として動作する。
このリカバリの処理の間、他の運用系MSCP11は、一時的にロック・アンロック要求データ211を受け付けないリカバリモードとなる。しかし排他制御テーブル130を再生する作業は待機系MSCP12内部に蓄積されたデータによって行われるので、人手による操作を必要とせず、またホスト3や他の運用系MSCP11とのデータの同期なども必要とせず、短時間で完了する。運用系MSCP11のリカバリモードは、ごく短時間で終了して通常の動作に戻る。従って、ホスト3の動作を一時停止もしくは制限する必要はない。
障害が発生した運用系MSCP11xが復帰しても、運用系MSCP12xを元の待機系MSCP12に戻す必要はなく、そのまま運用系MSCP11としての動作を継続させることができる。そのかわり、リカバリの処理が行われた後の疎結合システム1には待機系MSCP12が存在しないので、復帰したMSCPは待機系MSCP12としてネットワーク2に接続して疎結合システム1に参加させるとよい。
つまり、本実施の形態によって、ホスト3の動作を停止することなく、運用系MSCP11のリカバリを行うことができる。この動作には、運用系MSCP11と同一の性能を持つMSCP10を疎結合システム1に1台追加して待機系MSCP12とするだけでよい。ホスト3および運用系MSCP11に障害を検出する機能を追加する必要はなく、またホスト3にMSCP10と連携するモジュールを追加する必要もない。従って、本実施の形態を疎結合システム1に適用するために必要なコストは小さい。
なお、本実施の形態は、待機系MSCP12がネットワーク2上で、ホスト3と運用系MSCP11との間の通信データを監視できることが前提となる。ネットワーク2がイーサネット(登録商標)であれば、基本的には接続された全てのホスト3およびMSCP10がネットワーク2上の全ての通信データを受信することが可能である。
ただし、たとえばネットワーク2における接続にスイッチングハブを使用している場合などで、自身宛ではない通信データを受信できない場合がある。その場合は、全てのホスト3および運用系MSCP11が、ホスト3と運用系MSCP11との間の通信をブロードキャストで送信するようにすれば、本実施の形態を適用することができる。その際にホスト3および運用系MSCP11に対して必要な設定変更は僅かで済む。
1台の待機系MSCP12が複数台の運用系MSCP11の後継となることはできない。しかし、1つの疎結合システム1に対して待機系MSCP12は1台だけに制限されることはないので、同時に複数台の運用系MSCP11に障害が発生することが予想される場合は、想定される障害の規模に応じて、疎結合システム1が2台以上の待機系MSCP12を持つようにすればよい。
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることは言うまでもないことである。