(57)【特許請求の範囲】
【請求項１】
同一のネットワークに含まれる複数の他のサーバおよび自サーバから、マスタの役割を有する単一のサーバを選出するマスタ調整部と、
前記マスタ調整部により自サーバがマスタの役割を有するサーバとして選出された場合に、クライアントからの接続要求に応答して、前記クライアントからのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する際に、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録し、
ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けてロック待ちセッションに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満となった時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、
セッションＩＤを発行して接続したクライアントに情報を送信して監視し、該クライアントからの応答が届かない場合には、前記クライアントに発行したセッションＩＤに対応するロック情報を、前記ファイル管理テーブルから削除し、
前記ファイル管理テーブルに登録されるセッションＩＤおよびロック情報に基づき、前記ファイルのロックを行う要求処理部と、
前記マスタ調整部により自サーバがレプリカの役割を有するサーバとして選出された場合に、マスタの役割を有するサーバのセッションテーブルとファイル管理テーブルとを複製するレプリケーション部と、
自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合には、前記マスタの役割を有するサーバから複製されたセッションテーブルの情報を削除待ちセッションテーブルに登録し、クライアントからの再接続要求に応答して、該再接続要求に含まれるセッションＩＤと同一のセッションＩＤを前記削除待ちセッションテーブルから削除し、該削除待ちセッションテーブルに残されたセッションＩＤに対応するロック情報を、前記マスタの役割を有するサーバから複製されたファイル管理テーブルから削除する復元処理部と
を有することを特徴とするサーバ。
【請求項２】
前記要求処理部は、前記クライアントからのファイル処理要求が、ファイルに対する共有ロックを要求している場合には、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けて前記ロック待ちセッションに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満となった時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、
前記クライアントからのファイル処理要求が、ファイルに対する排他ロックを要求している場合には、ファイルに対するロックがかかっていない場合に、ファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、前記クライアントに対するロックがかかっている場合には、ファイルに対するロック情報とセッションＩＤとを対応付けて前記ロック待ちセッションに登録し、ファイルに対するロックが解除された時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録することを特徴とする請求項１に記載のサーバ。
【請求項３】
マスタまたはレプリカの役割を有する複数のサーバと、マスタの役割を有するサーバに接続する複数のクライアントとを備えたファイル管理システムであって、
前記サーバは、
同一のネットワークからマスタの役割を有する単一のサーバを選出するマスタ調整部と、
前記マスタ調整部により自サーバがマスタの役割を有するサーバとして選択された場合に、前記クライアントからの接続要求に応答して、前記クライアントにセッションＩＤを発行し、該セッションＩＤをマスタの役割を有するサーバから複製されたセッションテーブルに登録すると共に、前記クライアントからのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する際に、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録し、
ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けてロック待ちセッションに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満となった時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、
セッションＩＤを発行して接続したクライアントに情報を送信して監視し、該クライアントからの応答が届かない場合には、前記クライアントに発行したセッションＩＤに対応するロック情報を、前記マスタの役割を有するサーバから複製されたファイル管理テーブルから削除し、
前記ファイル管理テーブルに登録されるセッションＩＤおよびロック情報に基づき、前記ファイルのロックを行う要求処理部と、
前記マスタ調整部により自サーバがレプリカの役割を有するサーバとして選択された場合に、マスタの役割を有するサーバのセッションテーブルとファイル管理テーブルとを複製するレプリケーション部と、
自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合には、前記マスタの役割を有するサーバから複製されたセッションテーブルの情報を削除待ちセッションテーブルに登録し、クライアントからの再接続要求に応答して、該再接続要求に含まれるセッションＩＤと同一のセッションＩＤを前記削除待ちセッションテーブルから削除し、該削除待ちセッションテーブルに残されたセッションＩＤに対応するロック情報を、前記マスタの役割を有するサーバから複製されたファイル管理テーブルから削除する復元処理部と
を有することを特徴とするファイル管理システム。
【請求項４】
前記クライアントは、アプリケーションからの指示に応じて、前記ファイル処理要求をマスタの役割を有するサーバに行い、
前記クライアントは、マスタの役割を有するサーバが切り替わった場合に、マスタの役割を有するサーバに前記再接続要求を行い、該再接続要求の応答を前記マスタの役割を有するサーバから受信しない場合には、再接続に失敗した情報を前記アプリケーションに通知する通知部を有することを特徴とする請求項３に記載のファイル管理システム。
【請求項５】
サーバで実行されるファイル管理方法であって、
同一のネットワークに含まれる複数の他のサーバおよび自サーバから、マスタの役割を有する単一のサーバを選出するマスタ調整工程と、
前記マスタ調整工程により自サーバがマスタの役割を有するサーバとして選出された場合に、クライアントからの接続要求に応答して、前記クライアントにセッションＩＤを発行し、該セッションＩＤをセッションテーブルに登録すると共に、前記クライアントからのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する際に、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録し、
ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けてロック待ちセッションに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満となった時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、
セッションＩＤを発行して接続したクライアントに情報を送信して監視し、該クライアントからの応答が届かない場合には、前記クライアントに発行したセッションＩＤに対応するロック情報を、前記ファイル管理テーブルから削除する要求処理工程と、
前記マスタ調整工程により自サーバがレプリカの役割を有するサーバとして選出された場合に、マスタの役割を有するサーバのセッションテーブルとファイル管理テーブルとを複製するレプリケーション工程と、
自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合には、前記マスタの役割を有するサーバから複製されたセッションテーブルの情報を削除待ちセッションテーブルに登録し、クライアントからの再接続要求に応答して、該再接続要求に含まれるセッションＩＤと同一のセッションＩＤを前記削除待ちセッションテーブルから削除し、該削除待ちセッションテーブルに残されたセッションＩＤに対応するロック情報を、前記マスタの役割を有するサーバから複製されたファイル管理テーブルから削除し、前記ファイル管理テーブルに登録されるセッションＩＤおよびロック情報に基づき、前記ファイルのロックを行う復元工程と
を含んだことを特徴とするファイル管理方法。
【請求項６】
同一のネットワークに含まれる複数の他のサーバおよび自サーバから、マスタの役割を有する単一のサーバを選出するマスタ調整ステップと、
前記マスタ調整ステップにより自サーバがマスタの役割を有するサーバとして選出された場合に、クライアントからの接続要求に応答して、前記クライアントにセッションＩＤを発行し、該セッションＩＤをセッションテーブルに登録すると共に、前記クライアントからのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する際に、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録し、
ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けてロック待ちセッションに登録し、ファイルに対するロックの数が前記ファイル管理テーブルに示される閾値未満となった時点で、前記ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けて前記ファイル管理テーブルに登録し、
セッションＩＤを発行して接続したクライアントに情報を送信して監視し、該クライアントからの応答が届かない場合には、前記クライアントに発行したセッションＩＤに対応するロック情報を、前記ファイル管理テーブルから削除する要求処理ステップと、
前記マスタ調整ステップにより自サーバがレプリカの役割を有するサーバとして選出された場合に、マスタの役割を有するサーバのセッションテーブルとファイル管理テーブルとを複製するレプリケーションステップと、
自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合には、前記マスタの役割を有するサーバから複製されたセッションテーブルの情報を削除待ちセッションテーブルに登録し、クライアントからの再接続要求に応答して、該再接続要求に含まれるセッションＩＤと同一のセッションＩＤを前記削除待ちセッションテーブルから削除し、該削除待ちセッションテーブルに残されたセッションＩＤに対応するロック情報を、前記マスタの役割を有するサーバから複製されたファイル管理テーブルから削除し、前記ファイル管理テーブルに登録されるセッションＩＤおよびロック情報に基づき、前記ファイルのロックを行う復元処理ステップと、
をコンピュータに実行させるためのファイル管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル管理システム等に関する。
【背景技術】
【０００２】
システムの資源の共有や排他的なアクセス制御を行うこと、障害が発生した場合のシステムの可用性、一貫性を確保することは、重要な課題である。この課題を解消するための各種の従来技術が存在する。
【０００３】
例えば、安価なハードウェアを用いた信頼性の低いネットワーク・コンピュータ・クラスタ環境において、長時間トランザクションをサポートする従来技術がある（特許文献２等）。この従来技術は、マスタの交代に備えてデータを複製（レプリケーション）することによりサーバ障害への耐障害性、トランザクションによるクライアント端末の故障に対する耐障害性を実現する。
【０００４】
ネットワーク故障およびサーバ故障に対応した従来技術がある（非特許文献１、２等）。この従来技術は、ファイルにロックをかけるオペレーションを行うことで、ネットワーク故障、サーバ故障、クライアント故障の何れに対しても対応可能である。
【０００５】
一台のコンピュータ内で複数のプロセッサ要素が処理を並列に実行する際に、安全なカウンタを用意し、複数のプロセッサ要素が同時に取得可能な資源の数を一定数以下に制限する技術がある（非特許文献３等）。
【０００６】
また、従来のクライアントサーバシステム等では、クライアントがマスタの資源にアクセスする場合に、資源に対して共有ロックや排他ロックなどを行う場合があり、クライアントと各種ロックとの関係はロック情報として、サーバに管理される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−２１０１０６号公報
【特許文献２】特開２０１１−２１０１０７号公報
【非特許文献】
【０００８】
【非特許文献１】Mike  Burrows,  "The  Chubby  lock  service  for  loosely-coupled  distributed  systems",  7th  USENIX  Symposium  on  Operating  Systems  Design  and  Implementation  (OSDI),  2006.  November  8
【非特許文献２】Tushar  Chandra  et  al.,  "Paxos  Made  Live  -  An  Engineering  Perspective,"  PODC'07,  2007.
【非特許文献３】Dijkstra,  Edsger  W.  Cooperating  sequential  processes  (EWD-123).  E.W.  Dijkstra  Archive.  Center  for  American  History,  University  of  Texas  at  Austin.  (original;  transcription)  (September  1965)
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、同期する複数のサーバ間でネットワークが分散した場合に、同一のネットワーク内に含まれる複数のサーバから単一のマスタを選出するようなシステムでは、マスタの故障により資源に対するクライアントのロック情報を他のサーバが引き継ぐことが行われるが、係るロック情報に矛盾が発生するという問題があった。上述した従来技術では、係る問題点を解消することが出来ない。
【００１０】
開示の実施形態は、上記に鑑みてなされたものであって、同期する複数のサーバ間でネットワークが分散した場合に、同一のネットワーク内に含まれる複数のサーバから単一のマスタを選出するようなシステムにおいて、マスタの故障により資源に対するクライアントのロック情報を他のサーバが引き継ぐ際に、係るロック情報に矛盾発生することを防止することができるサーバ、ファイル管理システム、ファイル管理方法およびファイル管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るサーバは、マスタ調整部と、要求処理部と、レプリケーション部と、復元処理部を有する。マスタ調整部は、同一のネットワークに含まれる複数の他のサーバおよび自サーバから、マスタの役割を有する単一のサーバを選出する。要求処理部は、自サーバがマスタの役割を有するサーバである場合に、クライアントからの接続要求に応答して、クライアントにセッションＩＤを発行し、該セッションＩＤをセッションテーブルに登録すると共に、クライアントからのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する際に、ファイルに対するロックの数が閾値未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録し、ファイルに対するロックの数が閾値に達している場合には、ファイルに対するロック情報とセッションＩＤとを対応付けてロック待ちセッションに登録し、ファイルに対するロックの数が閾値未満となった時点で、ロック待ちセッションに登録されたファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する。また、要求処理部は、セッションＩＤを発行して接続したクライアントに情報を送信して監視し、該クライアントからの応答が届かない場合には、クライアントに発行したセッションＩＤに対応するロック情報を、ファイル管理テーブルから削除する。レプリケーション部は、自サーバがレプリカの役割を有するサーバである場合に、マスタの役割を有するサーバのセッションテーブルとファイル管理テーブルとを複製する。復元処理部は、自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合には、セッションテーブルの情報を削除待ちセッションテーブルに登録し、クライアントからの再接続要求に応答して、該再接続要求に含まれるセッションＩＤと同一のセッションＩＤを削除待ちセッションテーブルから削除し、該削除待ちセッションテーブルに残されたセッションＩＤに対応するロック情報を、ファイル管理テーブルから削除する。
【発明の効果】
【００１２】
本発明に係るサーバによれば、同期する複数のサーバ間でネットワークが分散した場合に、同一のネットワーク内に含まれる複数のサーバから単一のマスタを選出するようなシステムにおいて、マスタの故障により資源に対するクライアントのロック情報を他のサーバが引き継ぐ際に、係るロック情報に矛盾発生することを防止することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、本実施形態に係るファイル管理システムの構成を示す図である。
【図２】図２は、本実施形態に係るサーバの構成を示す機能ブロック図である。
【図３】図３は、本実施形態に係るセッションテーブルのデータ構造の一例を示す図である。
【図４】図４は、本実施形態に係る削除待ちセッションテーブルのデータ構造の一例を示す図である。
【図５】図５は、本実施形態に係るファイル管理テーブルのデータ構造の一例を示す図である。
【図６】図６は、本実施形態に係るクライアントの構成を示す機能ブロック図である。
【図７】図７は、本実施形態に係るサーバの処理手順を示すフローチャートである。
【図８】図８は、セッションを復元する処理の処理手順を示すフローチャートである。
【図９】図９は、セッション削除処理の処理手順を示すフローチャートである。
【図１０】図１０は、要求受け付け処理の処理手順を示すフローチャートである。
【図１１】図１１は、クライアント監視処理の処理手順を示すフローチャートである。
【図１２】図１２は、閉塞処理の処理手順を示すフローチャートである。
【図１３】図１３は、排他ロック取得要求を受け付けた場合の処理手順を示すフローチャートである。
【図１４】図１４は、排他ロック解放要求を受け付けた場合の処理手順を示すフローチャートである。
【図１５】図１５は、共有ロック取得要求を受け付けた場合の処理手順を示すフローチャートである。
【図１６】図１６は、共有ロック解放要求を受け付けた場合の処理手順を示すフローチャートである。
【図１７】図１７は、本実施形態に係るクライアントの処理手順を示すフローチャートである。
【図１８】図１８は、サーバと同様の機能を実現する制御プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するサーバ、ファイル管理システム、ファイル管理方法およびファイル管理プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態によりこの発明が限定されるものではない。
【００１５】
（実施形態）
本実施形態に係るファイル管理システムの構成について説明する。図１は、本実施形態に係るファイル管理システムの構成を示す図である。図１に示すように、このファイル管理システムは、サーバ１００ａ，１００ｂ，１００ｃ，１００ｄ，１００ｅと、クライアント２００ａ，２００ｂと、アプリケーション６０を有する。サーバ１００ａ〜１００ｅ、クライアント２００ａ，２００ｂは、ネットワーク５０に接続される。
【００１６】
図１では一例として、サーバ１００ａ〜１００ｅ、クライアント２００ａ，２００ｂを示すが、このシステムは、その他のサーバ、クライアントを有していても良い。以下の説明では、サーバ１００ａ〜１００ｅをまとめて適宜サーバ１００と表記する。クライアント２００ａ，２００ｂをまとめて適宜クライアント２００と表記する。
【００１７】
各サーバ１００は、Paxos等の多数決プロトコルを用いて、同一のネットワークに含まれるサーバ１００から、単一のマスタを選出する。多数決プロトコルを用いて、単一のマスタを選出する技術は、例えば、特許文献１、２の技術を用いれば良い。マスタに選出されたサーバは、マスタの機能を有するサーバとして機能する。一方、マスタに選出されなかったサーバは、レプリカの役割を有するサーバとして機能する。以下の説明において、適宜、マスタの役割を有するサーバをマスタ、レプリカの役割を有するサーバをレプリカと表記する。
【００１８】
例えば、図１において、サーバ１００ａ〜１００ｅが同一のネットワークに含まれ、サーバ１００ａがマスタとして選出されたとする。この場合には、サーバ１００ａは、マスタの役割を有するサーバとして機能し、サーバ１００ｂ〜１００ｅは、レプリカの役割を有するサーバとして機能する。
【００１９】
マスタの役割を有するサーバ１００は、クライアント２００からの接続要求に応答して、接続を確立する。マスタの役割を有するサーバ１００は、クライアント２００からのファイル処理要求に応じて、ファイルにロックをかける。ファイルにかけるロックは、共有ロックまたは排他ロックである。マスタの役割を有するサーバ１００は、ファイルに対するロック情報を記憶すると共に、このロック情報を、レプリカの役割を有するサーバ１００に通知し、複製（レプリケーション）させる。
【００２０】
また、レプリカの役割を有するサーバ１００が、マスタの役割を有するサーバ１００に切り替わった場合には、クライアント２００から再接続要求を受け付ける。マスタの役割を有するサーバ１００は、複製しておいたロック情報について、再接続要求を受け付けクライアントに対応するロック情報を残し、その他のロック情報を削除する。このような処理を実行することで、ロック情報に矛盾が発生することを防止する。
【００２１】
クライアント２００は、マスタの役割を有するサーバ１００と接続を確立した後に、アプリケーション６０からの指示に応じて、ファイルに対する処理を実行する。例えば、クライアント２００は、ファイルに共有ロックまたは排他ロックをかけ、ファイルに対する処理を実行する。
【００２２】
また、クライアント２００は、マスタの役割を有するサーバ１００が切り替わった場合には、マスタの役割を有するサーバ１００に再接続要求を行い、ファイルに対する処理を継続する。なお、クライアント２００は、再接続に失敗した場合には、アプリケーション６０に対して、再接続に失敗した旨を通知し、ファイルに対する処理を中止する。
【００２３】
次に、図１に示したサーバ１００の構成の一例について説明する。図２は、本実施形態に係るサーバの構成を示す機能ブロック図である。図２に示すように、このサーバ１００は、通信部１１０、記憶部１４０、制御部１５０を有する。
【００２４】
通信部１１０は、ネットワーク５０に接続された他の装置との間でデータ通信を実行する通信装置である。例えば、通信部１１０は、クライアント２００、他のサーバ１００とデータ通信を行う。後述する制御部１５０は、この通信部１１０を利用して、クライアント２００、他のサーバ２００とデータをやり取りする。
【００２５】
記憶部１４０は、セッションテーブル１４０ａ、削除待ちセッションテーブル１４０ｂ、ファイル管理テーブル１４０ｃを記憶する記憶装置である。
【００２６】
セッションテーブル１４０ａは、マスタの役割を有するサーバ１００とクライアント２００とのセッションに関する情報を有するテーブルである。図３は、本実施形態に係るセッションテーブルのデータ構造の一例を示す図である。図３に示すように、セッションテーブル１４０ａは、セッションＩＤと、クライアント情報と、ロックファイルのエントリとを対応付ける。このうち、セッションＩＤ（Identifier）は、マスタの役割を有するサーバ１００と、クライアント２００との間で確立されるセッションを識別する情報である。クライアント情報は、クライアント２００を一意に識別する情報であり、例えば、クライアント２００のＩＰ（Internet  Protocol）アドレスに対応する。ロックファイルのエントリは、ロックをかけられたファイルを一意に識別するファイルＩＤ（Ｆｉｄ）と、ロックの種別とを示す情報である。ロックの種別には、共有ロック、排他ロックが含まれる。
【００２７】
例えば、図３の２段目を例にして説明すると、セッションＩＤ「２」によって、マスタの役割を有するサーバ１００とクライアント２００とが接続しており、係るクライアント２００のクライアント情報は「１９２．１０．１０．１５」である。また、クライアント２００は、ファイルＩＤ「１」のファイルに共有ロックをかけている。
【００２８】
削除待ちセッションテーブル１４０ｂは、マスタの役割を有するサーバ１００が切り替わった場合に、復元できなかったセッションに関する情報を有するテーブルである。図４は、本実施形態に係る削除待ちセッションテーブルのデータ構造の一例を示す図である。図４に示すように、この削除待ちセッションテーブル１４０ｂは、セッションＩＤと、クライアント情報と、ロックファイルのエントリとを対応付ける。セッションＩＤ、クライアント情報、ロックファイルのエントリに関する説明は、図３に示したセッションテーブル１４０ａと同様である。
【００２９】
例えば、図４の２段目を例にして説明すると、セッションＩＤ「２」によって識別されるセッションが復元できなかったため、クライアント情報「１９２．１０．１０．１５」のクライアント２００との接続が確立していないのに、このクライアント２００によって、ファイルＩＤ「１」のファイルに共有ロックがかかった状態になっている。この共有ロックは、後述する復元処理部１５０ｄによって解除される。
【００３０】
ファイル管理テーブル１４０ｃは、ファイルに対するロック情報を有するテーブルである。図５は、本実施形態に係るファイル管理テーブルのデータ構造の一例を示す図である。図５に示すように、このファイル管理テーブルは、ファイルＩＤと、ロック上限数と、ロック中セッションと、ロック待ちセッションとを対応付ける。
【００３１】
ファイルＩＤ（Ｆｉｄ）は、ファイルを一意に識別する情報である。ロック上限数は、単一のファイルに対して、同時にロックをかけられる共有ロックの最大数である。なお、ロック上限数に関わらず、単一のファイルに対して、同時にロックをかけられる排他ロックの数は１である。
【００３２】
ロック中セッションは、該当ファイルにロックをかけているセッションＩＤとロックの種類とを示す。ロック待ちセッションは、該当ファイルに対するロック待ちを行っているセッションＩＤとロックの種類とを示す。ロック待ちセッションは、ロック中セッションに空きが出来た場合に、登録された順番で、ロック中セッションに移行する。
【００３３】
例えば、図５の１段目を例にして説明すると、ファイルＩＤ「１」のファイル上限数は「２」であり、ファイルＩＤ「１」のファイルに対して、２つの共有ロックがかけられている。係るロックは、セッションＩＤ「２」による共有ロックと、セッションＩＤ「３」による共有ロックである。また、ロック待ちセッションでは、セッションＩＤ「４」による排他ロック、セッションＩＤ「２８」による共有ロックの順で、ロック待ちが発生している。
【００３４】
図２の説明に戻る。制御部１５０は、マスタ調整部１５０ａ、レプリケーション部１５０ｂ、要求処理部１５０ｃ、復元処理部１５０ｄを有する。
【００３５】
マスタ調整部１５０ａは、Paxos等の多数決プロトコルを用いて、同一のネットワークに含まれるサーバ１００から、単一のマスタを選出する処理部である。マスタ調整部１５０ａは、自サーバ１００が、マスタとして選出されたか否かの情報を、レプリケーション部１５０ｂ、要求処理部１５０ｃ、復元処理部１５０ｄに出力する。
【００３６】
マスタ調整部１５０ａは、マスタを選出したことを契機にして、次回マスタ選出タイマ（図示略）をセットし、この次回マスタ選出タイマがタイムアウトしたら、再度マスタを選出する。すなわち、マスタ調整部１５０ａは、次回マスタ選出タイマを利用して、所定の時間間隔で、マスタを選出する処理を繰り返し実行する。
【００３７】
レプリケーション部１５０ｂは、記憶部１４０に格納された情報を複製する処理部である。自サーバ１００がマスタである場合には、記憶部１４０のセッションテーブル１４０ａ、ファイル管理テーブル１４０ｃを、レプリカの役割を有するサーバ１００に通知することで、レプリケーション要求を行う。
【００３８】
これに対して、自サーバ１００がレプリカの場合には、マスタの役割を有するサーバ１００からのレプリケーション要求を受け付ける。そして、自サーバ１００は、マスタの役割を有するサーバ１００のセッションテーブル１４０ａ、ファイル管理テーブル１４０ｃを複製して、記憶部１４０に記憶する。
【００３９】
レプリケーション部１５０ｂは、マスタ調整部１５０ａによって、マスタの選定が行われたことを契機にして、マスタリータイマ（図示略）をセットする。レプリケーション部１５０ｂは、マスタリータイマがタイムアウトするまでの間、上記処理を繰り返し実行する。
【００４０】
また、レプリケーション部１５０ｂは、自サーバ１００がマスタの役割を有するサーバ１００である場合に、セッションテーブル１４０ａ、ファイル管理テーブル１４０ｃが更新された場合にも、セッションテーブル１４０ａ、ファイル管理テーブル１４０ｃを、レプリカの役割を有するサーバ１００に通知することで、レプリケーション要求を行う。
【００４１】
要求処理部１５０ｃは、自サーバ１００がマスタに選出された場合に動作し、クライアント２００とのセッションを確立して、ファイル処理要求に応じて処理を行う処理部である。まず、要求処理部１５０ｃは、クライアント２００からの接続要求に応答して、クライアント２００にユニークなセッションＩＤを発行し、発行したセッションＩＤとクライアント２００のＩＰアドレスとを対応付けて、セッションテーブル１４０ａに登録する。
【００４２】
要求処理部１５０ｃは、セッションＩＤを発行して、クライアント２００とのセッションが確立した後に、クライアント２００からのファイル処理要求に応答して、セッションテーブル１４０ａおよびファイル管理テーブル１４０ｃを更新する。例えば、クライアント２００から受け付けるファイル処理要求には、排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求のいずれかが含まれる。以下では、排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求を受け付けた場合の、要求処理部１５０ｃの処理について順に説明する。
【００４３】
要求処理部１５０ｃが「排他ロック取得要求」を取得した場合の処理について説明する。この排他ロック取得要求には、処理対象となるファイルＩＤが含まれる。要求処理部１５０ｃは、セッションＩＤに対応付けて、ロックファイルのエントリをセッションテーブル１４０ａに登録する。例えば、セッションＩＤが「４」で、ファイルＩＤ「１」に対する排他ロックを要求されている場合には、要求処理部１５０ｃは、図３の４段目のロックファイルのエントリ「Ｆｉｄ＝１（排他）」を、セッションテーブル１４０ａに登録する。
【００４４】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃを参照し、ファイルＩＤに対応するロック中セッションが存在するか否かを判定する。要求処理部１５０ｃは、ロック中セッションが存在しない場合には、該当するロック中セッションに、セッションＩＤとロック種別（排他ロック）とを対応付けて登録する。これに対して、要求処理部１５０ｃは、ロック中セッションが存在する場合には、セッションＩＤとロック種別（排他ロック）とを対応付けてロック待ちセッションに登録する。
【００４５】
続いて、要求処理部１５０ｃが「排他ロック解放要求」を取得した場合の処理について説明する。この排他ロック解放要求には、処理対象となるファイルＩＤが含まれる。要求処理部１５０ｃは、セッションＩＤに対応する、ロックファイルのエントリをセッションテーブル１４０ａから削除する。例えば、セッションＩＤが「４」で、ファイルＩＤ「１」に対する排他ロックの解放を要求されている場合には、要求処理部１５０ｃは、図３の４段目のロックファイルのエントリ「Ｆｉｄ＝１（排他）」を、セッションテーブル１４０ａから削除する。
【００４６】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃを参照し、ファイルＩＤに対応するロック中セッションから値を削除する。例えば、セッションＩＤ「４」で、ファイルＩＤ「１」に対して排他ロックを行っていた場合には、ファイルＩＤ「１」のロック中セッションから値「Ｓｉｄ＝４（排他）」を、ファイル管理テーブル１４０ｃから削除する。
【００４７】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃから値を削除した後に、該当するファイルＩＤのロック待ちセッションの先頭のエントリを取り出し、ロック中セッションの値に追加する。要求処理部１５０ｃは、追加する値のロック種別が共有ロックの場合には、ロック上限数を超えない範囲内で、ロック中セッションに値を追加する処理を繰り返し実行する。
【００４８】
続いて、要求処理部１５０ｃが「共有ロック取得要求」を取得した場合の処理について説明する。この共有ロック取得要求には、処理対象となるファイルＩＤが含まれる。要求処理部１５０ｃは、セッションＩＤに対応付けて、ロックファイルのエントリをセッションテーブルに登録する。例えば、セッションＩＤが「２」で、ファイルＩＤ「１」に対する共有ロックを要求されている場合には、要求処理部１５０ｃは、図３の２段目に示すファイルのエントリ「Ｆｉｄ＝１（共有）」を、セッションテーブル１４０ａに登録する。
【００４９】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃのファイルＩＤに対応するロック中セッションを参照する。ロック中セッションにおいて、共有ロックの数がロック上限数未満の場合、または、排他ロックがかけられていない場合には、要求処理部１５０ｃは、該当するロック中セッションに、セッションＩＤとロック種別（共有ロック）とを対応付けて登録する。
【００５０】
これに対して、要求処理部１５０ｃは、ロック中セッションにおいて、共有ロックの数がロック上限数以上の場合、または、排他ロックがかけられている場合には、セッションＩＤとロック種別（共有ロック）とを対応付けてロック待ちセッションに登録する。
【００５１】
続いて、要求処理部１５０ｃが「共有ロック解放要求」を取得した場合の処理について説明する。この共有ロック解放要求には、処理対象となるファイルＩＤが含まれる。要求処理部１５０ｃは、セッションＩＤに対応する、ロックファイルのエントリをセッションテーブル１４０ａから削除する。例えば、要求処理部１５０ｃは、セッションＩＤが「２」で、ファイルＩＤ「１」に対する共有ロックの解放を要求されている場合には、図３の２段目のロックファイルのエントリ「Ｆｉｄ＝１（共有）」を、セッションテーブル１４０ａから削除する。
【００５２】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃを参照し、ファイルＩＤに対応するロック中セッションから値を削除する。例えば、セッションＩＤ「２」で、ファイルＩＤ「１」に対して排他ロックを行っていた場合には、ファイルＩＤ「１」のロック中セッションから値「Ｓｉｄ＝２（共有）」を、ファイル管理テーブル１４０ｃから削除する。
【００５３】
要求処理部１５０ｃは、ファイル管理テーブル１４０ｃから値を削除した後に、該当するファイルＩＤのロック待ちセッションの先頭のエントリを取り出し、ロック中セッションの値に追加する。要求処理部１５０ｃは、追加する値のロック種別が共有ロックの場合には、ロック上限数を超えない範囲内で、ロック中セッションに値を追加する処理を繰り返し実行する。
【００５４】
上記のように、要求処理部１５０ｃは、クライアント２００から接続要求を受け付けてセッションを確立した後に、クライアント２００からのファイル処理要求には、排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求に応答して、セッションテーブル１４０ａ、ファイル管理テーブル１４０ｃを更新する。
【００５５】
また、要求処理部１５０ｃは、セッションを確立したクライアント２００に対して、定期的にｐｉｎｇを送信することで、クライアント２００を監視する。要求処理部１５０ｃは、ｐｉｎｇを送信してから、所定の時間以内に、クライアント２００からの応答を受け付けない場合には、該クライアント２００に対応するセッションＩＤによって、ロックされているファイルを解放する。例えば、要求処理部１５０ｃは、セッションＩＤ「２」によってセッションを確立したクライアント２００からｐｉｎｇの応答を受け付けない場合には、図５のファイル管理テーブルのロック中セッションの値「Ｓｉｄ＝２（共有）」を削除する。なお、ロック中セッションを削除して、ロック待ちセッションの値をロック中セッションに追加する処理は、排他ロック解放要求、共有ロック解放要求を取得した場合の処理と同様である。
【００５６】
復元処理部１５０ｄは、自サーバ１００がレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わった場合に動作し、クライアント２００とのセッションを復元する処理部である。まず、復元処理部１５０ｄは、セッションテーブル１４０ａに登録された全情報を、削除待ちセッションテーブル１４０ｂへ書き込み、セッション削除タイマ（図示略）をセットする。また、復元処理部１５０ｄは、セッションテーブル１４０ａの全情報を削除する。
【００５７】
復元処理部１５０ｄは、セッション削除タイマがタイムアウトする前に、クライアント２００から再接続要求を受け付ける。この再接続要求には、マスタの役割を有するサーバが切り替わる前に、このサーバから発行されたセッションＩＤが含まれる。復元処理部１５０ｄは、再接続要求に含まれるセッションＩＤと、削除待ちセッションテーブル１４０ｂとを比較し、再接続要求に含まれるセッションＩＤと同一のセッションＩＤを有するレコードを、削除待ちセッションテーブル１４０ｂから削除する。また、復元処理部１５０ｄは、再接続要求に含まれるセッションＩＤを、セッションテーブル１４０ａに登録する。
【００５８】
復元処理部１５０ｄは、セッション削除タイマがタイムアウトした場合に、削除待ちセッションテーブル１４０ｂに含まれるセッションＩＤとロックファイルのエントリとを基にして、ファイル管理テーブル１４０ｃのロック中セッションから該当する値を削除する。
【００５９】
復元処理部１５０ｄは、ロックファイルのエントリに示されるロックの種別が、排他ロックである場合には、上述した「排他ロック解放要求」を取得した場合の処理と同様の処理を実行する。また、復元処理部１５０ｄは、ロックファイルのエントリに示されるロックの種別が、共有ロックである場合には、上述した「共有ロック解放要求」を取得した場合の処理と同様の処理を実行する。
【００６０】
次に、図１に示したクライアント２００の構成について説明する。図６は、本実施形態に係るクライアントの構成を示す機能ブロック図である。図６に示すように、このクライアント２００は、通信部２１０、入力部２２０、表示部２３０、記憶部２４０、制御部２５０を有する。
【００６１】
通信部２１０は、ネットワーク５０に接続された他の装置との間でデータ通信を実行する通信装置である。例えば、通信部２１０は、サーバ１００、アプリケーション６０とデータ通信を行う。後述する制御部２５０は、この通信部２１０を利用して、サーバ２００、アプリケーション６０とデータをやり取りする。
【００６２】
入力部２２０は、各種のデータをクライアント２００に入力する入力装置である。例えば、入力部２２０は、キーボードやマウス、タッチパネル等に対応する。表示部２３０は、各種のデータを表示する表示装置である。例えば、表示部２３０は、ディスプレイ等に対応する。
【００６３】
記憶部２４０は、セッション情報２４０ａを記憶する記憶装置である。セッション情報２４０ａは、例えば、クライアント２００がマスタの役割を有するサーバ１００とセッションを確立した場合のセッションＩＤを有する情報である。
【００６４】
制御部２５０は、接続要求部２５０ａ、要求部２５０ｂ、再接続要求部２５０ｃ、通知部２５０ｄを有する。
【００６５】
接続要求部２５０ａは、マスタの役割を有するサーバ１００とセッションを確立する処理部である。具体的に、接続要求部２５０ａは、ネットワーク５０に接続された全てのサーバ１００に接続要求を送信する。接続要求部２５０ａは、接続要求を送信した後に、マスタの役割を有するサーバ１００から、セッションＩＤを受信し、受信したセッションＩＤを、セッション情報２４０ａに登録する。そして、接続要求部２５０ａは、マスタの役割を有するサーバ１００に、受信確認を送信する。上記の一連の処理を接続要求部２５０ａが実行することで、クライアント２００とサーバ１００とのセッションが確立する。
【００６６】
接続要求部２５０ａは、死活監視タイマ（図示略）をセットし、この死活監視タイマがタイムアウトする前に、マスタの役割を有するサーバ１００からの通信を受信した場合には、マスタへの受信確認を送信し、死活監視タイマをセットし直す処理を繰り返し実行する。なお、接続要求部２５０ａは、死活監視タイマがタイムアウトする前に、マスタの役割を有するサーバ１００から通信を受信しない場合には、再接続要求部２５０ｃに再接続を依頼する。
【００６７】
要求部２５０ｂは、クライアント２００がマスタの役割を有するサーバ１００との間でセッションが確立している間に、マスタに対してファイル処理要求を行う処理部である。例えば、要求部２５０ｂは、ファイル処理要求として、排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求等を行う。要求部２５０ｂは、アプリケーション６０からの指示を受け付け、係る指示の内容に応じて、ファイル処理要求を行っても良い。
【００６８】
再接続要求部２５０ｃは、サーバ１００に対する再接続要求を行う処理部である。具体的に、再接続要求部２５０ｃは、接続要求部２５０ａから再接続の依頼を受け付けた場合に、再接続タイマ（図示略）をセットする。そして、再接続要求部２５０ｃは、再接続要求にセッション情報２４０ａに登録されたセッションＩＤを登録し、ネットワークに接続された全てのサーバ１００に再接続要求を送信する。
【００６９】
再接続要求部２５０ｃは、再接続タイマがタイムアウトする前に、マスタの役割を有するサーバ１００から返信が得られた場合には、再度セッションが確立したこととなり、その後の処理を、接続要求部２５０ａに依頼する。
【００７０】
依頼を受けた接続要求部２５０ａは、死活監視タイマをセットし、この死活監視タイマがタイムアウトする前に、マスタの役割を有するサーバ１００からの通信を受信した場合には、マスタへの受信確認を送信し、死活監視タイマをセットし直す処理を繰り返し実行する。なお、接続要求部２５０ａは、死活監視タイマがタイムアウトする前に、マスタの役割を有するサーバ１００から通信を受信しない場合には、再接続要求部２５０ｃに再接続を依頼する。
【００７１】
これに対して、再接続要求部２５０ｃは、再接続タイマがタイムアウトする前に、マスタの役割を有するサーバ１００から再接続要求に対する返信が得られない場合には、再接続要求に対する返信が得られない旨を通知部２５０ｄに出力する。
【００７２】
通知部２５０ｄは、再接続要求部２５０ｃが、再接続に失敗した場合に、再接続に失敗した旨の情報をアプリケーション６０に通知する処理部である。再接続に失敗した場合には、例えば、アプリケーション６０から、要求部２５０ｂに対して、マスタに対するファイル処理要求が制限される。
【００７３】
次に、本実施形態に係るサーバ１００の処理手順について説明する。図７は、本実施形態に係るサーバの処理手順を示すフローチャートである。図７に示すように、サーバ１００は、Paxosによるマスタの選定を行い（ステップＳ１０１）、自サーバ１００がマスタとして選出されたか否かを判定する（ステップＳ１０２）。
【００７４】
サーバ１００は、自サーバ１００がマスタとして選出されなかった場合には（ステップＳ１０２，Ｎｏ）、マスタリースタイマをセットする（ステップＳ１０３）。サーバ１００は、マスタからのレプリケーション要求の受付を開始する（ステップＳ１０４）。
【００７５】
サーバ１００は、マスタリースタイマがタイムアウトしたか否かを判定する（ステップＳ１０５）。サーバ１００は、マスタリースタイマがタイムアウトしていない場合には（ステップＳ１０５，Ｎｏ）、再度ステップＳ１０５に移行する。
【００７６】
一方、サーバ１００は、マスタリースタイマがタイムアウトした場合には（ステップＳ１０５，Ｙｅｓ）、マスタからのレプリケーション要求受付を閉塞し（ステップＳ１０６）、ステップＳ１０１に移行する。
【００７７】
ところで、サーバ１００は、自サーバがマスタとして選出された場合には（ステップＳ１０２，Ｙｅｓ）、マスタリースタイマをセットする（ステップＳ１０７）。サーバ１００は、次回マスタ選出タイマをセットする（ステップＳ１０８）。
【００７８】
サーバ１００は、自サーバが以前のマスタであり、かつ、以前のマスタリースタイマがタイムアウトしていない場合には（ステップＳ１０９，Ｙｅｓ）、ステップＳ１１１に移行する。一方、サーバ１００は、自サーバが以前のマスタでない場合、または、以前のマスタリースタイマがタイムアウトしている場合には（ステップＳ１０９，Ｎｏ）、ステップＳ１１０に移行する。
【００７９】
サーバ１００は、クライアント２００とのセッションを復元し（ステップＳ１１０）、ステップＳ１１１に移行する。
【００８０】
サーバ１００は、クライアント２００からの要求受け付けを開始し（ステップＳ１１１）、次回マスタ選出タイマがタイムアウトしたか否かを判定する（ステップＳ１１２）。サーバ１００は、次回マスタ算出タイマがタイムアウトしていない場合には（ステップＳ１１２，Ｎｏ）、再度ステップＳ１１２に移行する。
【００８１】
サーバ１００は、次回マスタ選出タイマがタイムアウトした場合には（ステップＳ１１２，Ｙｅｓ）、ステップＳ１０１に移行して処理を継続する。また、その一方で、サーバ１００は、マスタリースがタイムアウトしたか否かを判定する（ステップＳ１１３）。サーバ１００は、マスタリースタイマがタイムアウトしていない場合には（ステップＳ１１３）、再度ステップＳ１１３に移行する。一方、サーバ１００は、マスタリースタイマがタイムアウトした場合には（ステップＳ１１３，Ｙｅｓ）、クライアントからの要求受付を閉塞する（ステップＳ１１４）。
【００８２】
次に、図７のステップＳ１１０に示したクライアントとのセッションを復元する処理について説明する。図８は、セッションを復元する処理の処理手順を示すフローチャートである。図８に示すように、サーバ１００は、セッションテーブル１４０ａのマスタ交代前のセッション情報を読み込み、全情報を削除待ちセッションテーブル１４０ｂに書き込む（ステップＳ１２１）。サーバ１００は、セッションテーブル１４０ａの全情報を削除する（ステップＳ１２２）。
【００８３】
サーバ１００は、セッション削除タイマをセットし（ステップＳ１２３）、セッション削除タイマがタイムアウトしたか否かを判定する（ステップＳ１２４）。サーバ１００は、セッション削除タイマがタイムアウトしていない場合には（ステップＳ１２４，Ｎｏ）、再度ステップＳ１２４に移行する。
【００８４】
サーバ１００は、セッション削除タイマがタイムアウトした場合には（ステップＳ１２４，Ｙｅｓ）、削除待ちセッションテーブル１４０ｂが空か否かを判定する（ステップＳ１２５）。サーバ１００は、削除待ちセッションテーブル１４０ｂが空の場合には（ステップＳ１２５，Ｙｅｓ）、セッションを復元する処理を終了する。
【００８５】
一方、サーバ１００は、削除待ちセッションテーブル１４０ｂが空ではない場合には（ステップＳ１２５，Ｎｏ）、削除待ちセッションテーブル１４０ｂの任意の１セッションを選択する（ステップＳ１２６）。サーバ１００は、セッション削除処理を実行し（ステップＳ１２７）、ステップＳ１２５に移行する。
【００８６】
次に、図８のステップＳ１２７に示したセッション削除処理について説明する。図９は、セッション削除処理の処理手順を示すフローチャートである。図９に示すように、サーバ１００は、セッションテーブル１４０ａからセッションＩＤに関連するロックファイルのエントリを全て取得する（ステップＳ１３１）。
【００８７】
サーバ１００は、ロックファイルのエントリを基にして、自動アンロック操作を実施する（ステップＳ１３２）。ステップＳ１３２において、サーバ１００は、アンロック対象となるファイルが共有ロックされている場合には、共有ロック解放要求処理に対する処理と同様の処理を行う。これに対して、アンロック対象となるファイルが排他ロックされている場合には、排他ロック解放要求に対する処理と同様の処理を行う。
【００８８】
次に、図７のステップＳ１１１に示したクライアントからの要求を開始してから、ステップＳ１１４のクライアントからの要求受け付けを閉塞するまでの要求受け付け処理の処理手順について説明する。図１０は、要求受け付け処理の処理手順を示すフローチャートである。
【００８９】
図１０に示すように、サーバ１００は、クライアント２００から要求があったか否かを判定する（ステップＳ１４１）。サーバ１００は、クライアント２００から要求が無い場合には（ステップＳ１４１，Ｎｏ）、再度ステップＳ１４１に移行する。
【００９０】
サーバ１００は、クライアントから要求があった場合には（ステップＳ１４１，Ｙｅｓ）、クライアント２００から接続要求を受け付けたか否かを判定する（ステップＳ１４２）。サーバ１００は、接続要求を受け付けた場合には（ステップＳ１４２，Ｙｅｓ）、セッションＩＤを発行し、セッションテーブル１４０ａに登録する（ステップＳ１４３）。
【００９１】
サーバ１００は、セッションＩＤをクライアント２００に通知し（ステップＳ１４４）、クライアント監視プロセスを起動し（ステップＳ１４５）、ステップＳ１４１に移行する。
【００９２】
ステップＳ１４２において、サーバ１００は、クライアント２００から接続要求を受けていない場合には（ステップＳ１４２，Ｎｏ）、再接続要求か否かを判定する（ステップＳ１４６）。サーバ１００は、再接続要求を受け付けた場合には（ステップＳ１４６，Ｙｅｓ）、削除待ちセッションテーブル１４０ｂから、該当するセッションＩＤを削除する（ステップＳ１４７）。サーバ１００は、セッションＩＤをセッションテーブル１４０ａに追加し（ステップＳ１４８）、ステップＳ１４４に移行する。
【００９３】
ステップＳ１４６において、サーバ１００は、クライアント２００から再接続要求を受け付けていない場合には（ステップＳ１４６，Ｎｏ）、処理内容に応じてファイルに対する処理を実行する（ステップＳ１４９）。サーバ１００は、処理結果をレプリカに送信する（ステップＳ１５０）。
【００９４】
サーバ１００は、レプリカから返信が得られたか否かを判定する（ステップＳ１５１）。サーバ１００は、レプリカから返信が得られた場合には（ステップＳ１５１，Ｙｅｓ）、ステップＳ１４１に移行する。一方、レプリカから返信が得られない場合には（ステップＳ１５１，Ｎｏ）、クライアント２００からの要求受け付けを閉塞する（ステップＳ１５２）。
【００９５】
次に、図１０のステップＳ１４５に示したクライアント監視プロセスを起動した場合のクライアント監視処理について説明する。図１１は、クライアント監視処理の処理手順を示すフローチャートである。
【００９６】
図１１に示すように、サーバ１００は、一定時間待機後クライアント２００にｐｉｎｇを送信する（ステップＳ１７１）。サーバ１００は、タイマをセットし（ステップＳ１７２）、タイムアウト前にクライアントから返信があったか否かを判定する（ステップＳ１７３）。
【００９７】
サーバ１００は、タイムアウト前にクライアントから返信があった場合には（ステップＳ１７３，Ｙｅｓ）、ステップＳ１７１に移行する。一方、サーバ１００は、タイムアウト前にクライアントから返信が無い場合には（ステップＳ１７３，Ｎｏ）、セッション削除処理を実行する（ステップＳ１７４）。
【００９８】
次に、図１０のステップＳ１５２に示したクライアントからの要求受け付けを閉塞する閉塞処理について説明する。図１２は、閉塞処理の処理手順を示すフローチャートである。図１２に示すように、サーバ１００は、クライアント２００からの要求受付プロセスを停止する（ステップＳ１８１）。
【００９９】
サーバ１００は、全てのクライアント監視プロセスを停止し（ステップＳ１８２）、全てのセッション情報を削除する（ステップＳ１８３）。
【０１００】
次に、サーバ１００が、クライアント２００から排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求を受け付けた場合の処理についてそれぞれ説明する。
【０１０１】
図１３は、排他ロック取得要求を受け付けた場合の処理手順を示すフローチャートである。図１３に示すように、サーバ１００は、ロック対象のファイルＩＤを取得し（ステップＳ２０１）、ファイルＩＤに対応するロック中セッションの値が空か否かを判定する（ステップＳ２０２）。
【０１０２】
サーバ１００は、ファイルＩＤに対応するロック中セッションの値が空の場合には（ステップＳ２０２，Ｙｅｓ）、ロック中セッションに値を追加する（ステップＳ２０３）。
【０１０３】
一方、サーバ１００は、ファイルＩＤに対応するロック中セッションの値が空ではない場合には（ステップＳ２０２，Ｎｏ）、ロック待ちセッションに値を追加する（ステップＳ２０４）。
【０１０４】
図１４は、排他ロック解放要求を受け付けた場合の処理手順を示すフローチャートである。図１４に示すように、サーバ１００は、ファイル管理テーブル１４０ｃからロック対象のファイルＩＤを取得する（ステップＳ２１１）。サーバ１００は、ロック中セッションからファイルＩＤに対応する値を削除する（ステップＳ２１２）。
【０１０５】
サーバ１００は、ファイルＩＤに対応する、ロック待ちセッションの値は全て空であるか否かを判定する（ステップＳ２１３）。サーバ１００は、ファイルＩＤに対応する、ロック待ちセッションの値が全て空の場合には（ステップＳ２１３，Ｙｅｓ）、処理を終了する。
【０１０６】
一方、サーバ１００は、ファイルＩＤに対応する、ロック待ちセッションの値が全て空ではない場合には（ステップＳ２１３，Ｎｏ）、ファイルＩＤのロック待ちセッションの先頭のエントリを取り出し、ロック中セッションの値に追加する（ステップＳ２１４）。
【０１０７】
サーバ１００は、ロック中セッションに追加した値が排他ロックか否かを判定する（ステップＳ２１５）。サーバ１００は、ロック中セッションに追加した値が排他ロックの場合には（ステップＳ２１５，Ｙｅｓ）、処理を終了する。
【０１０８】
一方、サーバ１００は、ロック中セッションに追加した値が排他ロックでは無い場合には（ステップＳ２１５，Ｎｏ）、ロック待ちセッションが空ではないか否かを判定する（ステップＳ２１６）。サーバ１００は、ロック待ちセッションが空の場合には（ステップＳ２１６，Ｎｏ）、処理を終了する。
【０１０９】
一方、サーバ１００は、ロック待ちセッションが空ではない場合には（ステップＳ２１６，Ｙｅｓ）、ロック待ちセッションの先頭が共有ロックか否かを判定する（ステップＳ２１７）。サーバ１００は、ロック待ちセッションの先頭が共有ロックではない場合には（ステップＳ２１７，Ｎｏ）、処理を終了する。
【０１１０】
一方、サーバ１００は、ロック待ちセッションの先頭が共有ロックの場合には（ステップＳ２１７，Ｙｅｓ）、ロック中セッションが上限数に達しているか否かを判定する（ステップＳ２１８）。サーバ１００は、ロック中のセッションが上限数に達している場合には（ステップＳ２１８，Ｙｅｓ）、処理を終了する。
【０１１１】
一方、サーバ１００は、ロック中のセッションが上限数に達していない場合には（ステップＳ２１８，Ｎｏ）、ロック待ちセッションの先頭のエントリを取り出し、ロック中セッションに追加し（ステップＳ２１９）、ステップＳ２１６に移行する。
【０１１２】
図１５は、共有ロック取得要求を受け付けた場合の処理手順を示すフローチャートである。図１５に示すように、サーバ１００は、ロック対象のファイルＩＤを取得し（ステップＳ２２１）、ファイルＩＤに対するロック中セッションの値は空か否かを判定する（ステップＳ２２２）。
【０１１３】
サーバ１００は、ファイルＩＤに対するロック中セッションの値が空の場合には（ステップＳ２２２，Ｙｅｓ）、ロック中セッションに値を追加し（ステップＳ２２３）、処理を終了する。
【０１１４】
一方、サーバ１００は、ファイルＩＤに対するロック中セッションの値が空ではない場合には（ステップＳ２２２，Ｎｏ）、ロック中セッションの値が共有ロックであるか否かを判定する（ステップＳ２２４）。
【０１１５】
サーバ１００は、ロック中セッションの値が共有ロックではない場合には（ステップＳ２４４，Ｎｏ）、ロック待ちセッションに追加する（ステップＳ２２５）。
【０１１６】
一方、サーバ１００は、ロック中セッションの値が上限数に達しているか否かを判定する（ステップＳ２２６）。サーバ１００は、ロック中セッションが上限数に達していない場合には（ステップＳ２２６，Ｙｅｓ）、ステップＳ２２３に移行する。サーバ１００は、ロック中セッションの値が上限数に達している場合には（ステップＳ２２６，Ｎｏ）、ステップＳ２２５に移行する。一方、サーバ１００は、ロック中セッションの値が上限数に達していない場合には（ステップＳ２２６，Ｙｅｓ）、ステップＳ２２３に移行する。
【０１１７】
図１６は、共有ロック解放要求を受け付けた場合の処理手順を示すフローチャートである。図１６に示すように、サーバ１００は、ファイル管理テーブル１４０ｃから、ロック対象のファイルＩＤを取得する（ステップＳ２３１）。サーバ１００は、ファイルＩＤの、ロック中セッションからファイルＩＤに対応する値を削除する（ステップＳ２３２）。
【０１１８】
サーバ１００は、ファイルＩＤに対応する、ロック待ちセッションの値が全て空か否かを判定する（ステップＳ２３３）。サーバ１００は、ロック待ちセッションの値が全て空の場合には（ステップＳ２３３，Ｙｅｓ）、処理を終了する。
【０１１９】
一方、サーバ１００は、ロック待ちセッションの値が全て空ではない場合には（ステップＳ２３３，Ｎｏ）、ロック待ちセッションの先頭が共有ロックであるか否かを判定する（ステップＳ２３４）。サーバ１００は、ロック待ちセッションの先頭が共有ロックではない場合には（ステップＳ２３４，Ｎｏ）、処理を終了する。
【０１２０】
一方、サーバ１００は、ロック待ちセッションの先頭が共有ロックの場合には（ステップＳ２３４，Ｙｅｓ）、ロック中セッションが上限数に達しているか否かを判定する（ステップＳ２３５）。サーバ１００は、ロック中セッションが上限数に達している場合には（ステップＳ２３５，Ｙｅｓ）、処理を終了する。
【０１２１】
一方、サーバ１００は、ロック中セッションが上限数に達していない場合には（ステップＳ２３５，Ｎｏ）、ロック待ちセッションの先頭のエントリを取り出し、ロック中セッションに追加する（ステップＳ２３６）。
【０１２２】
サーバ１００は、ロック待ちセッションが空ではないか否かを判定する（ステップＳ２３７）。サーバ１００は、ロック待ちセッションが空の場合には（ステップＳ２３７，Ｎｏ）、処理を終了する。一方、サーバ１００は、ロック待ちセッションが空ではない場合には（ステップＳ２３７，Ｙｅｓ）、ステップＳ２３４に移行する。
【０１２３】
次に、本実施形態に係るクライアント２００の処理手順について説明する。図１７は、本実施形態に係るクライアントの処理手順を示すフローチャートである。図１７に示すように、クライアント２００は、同一のネットワークに接続された全てのサーバ１００へ接続要求を送信する（ステップＳ３０１）。
【０１２４】
クライアント２００は、マスタからセッションＩＤを受信し（ステップＳ３０２）、マスタへタイマ受信確認を送信する（ステップＳ３０３）。クライアント２００は、死活監視タイマをセットする（ステップＳ３０４）。
【０１２５】
クライアント２００は、死活監視タイマがタイムアウトする前にマスタから通信を受信したか否かを判定する（ステップＳ３０５）。クライアント２００は、死活監視タイマがタイムアウトする前に、マスタから通信を受信した場合には（ステップＳ３０５，Ｙｅｓ）、ステップＳ３０３に移行する。
【０１２６】
一方、クライアント２００は、死活監視タイマがタイムアウトする前にマスタから通信を受信していない場合には（ステップＳ３０５，Ｎｏ）、再接続タイマをセットする（ステップＳ３０６）。
【０１２７】
クライアント２００は、同一のネットワークに接続された全てのサーバ１００へ再接続要求を行う（ステップＳ３０７）。この再接続要求には、セッションＩＤが含まれる。クライアント２００は、再接続タイマがタイムアウトする前にマスタから返信が得られたか否かを判定する（ステップＳ３０８）。クライアント２００は、再接続タイマがタイムアウトする前にマスタから返信が得られた場合には（ステップＳ３０８，Ｙｅｓ）、ステップＳ３０３に移行する。
【０１２８】
クライアント２００は、再接続タイマがタイムアウトする前にマスタから返信が得られなかった場合には（ステップＳ３０８，Ｎｏ）、アプリケーション６０に再接続出来なかった旨の情報を送信する（ステップＳ３０９）。
【０１２９】
クライアント２００は、アプリケーション６０からの応答を受信し（ステップＳ３１０）、共有ロックおよび排他ロックを用いるファイル処理を中止する（ステップＳ３１１）。
【０１３０】
なお、クライアント２００は、図１７のステップＳ３０３〜Ｓ３０５の区間において、必要に応じて、ファイル操作を実行可能である。ここで、ファイル操作は、排他ロック取得要求、排他ロック解放要求、共有ロック取得要求、共有ロック解放要求に対応する。係るファイル操作を受け付けたマスタの役割を有するサーバ１００は、上述した図１３〜図１６の処理を実行する。
【０１３１】
次に、本実施形態に係るシステムの効果について説明する。本実施形態に係るシステムでは、サーバ１００は、自サーバがマスタの役割を有するサーバである場合に、クライアント２００からの接続要求に応答して、クライアント２００にセッションＩＤを発行し、該セッションＩＤをセッションテーブル１４０ａに登録すると共に、クライアント２００からのファイル処理要求に応じて、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブル１４０ｃに登録する。また、サーバ１００は、レプリカの役割を有するサーバである場合に、マスタの役割を有するサーバのセッションテーブル１４０ａとファイル管理テーブル１４０ｃとを複製する。また、サーバ１００は、自サーバがレプリカの役割を有するサーバから、マスタの役割を有するサーバに切り替わり、クライアント２００から再接続要求を受け付けた場合には、セッションテーブル１４０ａの情報を、削除待ちセッションテーブル１４０ｂに登録し、再接続要求に含まれるセッションＩＤと同一のセッションＩＤを削除待ちセッションテーブル１４０ｂから削除し、該削除待ちセッションテーブル１４０ｂに残されたセッションＩＤに対応するロック情報を、ファイル管理テーブル１４０ｃから削除する。
【０１３２】
このような処理を実行することで、同期する複数のサーバ間でネットワークが分散した場合に、同一のネットワーク内に含まれる複数のサーバから単一のマスタを選出するようなシステムであっても、マスタの故障により資源に対するクライアントのロック情報を他のサーバが引き継ぐ際に、係るロック情報に矛盾発生することを防止することができる。
【０１３３】
また、サーバ１００は、ファイルに対するロックの数が上限数未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブルに登録する。このような処理を実行することで、資源の利用数を制限することができる。
【０１３４】
また、サーバ１００は、クライアント２００からのファイル処理要求が、ファイルに対する共有ロックを要求している場合には、ファイルに対するロックの数が上限数未満の場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブル１４０ｃに登録し、クライアント２００からのファイル処理要求が、ファイルに対する排他ロックを要求している場合には、ファイルに対するロックがかかっていない場合に、ファイルに対するロック情報とセッションＩＤとを対応付けてファイル管理テーブル１４０ｃに登録する。このような処理を実行することで、資源の利用数を制限しつつ、排他ロックおよび共有ロックを適切にファイルにかけることができる。
【０１３５】
また、クライアント２００は、マスタの役割を有するサーバ１００が切り替わった場合に、マスタの役割を有するサーバ１００に再接続要求を行い、該再接続要求の応答をマスタの役割を有するサーバ１００から受信しない場合には、再接続に失敗した情報をアプリケーション６０に通知する。このような処理を行うことによって、クライアント２００が、サーバ１００との接続が出来ていない状況で、サーバ１００に対して共有ロックや排他ロックを用いたファイル処理を行うことを防止することができる。
【０１３６】
次に、実施形態に示したサーバ１００と同様の機能を実現する制御プログラムを実行するコンピュータの一例を説明する。図１８は、サーバと同様の機能を実現する制御プログラムを実行するコンピュータの一例を示す図である。図１８に例示するように、コンピュータ３００は、例えば、メモリ３０１と、ＣＰＵ（Central  Processing  Unit）３０２と、ハードディスクドライブインタフェース３０３と、ディスクドライブインタフェース３０４と、シリアルポートインタフェース３０５と、ビデオアダプタ３０６と、ネットワークインタフェース３０７とを有し、これらの各部はバス３０８によって接続される。
【０１３７】
メモリ３０１は、図１８に例示するように、ＲＯＭ（Read  Only  Memory）３０１ａ及びＲＡＭ（Random  Access  Memory）３０１ｂを含む。ＲＯＭ３０１ａは、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース３０３は、図１８に例示するように、ハードディスクドライブ３０３ａに接続される。ディスクドライブインタフェース３０４は、図１８に例示するように、ディスクドライブ３０４ａに接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ３０４ａに挿入される。シリアルポートインタフェース３０５は、図１８に例示するように、例えばマウス３０５ａ、キーボード３０５ｂに接続される。ビデオアダプタ３０６は、図１８に例示するように、例えばディスプレイ３０６ａに接続される。
【０１３８】
ここで、図１８に例示するように、ハードディスクドライブ３０３ａは、例えば、ＯＳ（Operating  System）１、アプリケーションプログラム２、プログラムモジュール３、プログラムデータ４を記憶する。すなわち、サーバ１００の処理を実行する制御プログラムは、コンピュータ３００によって実行される指令が記述されたプログラムモジュール３として、例えばハードディスクドライブ３０３ａに記憶される。具体的には、上記実施形態で説明したマスタ調整部１５０ａ、レプリケーション部１５０ｂ、要求処理部１５０ｃ、復元処理部１５０ｄに対応する各手順が記述されたプログラムモジュール３が、ハードディスクドライブ３０３ａに記憶される。また、上記実施形態で説明した記憶部１４０に記憶されるデータのように、制御プログラムによる情報処理に用いられるデータは、プログラムデータ４として、例えばハードディスクドライブ３０３ａあるいはメモリ３０１に記憶される。そして、ＣＰＵ３０２が、ハードディスクドライブ３０３ａに記憶されたプログラムモジュール３やプログラムデータ４を必要に応じてＲＡＭ３０１ｂに読み出し、各手順を実行する。
【０１３９】
なお、制御プログラムに係るプログラムモジュール３やプログラムデータ４は、ハードディスクドライブ３０３ａに記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ３０２によって読み出されてもよい。あるいは、制御プログラムに係るプログラムモジュール３やプログラムデータ４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェースを介してＣＰＵ３０２によって読み出されてもよい。
【０１４０】
次に、図１８を利用して、クライアント２００と同様の機能を実現する制御プログラムを実行するコンピュータの一例を説明する。クライアント２００の処理を実行する制御プログラムは、コンピュータ３００によって実行される指令が記述されたプログラムモジュール３として、例えばハードディスクドライブ３０３ａに記憶される。具体的には、上記実施形態で説明した接続要求部２５０ａ、要求部２５０ｂ、再接続要求部２５０ｃ、通知部２５０ｄに対応する各手順が記述されたプログラムモジュール３が、ハードディスクドライブ３０３ａに記憶される。また、上記実施形態で説明した記憶部２４０に記憶されるデータのように、制御プログラムによる情報処理に用いられるデータは、プログラムデータ４として、例えばハードディスクドライブ３０３ａに記憶される。そして、ＣＰＵ３０２が、ハードディスクドライブ３０３ａに記憶されたプログラムモジュール３やプログラムデータ４を必要に応じてＲＡＭ３０１ｂに読み出し、各手順を実行する。その他の説明は、上述したサーバ１００と同様の機能を実現する制御プログラムを実行するコンピュータの説明と同様である。
【符号の説明】
【０１４１】
１      ＯＳ
２      アプリケーションプログラム
３      プログラムモジュール
４      プログラムデータ
５０    ネットワーク
６０    アプリケーション
１００ａ，１００ｂ，１００ｃ，１００ｄ，１００ｅ  サーバ
１１０，２１０    通信部
１４０，２４０    記憶部
１４０ａ  セッションテーブル
１４０ｂ  削除待ちセッションテーブル
１４０ｃ  ファイル管理テーブル
１５０，２５０    制御部
１５０ａ  マスタ調整部
１５０ｂ  レプリケーション部
１５０ｃ  要求処理部
１５０ｄ  復元処理部
２００ａ，２００ｂ    クライアント
２２０    入力部
２３０    表示部
２４０ａ  セッション情報
２５０ａ  接続要求部
２５０ｂ  要求部
２５０ｃ  再接続要求部
２５０ｄ  通知部
３００    コンピュータ
３０１    メモリ
３０１ａ  ＲＯＭ
３０１ｂ  ＲＡＭ
３０２    ＣＰＵ
３０３    ハードディスクドライブインタフェース
３０３ａ  ハードディスクドライブ
３０４    ディスクドライブインタフェース
３０４ａ  ディスクドライブ
３０５    シリアルポートインタフェース
３０７    ネットワークインタフェース
３０８    バス
【図１】
0005497861.tif 000002
【図２】
0005497861.tif 000003
【図３】
0005497861.tif 000004
【図４】
0005497861.tif 000005
【図５】
0005497861.tif 000006
【図６】
0005497861.tif 000007
【図７】
0005497861.tif 000008
【図８】
0005497861.tif 000009
【図９】
0005497861.tif 000010
【図１０】
0005497861.tif 000011
【図１１】
0005497861.tif 000012
【図１２】
0005497861.tif 000013
【図１３】
0005497861.tif 000014
【図１４】
0005497861.tif 000015
【図１５】
0005497861.tif 000016
【図１６】
0005497861.tif 000017
【図１７】
0005497861.tif 000018
【図１８】
0005497861.tif 000019