(57)【要約】【課題】プロセスに通信の実行を要求する際にそのプロセスの起動状態に応じた処理を選択して実行する。【解決手段】第１のプロセス１は、起動処理の実行過程において、制御データ１１ａを作成して記憶部１１に格納するとともにこれをロックし、起動処理の完了時および停止時にロックを解除し、起動処理が完了すると、通信要求に応じて通信先装置２０との間で通信する。第２のプロセス２は、制御データ１１ａに基づいて第１のプロセス１と接続し、接続が確立した状態で通信要求を第１のプロセス１に送信することで、通信先装置２０との通信を第１のプロセス１に実行させる。また、第２のプロセス２は、第１のプロセス１との接続の成否と制御データ１１ａのロック状態とに応じて、通信を実行させるために第１のプロセス１に対して実行する処理を選択する。【選択図】図１
2020086767.tif 000002
【特許請求の範囲】
【請求項１】
記憶部と、
第１のプロセスの起動処理の実行過程において、通信で利用される制御データを作成して前記記憶部に格納するとともに前記制御データをロックし、前記起動処理の完了時および停止時に前記制御データのロックを解除し、前記起動処理が完了すると、通信要求に応じて通信先装置との間で通信する前記第１のプロセス、および、
前記制御データに基づいて前記第１のプロセスと接続し、接続が確立した状態で前記通信要求を前記第１のプロセスに送信することで、前記通信先装置との通信を前記第１のプロセスに実行させる第２のプロセスであって、前記制御データに基づく前記第１のプロセスとの接続の成否と、前記制御データがロックされているか否かを示すロック状態とに応じて、前記通信先装置との通信を実行させるために前記第１のプロセスに対して実行する処理を選択する、前記第２のプロセス、
を実行する処理部と、
を有する情報処理装置。
【請求項２】
前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に失敗したとき、前記制御データがロックされていない場合には、前記第１のプロセスを再起動させ、前記制御データがロックされている場合には、前記制御データのロックが解除されるまで待ち状態になり、前記制御データのロックが解除されると、前記制御データに基づいて前記第１のプロセスと接続する、
請求項１記載の情報処理装置。
【請求項３】
前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に成功した場合、前記通信要求を前記第１のプロセスに送信する、
請求項１または２記載の情報処理装置。
【請求項４】
前記処理部は、前記第２のプロセスを複数実行し、前記第１のプロセスは、複数の前記第２のプロセスによって共用され、
複数の前記第２のプロセスのそれぞれは、
前記記憶部に前記制御データが存在するかを判定し、
前記制御データが存在する場合には、前記制御データに基づいて前記第１のプロセスと接続し、
前記制御データが存在しない場合には、前記第１のプロセスを起動させ、起動した前記第１のプロセスによって作成された前記制御データに基づいて前記第１のプロセスと接続する、
請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
コンピュータに、
第１のプロセスの起動処理の実行過程において、通信で利用される制御データを作成して記憶部に格納するとともに前記制御データをロックし、前記起動処理の完了時および停止時に前記制御データのロックを解除し、前記起動処理が完了すると、通信要求に応じて通信先装置との間で通信する前記第１のプロセスと、
前記制御データに基づいて前記第１のプロセスと接続し、接続が確立した状態で前記通信要求を前記第１のプロセスに送信することで、前記通信先装置との通信を前記第１のプロセスに実行させる第２のプロセスであって、前記制御データに基づく前記第１のプロセスとの接続の成否と、前記制御データがロックされているか否かを示すロック状態とに応じて、前記通信先装置との通信を実行させるために前記第１のプロセスに対して実行する処理を選択する、前記第２のプロセスと、
を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
アプリケーションプログラムの処理過程において他の装置との通信を実現するために、アプリケーションプログラムのプロセスとは別に、通信処理用のプログラムのプロセス（以下、「通信プロセス」と記載する）が実行される場合がある。この場合、通信プロセスは、アプリケーションプログラムのプロセスからの要求に応じて、他の装置との通信を実行する。このような構成によれば、例えば、新たな通信方式による通信が必要になったとき、その通信方式に対応する新たな通信プロセスを実行するためのプログラムをインストールすることで、その通信方式による通信が可能になる。
【０００３】
これに関連する技術として、次のようなファイルサーバが提案されている。このファイルサーバは、ファイルサーバアプリケーション部からファイルシステムに対するＩ／Ｏ（Input／Output）要求の発行を代行するＩ／Ｏ代行デーモンを備える。
【０００４】
また、プロセスの制御に関して、次のようなプロセス制御方法が提案されている。このプロセス制御方法では、所定のファイルにプロセスの識別符号を書き込み、識別符号の順序にしたがって待機中のプロセスを実行させ、実行終了後にプロセスの識別符号をファイルから削除することで、同一データの同時更新によるデータ破壊を防止する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１９６０６６号公報
【特許文献２】特開平４−２８３８３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、通信処理を実行する通信プロセスと、通信プロセスに対して通信処理の実行を要求するプロセス（以下、「要求プロセス」と記載する）とが実行される構成では、要求プロセスが起動した状態で、通信プロセスの起動処理が開始される場合があり得る。そのため、要求プロセスが通信プロセスに対して通信処理の実行を要求したとき、通信プロセスの起動状態としては、起動処理中の状態、起動処理が完了した状態、起動処理が異常終了した状態などの複数の状態をとり得る。要求プロセス側は、通信プロセスの起動状態に応じた処理を選択することで、エラーを発生させずに処理を継続することが望まれるが、そのような処理の選択ができないという問題がある。
【０００７】
１つの側面では、本発明は、プロセスに通信の実行を要求する際にそのプロセスの起動状態に応じた処理を選択して実行可能な情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、記憶部と処理部とを有する情報処理装置が提供される。この情報処理装置において、処理部は、第１のプロセスの起動処理の実行過程において、通信で利用される制御データを作成して記憶部に格納するとともに制御データをロックし、起動処理の完了時および停止時に制御データのロックを解除し、起動処理が完了すると、通信要求に応じて通信先装置との間で通信する第１のプロセスと、制御データに基づいて第１のプロセスと接続し、接続が確立した状態で通信要求を第１のプロセスに送信することで、通信先装置との通信を第１のプロセスに実行させる第２のプロセスであって、制御データに基づく第１のプロセスとの接続の成否と、制御データがロックされているか否かを示すロック状態とに応じて、通信先装置との通信を実行させるために第１のプロセスに対して実行する処理を選択する、第２のプロセスと、を実行する。
【０００９】
また、１つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【００１０】
１つの側面では、プロセスに通信の実行を要求する際にそのプロセスの起動状態に応じた処理を選択して実行できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】業務サーバのハードウェア構成例を示す図である。
【図４】業務サーバが備える基本的な処理機能の構成例を示す図である。
【図５】業務サーバが備える、ストレージサーバとの通信に関する処理機能の構成例を示す図である。
【図６】第１の比較例におけるバックアップ管理部の通信処理手順を示すフローチャートの例である。
【図７】第１の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の例である。
【図８】第２の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第１の例である。
【図９】第２の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第２の例である。
【図１０】第２の実施の形態におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第１の例である。
【図１１】第２の実施の形態におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第２の例である。
【図１２】第２の実施の形態におけるバックアップ管理部の処理手順を示すフローチャートの例（その１）である。
【図１３】第２の実施の形態におけるバックアップ管理部の処理手順を示すフローチャートの例（その２）である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。図１に示す情報処理システムは、情報処理装置１０と通信先装置２０を含む。この情報処理システムでは、情報処理装置１０と通信先装置２０との間で通信が行われる。
【００１３】
情報処理装置１０は、記憶部１１と処理部１２を有する。記憶部１１は、例えば、情報処理装置１０が備える図示しない記憶装置の記憶領域によって実現される。処理部１２の処理は、例えば、情報処理装置１０が備える図示しないプロセッサが所定のプログラムを実行することで実現される。
【００１４】
記憶部１１には、処理部１２によって作成された制御データ１１ａが記憶される。制御データ１１ａは、通信で利用されるデータである。制御データ１１ａは、例えば、処理部１２が通信先装置２０と通信する際に使用される通信ポートの番号や、通信プロセスの識別番号を含む。
【００１５】
処理部１２は、第１のプロセス１と第２のプロセス２を実行する。第１のプロセス１は、第２のプロセス２からの通信要求に応じて、通信先装置２０との間で通信を行うプロセスである。第２のプロセス２は、第１のプロセス１に通信要求を送信することにより、第１のプロセス１に通信先装置２０との通信を実行させるプロセスである。これにより、第２のプロセス２は、第１のプロセス１を利用して通信先装置２０との通信を実現できるようになっている。
【００１６】
第１のプロセス１では、次のような処理が実行される。処理部１２は、第１のプロセス１の起動処理を開始する（ステップＳ１ａ）。処理部１２は、その起動処理の実行過程において、制御データ１１ａを作成して記憶部１１に格納するとともに、制御データ１１ａをロックする（ステップＳ１ｂ）。異常などによって停止せずに起動処理が進み（ステップＳ１ｃ「Ｎｏ」）、起動処理が完了したとする。処理部１２は、起動処理の完了時において、制御データ１１ａのロックを解除する（ステップＳ１ｅ）。そして、処理部１２は、通信先装置２０との間の通信処理を開始する（ステップＳ１ｆ）。この通信処理では、処理部１２は、第２のプロセス２からの通信要求に応じて通信先装置２０と通信する。また、起動処理が異常などによって途中で停止し、正常に完了しなかった場合（ステップＳ２ｃ「Ｙｅｓ」）、処理部１２は、制御データ１１ａのロックを解除する（ステップＳ１ｄ）。
【００１７】
以上の第１のプロセス１によれば、起動処理が正常に実行されている間、制御データ１１ａはロックされる。また、起動処理が正常に完了した場合、制御データ１１ａのロックは解除される。さらに、起動処理が異常などによって途中で停止した場合にも、制御データ１１ａのロックは解除される。
【００１８】
一方、第２のプロセス２では、基本的に、処理部１２は、制御データ１１ａに基づいて第１のプロセス１と接続し、第１のプロセス１との接続が確立した状態で、第１のプロセス１に対して通信要求を送信する。これにより、第１のプロセス１により通信要求に応じた通信が実行される。
【００１９】
また、第２のプロセス２では、処理部１２は、制御データ１１ａに基づく第１のプロセス１との接続の成否と、制御データ１１ａがロックされているか否かを示すロック状態とに応じて、通信先装置２０との通信を実行するために第１のプロセス１に対して実行する処理を選択する。処理部１２は、制御データ１１ａに基づく第１のプロセス１との接続の成否と、ロック状態とから、第１のプロセス１の起動状態を判定できる。その結果、処理部１２は、起動状態の判定結果に応じた適切な処理を選択して実行できるようになる。
【００２０】
例えば、第２のプロセス２では次のような処理が実行される。
処理部１２は、制御データ１１ａに基づいて第１のプロセス１に対する接続を要求する（ステップＳ２ａ）。第１のプロセス１との接続に成功した場合（ステップＳ２ｂ「Ｙｅｓ」）、処理部１２は、第１のプロセス１に対して通信要求を送信する（ステップＳ２ｃ）。これにより、第１のプロセス１により、通信要求に応じた通信が実行される（ステップＳ１ｆ）。
【００２１】
一方、第１のプロセス１との接続に失敗した場合（ステップＳ２ｂ「Ｎｏ」）、処理部１２は、制御データ１１ａのロック状態を判定する（ステップＳ２ｄ）。ここで、制御データ１１ａがロックされていない場合（ステップＳ２ｄ「Ｎｏ」）、第１のプロセス１の起動処理が異常などによって途中で停止したと判定される。すなわち、この状態は、第１のプロセス１におけるステップＳ１ｄが実行された状態に相当する。この場合、処理部１２は、第１のプロセス１を再度起動させる（ステップＳ２ｅ）。これにより、第１のプロセス１の起動処理が再度開始される（ステップＳ１ａ）。起動処理が正常に完了した場合、処理部１２は、第２のプロセス２において、制御データ１１ａに基づいて第１のプロセス１に対する接続を要求し（ステップＳ２ａ）、接続に成功する（ステップＳ２ｂ「Ｙｅｓ」）。これにより、第１のプロセス１を用いた通信が可能となる。
【００２２】
また、ステップＳ２ｄにおいて制御データがロックされている場合、第１のプロセス１の起動処理が実行中であると判定される。すなわち、この状態は、第１のプロセス１におけるステップＳ１ｂの実行後、起動処理が継続している状態に相当する。この場合、処理部１２は、ロックが解除されること、すなわち、起動処理が完了することを待つ待ち状態となる（ステップＳ２ｆ）。第１のプロセス１の起動処理が正常に完了した場合（ステップＳ１ｅ）、処理部１２は、ロック解除を検知することで起動処理が完了したことを認識し、制御データ１１ａに基づいて第１のプロセス１に対する接続を要求する（ステップＳ２ａ）。接続に成功すれば（ステップＳ２ｂ「Ｙｅｓ」）、第１のプロセス１を用いた通信が可能となる。
【００２３】
このように、第２のプロセス２では、処理部１２は、制御データ１１ａに基づく第１のプロセス１との接続の成否と、ロック状態とに基づいて、第１のプロセス１の現在の起動状態を、第１のプロセス１がとり得る複数の状態の中から判定できる。上記の例では、処理部１２は、第１のプロセス１が起動処理中の状態、起動処理が完了した状態、起動処理が異常終了した状態のいずれかであることを判定できる。これにより、処理部１２は、判定された起動状態に応じた処理を選択して実行できる。その結果、第２のプロセス２において、通信先装置２０と通信するための処理を、エラーを発生させることなく継続することができる。
【００２４】
ところで、上記の情報処理装置１０の処理は、第２のプロセス２が複数実行され、これらの複数の第２のプロセス２によって１つの第１のプロセス１が共用される場合に、特に有効である。例えば、第１のプロセス１が起動していない状態で第２のプロセス２の１つが通信を実行しようとした場合、この第２のプロセス２は第１のプロセス１を起動させる。一方、第１のプロセス１の起動開始後に第２のプロセス２のうちの他のプロセスが通信を実行しようとした場合、第１のプロセス１の起動状態は複数の状態をとり得る。例えば、起動処理中の状態、起動処理が完了した状態、起動処理が異常終了した状態があり得る。したがって、他のプロセスは、第１のプロセス１の起動状態を把握した上で、次に実行すべき処理を選択できることが望ましい。
【００２５】
そこで、以下の説明では、第２の実施の形態として、第２のプロセス２が複数実行され、これらの第２のプロセス２によって１つの第１のプロセス１が共用される場合を例示する。
【００２６】
〔第２の実施の形態〕
次に、図１に示した情報処理装置１０を含むストレージシステムについて説明する。
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、ストレージサーバ１１０、ストレージ装置１２０および業務サーバ２００，２００ａ，２００ｂを含む。なお、業務サーバ２００，２００ａ，２００ｂは、図１の情報処理装置１０の一例であり、ストレージサーバ１１０は、図１の通信先装置２０の一例である。
【００２７】
ストレージサーバ１１０には、ストレージ１１１が接続されている。ストレージ１１１には、１台または複数台の不揮発性の記憶装置が搭載されている。ストレージサーバ１１０は、ストレージ１１１に対するアクセスを制御するストレージ制御装置として動作する。本実施の形態では、ストレージサーバ１１０は、ストレージ１１１に搭載された記憶装置を用いて論理ボリュームを生成し、論理ボリュームに対するアクセスを制御するものとする。
【００２８】
ストレージ装置１２０は、制御モジュール１２１とストレージ１２２を備える。ストレージ１２２には、１台または複数台の不揮発性の記憶装置が搭載されている。制御モジュール１２１は、ストレージ１２２に対するアクセスを制御するストレージ制御装置である。本実施の形態では、制御モジュール１２１は、ストレージ１２２に搭載された記憶装置を用いて論理ボリュームを生成し、論理ボリュームに対するアクセスを制御するものとする。
【００２９】
なお、ストレージ１１１，１２２に搭載される不揮発性の記憶装置としては、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を用いることができる。
業務サーバ２００，２００ａ，２００ｂは、所定の業務処理を実行するサーバコンピュータである。また、その業務処理の過程では、ストレージ１１１を用いて生成された論理ボリュームと、ストレージ１２２を用いて生成された論理ボリュームの少なくとも一方に対するアクセスが行われる。業務サーバ２００，２００ａ，２００ｂは、ストレージ１１１を用いて生成された論理ボリュームに対して、ストレージサーバ１１０を介してアクセスすることができる。また、業務サーバ２００，２００ａ，２００ｂは、ストレージ１２２を用いて生成された論理ボリュームに対して、制御モジュール１２１を介してアクセスすることができる。
【００３０】
ここで、ストレージ装置１２０は、ストレージアクセスのための専用装置である。ストレージ装置１２０の制御モジュール１２１と業務サーバ２００，２００ａ，２００ｂとの間は、例えば、ＳＡＮ（Storage Area Network）を介して接続される。そして、ストレージ装置１２０の制御モジュール１２１と業務サーバ２００，２００ａ，２００ｂとの間では、ストレージアクセスに特化した通信方式によって通信が行われる。
【００３１】
一方、ストレージサーバ１１０は、汎用のサーバコンピュータにアプリケーションプログラムをインストールすることで、ストレージ制御機能を持たせたものである。ストレージサーバ１１０の制御モジュール１２１と業務サーバ２００，２００ａ，２００ｂとの間は、例えば、ＬＡＮ（Local Area Network）を介して接続される。そして、ストレージサーバ１１０と業務サーバ２００，２００ａ，２００ｂとの間では、Ｗｅｂ  ＡＰＩ（Application Programming Interface）を用いた汎用的な通信方式によって通信が行われる。本実施の形態では、そのような通信方式の例として、ＲＥＳＴ（REpresentational State Transfer）  ＡＰＩを用いた通信が行われるものとする。すなわち、ストレージサーバ１１０は、ＲＥＳＴ  ＡＰＩのサーバとして動作し、業務サーバ２００，２００ａ，２００ｂは、ＲＥＳＴ  ＡＰＩのクライアントとして動作する。
【００３２】
図３は、業務サーバのハードウェア構成例を示す図である。図３では、業務サーバ２００，２００ａ，２００ｂのうち業務サーバ２００について例示する。
業務サーバ２００は、例えば、図３に示すようなコンピュータとして実現される。図３に示す業務サーバ２００は、プロセッサ２０１、ＲＡＭ（Random Access Memory）２０２、ＨＤＤ（Hard Disk Drive）２０３、グラフィック処理装置２０４、入力インタフェース（Ｉ／Ｆ）２０５、読み取り装置２０６および通信インタフェース（Ｉ／Ｆ）２０７を有する。
【００３３】
プロセッサ２０１は、業務サーバ２００全体を統括的に制御する。プロセッサ２０１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ２０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３４】
ＲＡＭ２０２は、業務サーバ２００の主記憶装置として使用される。ＲＡＭ２０２には、プロセッサ２０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ２０２には、プロセッサ２０１による処理に必要な各種データが格納される。
【００３５】
ＨＤＤ２０３は、業務サーバ２００の補助記憶装置として使用される。ＨＤＤ２０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００３６】
グラフィック処理装置２０４には、表示装置２０４ａが接続されている。グラフィック処理装置２０４は、プロセッサ２０１からの命令にしたがって、画像を表示装置２０４ａに表示させる。表示装置２０４ａとしては、液晶ディスプレイや有機ＥＬ（Electroluminescence）ディスプレイなどがある。
【００３７】
入力インタフェース２０５には、入力装置２０５ａが接続されている。入力インタフェース２０５は、入力装置２０５ａから出力される信号をプロセッサ２０１に送信する。入力装置２０５ａとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３８】
読み取り装置２０６には、可搬型記録媒体２０６ａが脱着される。読み取り装置２０６は、可搬型記録媒体２０６ａに記録されたデータを読み取ってプロセッサ２０１に送信する。可搬型記録媒体２０６ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００３９】
通信インタフェース２０７は、ネットワーク２０７ａを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、業務サーバ２００の処理機能を実現することができる。なお、業務サーバ２００ａ，２００ｂも、図３のようなハードウェア構成のコンピュータとして実現可能である。また、ストレージサーバ１１０や制御モジュール１２１も、図３のようなハードウェア構成のコンピュータとして実現可能である。
【００４０】
次に、業務サーバ２００，２００ａ，２００ｂの処理について説明する。以下の説明では、これらのうち業務サーバ２００について記載するが、業務サーバ２００ａ，２００ｂも業務サーバ２００と同様の処理機能を備え、同様の処理を実行可能である。
【００４１】
まず、図４は、業務サーバが備える基本的な処理機能の構成例を示す図である。業務サーバ２００は、業務処理部２１０と、バックアップ管理部２２０，２３０を備える。業務処理部２１０とバックアップ管理部２２０，２３０の処理は、例えば、業務サーバ２００が備えるプロセッサ２０１が所定のアプリケーションプログラムを実行することで実現される。また、業務サーバ２００には、管理者端末３１０と管理サーバ３２０が接続されている。
【００４２】
業務処理部２１０は、所定の業務処理を実行する。業務処理の実行の際、業務処理部２１０は、ストレージサーバ１１０を介して、ストレージ１１１を用いて生成された論理ボリュームにアクセスすることができる。また、業務処理の実行の際、業務処理部２１０は、ストレージ装置１２０の制御モジュール１２１を介して、ストレージ１２２を用いて生成された論理ボリュームにアクセスすることができる。
【００４３】
例えば、業務処理部２１０は、業務サーバ２００上で動作する仮想マシンによって実現される。そして、ストレージ１１１，１２２の少なくとも一方を用いた論理ボリューム（「下位ボリューム」と記載する）によって実現されるストレージプールから、仮想マシンのリソースのために用いられる論理ボリューム（「上位ボリューム」と記載する）が割り当てられて利用される。このような仮想マシンのリソースとしては、仮想メモリ、仮想ディスクなどがある。
【００４４】
バックアップ管理部２２０，２３０の処理は、それぞれ個別のアプリケーションプログラムによって実現される。バックアップ管理部２２０，２３０は、ストレージサーバ１１０や制御モジュール１２１に、論理ボリュームについての各種のバックアップ処理を実行させる。このようなバックアップ処理としては、論理ボリュームの全データ、あるいは前回のバックアップ時からの差分データを、バックアップボリュームにコピーする処理や、コピー・オン・ライト方式により論理ボリュームのデータを世代別にバックアップボリュームにコピーする処理、論理ボリュームのデータをリアルタイムでバックアップボリュームに二重化するレプリケーション処理などがある。
【００４５】
バックアップ管理部２２０は、単独で動作し、管理者端末３１０からの管理者の操作に応じて、ストレージサーバ１１０や制御モジュール１２１にバックアップ処理を実行させる。また、バックアップ管理部２２０は、上記の論理ボリュームのうち、下位ボリュームを対象としてバックアップ処理を実行させることができる。すなわち、バックアップ管理部２２０は、業務処理部２１０の処理と関連付けられていないレベルを上限として、論理ボリュームのバックアップ処理を管理できる。さらに、バックアップ管理部２２０は、業務サーバ２００，２００ａ，２００ｂのいずれに割り当てられている下位ボリュームも、バックアップ対象として指定できる。
【００４６】
一方、バックアップ管理部２３０は、管理サーバ３２０が備えるバックアップ管理部３２１からの制御の下で、ストレージサーバ１１０や制御モジュール１２１にバックアップ処理を実行させる。バックアップ管理部３２１の処理は、バックアップ管理のためのマネージャプログラムによって実現され、バックアップ管理部２３０の処理は、このマネージャプログラムに対応するエージェントプログラムによって実現される。また、業務サーバ２００ａ，２００ｂにも、このマネージャプログラムに対応するエージェントプログラムによって、バックアップ管理部２３０と同等の機能が実装されている。そして、管理サーバ３２０のバックアップ管理部３２１は、業務サーバ２００，２００ａ，２００ｂに関するバックアップ処理を統合的に管理する。
【００４７】
例えば、管理サーバ３２０には、業務サーバ２００，２００ａ，２００ｂのそれぞれについての運用管理情報が記憶されている。運用管理情報には、業務サーバ２００，２００ａ，２００ｂのそれぞれに割り当てられた上位ボリュームおよび下位ボリュームを示す設定情報が含まれている。そして、バックアップ管理部３２１は、バックアップ処理の対象とする上位ボリュームや下位ボリュームを業務サーバ２００，２００ａ，２００ｂに指定して、バックアップ処理の実行を指示する。
【００４８】
業務サーバ２００のバックアップ管理部２３０は、バックアップ管理部３２１からの指示に応じて、指定された上位ボリュームや下位ボリュームについてのバックアップ処理の実行を、ストレージサーバ１１０または制御モジュール１２１に指示する。これにより、バックアップ管理部２３０は、管理サーバ３２０のバックアップ管理部３２１に対応するエージェントとして、バックアップ処理の実行指示を仲介する。
【００４９】
また、バックアップ管理部２２０とは異なり、バックアップ管理部２３０は、下位ボリュームだけでなく上位ボリュームも対象としてバックアップ処理を実行させることができる。すなわち、バックアップ管理部２２０と比較して、バックアップ管理部２３０は、業務処理部２１０の処理と関連付けられたより上位レベルまでの論理ボリュームのバックアップ処理を管理できる。ただし、バックアップ管理部２３０は、業務サーバ２００に割り当てられている論理ボリュームだけを、バックアップ対象として指定できる。
【００５０】
業務サーバ２００においては、このようなバックアップ管理部２２０，２３０のうち、一方のみを動作させることもできるし、両方を同時に動作させることもできる。換言すると、業務サーバ２００においては、バックアップ管理部２２０，２３０の処理をそれぞれ実現するアプリケーションプログラムのうち、一方のみを実行させることもできるし、両方を同時に実行させることもできる。
【００５１】
ところで、前述のように、ストレージ装置１２０はストレージアクセスのための専用装置であり、業務サーバ２００に対して例えばＳＡＮを介して接続され、業務サーバ２００との間でストレージアクセスに特化した通信方式を用いて通信を行う。一方、ストレージサーバ１１０は汎用のサーバコンピュータであり、業務サーバ２００に対して例えばＬＡＮを介して接続され、ＲＥＳＴ  ＡＰＩを提供することで業務サーバ２００との間で通信を行う。
【００５２】
本実施の形態では、業務サーバ２００に対し、ストレージ装置１２０との通信機能に加えて、ストレージサーバ１１０との通信機能が新たに追加されたものとする。このため、業務サーバ２００には、ＲＥＳＴ  ＡＰＩのサーバとして動作するストレージサーバ１１０と通信するためのクライアント機能が新たに追加されている。そして、業務処理部２１０およびバックアップ管理部２２０，２３０のいずれも、ＲＥＳＴ  ＡＰＩを用いてストレージサーバ１１０と通信する。
【００５３】
バックアップ管理部２２０，２３０とストレージサーバ１１０との間では、バックアップ処理の実行指示のためのコマンドが送受信される。これに対して、業務処理部２１０とストレージサーバ１１０との間では、Ｉ／Ｏ（Input／Output）実行指示のコマンドに加えて実データが頻繁に送受信される。このため、ストレージサーバ１１０と通信するための資源（例えば、プロセッサ２０１やメモリの使用量、通信ポートや認証情報の数など）は、バックアップ管理部２２０，２３０より業務処理部２１０に対して多く割り当てられる。
【００５４】
このような制約から、次の図５に示すように、バックアップ管理部２２０とバックアップ管理部２３０との間で、ストレージサーバ１１０との通信のためのプロセスが共用される。
【００５５】
図５は、業務サーバが備える、ストレージサーバとの通信に関する処理機能の構成例を示す図である。図５に示すように、業務サーバ２００はさらに、記憶部２４０とＲＥＳＴデーモン部２５０を備える。なお、ＲＥＳＴデーモン部２５０の処理は、図１の第１のプロセス１の一例である。この場合、バックアップ管理部２２０，２３０の処理は、それぞれ図１の第２のプロセス２の一例に相当する。
【００５６】
記憶部２４０は、例えばＲＡＭ２０２など、業務サーバ２００が備える記憶装置の記憶領域によって実現される。記憶部２４０には、バックアップ管理部２２０，２３０がＲＥＳＴデーモン部２５０を介してストレージサーバ１１０と通信するために必要な情報が格納される。具体的には、記憶部２４０には、ＰＩＤ（Process IDentification）ファイル２４１が格納される。ＰＩＤファイル２４１には、ＲＥＳＴデーモン部２５０が実行するプロセスを示すプロセスＩＤ、通信で利用されるポート番号などが記述される。ＰＩＤファイル２４１は、ＲＥＳＴデーモン部２５０によってその起動時に作成されて記憶部２４０に格納され、バックアップ管理部２２０，２３０がＲＥＳＴデーモン部２５０に通信の実行を要求する際に参照される。なお、ＰＩＤファイル２４１が格納される場所は、例えば、ディレクトリ情報などによってあらかじめ決められている。
【００５７】
ＲＥＳＴデーモン部２５０の処理は、例えば、所定のプログラムがプロセッサ２０１によって実行されることで実現される。本実施の形態では、ＲＥＳＴデーモン部２５０の処理は、バックグラウンドで実行されるプログラムの一種であるデーモンプログラムの実行により実現される。ＲＥＳＴデーモン部２５０は、バックアップ管理部２２０，２３０からの要求に応じてＲＥＳＴ  ＡＰＩを用いた通信を代行する処理モジュールであり、バックアップ管理部２２０，２３０からの要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する。
【００５８】
ＲＥＳＴデーモン部２５０は、バックアップ管理部２２０とバックアップ管理部２３０の間で共用される。また、ＲＥＳＴデーモン部２５０は、１つの通信ポートを用いてストレージサーバ１１０と通信する。これにより、バックアップ管理部２２０，２３０とストレージサーバ１１０との間の通信で使用される通信ポートや認証情報の数を１つだけに制限でき、その通信処理負荷を軽減できる。その結果、業務処理部２１０とストレージサーバ１１０との間の通信に対して、より多くの通信ポートや認証情報を割り当てることができる。そして、バックアップ管理部２２０，２３０とストレージサーバ１１０との間の通信が、業務処理部２１０とストレージサーバ１１０との間の通信性能を低下させる可能性を低減できる。
【００５９】
ＲＥＳＴデーモン部２５０は、バックアップ管理部２２０，２３０のうち、通信の実行を要求する方（ここでは「要求者」と記載する）によって起動される。ＲＥＳＴデーモン部２５０は、起動処理の過程でＰＩＤファイル２４１を作成して記憶部２４０に格納する。ＲＥＳＴデーモン部２５０は、起動処理が完了すると、要求者からの要求に応じて要求者との間でプロセス間通信を行い、接続が確立すると、要求者からの要求に応じてストレージサーバ１１０との間でＲＥＳＴ  ＡＰＩを用いた通信を行う。
【００６０】
本実施の形態において、ＲＥＳＴデーモン部２５０は、起動制御部２５１と通信処理部２５２を備える。ＲＥＳＴデーモン部２５０が起動する際には、まず、起動制御部２５１が起動し、起動制御部２５１は起動制御処理を実行する。この起動制御処理では、起動制御部２５１は、通信処理部２５２を起動させるとともに、ＰＩＤファイル２４１を作成して記憶部２４０に格納する。ＰＩＤファイル２４１には、通信処理部２５２によって実行されるプロセスを示すプロセスＩＤが記述される。通信処理部２５２は、起動制御部２５１によって起動されると、ＲＥＳＴ  ＡＰＩを用いた通信を実行する。
【００６１】
なお、実際には、例えば、通信処理部２５２の処理がデーモンプログラムによって実現され、起動制御部２５１の処理は、デーモンプログラムに付随して、デーモンプログラムを起動するための起動制御プログラムによって実現されてもよい。
【００６２】
次に、図６〜図９を用いて、ＲＥＳＴデーモン部２５０を介したバックアップ管理部２２０，２３０の通信手順についての比較例を説明し、その後に本実施の形態における通信手順について説明する。
【００６３】
まず、図６、図７を用いて、通信処理手順についての第１の比較例を説明する。
図６は、第１の比較例におけるバックアップ管理部の通信処理手順を示すフローチャートの例である。ここでは例として、バックアップ管理部２２０の処理について説明するが、バックアップ管理部２３０も同様の処理によりＲＥＳＴデーモン部２５０を介してストレージサーバ１１０と通信することができる。
【００６４】
バックアップ管理部２２０は、管理者端末３１０から、ストレージサーバ１１０に実行させる処理を示すコマンドを受信する。受信するコマンドは、主に、ストレージサーバ１１０に実行させるバックアップ処理の実行コマンドである。バックアップ管理部２２０は、コマンドを受信すると、次のような処理を実行する。
【００６５】
バックアップ管理部２２０（およびバックアップ管理部２３０）は、ＰＩＤファイル２４１を参照することで、ＲＥＳＴデーモン部２５０にストレージサーバ１１０との通信を実行させることができる。そこで、バックアップ管理部２２０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する（ステップＳ１１）。
【００６６】
バックアップ管理部２２０は、ＰＩＤファイル２４１が存在する場合（ステップＳ１２：Ｙｅｓ）、ＲＥＳＴデーモン部２５０が起動していると判定し、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ１４）。この接続要求では、例えば、ソケットを用いたプロセス間通信の接続（ソケット接続）が要求される。また、接続要求の際に、バックアップ管理部２２０は、ＰＩＤファイル２４１からプロセスＩＤとポート番号を読み出し、ＲＥＳＴデーモン部２５０に通知する。これにより、ＲＥＳＴデーモン部２５０との接続が可能となる。
【００６７】
一方、バックアップ管理部２２０は、ＰＩＤファイル２４１が存在しない場合（ステップＳ１２：Ｎｏ）、ＲＥＳＴデーモン部２５０が起動していないと判定し、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ１３）。このとき、ＲＥＳＴデーモン部２５０は、起動処理の過程においてＰＩＤファイル２４１を作成し、記憶部２４０に格納する。その後、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ１４）。
【００６８】
次に、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０との接続（ソケット接続）が確立した場合（ステップＳ１５：Ｙｅｓ）、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ１７）。具体的には、ストレージサーバ１１０に実行させる処理を示すコマンドの送信が、ＲＥＳＴデーモン部２５０に要求される。また、このデータ送信要求の際にも、ＰＩＤファイル２４１から読み出されたプロセスＩＤとポート番号がＲＥＳＴデーモン部２５０に通知される。ＲＥＳＴデーモン部２５０は、このデータ送信要求に応じてＲＥＳＴ  ＡＰＩのリクエストを作成し、ストレージサーバ１１０に送信する。これにより、バックアップ管理部２２０から送信が要求されたデータ（コマンド）が、ストレージサーバ１１０に送信される。データ送信が正常に完了すると、バックアップ管理部２２０は、完了通知をＲＥＳＴデーモン部２５０から受信し、管理者端末３１０に対してデータ送信が正常に完了したことを示す応答情報を送信する。
【００６９】
また、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０との接続に失敗した場合（ステップＳ１５：Ｎｏ）には、ＲＥＳＴデーモン部２５０を再度起動させる（ステップＳ１６）。ステップＳ１３の場合と同様、ＲＥＳＴデーモン部２５０は、起動処理の過程においてＰＩＤファイル２４１を作成し、記憶部２４０に格納する。その後、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ１４）。そして、接続が確立されれば（ステップＳ１５：Ｙｅｓ）、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ１７）。
【００７０】
以上のように、第１の比較例では、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０を介して、ストレージサーバ１１０と通信できる。ＲＥＳＴデーモン部２５０の処理は、バックグラウンドプロセスとして実行される。このため、ストレージサーバ１１０との通信においてＲＥＳＴデーモン部２５０が介在することを、バックアップ管理部２２０にコマンドを送信するユーザ側（ここでは管理者端末３１０の管理者）が意識することはない。このような点は、バックアップ管理部２３０がＲＥＳＴデーモン部２５０を介してストレージサーバ１１０と通信する際の処理に関しても同様である。
【００７１】
また、バックアップ管理部２２０は、ＰＩＤファイル２４１の有無と、ＲＥＳＴデーモン部２５０との接続の要否とに基づいて、ＲＥＳＴデーモン部２５０が起動しているかを判定できる。そして、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０が起動していないと判定した場合には、ＲＥＳＴデーモン部２５０を起動させて、ストレージサーバ１１０との通信に関する処理を継続できる。このような点も、バックアップ管理部２３０がＲＥＳＴデーモン部２５０を介してストレージサーバ１１０と通信する際の処理に関しても同様である。
【００７２】
図７は、第１の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の例である。
図７の例では、管理者端末３１０からバックアップ管理部２２０に対して、バックアップ処理の実行コマンドが送信されたとする。前述のように、バックアップ管理部２２０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを判定する。ここでは、ＰＩＤファイル２４１が存在しなかったものとする。この場合、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０が起動していないと判定して、図７に示すように、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ２１）。ＲＥＳＴデーモン部２５０は起動処理を開始し（ステップＳ２２）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納する（ステップＳ２３）。
【００７３】
実際には、まず、起動制御部２５１が起動し、起動制御部２５１の処理によって、通信処理部２５２が起動するとともに、ＰＩＤファイル２４１が作成される。そして、作成されたＰＩＤファイル２４１が記憶部２４０に格納され、かつ、通信処理部２５２の起動が完了することで、ＲＥＳＴデーモン部２５０の起動処理が完了する（ステップＳ２４）。したがって、以下の説明では、起動制御部２５１の起動処理が開始され、通信処理部２５２の起動処理が完了するまでの処理を、「ＲＥＳＴデーモン部２５０の起動処理」と記載する。
【００７４】
次に、バックアップ管理部２２０は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用いて、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ２５）。ＲＥＳＴデーモン部２５０が接続要求に応答して接続が確立すると（ステップＳ２６）、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ２７）。ＲＥＳＴデーモン部２５０は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する（ステップＳ２８）。これにより、送信が要求されたデータがストレージサーバ１１０に送信される。なお、図示しないが、データ送信が正常に完了すると、バックアップ管理部２２０は、完了通知をＲＥＳＴデーモン部２５０から受信し、管理者端末３１０に対してデータ送信が正常に完了したことを示す応答情報を送信する。
【００７５】
ところで、前述のように、業務サーバ２００においては、バックアップ管理部２２０，２３０の両方を同時に動作させることができる。図７では、ＲＥＳＴデーモン部２５０の起動処理中に、管理サーバ３２０のバックアップ管理部３２１からバックアップ管理部２３０に対して、ストレージサーバ１１０に実行させる処理を示すコマンドが送信されたとする。
【００７６】
この場合、バックアップ管理部２３０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する。ステップＳ２３の処理によってＰＩＤファイル２４１がすでに作成されているとすると、バックアップ管理部２３０は、ＰＩＤファイル２４１が存在するのでＲＥＳＴデーモン部２５０が起動していると判定する（ステップＳ３１）。そして、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ３２）。
【００７７】
しかし、ＲＥＳＴデーモン部２５０の起動処理がまだ完了していない場合、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０との接続に失敗する。この場合、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０が動作していないと判定して、ＲＥＳＴデーモン部２５０を起動させようとする（ステップＳ３３）。このとき、ＲＥＳＴデーモン部２５０は、起動処理中か、またはすでに起動処理が完了しているので、バックアップ管理部２３０はＲＥＳＴデーモン部２５０の起動に失敗する。この場合、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０を起動できないためデータを送信できない状態であると判定して、管理サーバ３２０のバックアップ管理部３２１に対して、エラーが発生したことを示す応答情報を送信する。
【００７８】
このように、バックアップ管理部２２０，２３０の一方は、ＲＥＳＴデーモン部２５０を介して通信しようとしたときに、他方からの要求によってＲＥＳＴデーモン部２５０の起動処理が実行中である場合、通信できなくなってしまう。ここで、前述のように、ストレージサーバ１１０との通信においてＲＥＳＴデーモン部２５０が介在することを、バックアップ管理部２２０，２３０にコマンドを送信するユーザ側が意識することはない。このため、図７の例のように、バックアップ管理部２２０，２３０自体のエラーではなく、ＲＥＳＴデーモン部２５０の動作に起因するエラーが発生することは好ましくなく、後者のエラーをできるだけ発生させないようにする仕組みが要求される。
【００７９】
図７で発生するエラーの原因は、ＲＥＳＴデーモン部２５０の起動処理が完了しているか否かをバックアップ管理部２２０，２３０が確認する仕組みが存在しないことにある。そこで、次の図８、図９に示す第２の比較例では、ＲＥＳＴデーモン部２５０が起動処理の実行中である間、その旨をＰＩＤファイル２４１に記載する仕組みを追加する。
【００８０】
図８は、第２の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第１の例である。
図８では、図７と同様に、先にバックアップ管理部２２０に対して管理者端末３１０からコマンドが送信された場合について示している。図８に示すステップＳ４１〜Ｓ４８のうち、ステップＳ４１，Ｓ４２，Ｓ４５〜Ｓ４８の処理は、図７に示したステップＳ２１、Ｓ２２，Ｓ２５〜Ｓ２８の処理とそれぞれ同様である。一方、ステップＳ４３，Ｓ４４の処理の一部は、ステップＳ２３，Ｓ２４の処理とは異なる。
【００８１】
すなわち、バックアップ管理部２２０は、記憶部２４０にＰＩＤファイル２４１が存在しておらず、ＲＥＳＴデーモン部２５０が起動していないと判定して、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ４１）。ＲＥＳＴデーモン部２５０は起動処理を開始し（ステップＳ４２）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納する（ステップＳ４３）。ただし、ステップＳ４３では、ＲＥＳＴデーモン部２５０は、作成したＰＩＤファイル２４１に「起動処理中」であることを示す情報を記録する。
【００８２】
その後、ＲＥＳＴデーモン部２５０の起動処理が完了する（ステップＳ４４）。このステップＳ４４では、ＲＥＳＴデーモン部２５０は、起動処理が完了したことを示すようにＰＩＤファイル２４１を更新した後に、起動処理を完了する。例えば、ＰＩＤファイル２４１においては、起動処理中であることを示す情報が消去される。
【００８３】
その後、図７と同様に、バックアップ管理部２２０は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用いて、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ４５）。ＲＥＳＴデーモン部２５０が接続要求に応答して接続が確立すると（ステップＳ４６）、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ４７）。ＲＥＳＴデーモン部２５０は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する（ステップＳ４８）。これにより、送信が要求されたデータがストレージサーバ１１０に送信される。
【００８４】
一方、ＲＥＳＴデーモン部２５０の起動処理中に、管理サーバ３２０のバックアップ管理部３２１からバックアップ管理部２３０に対して、ストレージサーバ１１０に実行させる処理を示すコマンドが送信されたとする。この場合、バックアップ管理部２３０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する。ステップＳ４３の処理によってＰＩＤファイル２４１がすでに作成されているとすると、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０が起動していると判定する（ステップＳ５１）。そして、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ５２）。
【００８５】
しかし、ＲＥＳＴデーモン部２５０の起動処理がまだ完了していない場合、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０との接続に失敗する。すると、バックアップ管理部２３０は、ＰＩＤファイル２４１から起動処理中であることを示す情報を読み取り、この情報に基づいてＲＥＳＴデーモン部２５０が起動処理中であると判定する（ステップＳ５３）。この場合、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０の起動待ち状態となる。バックアップ管理部２３０は、例えば、一定時間ごとにＰＩＤファイル２４１を読み取り、ＲＥＳＴデーモン部２５０の起動処理が完了したかを判定する。
【００８６】
そして、バックアップ管理部２３０は、ステップＳ４４でＰＩＤファイル２４１が更新されたことを検知すると、ＲＥＳＴデーモン部２５０の起動処理が完了したと判定する（ステップＳ５４）。バックアップ管理部２３０は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用いて、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ５５）。ＲＥＳＴデーモン部２５０が接続要求に応答して接続が確立すると（ステップＳ５６）、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ５７）。ＲＥＳＴデーモン部２５０は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する（ステップＳ５８）。これにより、送信が要求されたデータがストレージサーバ１１０に送信される。
【００８７】
このように、第２の比較例では、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０を介して通信しようとしたときにバックアップ管理部２２０からの要求によってＲＥＳＴデーモン部２５０の起動処理が実行中である場合でも、処理を継続して通信を完了させることができる。しかし、次の図９に示すように、ＲＥＳＴデーモン部２５０の起動処理が正しく完了せずに異常終了してしまうと、起動処理中であることを示す情報が記録されたＰＩＤファイル２４１が残存してしまう。そして、残存したＰＩＤファイル２４１によって、バックアップ管理部２２０，２３０のうちの一方の通信を正常に実行できなくなる。
【００８８】
図９は、第２の比較例におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第２の例である。図９では、図８と同様に、先にバックアップ管理部２２０に対して管理者端末３１０からコマンドが送信された場合について示している。
【００８９】
図８と同様に、バックアップ管理部２２０は、記憶部２４０にＰＩＤファイル２４１が存在しておらず、ＲＥＳＴデーモン部２５０が起動していないと判定して、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ６１）。ＲＥＳＴデーモン部２５０は起動処理を開始し（ステップＳ６２）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納する（ステップＳ６３）。このステップＳ６３では、作成したＰＩＤファイル２４１に、起動処理中であることを示す情報が記録される。
【００９０】
図９の例では、その後、ＲＥＳＴデーモン部２５０の起動処理が異常終了したとする（ステップＳ６４）。この場合、起動処理中であることを示す情報が記録されたままのＰＩＤファイル２４１が、記憶部２４０に残る。なお、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に接続しようとするが、これに失敗する（ステップＳ６５）。
【００９１】
一方、ＲＥＳＴデーモン部２５０が異常終了した後に、管理サーバ３２０のバックアップ管理部３２１からバックアップ管理部２３０に対して、ストレージサーバ１１０に実行させる処理を示すコマンドが送信されたとする。バックアップ管理部２３０は、記憶部２４０にＰＩＤファイル２４１が存在するかを判定する。ステップＳ６３の処理によって作成されたＰＩＤファイル２４１が残っているので、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０が起動していると判定する（ステップＳ７１）。そして、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して接続を要求するが、ＲＥＳＴデーモン部２５０が異常終了しているので、接続に失敗する（ステップＳ７２）。
【００９２】
すると、バックアップ管理部２３０は、ＰＩＤファイル２４１から起動処理中であることを示す情報を読み取り、この情報に基づいてＲＥＳＴデーモン部２５０が起動処理中であると誤判定する（ステップＳ７３）。そして、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０の起動待ち状態となる（ステップＳ７４）。バックアップ管理部２３０は、ＰＩＤファイル２４１が起動処理中でないことを示すように更新されるまで待ち状態になるが、ＲＥＳＴデーモン部２５０が異常終了しているため、待ち状態が継続してしまい、ストレージサーバ１１０と通信できない状態になってしまう。
【００９３】
このように、第２の比較例では、ＲＥＳＴデーモン部２５０の起動処理が異常終了した場合に、バックアップ管理部２２０，２３０が残存したＰＩＤファイル２４１に基づいてＲＥＳＴデーモン部２５０が起動処理中であると誤判定してしまう可能性がある。このような場合に、通信を正常に実行できなくなってしまう。
【００９４】
以下、第２の実施の形態に係る業務サーバ２００の処理について説明する。
第２の実施の形態では、ＲＥＳＴデーモン部２５０の起動処理中のみ、ＰＩＤファイル２４１がロックされるようにする。ロックとは、ＰＩＤファイル２４１の更新が許可されていない状態を示す。また、ＲＥＳＴデーモン部２５０が動作している間のみＰＩＤファイル２４１がロックされ、ＲＥＳＴデーモン部２５０の動作が停止した状態ではＰＩＤファイル２４１が解除されるようにする。
【００９５】
このようなロックの仕組みは、ロック関数およびロック解除関数を用いて行われる。ロック関数は、ファイルをロックするとともに、ファイルがロックされているか否かを判定可能な関数である。ファイルがロックされていない状態でロック関数が実行されると、そのファイルがロックされる。一方、ファイルがロックされている状態でロック関数が実行されると、そのファイルがロックされていることを示す応答（例えば、所定値の出力）が行われる。また、ファイルのロックの解除は、ロック解除関数が実行された場合と、ファイルをロックしたプロセスが停止した場合に行われる。「ロックしたプロセスが停止した場合」の例としては、そのプロセスが異常終了した場合も含まれる。
【００９６】
このようなロックの仕組みは、例えば、次のような機能によって実現できる。例えば、ＲＥＳＴデーモン部２５０がｊａｖａ（登録商標）プログラムによって実現される場合、ロック関数に相当するメソッドとして「ｔｒｙＬｏｃｋ」を、ロック解除関数に相当するメソッドとして「ｒｅｌｅａｓｅ」を、それぞれ用いることができる。この場合、実際には、ロック対象のファイルに対応付けて、このファイルとは別のロックファイルが作成され、ロックファイルに対するロックおよびロック解除が行われる。なお、「ｔｒｙＬｏｃｋ」メソッド、「ｒｅｌｅａｓｅ」メソッドの呼び出しに応じたロック処理、ロック解除処理や、ロックしたプロセスの停止に伴うロック解除処理は、ｊａｖａの実行モジュール（例えば、ｊａｖａ仮想マシン）によって実行される。
【００９７】
業務サーバ２００においては、ＲＥＳＴデーモン部２５０の起動処理の過程でロック関数が実行されてＰＩＤファイル２４１がロックされ、起動処理が完了したときに、ＲＥＳＴデーモン部２５０によってロック解除関数が実行されてロックが解除されるようにする。これにより、また、ＲＥＳＴデーモン部２５０の起動処理に異常が発生してＲＥＳＴデーモン部２５０が異常終了したときにも、ロックが解除されるようになる。したがって、ＲＥＳＴデーモン部２５０の起動処理が正常に実行されている間のみ、ＰＩＤファイル２４１がロックされるようになる。
【００９８】
これにより、バックアップ管理部２２０，２３０は、ＰＩＤファイル２４１が存在するがＲＥＳＴデーモン部２５０と接続できない場合に、ロックの有無によってＲＥＳＴデーモン部２５０が起動処理中か、または動作していない状態かを判定できるようになる。そして、バックアップ管理部２２０，２３０は、その判定結果に応じて、処理が正しく継続するように次に実行する処理を選択できるようになる。
【００９９】
図１０は、第２の実施の形態におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第１の例である。
図１０の例では、管理者端末３１０からバックアップ管理部２２０に対して、バックアップ処理の実行コマンドが送信されたとする。バックアップ管理部２２０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを判定する。ここでは、ＰＩＤファイル２４１が存在しなかったものとすると、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０が起動していないと判定して、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ８１）。
【０１００】
ＲＥＳＴデーモン部２５０は、起動処理を開始し（ステップＳ８２）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納するとともに、ＰＩＤファイル２４１をロックする（ステップＳ８３）。実際の処理では、バックアップ管理部２２０が、ＲＥＳＴデーモン部２５０の起動制御部２５１を起動させる。起動制御部２５１の処理により、ＰＩＤファイル２４１が作成されてロックされるとともに、通信処理部２５２が起動する。そして、通信処理部２５２の起動処理が完了することで、ＲＥＳＴデーモン部２５０の起動処理が完了する。また、起動制御部２５１は、ＲＥＳＴデーモン部２５０の起動処理完了の直前において、ＰＩＤファイル２４１のロックを解除する（ステップＳ８４）。
【０１０１】
なお、ＰＩＤファイル２４１のロックは、例えば、起動制御部２５１により「ｔｒｙＬｏｃｋ」メソッドが呼び出されることで実行される。この場合、ＰＩＤファイル２４１のロックの解除は、起動制御部２５１により「ｒｅｌｅａｓｅ」メソッドが呼び出されることで実行される。
【０１０２】
次に、バックアップ管理部２２０は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用いて、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ８５）。ここでは、ＲＥＳＴデーモン部２５０の通信処理部２５２が接続要求に応答することで、接続が確立したとする（ステップＳ８６）。なお、ステップＳ８５では、例えば、ソケット接続を要求する関数が呼び出され、ステップＳ８６でソケット接続が確立されることでプロセス間通信が可能となる。ＲＥＳＴデーモン部２５０の処理がｊａｖａプログラムによって実現される場合、この関数に相当するメソッドとして「ｃｏｎｎｅｃｔ」メソッドが用いられる。
【０１０３】
接続が確立すると、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ８７）。ＲＥＳＴデーモン部２５０の通信処理部２５２は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する（ステップＳ８８）。これにより、送信が要求されたデータ（ここでは、バックアップ処理の実行を要求するコマンド）がストレージサーバ１１０に送信される。なお、図示しないが、データ送信が正常に完了すると、バックアップ管理部２２０は、完了通知を通信処理部２５２から受信し、管理者端末３１０に対してデータ送信が正常に完了したことを示す応答情報を送信する。
【０１０４】
一方、図１０では、ＲＥＳＴデーモン部２５０の起動処理中に、管理サーバ３２０のバックアップ管理部３２１からバックアップ管理部２３０に対して、ストレージサーバ１１０に実行させる処理を示すコマンドが送信されたとする。この場合、バックアップ管理部２３０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する。ここでは、ステップＳ８３の処理によってＰＩＤファイル２４１がすでに作成されているとすると、バックアップ管理部２３０は、ＰＩＤファイル２４１が存在するのでＲＥＳＴデーモン部２５０が起動していると判定する（ステップＳ９１）。そして、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ９２）。
【０１０５】
しかし、図１０の例では、ＲＥＳＴデーモン部２５０の起動処理が完了していないので、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０との接続に失敗する。この場合、バックアップ管理部２３０は、ＰＩＤファイル２４１がロックされているか否かを確認する（ステップＳ９３）。図１０の例では、バックアップ管理部２３０は、ＰＩＤファイル２４１がロックされた状態であると判定して、ロック解除の待ち状態、すなわちＲＥＳＴデーモン部２５０の起動処理の完了待ち状態となる。
【０１０６】
ロック解除の待ち状態では、バックアップ管理部２３０は、一定時間ごとにＰＩＤファイル２４１がロックされているか否かを確認する。そして、ステップＳ８４の処理によってロックが解除されたことを検知すると（ステップＳ９４）、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して再度、接続を要求する（ステップＳ９５）。ＲＥＳＴデーモン部２５０の起動処理が完了しているので、ＲＥＳＴデーモン部２５０の通信処理部２５２が接続要求に応答することで接続が確立する（ステップＳ９６）。
【０１０７】
バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０に対してデータ送信を要求する（ステップＳ９７）。ＲＥＳＴデーモン部２５０の通信処理部２５２は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する（ステップＳ９８）。これにより、送信が要求されたデータ（ここでは、バックアップ処理の実行を要求するコマンド）がストレージサーバ１１０に送信される。なお、図示しないが、データ送信が正常に完了すると、バックアップ管理部２３０は、完了通知を通信処理部２５２から受信し、管理サーバ３２０のバックアップ管理部３２１に対して、データ送信が正常に完了したことを示す応答情報を送信する。
【０１０８】
このように、バックアップ管理部２３０は、ＰＩＤファイル２４１を用いたＲＥＳＴデーモン部２５０との接続に失敗した場合、ＰＩＤファイル２４１がロックされていることを検知することで、ＲＥＳＴデーモン部２５０の起動処理が実行中であることを正しく認識できる。この認識により、バックアップ管理部２３０は、ロックが解除されること、すなわち、ＲＥＳＴデーモン部２５０の起動処理が完了することを待つという、ＲＥＳＴデーモン部２５０の現在の状態に応じた正しい処理を実行できる。
【０１０９】
図１１は、第２の実施の形態におけるバックアップ管理部とＲＥＳＴデーモン部の通信処理手順を示すシーケンス図の第２の例である。
図１１の例でも、図１０と同様に、管理者端末３１０からバックアップ管理部２２０に対して、バックアップ処理の実行コマンドが送信されたとする。図１１に示すステップＳ１０１〜Ｓ１０３の処理は、それぞれ図１０のステップＳ８１〜Ｓ８３と同様である。すなわち、バックアップ管理部２２０は、まず、記憶部２４０にＰＩＤファイル２４１が存在しておらず、ＲＥＳＴデーモン部２５０が起動していないと判定して、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ１０１）。ＲＥＳＴデーモン部２５０は、起動処理を開始し（ステップＳ１０２）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納するとともに、ＰＩＤファイル２４１をロックする（ステップＳ１０３）。
【０１１０】
しかし、図１１では図１０とは異なり、ＲＥＳＴデーモン部２５０の起動処理が異常終了したとする（ステップＳ１０４）。この場合、ＰＩＤファイル２４１のロックは解除される。すなわち、この状態では、ロックされていないＰＩＤファイル２４１が記憶部２４０に残ったままになる。なお、バックアップ管理部２２０は、ＲＥＳＴデーモン部２５０に接続しようとするが、これに失敗する（ステップＳ１０５）。
【０１１１】
一方、図１１の例では、ＲＥＳＴデーモン部２５０が異常終了した後に、管理サーバ３２０のバックアップ管理部３２１からバックアップ管理部２３０に対して、ストレージサーバ１１０に実行させる処理を示すコマンドが送信されたとする。この場合、バックアップ管理部２３０は、まず、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する。ここでは、バックアップ管理部２３０は、ＰＩＤファイル２４１が存在するのでＲＥＳＴデーモン部２５０が起動していると判定する（ステップＳ１１１）。そして、バックアップ管理部２３０は、ＰＩＤファイル２４１に基づき、ＲＥＳＴデーモン部２５０に対して接続を要求する（ステップＳ１１２）。
【０１１２】
しかし、ＲＥＳＴデーモン部２５０の起動処理が異常終了しているので、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０との接続に失敗する。この場合、バックアップ管理部２３０は、ＰＩＤファイル２４１がロックされているか否かを確認する（ステップＳ１１３）。図１１の例では、バックアップ管理部２３０は、ＰＩＤファイル２４１がロックされていないので、ＲＥＳＴデーモン部２５０に異常が発生していると判定して、ＲＥＳＴデーモン部２５０を起動させる（ステップＳ１１４）。
【０１１３】
これにより、ＲＥＳＴデーモン部２５０は、起動処理を再度開始し（ステップＳ１１５）、その起動処理の過程でＰＩＤファイル２４１を作成し、記憶部２４０に格納するとともに、ＰＩＤファイル２４１をロックする（ステップＳ１１６）。なお、ステップＳ１１５では、例として、ＲＥＳＴデーモン部２５０の起動制御部２５１は、ＰＩＤファイル２４１を新たに作成し、作成されたＰＩＤファイル２４１によって記憶部２４０に格納されているＰＩＤファイル２４１を更新するものとする。これは、どのような条件でＲＥＳＴデーモン部２５０の起動処理が開始された場合でも、ＰＩＤファイル２４１を作成するという同一の処理が実行されるようにするためである。
【０１１４】
この後、図示しないが、ＲＥＳＴデーモン部２５０の起動処理が正常に完了すると、ＰＩＤファイル２４１のロックが解除される。バックアップ管理部２３０は、ロックが解除されたことを検知すると、ＲＥＳＴデーモン部２５０に対して接続を要求し、接続が確立するとストレージサーバ１１０にデータを送信できる。
【０１１５】
このように、バックアップ管理部２３０は、ＰＩＤファイル２４１を用いたＲＥＳＴデーモン部２５０との接続に失敗した場合、ＰＩＤファイル２４１がロックされていないことを検知することで、ＲＥＳＴデーモン部２５０に異常が発生したことを正しく認識できる。この認識により、バックアップ管理部２３０は、ＲＥＳＴデーモン部２５０を起動させるという、ＲＥＳＴデーモン部２５０の現在の状態に応じた正しい処理を実行できる。
【０１１６】
次に、バックアップ管理部２２０，２３０の処理について、フローチャートを用いて説明する。
図１２、図１３は、第２の実施の形態におけるバックアップ管理部の処理手順を示すフローチャートの例である。なお、図１２、図１３に示す処理は、バックアップ管理部２２０，２３０のどちらも共通に実行する。
【０１１７】
［ステップＳ１２１］バックアップ管理部は、記憶部２４０にＰＩＤファイル２４１が存在するかを確認する。
［ステップＳ１２２］バックアップ管理部は、記憶部２４０にＰＩＤファイル２４１が存在した場合、ステップＳ１２４の処理を実行し、ＰＩＤファイル２４１が存在しなかった場合、ステップＳ１２３の処理を実行する。
【０１１８】
［ステップＳ１２３］バックアップ管理部は、ＲＥＳＴデーモン部２５０を起動させる。具体的には、バックアップ管理部は、ＲＥＳＴデーモン部２５０の起動制御部２５１を起動させる。これにより、ＲＥＳＴデーモン部２５０の起動制御処理が実行される。起動制御処理によって、ＰＩＤファイル２４１が作成されて記憶部２４０に格納されるとともに、ＰＩＤファイル２４１がロックされる。また、起動制御処理によって、通信処理部２５２が起動される。通信処理部２５２が正常に起動してＲＥＳＴデーモン部２５０の起動処理が完了すると、ＰＩＤファイル２４１のロックが解除される。また、通信処理部２５２が正常に起動せず、ＲＥＳＴデーモン部２５０の起動処理が異常終了した場合も、ＰＩＤファイル２４１のロックが解除される。
【０１１９】
［ステップＳ１２４］バックアップ管理部は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用いて、ＲＥＳＴデーモン部２５０の通信処理部２５２に対して接続を要求する。
【０１２０】
［ステップＳ１２５］バックアップ管理部は、ＲＥＳＴデーモン部２５０との接続確立に成功した場合、ステップＳ１２８の処理を実行し、接続確立に失敗した場合、ステップＳ１２６の処理を実行する。
【０１２１】
［ステップＳ１２６］バックアップ管理部は、ＰＩＤファイル２４１のロック状態を確認する。
［ステップＳ１２７］バックアップ管理部は、ＰＩＤファイル２４１がロックされている場合、図１３のステップＳ１３１の処理を実行する。一方、バックアップ管理部は、ＰＩＤファイル２４１がロックされていない場合、処理をステップＳ１２３に進め、ＲＥＳＴデーモン部２５０を起動させる。
【０１２２】
［ステップＳ１２８］バックアップ管理部は、ＰＩＤファイル２４１から読み出したプロセスＩＤとポート番号を用い、ＲＥＳＴデーモン部２５０の通信処理部２５２に対してデータ送信を要求する。通信処理部２５２は、データ送信要求に応じて、ＲＥＳＴ  ＡＰＩのリクエストをストレージサーバ１１０に送信する。
【０１２３】
以下、図１３を用いて説明を続ける。
［ステップＳ１３１］バックアップ管理部は、一定時間待ち状態になる。
［ステップＳ１３２］バックアップ管理部は、ＰＩＤファイル２４１のロック状態を確認する。
【０１２４】
［ステップＳ１３３］バックアップ管理部は、ＰＩＤファイル２４１がロックされている場合、処理をステップＳ１３１に進め、再度待ち状態になる。一方、バックアップ管理部は、ＰＩＤファイル２４１がロックされていない場合、すなわち、ロックが解除されたことを検知した場合には、処理を図１２のステップＳ１２４に進め、ＲＥＳＴデーモン部２５０に対して接続を要求する。
【０１２５】
なお、上記の「ｔｒｙＬｏｃｋ」メソッドによりＰＩＤファイル２４１がロックされた場合、ステップＳ１２６，Ｓ１３２でのロック状態の確認は、バックアップ管理部が「ｔｒｙＬｏｃｋ」メソッドを呼び出すことで行われる。ロックされている場合（ステップＳ１２７，Ｓ１３３「Ｙｅｓ」）、その旨を示す所定の値が返される。一方、ロックされていない場合（ステップＳ１２７，Ｓ１３３「Ｎｏ」）、「ｔｒｙＬｏｃｋ」メソッドの呼び出しによりＰＩＤファイル２４１がロックされる。このため、バックアップ管理部は、「ｒｅｌｅａｓｅ」メソッドを呼び出してロックを解除した後、次の処理（それぞれステップＳ１２３，Ｓ１２４）を実行する。
【０１２６】
以上の図１２、図１３の処理によれば、バックアップ管理部は、ＰＩＤファイル２４１の有無と、ＲＥＳＴデーモン部２５０に対する接続の可否と、ＰＩＤファイル２４１のロック状態とに応じて、ＲＥＳＴデーモン部２５０の状態に応じた正しい後続処理を実行できる。
【０１２７】
例えば、バックアップ管理部は、ＰＩＤファイル２４１が存在しないと判定した場合（ステップＳ１２２「Ｎｏ」）、ＲＥＳＴデーモン部２５０が起動していない（起動処理が実行されていない）と正しく判定できる。この場合、バックアップ管理部は、ＲＥＳＴデーモン部２５０を起動させて（ステップＳ１２３）、ストレージサーバ１１０と通信するための処理を続行できる。
【０１２８】
また、バックアップ管理部は、ＰＩＤファイル２４１が存在するが（ステップＳ１２２）、ＲＥＳＴデーモン部２５０と接続できない場合（ステップＳ１２５「Ｎｏ」）、ＰＩＤファイル２４１のロック状態を確認する（ステップＳ１２６）。そして、バックアップ管理部は、ＰＩＤファイル２４１がロックされていない場合（ステップＳ１２７「Ｎｏ」）、ＲＥＳＴデーモン部２５０の起動処理が異常終了した状態であると正しく判定できる。この場合、バックアップ管理部は、ＲＥＳＴデーモン部２５０を起動させて（ステップＳ１２３）、ストレージサーバ１１０と通信するための処理を続行できる。
【０１２９】
また、バックアップ管理部は、ＲＥＳＴデーモン部２５０と接続できず（ステップＳ１２５「Ｎｏ」）、かつ、ＰＩＤファイル２４１がロックされている場合（ステップＳ１２７「Ｙｅｓ」）、ＲＥＳＴデーモン部２５０の起動処理が正常に実行中であると正しく判定できる。この場合、バックアップ管理部は、起動処理が完了するまで待ち状態となる（ステップＳ１３１〜Ｓ１３３）。そして、バックアップ管理部は、ロック解除により起動処理の完了を検知すると（ステップＳ１３３「Ｎｏ」）、ＰＩＤファイル２４１を用いてＲＥＳＴデーモン部２５０に接続し（ステップＳ１２４）、ストレージサーバ１１０と通信するための処理を続行できる。
【０１３０】
なお、バックアップ管理部が待ち状態である間にＲＥＳＴデーモン部２５０の起動処理が異常終了した場合、バックアップ管理部は、ロック解除を検知して（ステップＳ１３３「Ｎｏ」）、ＲＥＳＴデーモン部２５０に対する接続を要求する（ステップＳ１２４）。しかし、バックアップ管理部は、接続の確立に失敗する。この場合、バックアップ管理部は、ＰＩＤファイルがロックされていないと判定することで（ステップＳ１２７「Ｎｏ」）、ＲＥＳＴデーモン部２５０の起動処理が異常終了したことを認識できる。バックアップ管理部は、ＲＥＳＴデーモン部２５０を起動させて（ステップＳ１２３）、ストレージサーバ１１０と通信するための処理を続行できる。
【０１３１】
このように、バックアップ管理部は、ＲＥＳＴデーモン部２５０の状態を正しく認識し、その認識結果に基づいて、ストレージサーバ１１０へのデータ送信を実行するための正しい後続処理を実行できる。これにより、ユーザ側からの要求に応じたバックアップ管理部の処理中に、バックアップ管理部自体のエラーではなく、ＲＥＳＴデーモン部２５０の動作に起因するエラーが発生する確率を低減できる。したがって、ストレージサーバ１１０との通信においてＲＥＳＴデーモン部２５０が介在することをユーザ側が意識しないようなバックアップ管理部の処理を安定化できる。そして、このようなバックアップ管理部を実現するアプリケーションプログラムの品質や利便性を高めることができる。
【０１３２】
なお、以上説明した第２の実施の形態では、２つのバックアップ管理部２２０，２３０が１つのＲＥＳＴデーモン部２５０を共用する場合について例示した。しかし、例えば、３つ以上のバックアップ管理部が１つのＲＥＳＴデーモン部２５０を共用する場合でも、各バックアップ管理部は上記のバックアップ管理部２２０，２３０と同様の処理を実行すればよい。
【０１３３】
また、上記の各実施の形態に示した装置（例えば、情報処理装置１０、業務サーバ２００，２００ａ，２００ｂ）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（Blu-ray Disc：ＢＤ、登録商標）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１３４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１３５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１３６】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  記憶部と、
第１のプロセスの起動処理の実行過程において、通信で利用される制御データを作成して前記記憶部に格納するとともに前記制御データをロックし、前記起動処理の完了時および停止時に前記制御データのロックを解除し、前記起動処理が完了すると、通信要求に応じて通信先装置との間で通信する前記第１のプロセス、および、
前記制御データに基づいて前記第１のプロセスと接続し、接続が確立した状態で前記通信要求を前記第１のプロセスに送信することで、前記通信先装置との通信を前記第１のプロセスに実行させる第２のプロセスであって、前記制御データに基づく前記第１のプロセスとの接続の成否と、前記制御データがロックされているか否かを示すロック状態とに応じて、前記通信先装置との通信を実行させるために前記第１のプロセスに対して実行する処理を選択する、前記第２のプロセス、
を実行する処理部と、
を有する情報処理装置。
【０１３７】
（付記２）  前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に失敗したとき、前記制御データがロックされていない場合には、前記第１のプロセスを再起動させ、前記制御データがロックされている場合には、前記制御データのロックが解除されるまで待ち状態になり、前記制御データのロックが解除されると、前記制御データに基づいて前記第１のプロセスと接続する、
付記１記載の情報処理装置。
【０１３８】
（付記３）  前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に成功した場合、前記通信要求を前記第１のプロセスに送信する、
付記１または２記載の情報処理装置。
【０１３９】
（付記４）  前記処理部は、前記第２のプロセスを複数実行し、前記第１のプロセスは、複数の前記第２のプロセスによって共用され、
複数の前記第２のプロセスのそれぞれは、
前記記憶部に前記制御データが存在するかを判定し、
前記制御データが存在する場合には、前記制御データに基づいて前記第１のプロセスと接続し、
前記制御データが存在しない場合には、前記第１のプロセスを起動させ、起動した前記第１のプロセスによって作成された前記制御データに基づいて前記第１のプロセスと接続する、
付記１乃至３のいずれか１つに記載の情報処理装置。
【０１４０】
（付記５）  コンピュータに、
第１のプロセスの起動処理の実行過程において、通信で利用される制御データを作成して記憶部に格納するとともに前記制御データをロックし、前記起動処理の完了時および停止時に前記制御データのロックを解除し、前記起動処理が完了すると、通信要求に応じて通信先装置との間で通信する前記第１のプロセスと、
前記制御データに基づいて前記第１のプロセスと接続し、接続が確立した状態で前記通信要求を前記第１のプロセスに送信することで、前記通信先装置との通信を前記第１のプロセスに実行させる第２のプロセスであって、前記制御データに基づく前記第１のプロセスとの接続の成否と、前記制御データがロックされているか否かを示すロック状態とに応じて、前記通信先装置との通信を実行させるために前記第１のプロセスに対して実行する処理を選択する、前記第２のプロセスと、
を実行させる情報処理プログラム。
【０１４１】
（付記６）  前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に失敗したとき、前記制御データがロックされていない場合には、前記第１のプロセスを再起動させ、前記制御データがロックされている場合には、前記制御データのロックが解除されるまで待ち状態になり、前記制御データのロックが解除されると、前記制御データに基づいて前記第１のプロセスと接続する、
付記５記載の情報処理プログラム。
【０１４２】
（付記７）  前記第２のプロセスは、前記制御データに基づく前記第１のプロセスとの接続に成功した場合、前記通信要求を前記第１のプロセスに送信する、
付記５または６記載の情報処理プログラム。
【０１４３】
（付記８）  前記コンピュータに、前記第２のプロセスを複数実行させ、
前記第１のプロセスは、複数の前記第２のプロセスによって共用され、
複数の前記第２のプロセスのそれぞれは、
前記記憶部に前記制御データが存在するかを判定し、
前記制御データが存在する場合には、前記制御データに基づいて前記第１のプロセスと接続し、
前記制御データが存在しない場合には、前記第１のプロセスを起動させ、起動した前記第１のプロセスによって作成された前記制御データに基づいて前記第１のプロセスと接続する、
付記５乃至７のいずれか１つに記載の情報処理プログラム。
【符号の説明】
【０１４４】
１  第１のプロセス
２  第２のプロセス
１０  情報処理装置
１１  記憶部
１１ａ  制御データ
１２  処理部
２０  通信先装置
Ｓ１ａ〜Ｓ１ｆ，Ｓ２ａ〜Ｓ２ｆ  ステップ
【図１】
2020086767.tif 000003
【図２】
2020086767.tif 000004
【図３】
2020086767.tif 000005
【図４】
2020086767.tif 000006
【図５】
2020086767.tif 000007
【図６】
2020086767.tif 000008
【図７】
2020086767.tif 000009
【図８】
2020086767.tif 000010
【図９】
2020086767.tif 000011
【図１０】
2020086767.tif 000012
【図１１】
2020086767.tif 000013
【図１２】
2020086767.tif 000014
【図１３】
2020086767.tif 000015