(57)【特許請求の範囲】
【請求項１】
オブジェクトであるディレクトリ及びファイル、を含む１以上のマスタファイルシステム、を提供するマスタサーバと、
それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、１以上のスレーブサーバと、を含み、
前記１以上のスレーブサーバのうちの第１スレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備え、
前記第１スレーブサーバは、スタブ状態のオブジェクトを含む、前記１以上のマスタファイルシステムにおける第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバは、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において、前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記検索の結果が、前記１以上のスレーブサーバにおける問い合わせ先のスレーブサーバを示す場合、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行い、
前記問い合わせ先のスレーブサーバが前記実体化のための情報を有している場合に、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記コピー管理情報に登録されているいずれのスレーブサーバからも前記実体化のための情報を取得することができない場合、前記第１スレーブサーバは、前記第１マスタファイルシステムのマスタサーバから前記実体化のための情報を取得する、ファイル共有システム。
【請求項２】
前記コピー管理情報のエントリは、前記マスタファイルシステム識別子と、前記スレーブサーバの識別子と、コピーファイルシステムを識別するコピーファイルシステム識別子とを有し、
前記コピー管理情報において、１つのコピーファイルシステムに対して単一エントリが割り当てられている、請求項１に記載のファイル共有システム。
【請求項３】
前記第１スレーブサーバにおける前記第１コピーファイルシステムは、前記第１マスタファイルシステムの作業コピーであり、
前記第１スレーブサーバは、前記作業コピーにおいて更新されたオブジェクトを前記マスタサーバにコピーする、請求項２に記載のファイル共有システム。
【請求項４】
前記コピー管理情報は、登録されているマスタファイルシステムのバージョンを特定する識別子をさらに有し、
前記問い合わせ先スレーブサーバは、前記コピー管理情報において、前記第１マスタファイルシステムのバージョンと同一バーションのマスタファイルシステムに関連付けられている、請求項２に記載のファイル共有システム。
【請求項５】
前記問い合わせ先スレーブサーバは、問い合わせ対象を更新済みの場合、前記実体化のための情報を有していないことを示す応答を返し、
前記マスタサーバは、マスタコピー管理情報を備え、
前記１以上のスレーブサーバのそれぞれは、前記マスタコピー管理情報のコピーであるコピー管理情報を備え、
前記１以上のスレーブサーバのそれぞれは、マスタファイルシステムの全部又は一部のコピーファイルシステムを取得すると、前記マスタコピー管理情報にエントリを追加する、請求項４に記載のファイル共有システム。
【請求項６】
前記第１スレーブサーバは、前記検索の範囲を規定するユーザ設定可能な検索ポリシを備え、
前記第１スレーブサーバは、前記検索ポリシが示す検索範囲内で、前記コピー管理情報における前記問い合わせ先スレーブサーバの検索を行い、
前記コピー管理情報は、登録されているスレーブサーバのロケーションを示す情報をさらに有し、
前記第１スレーブサーバは、前記ロケーションの情報を参照して、前記問い合わせを行うスレーブサーバを決定し、
前記コピー管理情報は、前記コピーファイルシステム識別子と関連づけられ、当該コピーファイルシステム識別子が示すコピーファイルシステムへのアクセス性能を示す性能情報をさらに有し、
前記第１スレーブサーバは、前記性能情報を参照して、前記問い合わせを行うスレーブサーバを決定する、請求項５に記載のファイル共有システム。
【請求項７】
前記検索の結果が前記問い合わせ先のスレーブサーバとして前記第１スレーブサーバを示す場合、前記第１スレーブサーバは自身に前記問い合わせを行う、請求項６に記載のファイル共有システム。
【請求項８】
オブジェクトであるディレクトリ及びファイル、を含む１以上のマスタファイルシステム、を提供するマスタサーバと、
それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、１以上のスレーブサーバと、を含み、
前記１以上のスレーブサーバのうちの第１スレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備え、
前記第１スレーブサーバは、スタブ状態のオブジェクトを含む、前記１以上のマスタファイルシステムにおける第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバは、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において、前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記検索の結果が、前記１以上のスレーブサーバにおける問い合わせ先のスレーブサーバを示す場合、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行い、
前記問い合わせ先のスレーブサーバが前記実体化のための情報を有している場合に、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記問い合わせ先のスレーブサーバは前記第１スレーブサーバであり、
前記第１スレーブサーバは、問い合わせ対象を更新済みの場合、前記実体化のための情報を有していないことを示す応答を返す、ファイル共有システム。
【請求項９】
オブジェクトであるディレクトリ及びファイル、を含む１以上のマスタファイルシステム、を提供するマスタサーバと、
それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、１以上のスレーブサーバと、を含み、
前記１以上のスレーブサーバのうちの第１スレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備え、
前記第１スレーブサーバは、スタブ状態のオブジェクトを含む、前記１以上のマスタファイルシステムにおける第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバは、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において、前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記検索の結果が、前記１以上のスレーブサーバにおける問い合わせ先のスレーブサーバを示す場合、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行い、
前記問い合わせ先のスレーブサーバが前記実体化のための情報を有している場合に、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記第１スレーブサーバは、前記検索の範囲を規定するユーザ設定可能な検索ポリシを備え、
前記第１スレーブサーバは、前記検索ポリシが示す検索範囲内で、前記コピー管理情報における前記問い合わせ先スレーブサーバの検索を行う、ファイル共有システム。
【請求項１０】
オブジェクトであるディレクトリ及びファイル、を含む１以上のマスタファイルシステム、を提供するマスタサーバと、
それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、１以上のスレーブサーバと、を含み、
前記１以上のスレーブサーバのうちの第１スレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備え、
前記第１スレーブサーバは、スタブ状態のオブジェクトを含む、前記１以上のマスタファイルシステムにおける第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバは、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において、前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記検索の結果が、前記１以上のスレーブサーバにおける問い合わせ先のスレーブサーバを示す場合、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行い、
前記問い合わせ先のスレーブサーバが前記実体化のための情報を有している場合に、前記第１スレーブサーバは、前記問い合わせ先のスレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記コピー管理情報は、登録されているスレーブサーバのロケーションを示す情報をさらに有し、
前記第１スレーブサーバは、前記ロケーションの情報を参照して、前記問い合わせを行うスレーブサーバを決定する、ファイル共有システム。
【請求項１１】
オブジェクトであるディレクトリ及びファイルを含む１以上のマスタファイルシステムを提供するマスタサーバと、それぞれが前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーを取得する１以上のスレーブサーバと、を含む計算機システムにおいて、前記１以上のスレーブサーバの第１スレーブサーバが、前記１以上のマスタファイルシステムにおけるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、ファイル共有方法であって、
前記第１スレーブサーバが、スタブ状態のオブジェクトを含む、第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバが、マスタファイルシステムの識別子と当該マスタファイルシステムの識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を参照し、
前記第１スレーブサーバが、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記第１スレーブサーバが、前記検索の結果が前記１以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記問い合わせ先スレーブサーバに対して前記実体化のための情報の問い合わせを行い、
前記第１スレーブサーバが、前記問い合わせ先スレーブサーバが前記実体化のための情報を取得した場合、当該取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記第１スレーブサーバが、前記検索の範囲を規定するユーザ設定可能な検索ポリシを参照し、
前記第１スレーブサーバが、前記検索ポリシが示す検索範囲内で、前記コピー管理情報における前記問い合わせ先スレーブサーバの検索を行う、ファイル共有方法。
【請求項１２】
オブジェクトであるディレクトリ及びファイルを含む１以上のマスタファイルシステムを提供するマスタサーバと、それぞれが前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーを取得する１以上のスレーブサーバと、を含む計算機システムにおいて、前記１以上のスレーブサーバの第１スレーブサーバが、前記１以上のマスタファイルシステムにおけるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、ファイル共有方法であって、
前記第１スレーブサーバが、スタブ状態のオブジェクトを含む、第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバが、マスタファイルシステムの識別子と当該マスタファイルシステムの識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を参照し、
前記第１スレーブサーバが、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記第１スレーブサーバが、前記検索の結果が前記１以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記問い合わせ先スレーブサーバに対して前記実体化のための情報の問い合わせを行い、
前記第１スレーブサーバが、前記問い合わせ先スレーブサーバが前記実体化のための情報を取得した場合、当該取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記コピー管理情報は、登録されているスレーブサーバのロケーションを示す情報をさらに有し、
前記第１スレーブサーバが、前記ロケーションの情報を参照して、前記問い合わせを行うスレーブサーバを決定する、ファイル共有方法。
【請求項１３】
オブジェクトであるディレクトリ及びファイルを含む１以上のマスタファイルシステムを提供するマスタサーバと、それぞれが前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーを取得する１以上のスレーブサーバと、を含む計算機システムにおいて、前記１以上のスレーブサーバの第１スレーブサーバが、前記１以上のマスタファイルシステムにおけるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、ファイル共有方法であって、
前記第１スレーブサーバが、スタブ状態のオブジェクトを含む、第１マスタファイルシステムの一部の第１コピーファイルシステム、を取得し、
前記第１スレーブサーバが、マスタファイルシステムの識別子と当該マスタファイルシステムの識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を参照し、
前記第１スレーブサーバが、前記第１マスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、
前記第１スレーブサーバが、前記検索の結果が前記１以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記問い合わせ先スレーブサーバに対して前記実体化のための情報の問い合わせを行い、
前記第１スレーブサーバが、前記問い合わせ先スレーブサーバが前記実体化のための情報を取得した場合、当該取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化し、
前記第１スレーブサーバが、スタブ状態のオブジェクトの実体化のための情報についての問い合わせ受け、
前記第１スレーブサーバが、問い合わせ対象のオブジェクトを更新済みの場合、前記実体化のための情報を有していないことを示す応答を返す、ファイル共有方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル共有システム及びファイル共有方法に関し、特に、マスタサーバのファイルを共有するために用いられるキャッシュ技術に関する。
【背景技術】
【０００２】
ソフトウェア開発において、ソースコードファイルやＣｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｄｅｓｉｇｎ（ＣＡＤ）データファイルをファイルサーバに置いて共有し、世界各地の拠点で分散開発が行われることがある。このようなファイルサーバは、バージョン管理システムを有していることが多い。
【０００３】
そのため、各拠点の開発者は、ファイルサーバ上のリポジトリの、ある一時点のスナップショット（例えば、出荷済み製品のあるバージョン）をチェックアウトし、バグ修正が必要なファイルのみを修正し、コンパイル・修正確認の後、データセンタのリポジトリに修正したファイルをチェックインし、新たなスナップショットを作成する（バージョンを上げる）、というのが一般的な開発の流れである。このような分散開発は、遠隔地にあるファイルサーバから多数のファイルをチェックアウトする必要があるため、ネットワークの遅延が問題となる。
【０００４】
こうしたネットワークでの遅延の問題を解決する技術として、オンデマンドコピー技術がある。この技術は、ファイルサーバから全てのファイルをチェックアウトするのではなく、アクセスがあったディレクトリやファイルを、まず、スタブと呼ばれる、メタデータのみを保持したディレクトリやファイルとしてチェックアウトする。
【０００５】
そして、オンデマンドコピーは、開発者が実際にそのディレクトリを開く、若しくは、そのファイルを読み出す又は書き込むと、ファイルサーバからオンデマンドに、そのディレクトリ又はファイルをコピーする（スタブの実体化）。このオンデマンドコピー技術は、開発者の端末と遠隔地のファイルサーバとの間の通信を最小限に減らすことができるため、ネットワークでの遅延の影響を少なくすることができる。
【０００６】
この他、高速アクセスを実現する技術として、内部ネットワークと外部ネットワークとをつなぐプロキシサーバが知られている。プロキシサーバは、例えば、内部ネットワークのクライアントと外部ネットワークのサーバとの間に介在し、クライアントとサーバとの通信を中継する。
【０００７】
プロキシサーバは、クライアントがサーバに対して要求したファイルをキャッシュすることで、次に別のクライアントが同じファイルを要求した場合に、キャッシュしたファイルをサーバの代理で応答する。例えば、Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）に、このプロキシサーバを配置することで、一旦ファイルがキャッシュされれば、ＬＡＮ内のクライアントは、直接、ＬＡＮ外のサーバに問合せを行うことなく、高速にファイルを取得することができる。
【０００８】
さらに、プロキシサーバのキャッシュ技術の一つとして、分散キャッシュ技術がある。分散キャッシュ技術では、プロキシサーバが複数用意され、要求を受けたプロキシサーバが、ファイルをキャッシュしていない場合に、別のプロキシサーバに対して、そのキャッシュファイルを保持していないかどうかを問い合わせる。
【０００９】
もし、あるプロキシサーバにキャッシュファイルが存在した場合には、そのプロキシサーバからそのファイルを取得することで、ネットワーク遅延の大きいオリジナルのサーバと通信する回数を削減することができる。プロキシサーバ間でキャッシュの有無を確認するプロトコルは、Ｉｎｔｅｒｎｅｔ  Ｃａｃｈｅ  Ｐｒｏｔｏｃｏｌ（ＩＣＰ）として標準化されている。
【００１０】
ＩＣＰを用いたプロキシサーバは、協調するプロキシサーバの数が増加すると、キャッシュヒット率を向上することができる一方で、各プロキシサーバが他の全てのプロキシサーバにキャッシュファイルの有無を問い合わせるため、ネットワークトラフィックが増大する。そのため、プロキシサーバ間のキャッシュファイルの問合せ回数を削減する技術が開発されている。
【００１１】
例えば、特許文献１は、決定的なアルゴリズムにより、プロキシサーバ名とファイルの格納場所を表すＵｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ（ＵＲＬ）とから、あるファイルをキャッシュするプロキシサーバを一意に導出することで、プロキシサーバ間のキャッシュファイルの問合せ回数を高々１回に抑える方法を開示している。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】米国特許第６３４１３１１号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、これまで、バージョン管理システムのようなシステムで使用されているオンデマンドコピー技術と、ネットワーク間を仲介するプロキシサーバ技術とを、同時にシステムに適用することについて、具体的な検討はなされていなかった。また、データセンタのリポジトリはディレクトリとファイルとを含むファイルシステムであり、バージョン管理システムのようなシステムにおいては、ディレクトリ及びファイルを含むデータの分散キャッシュについて具体的な検討を行うことが必要となる。
【００１４】
この他、特許文献１で開示されている分散キャッシュ技術には課題がある。特許文献１の分散キャッシュ技術は、プロキシサーバ名とＵＲＬとから一意にキャッシュファイルを格納するサーバを決定するため、キャッシュファイルの格納先は必然的に１つのプロキシサーバとなる。したがって、クライアントから問合せを受けたプロキシサーバがそのキャッシュファイルを保持していない確率が高く、多くの場合、他のプロキシサーバにキャッシュファイルの有無を問い合わせる必要がある。そのため、クライアントへの応答が遅延する。
【００１５】
本発明はこのような状況を鑑みてなされたものであり、その１つの目的は、マスタデータであるファイルシステムのファイルを共有するための処理において、ネットワーク遅延を低減することである。
【課題を解決するための手段】
【００１６】
本発明の一態様のファイル共有システムは、オブジェクトであるディレクトリ及びファイル、を含む１以上のマスタファイルシステム、を提供するマスタサーバと、それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、１以上のスレーブサーバとを含む。前記１以上のスレーブサーバのうちの１つのスレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備える。前記１つのスレーブサーバは、スタブ状態のオブジェクトを含む、前記１以上のマスタファイルシステムの１つのマスタファイルシステムの一部のコピーファイルシステムを取得する。前記１つのスレーブサーバは、前記１つのマスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報の問い合わせを行うスレーブサーバを検索する。前記検索結果が前記１以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記１つのスレーブサーバは、前記問い合わせ先スレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行う。前記問い合わせ先スレーブサーバが前記実体化のための情報を有している場合に、前記１つのスレーブサーバは、前記問い合わせ先スレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化する。
【発明の効果】
【００１７】
本発明の一態様によれば、マスタデータであるファイルシステムのファイルを共有するための処理において、ネットワーク遅延を低減することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施形態におけるファイル共有システムの構成例を示す図である。
【図２】本発明の実施形態におけるサーバの内部構成を示す図である。
【図３】本発明の実施形態におけるマスタサーバの内部構成を示す図である。
【図４】本発明の実施形態におけるスタブファイルの実体化を模式的に示す図である。
【図５】本発明の実施形態におけるファイルシステムプログラムの内部構成を示す図である。
【図６】本発明の実施形態におけるバージョン管理クライアントプログラムの内部構成を示す図である。
【図７】本発明の実施形態におけるバージョン管理サーバプログラムの内部構成を示す図である。
【図８】本発明の実施形態におけるバージョン管理テーブルの内部構成を示す図である。
【図９】本発明の実施形態における作業コピー管理テーブルの内部構成を示す図である。
【図１０】本発明の実施形態におけるディレクトリ構成情報の内部構成を示す図である。
【図１１】本発明の実施形態におけるファイルの内部構成を示す図である。
【図１２】本発明の実施形態における作業コピー一覧画面の一例を示す図である。
【図１３】本発明の実施形態における作業コピー検索ポリシ設定画面の一例を示す図である。
【図１４】本発明の実施形態におけるＯＰＥＮ処理モジュールの処理の一例を示すフローチャートである。
【図１５】本発明の実施形態におけるＲＥＡＤ処理モジュールの処理の一例を示すフローチャートである。
【図１６】本発明の実施形態におけるＷＲＩＴＥ処理モジュールの処理の一例を示すフローチャートである。
【図１７】本発明の実施形態におけるスタブ実体化処理モジュールの処理の一例を示すフローチャートである。
【図１８】本発明の実施形態におけるチェックアウト処理モジュールの処理の一例を示すフローチャートである。
【図１９】本発明の実施形態におけるチェックイン処理モジュールの処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下において、本発明を実施するための形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。又、各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略されている。
【００２０】
本実施形態で説明する構成例は、バージョン管理機能を備えるファイル共有システムである。このシステムは、主にソフトウェア開発において使用される。サーバ（スレーブサーバ）は、クライアントからの要求に応答して、マスタサーバに格納されているリポジトリ（ファイルシステム）の一部のコピー（作業コピー）を取得する。
【００２１】
このコピーファイルシステム（作業コピー）は、スタブ状態のファイル又はディレクトリを含む。スタブ状態のファイル又はディレクトリは、メタ情報を有するが、その実体情報を有していない。サーバは、スタブ状態のファイル又はディレクトリを実体化するため、必要な情報のキャッシュの有無を、自身又は他のサーバに問い合わせする。
【００２２】
サーバは、実体化のための問い合わせにおいて、作業コピー管理テーブルを参照する。作業コピー管理テーブルは、マスタサーバのリポジトリからチェックアウトしたコピーファイルシステムである作業コピー、を管理する。作業コピー管理テーブルは、サーバ間で共有される。サーバは、作業コピー管理テーブルにおいて、スタブ状態のファイル又はディレクトリの実体化のため、キャッシュされたファイル又はディレクトリの有無の問合せを行うサーバを検索する。
【００２３】
この構成により、リポジトリのファイル及びディレクトリのキャッシュデータを複数のサーバが保持し、サーバ間でそのキャッシュデータを共有することができると共に、キャッシュデータのためのサーバ間の問合せ回数を削減することができる。
【００２４】
作業コピー管理テーブルにおいて、１つの作業コピーに１つエントリのみが割り当てられている。このように、作業コピー単位でキャッシュデータを管理することで、作業管理テーブルのサイズを小さくすると共に、作業管理テーブルを管理、共有（同期）するための処理及びデータ転送量を低減する。
【００２５】
以下においては、バージョン管理機能によりファイルサービスを提供するマスタサーバから、作業コピーをチェックアウトして、作業コピーにおけるファイルを読み書きする例を中心に、本実施形態を説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【００２６】
図１は、本実施形態のファイル共有システムの概略構成を示すブロック図である。ファイル共有システムは、端末１００Ａ、１００Ｂと、ネットワーク１１０を介して端末１００Ａ、１００Ｂと接続されたサーバ２００Ａ、２００Ｂと、ネットワーク１２０を介してサーバ２００Ａ、２００Ｂと接続されたマスタサーバ３００と、を備えている。
【００２７】
図１が示す端末の数、サーバの数及びマスタサーバの数は一例であって、それぞれの数はシステムに設計により適切な値に設定される。例えば、システムは複数のマスタサーバを含むことができる。端末１００Ａ、１００Ｂは同様の構成を備え、以下において、端末１００は端末１００Ａ、１００Ｂの任意の一つを意味する。サーバ２００Ａ、２００Ｂは同様の構成を備え、以下において、サーバ２００はサーバ２００Ａ、２００Ｂの任意の一つを意味する。
【００２８】
端末１００は、サーバ２００にログインして、マスタサーバ３００とサーバ２００によって提供されるバージョン管理サービスを利用するユーザ（開発者）が使用する計算機である。サーバ２００は、マスタサーバ３００と連携し、ユーザに対してバージョン管理サービスを提供する計算機である。
【００２９】
マスタサーバ３００は、サーバ２００がユーザに対してバージョン管理サービスを提供する上で必要な、ファイル共有サービスとチェックインサービスとチェックアウトサービスとを提供する計算機である。
【００３０】
ネットワーク１１０は、端末１００とサーバ２００とを、相互に接続するネットワークである。ネットワーク１１０は、例えばＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）である。ネットワーク１２０は、サーバ２００とマスタサーバ３００とを相互に接続するネットワークである。ネットワーク１２０は、例えば、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）やインターネットである。
【００３１】
図２は、サーバ２００の概略構成を示すブロック図である。図２に示されるように、サーバ２００は、プログラムやデータを格納する一次記憶装置であるメモリ２２０と、メモリ２２０に格納されたプログラムを実行するプロセッサであるＣＰＵ２１０とを備える。プロセッサは、１又は複数のコアを備え、複数のパッケージで構成されていてもよい。この点は、他の計算機において同様である。
【００３２】
サーバ２００は、さらに、端末１００及び他のサーバ２００との通信に使用されるネットワークインタフェース２３０と、マスタサーバ３００との通信に使用されるネットワークインタフェース２４０と、不揮発性記憶媒体を備える二次記憶装置であるディスクドライブ２６０と、ディスクドライブ２６０への入出力を制御するディスクコントローラ２５０と、を備え、それらを内部通信路（例えば、バス）によって接続している計算機である。
【００３３】
サーバ２００が使用するディスクドライブは、ディスクドライブ２６０のようにサーバ２００直接接続してもよいし、サーバ２００は、Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＳＡＮ）に接続されたディスクアレイ装置上のディスクドライブに、ディスクインタフェースを介して接続してもよい。
【００３４】
サーバ２００のメモリ２２０には、プログラム及びデータが格納される。それらは、例えば、アプリケーションプログラム２８５、バージョン管理クライアントプログラム６００、バージョン管理インタフェースプログラム２９０、ファイルシステムプログラム５００などである。典型的には、プログラムはディスクドライブ２６０からメモリ２２０にロードされ、ディスクドライブ２６０とメモリ２２０のセットも一つの記憶装置を構成する。これらの点は、他の計算機において同様である。
【００３５】
アプリケーションプログラム２８５は、例えば、サーバ２００にログインしているユーザがファイルを読み書きするために使用するエディタである。バージョン管理クライアントプログラム６００は、サーバ２００にログインしているユーザがマスタサーバ３００から作業コピーをチェックアウトしチェックインするためのプログラムである。
【００３６】
バージョン管理インタフェースプログラム２９０は、ユーザが作業コピーをチェックアウトしチェックインするインタフェース、を提供するためのプログラムである。バージョン管理インタフェースプログラム２９０は、マスタサーバ３００のリポジトリ３８０の管理権限を有するユーザが、現在チェックアウトされている作業コピーの一覧を参照し、あるファイルのキャッシュデータを検索する際に、作業コピーを検索するポリシを設定するためのインタフェースも提供する。
【００３７】
ファイルシステムプログラム５００は、ディスクドライブ２６０に格納されているファイルシステム２７０を管理するためのプログラムである。ディスクコントローラ２５０は、メモリ２２０に格納された各種プログラムの入出力要求に基づいて、ディスクドライブ２６０のデータを例えばブロック単位で入出力する。
【００３８】
ディスクドライブ２６０は、上記プログラムの他、メモリ２２０に格納された各種プログラムが読み書きするデータを格納する。ディスクドライブ２６０には、作業コピー２８０が格納される。作業コピー２８０は、ディスクドライブ２６０からメモリ２２０にロードされ処理される。
【００３９】
上記各プログラムはプロセッサによって実行されることで、定められた処理をメモリ２２０及びポートを用いながら行う。以下においてプログラムを主語とする説明は、プロセッサを主語とした説明でもよい。また、プログラムが実行する処理は、そのプログラムが動作する計算機及び計算機システムが行う処理である。この点は、他の計算機におけるプログラム実行についても同様である。
【００４０】
図３は、マスタサーバ３００の概略構成を示すブロック図である。図３に示すように、マスタサーバ３００は、プログラムやデータを格納するメモリ３２０と、メモリ３２０に格納されたプログラムを実行するプロセッサであるＣＰＵ３１０と、サーバ２００との通信に使用するネットワークインタフェース３３０と、ディスクドライブ３６０と、ディスクドライブ３６０への入出力を制御するディスクコントローラ３５０と、を備え、それらを内部的な通信路（例えば、バス）によって接続している計算機である。
【００４１】
マスタサーバ３００のメモリ３２０には、プログラム及びデータが格納される。それらは、例えば、バージョン管理サーバプログラム７００及びファイルシステムプログラム３９０である。
【００４２】
バージョン管理サーバプログラム７００は、サーバ２００に対してファイル共有サービスとチェックインサービスとチェックアウトサービスとを提供するプログラムである。ファイルシステムプログラム３９０は、ディスクドライブ３６０に格納されているファイルシステム３７０を管理するためのプログラムである。
【００４３】
ディスクコントローラ３５０は、メモリ３２０に格納された各種プログラムの入出力要求に基づいて、ディスクドライブ３６０のデータを例えばブロック単位で入出力する。ディスクドライブ３６０は、メモリ３２０に格納された各種プログラムが読み書きするデータを格納する。ディスクドライブ３６０には、リポジトリ３８０が格納される。
【００４４】
なお、マスタサーバ３００が使用するディスクドライブは、ディスクドライブ３６０のようにマスタサーバ３００に直接接続してもよいし、マスタサーバ３００は、ＳＡＮに接続されたディスクアレイ装置上のディスクドライブに、ディスクインタフェースを介して接続してもよい。
【００４５】
端末１００は、計算機としての基本構成を備え、入出力装置、メモリ、メモリ上のプログラムに従って動作するプロセッサを備える。入力装置は、典型的には、マウス及びキーボードであり、出力装置はディスプレイである。端末１００は、不揮発性の二次記憶装置を備えていてもて備えていなくともよい。典型的な二次記憶装置は、磁気ディスクドライブである。ユーザは、端末１００によりサーバ２００にログインし、端末１００から、サーバ上のプログラム２８５により作業コピー２８０を処理する。
【００４６】
本構成において、ユーザは、クライアント端末１００を使用して、サーバ２００にアクセスする。これと異なり、サーバ２００が端末１００のように入力装置及び表示装置を備え、ユーザは、それらを使用してサーバ２００を操作してもよい。
【００４７】
図４は、本実施形態において、スタブ状態のファイル（ファイルのスタブ）の実体化におけるデータの流れを模式的に示す図である。本システムは、ディレクトリのスタブ及びファイルのスタブを利用する。本明細書において、ディレクトリとファイルの双方を包含する言葉としてオブジェクトを使用する。
【００４８】
スタブは、オブジェクトの位置情報（参照情報）及びメタ情報（属性情報）を備えるが、その実体情報は備えていない。例えば、ディレクトリのスタブは、位置情報（ポインタ）の他、属性情報（メタ情報）として、ディレクトリ名、ディレクトリサイズ、タイムスタンプ及びアクセス権限などの情報を備える。ファイルのスタブは、位置情報（ポインタ）の他、属性情報（メタ情報）として、ファイル名、ファイルサイズ及びアクセス権限などの情報を含む。スタブの具体的構成は、図１１を参照して後述する。
【００４９】
サーバ２００Ａは、作業コピー２８０Ａ及び作業コピー管理テーブル４００Ａを備えている。作業コピー２８０Ａは、ディレクトリ及びそのディレクトリにおける２つのファイル４１０Ａ、４２０Ａを含む。同様に、サーバ２００Ｂは、作業コピー２８０Ｂ及び作業コピー管理テーブル４００Ｂを備えている。作業コピー２８０Ｂは、ディレクトリ及びそのディレクトリにおける２つのファイル４１０Ｂ、４２０Ｂを含む。
【００５０】
サーバ２００Ａ及び２００Ｂは、作業コピーを備えるスレーブサーバである。作業コピー管理テーブル４００Ａ、４００Ｂは、マスタサーバ３００における作業コピー管理テーブル４００Ｃと同じ情報を格納している。作業コピー管理テーブルの詳細は後述する。
【００５１】
サーバ２００Ａの作業コピー２８０Ａは、マスタサーバ３００のリポジトリ３８０からチェックアウトされている。そして、作業コピー２８０Ａのディレクトリ、ファイル４１０Ａ、そしてファイル４２０Ａは、既にスタブから実体化済みであり、かつ、ファイル４２０Ａには変更が加えられている。ファイル４１０Ａには変更が加えられていない。
【００５２】
サーバ２００Ｂの作業コピー２８０Ｂも同様に、マスタサーバ３００のリポジトリ３８０からチェックアウトされている。ただし、ディレクトリは実体化されているが、作業コピー２８０Ｂのファイル４１０Ｂとファイル４２０Ｂは、いずれもスタブ状態のファイルである。
【００５３】
例えば、このスタブ状態のファイル４１０Ｂ又はファイル４２０Ｂを、サーバ２００Ｂにログインしているユーザがエディタなどのアプリケーションプログラム２８５で読み出すと、サーバ２００Ｂは、作業コピー管理テーブル４００Ｂを参照し、サーバ２００Ａが同じリポジトリ３８０からチェックアウトした作業コピー２８０Ａを保持していることを認識して、サーバ２００Ａにキャッシュがあるかどうかを確認する。
【００５４】
サーバ２００Ａのファイル４１０Ａは、既にスタブから実体化済みであり、かつ変更が加えられていないため、キャッシュファイルとして利用可能である。そのため、サーバ２００Ｂは、サーバ２００Ａからファイル４１０Ａをコピーする。一方、サーバ２００Ａのファイル４２０Ａは、実体化済みであるものの、変更が加えられているため、キャッシュファイルとしては利用できない。そのため、サーバ２００Ｂは、マスタサーバ３００からファイル４２０Ｃをコピーする。
【００５５】
以下において、本ファイル共有システムにおいて動作するプログラムを、図５から図７を参照して説明する。図５は、サーバ２００におけるファイルシステムプログラム５００の機能構成を示すブロック図である。図５に示すように、ファイルシステムプログラム５００は、ＯＰＥＮ処理モジュール５１０と、ＲＥＡＤ処理モジュール５２０と、ＷＲＩＴＥ処理モジュール５３０とを備える。
【００５６】
端末１００を操作してサーバ２００にログインしているユーザが、例えばエディタなどのアプリケーションプログラム２８５で、ファイルシステム２７０に格納されているディレクトリ又はファイルを開いた場合に、アプリケーションプログラム２８５は、ファイルシステムプログラム５００にＯＰＥＮ要求を発行する。ＯＰＥＮ処理モジュール５１０は、ＯＰＥＮ要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。
【００５７】
ＯＰＥＮ処理モジュール５１０は、ディレクトリ又はファイルのパス名を与えると、当該ディレクトリを読み出す又は当該ファイルを読み書きする準備を行い、ＯＰＥＮ要求を発行したアプリケーションプログラム２８５に対して、ＯＰＥＮ済みのディレクトリ又はファイルを識別するためのディスクリプタを返す。また、ＯＰＥＮ処理モジュール５１０は、ＯＰＥＮ対象のファイルシステム２７０内のディレクトリがスタブ状態だった場合に、そのスタブの実体化処理を行う。
【００５８】
スタブ実体化処理は、スタブの位置情報が示す位置からファイル又はディレクトリの実体情報（ファイルの内容又はディレクトリの構成情報）を取得して、スタブ（スタブ状態のファイル又はディレクトリ）に書き込み、実体化されたフィル又はディレクトリを生成する。スタブ実体化処理の詳細は、図１７を参照して後述する。
【００５９】
ユーザがアプリケーションプログラム２８５で、ファイルシステム２７０に格納されているファイルを読み出した場合に、アプリケーションプログラム２８５はファイルシステムプログラム５００にＲＥＡＤ要求を発行する。ＲＥＡＤ処理モジュール５２０は、このＲＥＡＤ要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。
【００６０】
ＲＥＡＤ処理モジュール５２０は、ＯＰＥＮ処理モジュール５１０を実行した結果得られたディスクリプタを使用して、ディレクトリ又はファイルにアクセスし、データを読み出して、ＲＥＡＤ要求を発行したアプリケーションプログラム２８５に対してデータを応答する。また、ＲＥＡＤ対象のファイルシステム２７０内のファイルがスタブ状態だった場合に、そのスタブ実体化処理を行う。
【００６１】
ユーザが、アプリケーションプログラム２８５で、ファイルシステム２７０に格納されているファイルに書き込みを行う場合に、アプリケーションプログラム２８５はファイルシステムプログラム５００にＷＲＩＴＥ要求を発行する。ＷＲＩＴＥ処理モジュール５３０は、このＷＲＩＴＥ要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。
【００６２】
ＷＲＩＴＥ処理モジュール５３０は、ＯＰＥＮ処理モジュール５１０を実行した結果得られたディスクリプタを使用して、ファイルにアクセスしてデータを書き込んで、ＷＲＩＴＥ要求を発行したアプリケーションプログラム２８５に対して結果を応答する。また、ＷＲＩＴＥ対象のファイルがスタブ状態だった場合に、ファイルシステム２７０内のそのスタブの実体化処理を行う。
【００６３】
図６は、サーバ２００におけるバージョン管理クライアントプログラム６００の機能構成を示すブロック図である。図６に示すように、バージョン管理クライアントプログラム６００は、スタブ実体化モジュール６１０と、チェックアウトモジュール６２０と、チェックインモジュール６３０と、作業コピー管理モジュール６４０と、ファイル共有サービスモジュール６５０と、作業コピー管理テーブル９００と、作業コピー検索ポリシ６８０と、マスタサーバ情報６９０とを備える。
【００６４】
スタブ実体化モジュール６１０は、自身のサーバ２００又は他のサーバ２００のファイルシステムプログラム５００からの要求を受けて、サーバ２００のＣＰＵ２１０によって実行される。スタブ実体化モジュール６１０は、作業コピー検索ポリシ６８０に基づいて、作業コピー管理テーブル９００を検索し、適合するエントリがあった場合に、自身のサーバ２００又は、他のサーバ２００にキャッシュオブジェクトの有無を問い合わせる。
【００６５】
利用可能な実体化済みのファイル又はディレクトリがキャッシュされている場合には、スタブ実体化モジュール６１０は、サーバ２００から実体化済みのファイル又はディレクトリを取得する。キャッシュされた実体化済みのファイル又はディレクトリが存在しない場合には、スタブ実体化モジュール６１０は、マスタサーバ３００からファイル又はディレクトリ（の実体情報）を取得して、スタブ状態のファイルやディレクトリを実体化する。
【００６６】
チェックアウトモジュール６２０は、ユーザがバージョン管理インタフェースプログラム２９０を介して送信するチェックアウト要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。チェックアウトモジュール６２０は、どのリポジトリのどのバージョンを作業コピーとしてチェックアウトするかを示すチェックアウト要求を、マスタサーバ３００に送信する。チェックアウトモジュール６２０は、さらに、リポジトリ内の、特定のディレクトリを指定してもよい。
【００６７】
リポジトリとバージョンを指定したチェックアウト要求に対して、チェックアウトモジュール６２０は、マスタサーバ３００から、リポジトリ３８０のルートディレクトリの構成情報を取得し、この構成情報に基づいて、作業コピー２８０のルートディレクトリにスタブ状態のファイル及びディレクトリを作成する。
【００６８】
本例においては、チェックアウトにより、作業コピーのトップディレクトリ（本例でリポジトリのルートディレクトリ）が実体化されているが、チェックアウトは、トップディレクトリのスタブのみを作成し、その後のユーザ操作に応じて、ファイルシステムプログラム５００が、そのスタブ状態のディレクトリを実体化してもよい。
【００６９】
チェックアウトモジュール６２０は、作業コピーのチェックアウトに付随して、マスタサーバ３００の作業コピー管理テーブル７７０（図７を参照）に新たなエントリを追加する。さらに、その作業コピー管理テーブル７７０を取得し、サーバ２００の作業コピー管理テーブル９００を更新する。
【００７０】
チェックインモジュール６３０は、ユーザがバージョン管理インタフェースプログラム２９０を介して送信するチェックイン要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。チェックインモジュール６３０は、作業コピー２８０の中で更新されたファイルやディレクトリのリストを作成する。そして、そのリストをチェックイン要求としてマスタサーバ３００に送信し、他のユーザによって同じファイルが更新されていないかを確認する。
【００７１】
このような競合が発生した場合、チェックインモジュール６３０は、バージョン管理インタフェースプログラム２９０を介して警告を端末１００に表示し、待機する。警告を受けたユーザが、ファイルをマージしたり、リポジトリに残すファイルを選択したりするなどして、手作業で競合を解消したら、チェックインモジュール６３０は、更新のあったファイルおよびディレクトリをマスタサーバ３００にコピーする。
【００７２】
作業コピー管理モジュール６４０は、チェックアウトモジュール６２０からの要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。また、それ以外にも、定期的にサーバ２００のＣＰＵ２１０によって実行される。
【００７３】
作業コピー管理モジュール６４０は、予め設定されている事象（例えば所定の時間経過）に応答して、マスタサーバ３００に作業コピー管理テーブル同期要求を発行し、マスタサーバ３００の作業コピー管理テーブル７７０と、サーバ２００の作業コピー管理テーブル９００とを同期する。
【００７４】
つまり、作業コピー管理モジュール６４０は、作業コピー管理テーブル９００を更新して、マスタサーバ３００の作業コピー管理テーブル７７０と一致させる。また、各作業コピーの性能情報を取得し、作業コピー管理テーブル９００に記録する。作業コピーの性能情報は、その作業コピーへのアクセス性能を示す。性能情報については、図９を参照して後に詳述する。
【００７５】
ファイル共有サービスモジュール６５０は、スタブ実体化モジュール６１０からの、キャッシュオブジェクト（キャッシュされているファイル又はディレクトリ）有無確認要求又はオブジェクト取得要求を契機として、サーバ２００のＣＰＵ２１０によって実行される。スタブ実体化モジュール６１０は、作業コピー検索ポリシ６８０に従って、実体化のための情報の問い合わせを行う。作業コピー検索ポリシ６８０については、後述する。
【００７６】
ファイル共有サービスモジュール６５０は、自身のサーバ２００におけるスタブ実体化モジュール６１０からキャッシュオブジェクト有無確認要求およびオブジェクト取得要求を受ける他、ネットワークインタフェース２３０を介して、他のサーバ２００におけるスタブ実体化モジュール６１０からも受ける。
【００７７】
キャッシュオブジェクト有無確認要求を受けた場合、ファイル共有サービスモジュール６５０は、確認対象のオブジェクト（ファイル又はディレクトリ）が実体化済みのオブジェクトであり、かつ、更新されていないならば、ファイル共有サービスモジュール６５０は、「キャッシュオブジェクト有」を応答する。
【００７８】
確認対象のオブジェクトがスタブ状態のオブジェクトか、更新されているならば、ファイル共有サービスモジュール６５０は、「キャッシュオブジェクト無」を応答する。オブジェクト取得要求を受けた場合、ファイル共有サービスモジュール６５０は、キャッシュされているオブジェクトを応答する。
【００７９】
作業コピー管理テーブル９００は、サーバ２００にチェックアウトされた作業コピー２８０を管理するためのテーブルである。作業コピー検索ポリシ６８０は、スタブ実体化モジュール６１０が作業コピー管理テーブル９００を検索する際のポリシを規定する。ユーザ（開発者又は管理者）は、作業コピー検索ポリシ６８０を設定することで、キャッシュオブジェクトの検索範囲を設定することができる。本構成においては、ユーザは、検索範囲を規定する要素として、作業コピー２８０のバージョン及びサーバ２００を変更することができる。
【００８０】
例えば、バージョンについての検索範囲の設定が、作業コピーのバージョンに関係なく、同一リポジトリの全てのバージョンの作業コピーを検索範囲に含めると、キャッシュオブジェクトの検索範囲は広がる。しかし、検索範囲が異なるバージョンの作業コピーを含むため、キャッシュオブジェクトとして利用できないデータが増加する。そのため、検索ターゲットを取得するまでの問い合わせが増加し、検索処理効率の低下及びネットワーク遅延を招く。
【００８１】
サーバについての検索範囲の設定が、全てのサーバを検索範囲に含めれば、キャッシュヒット率は高めることができるが、マスタサーバ３００と同程度にネットワーク的に遠い場所にあるサーバ２００にキャッシュオブジェクトの有無を問い合わせることが必要となり、検索処理効率の低下およびネットワークの遅延の可能性が高まる。
【００８２】
また、本構成において、作業コピー検索ポリシ６８０は、キャッシュオブジェクトの有無を問い合わせる件数（の上限値）を規定する情報も保持する。例えば、この規定された件数が２の場合、スタブ実体化モジュール６１０は、２つのサーバ２００に対してキャッシュオブジェクト有無を問い合わせる。この数字を大きくすれば、キャッシュヒット率は向上するが、ネットワークトラフィックは増大する。
【００８３】
作業コピー検索ポリシ６８０の他の条件に合致するエントリ数が、この数字よりも大きかった場合には、スタブ実体化モジュール６１０は、性能情報９７０を使用して、最も性能が高いエントリを選択する。これにより、最も短い時間（高速）に必要な情報を取得できる。性能情報９７０については、図９を参照して後述する。
【００８４】
作業コピー検索ポリシ６８０において設定可能な条件として、設計により適切な条件が選択される。好ましい構成において、上記全ての条件が設定可能であるが、それらの一部又はそれらと異なる条件が設定可能であってもよい。
【００８５】
ユーザ（開発者又は管理者）は、作業コピー検索ポリシ６８０を、バージョン管理インタフェースプログラム２９０が提供する作業コピー検索ポリシ設定画面を用いて設定することができる。ユーザによる作業コピー検索ポリシ設定画面を使用した検索ポリシの設定については、図１３を参照して後述する。
【００８６】
バージョン管理クライアントプログラム６００に含まれるマスタサーバ情報６９０は、サーバ２００がマスタサーバ３００と通信するために必要なホスト名などの情報を含む。
【００８７】
図７は、マスタサーバ３００におけるバージョン管理サーバプログラム７００の機能構成を示すブロック図である。図７に示すように、バージョン管理サーバプログラム７００は、ファイル共有サービスモジュール７１０と、チェックアウトサービスモジュール７２０と、チェックインサービスモジュール７３０と、作業コピー管理モジュール７４０と、バージョン管理モジュール７５０と、バージョン管理テーブル８００と、作業コピー管理テーブル７７０とを備える。
【００８８】
ファイル共有サービスモジュール７１０は、サーバ２００のスタブ実体化モジュール６１０からのオブジェクト取得要求を契機として、マスタサーバ３００のＣＰＵ３１０によって実行される。オブジェクト取得要求を受けた場合、ファイル共有サービスモジュール７１０はオブジェクトを、スタブ実体化モジュール６１０に応答する。
【００８９】
チェックアウトサービスモジュール７２０は、サーバ２００のチェックアウトモジュール６２０からのチェックアウト要求を契機として、マスタサーバ３００のＣＰＵ３１０によって実行される。チェックアウトサービスモジュール７２０は、要求に含まれるサイトＩＤ、サーバＩＤ、リポジトリＩＤ、バージョンＩＤ、作業コピーＩＤと、現在の日時を組としてエントリを作成し、そのエントリを作業コピー管理テーブル７７０に追加する。そして、チェックアウトサービスモジュール７２０は、要求されたリポジトリのルートディレクトリ構成情報を応答する。
【００９０】
チェックインサービスモジュール７３０は、サーバ２００のチェックインモジュール６３０からのチェックイン要求を契機として、マスタサーバ３００のＣＰＵ３１０によって実行される。チェックインサービスモジュール７３０は、要求に含まれる更新対象のオブジェクトのリストに基づき、競合がないかを確認する。競合の確認は、作業コピー管理テーブル７７０を参照し、当該作業コピーがチェックアウトされた時刻以降に、当該オブジェクトが更新されているかどうか調べる。チェックインサービスモジュール７３０は、競合していたオブジェクトをリスト化して応答する。
【００９１】
作業コピー管理モジュール７４０は、サーバ２００の作業コピー管理モジュール６４０又はチェックアウトモジュール６２０から送信される作業コピー管理テーブル同期要求を契機に、マスタサーバ３００のＣＰＵ３１０によって実行される。作業コピー管理モジュール７４０は、マスタサーバ３００の作業コピー管理テーブル７７０と、サーバ２００の作業コピー管理テーブル９００とを同期する。
【００９２】
作業コピー管理テーブル７７０、９００は、サーバ２００にチェックアウトされた作業コピー２８０を管理するためのテーブルである。作業コピー管理モジュール７４０は、作業コピー管理テーブルの同期において、サーバ３００の作業コピー管理テーブル７７０を、要求元のサーバ２００に送信する。
【００９３】
バージョン管理モジュール７５０は、バージョン管理インタフェースプログラム２９０からのバージョン作成要求を契機として、マスタサーバ３００のＣＰＵ３１０によって実行される。
【００９４】
バージョン管理モジュール７５０は、バージョン作成要求受信時点のリポジトリの状態を固定したスナップショットイメージを「バージョン」として作成する。また、リポジトリＩＤとバージョンＩＤと現在時刻を含むエントリを作成し、バージョン管理テーブル８００に追加する。バージョン管理テーブル８００は、マスタサーバ３００にあるリポジトリとそのバージョンを管理するためのテーブルである。
【００９５】
以下において、図８から図１０を参照して、本ファイルシステムが使用する情報について説明する。図８は、バージョン管理テーブル８００の構成例を示す図である。バージョン管理テーブル８００は、リポジトリＩＤ８１０、バージョンＩＤ８２０、そして作成日時８３０のカラムを有している。これらのフィールドが、１つのエントリ（レコード）を構成する。
【００９６】
リポジトリＩＤ８１０はリポジトリの識別子であり、バージョンＩＤ８２０はリポジトリのバージョンを識別するための情報であり、作成日時８３０はそのバージョンが作成された日時を示す。識別子として、名前又は数字など、対象を識別するためのどのようなデータを使用してもよい。この点は、他の識別子についても同様である。
【００９７】
バージョン管理テーブル８００は、例えば、バージョン管理インタフェースプログラム２９０を通じて、端末１００に表示される。ユーザは、バージョン管理テーブル８００からチェックアウトしたいバージョンを選択し、バージョン管理インタフェースプログラム２９０を通じて、それをチェックアウトする。
【００９８】
図９は、作業コピー管理テーブル９００の構成例を示す図である。作業コピー管理テーブル９００は、サイトＩＤ９１０、サーバＩＤ９２０、リポジトリＩＤ９３０、バージョンＩＤ９４０、作業コピーＩＤ９５０、チェックアウト日時９６０、そして性能情報９７０のカラムを有している。これらのフィールドが、１つのエントリ（レコード）を構成する。
【００９９】
サイトＩＤ９１０は、作業コピー２８０をチェックアウトしたサイトを識別するための情報であり、サーバ２００のロケーションを示す識別子である。サーバ２００のロケーションをどの範囲で特定するかは、設計に依存する。サーバＩＤ９２０は、作業コピー２８０をチェックアウトしたサーバを識別するための情報である。リポジトリＩＤ９３０は、作業コピー２８０のチェックアウト元であるリポジトリを識別するための情報である。
【０１００】
バージョンＩＤ９４０は、作業コピー２８０のチェックアウト元であるリポジトリのバージョンを識別するための情報である。作業コピーＩＤ９５０は、チェックアウトした作業コピー２８０を識別するための情報である。チェックアウト日時９６０は、作業コピー２８０をチェックアウトした日時を示す。性能情報９７０は、チェックアウトした作業コピー２９０へのアクセス性能を示す情報である。
【０１０１】
各ＩＤはそれぞれが一意な識別子であれば何でもよいが、例えば、サイトＩＤには国名、サーバＩＤにはホスト名やＩＰアドレスが使用される。また、リポジトリＩＤやバージョンＩＤとしては、リポジトリやバージョンを作成する際に、ユーザが指定したリポジトリ名やバージョン名が使用される。さらに、作業コピーＩＤとしては、チェックアウト先のパスが使用される。
【０１０２】
性能情報９７０として、例えば、サーバ２００に対してｐｉｎｇコマンドを実行して得られるネットワーク応答時間が使用される。これは、同一のサーバ２００に格納されている作業コピーに共通である。
【０１０３】
性能情報９７０は、さらに、作業コピー２９０単位の詳細な情報として、作業コピー２９０が格納されているディスクドライブ２６０の性能や、負荷状況を含めてもよい。これらにより表されるアクセス性能は、同一のサーバ２００の作業コピーに対して、異なる値を示し得る。サーバ２００は、作業コピー２９０単位の性能情報９７０に基づいて、最も高速にキャッシュを取得できる作業コピー２９０を選択することができる。
【０１０４】
上述のように、作業コピー管理テーブル９００は、各作業コピーに対して１つのエントリを与える。作業コピー管理テーブル９００において、エントリは異なる作業コピーＩＤを有し、作業コピーＩＤによりエントリが一意に特定される。作業コピー管理テーブル９００のエントリは、リポジトリＩＤ及びバージョンＩＤを有しているが、リポジトリ内のディレクトリ及びファイルについての情報は有していない。なお、作業コピー管理テーブル９００において、サーバIDと作業コピーIDとの組によりエントリを一意に特定してもよい。この場合、作業コピーIDは、同一のサーバ２００において一意であればよい。
【０１０５】
作業コピー管理テーブルが作業コピー単位でキャッシュ情報を管理することで、サーバ２００、３００間で作業コピー管理テーブルを同期するための情報は、チェックアウトした作業コピーの数に比例する。このため、キャッシュ対象のファイル数が増大しても、サーバ２００間で同期する情報を低減し、そのためのネットワークトラフィックを抑えることができる。
【０１０６】
次に、図１０を参照してディレクトリ構成情報１０００を説明する。図１０は、ディレクトリ構成情報１０００の構成例を示す図である。ディレクトリ構成情報１０００は、あるディレクトリ以下に存在するファイル及びディレクトリに関する情報を所定の形式でまとめたものである。
【０１０７】
ディレクトリ構成情報１０００は、チェックアウトモジュール６２０がマスタサーバ３００から取得するルートディレクトリ構成情報のフォーマットとして使用される他、スタブ実体化モジュール６１０が、サーバ２００又はマスタサーバ３００からディレクトリを取得する際のフォーマットとして使用される。
【０１０８】
ディレクトリ構成情報１０００は、オブジェクトを識別するためのオブジェクトＩＤ１０１０と、オブジェクト名１０２０と、オブジェクト種別１０３０のカラムを有している。これらのフィールドが、１つのエントリ（レコード）を構成する。オブジェクト種別１０３０は、例えばファイル又はディレクトリである。
【０１０９】
図８から図１０を参照して本システムが使用する情報の一部の例を具体的に説明したが、本実施形態において、データ記憶装置（例えばメモリ２２０、３２０、ディスクドライブ２６０、３６０）に格納されており、各プログラムが使用する情報（例えば、バージョン管理テーブル８００、作業コピー管理テーブル９００、ディレクトリ構成情報１０００、作業コピー検索ポリシ６８０等）は、どのようなデータ構造を有していてもよい。例えば、データベース、テーブル、リスト又はキューなどから、情報の格納に適したデータ構造が選択される。
【０１１０】
図１１は、ファイル１１００の構成例を示す図である。図１１に示すように、ファイル１１００は、データ領域１１１０と、属性領域１１２０と、拡張属性領域１１３０とを有する。データ領域１１１０は実データ、属性領域１１２０と拡張属性領域１１３０の情報（データ）は合わせてメタ情報（メタデータ）とも呼ぶ。ディレクトリも、図１１に示す構成と同様の構成を有している。
【０１１１】
データ領域１１１０には、ファイルやディレクトリのデータ本体が格納される。なお、ファイルのデータ本体とは、ユーザがアプリケーションプログラム２８５を通じて読み書きする任意のデータである。また、ディレクトリのデータ本体とは、例えば、ディレクトリ構成情報１０００である。スタブは、メタ情報（領域１１２０と１１３０の情報）と参照情報（不図示）のみを有し、データ領域１１１０に格納されるデータ本体を有していない。
【０１１２】
属性領域１１２０は、アクセス権限情報１１２１、更新日時１１２２などファイルシステムプログラム５００が使用する属性情報を有する。図示していないが、これ以外の情報をもってもよい。
【０１１３】
拡張属性領域１１３０は、ハッシュ値１１３２と、スタブフラグ１１３３と、更新フラグ１１３４とを有する。ハッシュ値１１３２は、当該ファイルからハッシュ関数を用いて算出されるハッシュ値であり、ファイル共有サービスモジュール６５０がキャッシュオブジェクト有無確認要求を処理する際に、ファイル又はディレクトリが一致しているかどうかを簡単に判断するために使用する。ハッシュ値１１３２は、ＷＲＩＴＥ処理モジュール５３０が更新する。
【０１１４】
スタブフラグ１１３３は、ＯＰＥＮ処理モジュール５１０、ＲＥＡＤ処理モジュール５２０及びＷＲＩＴＥ処理モジュール５３０が、オブジェクト（ファイル又はディレクトリ）がスタブ状態か実体化済み状態かを判定するために使用する。スタブフラグ１１３３がＯＮであれば当該オブジェクトはスタブ状態であり、ＯＦＦであれば、当該オブジェクトは実体化済み状態である。
【０１１５】
更新フラグ１１３４は、ファイル共有サービスモジュール６５０がキャッシュオブジェクト有無確認要求を処理する際に、当該オブジェクトの更新有無を判定するために使用する。更新フラグ１１３４は、ファイルを更新する際、ＷＲＩＴＥ処理モジュール５３０が、ＯＦＦからＯＮに変更する。
【０１１６】
図１２は、マスタサーバ３００のリポジトリ３８０の管理権限をもつユーザが、チェックアウトされた作業コピーを確認したり、作業コピー検索ポリシ６８０を設定する対象の作業コピーを選択したりするため、バージョン管理インタフェースプログラム２９０が端末１００に表示する作業コピー一覧画面１２００の一例を示す図である。
【０１１７】
作業コピー一覧画面１２００は、作業コピーを排他的に選択するためのラジオボタン１２１０と、作業コピー検索ポリシ６８０を設定する画面である作業コピー検索ポリシ設定画面１３００に遷移するためのボタン１２２０とを備える。
【０１１８】
図１３は、マスタサーバ３００のリポジトリ３８０の管理権限をもつユーザが、作業コピー検索ポリシ６８０を設定するため、バージョン管理インタフェースプログラム２９０が端末１００に表示する作業コピー検索ポリシ設定画面１３００の一例を示す図である。
【０１１９】
作業コピー検索ポリシ設定画面１３００は、スタブ実体化モジュール６１０による作業コピー管理テーブルの検索における検索範囲のバージョンを排他的に選択するためのラジオボタン１３１０と、検索範囲のサーバを排他的に選択するためのラジオボタン１３２０と、検索範囲の件数（検索を行うサーバの数）を選択するためのプルダウンリスト１３３０とを備える。
【０１２０】
以下では、本実施形態におけるシステム（サーバ２００）が、ファイルサービスを提供するマスタサーバ３００から作業コピーをチェックアウトして、ファイルを読み書きし、チェックインする処理について、図１４から図１９を用いて説明する。
【０１２１】
最初に、処理の概略を説明する。サーバ２００は、ユーザ指定に従って、指定リポジトリの指定スナップショット（バージョン）のチェックアウトを行う。サーバ２００は、作業コピー管理テーブル７７０に、サイトＩＤ、サーバＩＤ、リポジトリＩＤ、スナップショットＩＤ、作業コピーＩＤを含むエントリを追加し、作業コピー管理テーブル７７０により自身の作業コピー管理テーブル９００を更新する。その後、サーバ２００は、作業コピーのルートディレクトリに、スタブを作成する。
【０１２２】
その後、ＲＥＡＤ要求が来た際に、サーバ２００は、対象ファイルが自サーバの作業コピーに実体化済みファイルとして存在する場合、そのままＲＥＡＤ処理を行う。対象ファイルが自サーバの作業コピーにスタブファイルとして存在する場合、サーバ２００は、作業コピー管理テーブル９００を参照し、例えば、同一リポジトリからチェックアウトした作業コピーを有する他のサーバに当該ファイルのキャッシュがあるかを検索する。
【０１２３】
サーバ２００は、作業コピー管理テーブル９００により、どの拠点どのサーバ２００が、どのリポジトリのどのスナップショット（バージョン）の作業コピー（チェックアウトしたファイル及びディレクトリの集合）を保持しているかを管理する。サーバ２００は、作業コピー管理テーブル９００情報に基づいて、キャッシュ有無を問い合わせる先を決定する。
【０１２４】
キャッシュが存在する場合、サーバ２００は、それを使用してオンデマンドコピーを行う。キャッシュが存在しない場合、サーバ２００は、マスタサーバ３００のスナップショットからオンデマンドコピーを行う。問い合わせ先のサーバ２００は、キャッシュが存在するかどうか確認する際には、当該ファイルが更新されているかどうかを確認する。
【０１２５】
ＷＲＩＴＥ要求に対するＷＲＩＴＥ処理は、キャッシュを検索してオンデマンドコピーを行う点は、ＲＥＡＤ処理と同様である。ＲＥＡＤ処理と異なりファイルが更新されるため、サーバ２００は、更新フラグやハッシュ値を更新する。
【０１２６】
チェックイン処理において、サーバ２００は、変更があったファイルのみをリストアップし、マスタサーバ３００へコピーする。サーバ２００は、変更のあったファイルリストをマスタサーバ３００へ送る。マスタサーバ３００は、他の作業コピーから送られた変更ファイルリストと比較し、競合した場合には警告を表示し、ユーザが手動でマージする。
【０１２７】
以下において、各プログラムの具体的な処理を、図１４から図１９のフローチャートを参照して説明する。図１４は、ＯＰＥＮ処理モジュール５１０が（ＣＰＵ２１０と恊働して）実行するＯＰＥＮ処理の詳細を説明するためのフローチャートの一例である。ＯＰＥＮ処理モジュール５１０は、ファイルシステムプログラム５００がアプリケーションプログラム２８５から、ＯＰＥＮ処理要求を受信したときに実行する。ＯＰＥＮ処理要求は、例えば、ＵＮＩＸ系のオペレーティングシステムにおける、ＯＰＥＮシステムコールである。ＯＰＥＮ処理要求は、開こうとしているオブジェクトのパスを含む。
【０１２８】
まず、ＯＰＥＮ処理モジュール５１０は、処理対象のパスがまだ存在するかを調べる（Ｓ１４１０）。解析対象のパスがまだ存在する場合（Ｓ１４１０がＹＥＳの場合）、パスから先頭のオブジェクト名を切り出す（Ｓ１４２０）。
【０１２９】
例えば、／ＭＮＴ／ＦＳ００／ＤＩＲ／ＦＩＬＥというパスのオブジェクトが処理対象の場合、先頭から順にオブジェクト名は、／（ルートディレクトリ）、ＭＮＴ／、ＦＳ００／、ＤＩＲ／、ＦＩＬＥであり、切り出されるオブジェクト名は、／（ルートディレクトリ）であり、残るパスは、ＭＮＴ／ＦＳ００／ＤＩＲ／ＦＩＬＥである。
【０１３０】
そして、ＯＰＥＮ処理モジュール５１０は、Ｓ１４２０で切り出したオブジェクトが、ディレクトリであるかどうかを確認する（Ｓ１４３０）。オブジェクトがディレクトリである場合（Ｓ１４３０がＹＥＳの場合）、ＯＰＥＮ処理モジュール５１０は、さらに、当該オブジェクトがスタブ状態かどうかを確認する（Ｓ１４４０）。ＯＰＥＮ処理モジュール５１０は、スタブ状態かどうかを確認するために、ファイル１１００の拡張属性領域１１３０にあるスタブフラグ１１３３を調べる。
【０１３１】
オブジェクトがスタブ状態である場合（Ｓ１４４０がＹＥＳの場合）、ＯＰＥＮ処理モジュール５１０は、当該オブジェクトのパスを指定してスタブ実体化処理を行い（Ｓ１４５０）、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。
【０１３２】
オブジェクトがスタブ状態でない場合（Ｓ１４４０がＮＯの場合）、処理は再びＳ１４１０に遷移して、処理対象のパスが存在するかを確認する。例えば、／ＭＮＴ／ＦＳ００／ＤＩＲというパスのうち、Ｓ１４２０で／（ルートディレクトリ）が切り出された段階では、ＭＮＴ／ＦＳ００／ＤＩＲというパスが残っているため、再びＳ１４１０はＹＥＳであり、処理が継続する。一方、／（ルートディレクトリ）、ＭＮＴ／、ＦＳ００／、ＤＩＲの全ての要素が切り出された段階では、もはや処理対象のパスは存在しないためＳ１４１０はＮＯである。
【０１３３】
処理対象のパスが存在しない場合（Ｓ１４１０がＮＯの場合）、及び、切り出したオブジェクトがディレクトリでなかった場合（Ｓ１４３０がＮＯの場合）、ＯＰＥＮ処理モジュール５１０は、空きディスクリプタを取得する（Ｓ１４６０）。ディスクリプタは、ファイルシステムプログラム５００が、ＯＰＥＮ済みのファイルやディレクトリを管理するための識別子である。
【０１３４】
アプリケーションプログラム２８５はこのディスクリプタを指定してＲＥＡＤ処理およびＷＲＩＴＥ処理を行う。ディスクリプタは、例えば有限な整数である。また、空きディスクリプタは、他のＯＰＥＮ済みのファイルやディレクトリに対して割り当てられていない識別子である。
【０１３５】
そして、ＯＰＥＮ処理モジュール５１０は、Ｓ１４６０で取得した空きディスクリプタと、Ｓ１４２０で切り出した最後のオブジェクトを関連づけた上で（Ｓ１４７０）、ＯＰＥＮ処理を要求したアプリケーションプログラム２８５にディスクリプタを応答する（Ｓ１４８０）。Ｓ１４２０で切り出した最後のオブジェクトは、例えば、／ＭＮＴ／ＦＳ００／ＤＩＲというパスの場合、「ＤＩＲ」ディレクトリである。また、／ＭＮＴ／ＦＳ００／ＤＩＲ／ＦＩＬＥというパスの場合、「ＦＩＬＥ」ファイルである。
【０１３６】
図１５は、ＲＥＡＤ処理モジュール５２０が（ＣＰＵ２１０と恊働して）実行するＲＥＡＤ処理の詳細を説明するためのフローチャートの一例である。ＲＥＡＤ処理モジュール５２０は、ファイルシステムプログラム５００が、アプリケーションプログラム２８５から、ＲＥＡＤ処理要求を受信したときに実行する。ＲＥＡＤ処理要求は、例えば、ＵＮＩＸ系のオペレーティングシステムにおけるＲＥＡＤシステムコールである。ＲＥＡＤ処理要求は、ＯＰＥＮ処理要求によりあらかじめ取得されたディスクリプタと、読み出すデータサイズとを含む。
【０１３７】
まず、ＲＥＡＤ処理モジュール５２０は、ＲＥＡＤ処理要求に含まれるディスクリプタに対応するオブジェクトを取得する（Ｓ１５１０）。そして、取得したオブジェクトがスタブ状態であるかどうかを確認する（Ｓ１５２０）。
【０１３８】
オブジェクトがスタブ状態の場合（Ｓ１５２０がＹＥＳの場合）、ＲＥＡＤ処理モジュール５２０は、当該オブジェクトのパスを指定してスタブ実体化処理を行い（Ｓ１５３０）、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。
【０１３９】
オブジェクトがスタブ状態でない場合（Ｓ１５２０がＮＯの場合）、又は、スタブ実体化処理が終わった後（Ｓ１５３０の後）、ＲＥＡＤ処理モジュール５２０は、ファイル１１００のデータ領域１１１０からＲＥＡＤ処理要求で指定されたサイズのデータを読み出し、オフセット情報を読み出した位置に更新する（Ｓ１５４０）。オフセット情報は、ファイルをどこまで読んだり書いたりしたかを管理するための位置情報で、ファイルシステムプログラム５００が内部的に管理する情報である。
【０１４０】
そして、ＲＥＡＤ処理モジュール５２０は、ＲＥＡＤ処理を要求したアプリケーションプログラム２８５に、Ｓ１５４０で読み出したデータを応答する（Ｓ１５５０）。
【０１４１】
図１６は、ＷＲＩＴＥ処理モジュール５３０が（ＣＰＵ２１０と恊働して）実行するＷＲＩＴＥ処理の詳細を説明するためのフローチャートの一例である。ＷＲＩＴＥ処理モジュール５３０は、ファイルシステムプログラム５００が、アプリケーションプログラム２８５から、ＷＲＩＴＥ処理要求を受信したときに実行する。ＷＲＩＴＥ処理要求は、例えば、ＵＮＩＸ系のオペレーティングシステムにおけるＷＲＩＴＥシステムコールである。ＷＲＩＴＥ処理要求は、ＯＰＥＮ処理要求によりあらかじめ取得されたディスクリプタ、書き込むデータ、そしてデータサイズを含む。
【０１４２】
まず、ＷＲＩＴＥ処理モジュール５３０は、ＷＲＩＴＥ処理要求に含まれるディスクリプタに対応するオブジェクトを取得する（Ｓ１６１０）。そして、ＷＲＩＴＥ処理モジュール５３０は、取得したオブジェクトがスタブ状態であるかどうかを確認する（Ｓ１６２０）。
【０１４３】
オブジェクトがスタブ状態の場合（Ｓ１６２０がＹＥＳの場合）、ＷＲＩＴＥ処理モジュール５３０は、当該オブジェクトのパスを指定してスタブ実体化処理を行い（Ｓ１６３０）、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。
【０１４４】
オブジェクトがスタブ状態でない場合（Ｓ１６２０がＮＯの場合）、又は、スタブ実体化処理が終わった後（Ｓ１６３０の後）、ＷＲＩＴＥ処理モジュール５３０は、ファイル１１００のデータ領域１１１０に、ＷＲＩＴＥ処理要求で指定されたデータを、指定されたサイズ分書き込み、オフセット情報を書き込んだ位置に更新する（Ｓ１６４０）。さらに、ＷＲＩＴＥ処理モジュール５３０は、データを書き込んだ際、ハッシュ値１１３２や更新フラグ１１３４も更新する。
【０１４５】
図１７は、図１４から図１６におけるスタブ実体化処理（Ｓ１４５０、Ｓ１５３０、Ｓ１６３０）の詳細を説明するためのフローチャートである。まず、ＯＰＥＮ処理モジュール５１０、ＲＥＡＤ処理モジュール５２０、ＷＲＩＴＥ処理モジュール５３０（以降、各ファイルシステムモジュール）は、作業コピー検索ポリシ６８０に基づいて、作業コピー管理テーブル９００を検索する（Ｓ１７１０）。
【０１４６】
作業コピー検索ポリシ６８０は、例えば、「実体化する対象のオブジェクトが属する作業コピーと、同一リポジトリ、かつ、同一バージョン、かつ、同一のサイトにある作業コピーを検索する」という検索ポリシを格納している。
【０１４７】
このような作業コピー検索ポリシが設定されている場合に、サーバＳＥＲＶＥＲ００において、／ＭＮＴ／ＣＯＰＹ００／ＤＩＲ／ＦＩＬＥというファイルを実体化する例について説明する。／ＭＮＴ／ＣＯＰＹ００／ＤＩＲ／ＦＩＬＥは、そのパスから、作業コピーＩＤが／ＭＮＴ／ＣＯＰＹ００である作業コピーにあるファイルであることがわかる。
【０１４８】
作業コピー管理テーブル９００において、作業コピー／ＭＮＴ／ＣＯＰＹ００と同一リポジトリ（ＲＥＰＯＳ００）、かつ、同一バージョン（ＶＥＲＳＩＯＮ０３）、かつ、同一サイト（ＪＡＰＡＮ）にある作業コピーは、サーバＳＥＲＶＥＲ０１にある、作業コピーＩＤ９５０が／ＭＮＴ／ＣＯＰＹ０１の作業コピーである。
【０１４９】
次に、各ファイルシステムモジュールは、Ｓ１７１０の検索の結果、該当するエントリがあるかどうかを確認する（Ｓ１７２０）。該当するエントリがある場合（Ｓ１７２０がＹＥＳの場合）、各ファイルシステムモジュールは、当該エントリのサーバＩＤ９２０が示すサーバ２００のファイル共有サービスモジュール６５０に対して、作業コピーＩＤ９５０とオブジェクトパスから導出したパスを含むキャッシュ有無確認要求を発行し、当該オブジェクトのキャッシュとして使用可能な、実体化済でかつ未更新のオブジェクトがあるかどうかを確認する（Ｓ１７３０）。
【０１５０】
例えば、作業コピーＩＤ９５０が／ＭＮＴ／ＣＯＰＹ０１、実体化ようとしているオブジェクトパスが／ＭＮＴ／ＣＯＰＹ００／ＤＩＲ／ＦＩＬＥの場合、各ファイルシステムモジュールは、キャッシュが存在する可能性があるパスとして、／ＭＮＴ／ＣＯＰＹ０１／ＤＩＲ／ＦＩＬＥを指定し、ファイル共有サービスモジュール６５０に問い合わせる。ファイル共有サービスモジュール６５０は、指定されオブジェクトパスにあるオブジェクトのスタブフラグ１１３３と更新フラグ１１３４を参照し、実体化済み、かつ、未更新であるかどうかを確認する。
【０１５１】
なお、キャッシュ有無を確認する際、各ファイルシステムモジュールは、キャッシュ有無確認要求に実体化しようとしているオブジェクトのハッシュ値１１３２を含め、ファイル共有サービスモジュール６５０は、そのハッシュ値と指定されたオブジェクトパスにあるオブジェクトのハッシュ値１１３２と比較することで、未更新であるかを確認してもよい。あるいは、ファイル共有サービスモジュール６５０は、作業コピー管理テーブル９００のエントリにあるチェックアウト日時９６０と、更新日時１１２２を比較することで、未更新であるかを確認してもよい。
【０１５２】
Ｓ１７３０におけるキャッシュ有無確認の結果、実体化済でかつ未更新のオブジェクトがあった場合、すなわち、ファイル共有サービスモジュール６５０から「キャッシュ有」の応答を受け取った場合（Ｓ１７４０がＹＥＳの場合）、各ファイルシステムモジュールは、キャッシュを保持しているサーバのファイル共有サービスモジュール６５０に対して、キャッシュが存在しているパスを指定してオブジェクト取得要求を発行し、オブジェクトを取得する（Ｓ１７５０）。
【０１５３】
Ｓ１７３０におけるキャッシュ有無確認の結果、実体化済でかつ未更新のオブジェクトがなかった場合、すなわち、各ファイルシステムモジュールは、ファイル共有サービスモジュール６５０から「キャッシュ無」の応答を受け取った場合（Ｓ１７４０がＮＯの場合）、再びＳ１７２０に遷移し、Ｓ１７１０で見つかったエントリのうち、まだキャッシュ有無を確認していないエントリがあるかを調べる。エントリがある場合には、各ファイルシステムモジュールは、当該エントリに基づいて、再度キャッシュの有無を確認する。
【０１５４】
すなわち、各ファイルシステムモジュールは、Ｓ１７１０で該当したエントリを順次選択し、キャッシュが見つかるまでキャッシュ有無を確認する。なお、各ファイルシステムモジュールは、該当エントリについて、このように順次キャッシュ有無を確認するのではなく、全てのエントリについて同時にキャッシュ有無を確認してもよい。その場合は、各ファイルシステムモジュールは、最も早く「キャッシュ有」を応答したサーバ２００に対して、オブジェクト取得要求を発行する。
【０１５５】
Ｓ１７１０の検索の結果、該当するエントリがなかった場合、又は、該当するエントリ全てについてキャッシュ有無を確認したが、キャッシュが見つからなかった場合（Ｓ１７２０がＮＯの場合）、各ファイルシステムモジュールは、マスタサーバ情報６９０に基づいて、マスタサーバ３００のファイル共有サービスモジュール７１０に対して、オブジェクト取得要求を発行し、オブジェクトを取得する（Ｓ１７９０）。
【０１５６】
オブジェクト取得要求は、リポジトリＩＤ９３０、バージョンＩＤ９４０、及び実体化しようとしているオブジェクトのパスから導出した、当該オブジェクトのマスタサーバ３００上でのパスを含む。
【０１５７】
Ｓ１７５０又はＳ１７９０の工程によりオブジェクトを取得したら、各ファイルシステムモジュールは、実体化しようとしているオブジェクトがディレクトリであるかどうかを確認する（Ｓ１７６０）。
【０１５８】
オブジェクトがディレクトリの場合（Ｓ１７６０がＹＥＳの場合）、各ファイルシステムモジュールは、取得したオブジェクトのディレクトリ構成情報１０００に基づいて、実体化しようとしているディレクトリ以下に、スタブ状態のオブジェクトを作成することで、ディレクトリを実体化する（Ｓ１７７０）。例えば、取得した構成情報が図１０のディレクトリ構成情報１０００の場合、各ファイルシステムモジュールは、それぞれｏｂｊ００、ｏｂｊ０１という名前のファイル２つと、ｏｂｊ０２という名前のディレクトリとを、スタブ状態で作成する。
【０１５９】
オブジェクトがディレクトリでない場合（Ｓ１７６０がＮＯの場合）、各ファイルシステムモジュールは、取得したオブジェクトのデータ領域１１１０のデータを、スタブ状態のオブジェクトのデータ領域１１１０に書き込むことで、ファイルを実体化する（Ｓ１７８０）。
【０１６０】
図１８は、チェックアウトモジュール６２０が（ＣＰＵ２１０と恊働して）実行するチェックアウト処理の詳細を説明するためのフローチャートの一例である。チェックアウトモジュール６２０は、バージョン管理クライアントプログラム６００がバージョン管理インタフェースプログラム２９０から、チェックアウト要求を受信したときに実行する。チェックアウト要求は、チェックアウトモジュール６２０のサーバのサイトＩＤ、サーバＩＤ、チェックアウト対象のリポジトリＩＤ、バージョンＩＤ、作業コピーＩＤを含む。
【０１６１】
まず、チェックアウトモジュール６２０は、マスタサーバ情報６９０に基づいて、マスタサーバ３００のチェックアウトサービスモジュール７２０に対して、チェックアウト要求を発行し、所望のリポジトリ・バージョンのルートディレクトリのディレクトリ構成情報１０００を取得する（Ｓ１８１０）。
【０１６２】
このとき、チェックアウトサービスモジュール７２０は、チェックアウト要求に含まれるサイトＩＤ、サーバＩＤ、リポジトリＩＤ、バージョンＩＤ、作業コピーＩＤと、現在の日時を組としてエントリを作成し、そのエントリをマスタサーバ３００の作業コピー管理テーブル７７０に追加する。そして、チェックアウトサービスモジュール７２０は、要求されたリポジトリのルートディレクトリ構成情報を応答する。
【０１６３】
次に、チェックアウトモジュール６２０は、作業コピーＩＤにより指定されたパスに、当該作業コピーのルートディレクトリを作成し、Ｓ１８１０で取得したディレクトリ構成情報１０００に基づいて、そのルートディレクトリに、スタブ状態のオブジェクトを作成する（Ｓ１８２０）。
【０１６４】
チェックアウトモジュール６２０は、マスタサーバ３００の作業コピー管理モジュール７４０に対し、作業コピー管理テーブル同期要求を発行し、マスタサーバ３００の作業コピー管理テーブル７７０と、サーバ２００の作業コピー管理テーブル９００とを同期する（Ｓ１８３０）。
【０１６５】
図１９は、チェックインモジュール６３０が（ＣＰＵ２１０と恊働して）実行するチェックイン処理の詳細を説明するためのフローチャートの一例である。チェックインモジュール６３０は、バージョン管理クライアントプログラム６００がバージョン管理インタフェースプログラム２９０から、チェックイン処理要求を受信したときに実行する。チェックイン処理要求は、チェックインする作業コピーＩＤと、チェックインする先のリポジトリＩＤとを含む。
【０１６６】
まず、チェックインモジュール６３０は、作業コピーＩＤが示す作業コピーのディレクトリツリーの中から、更新されたオブジェクトのリストを作成する（Ｓ１９１０）。次に、チェックインモジュール６３０は、マスタサーバ情報６９０に基づいて、マスタサーバ３００のチェックインサービスモジュール７３０に対して、チェックイン要求を発行し、競合がないかどうかを確認する（Ｓ１９２０）。チェックイン要求は、Ｓ１９１０で作成した更新オブジェクトのリストを含む。
【０１６７】
Ｓ１９２０で発行したチェックイン要求の応答として、競合しているオブジェクトのリストが得られた場合（Ｓ１９３０がＹＥＳの場合）、チェックインモジュール６３０は、バージョン管理インタフェースプログラム２９０を介して、ユーザに警告を表示する（Ｓ１９４０）。
【０１６８】
そして、ユーザが競合を解消するためのマージ作業を行って、バージョン管理インタフェースプログラム２９０を通じて、マージ作業完了を通知するまで、チェックインモジュール６３０は待機する（Ｓ１９５０）。最後に、チェックインモジュール６３０は、ユーザによってマージされたオブジェクトを含む更新対象のオブジェクトを、マスタサーバ３００の対象リポジトリに対してコピーする（Ｓ１９６０）。
【０１６９】
Ｓ１９２０で発行したチェックイン要求の応答として、競合しているオブジェクトのリストが得られなかった場合（Ｓ１９３０がＮＯの場合）、チェックインモジュール６３０は、更新対象のオブジェクトを、マスタサーバ３００の対象リポジトリに対してコピーする（Ｓ１９６０）。
【０１７０】
以上本実施形態によれば、コピーされたファイルシステムである作業コピーにおいて、実体情報を有していないスタブと作業コピー管理テーブル９００とを使用することで、ユーザが作業コピーにおいて必要とするオブジェクトをスタブにより指定することができ、システムが作業コピー管理テーブル９００により、指定オブジェクトのキャッシュを、少ない問合せ回数で効率よく発見することができる。
【０１７１】
このように、スタブと作業コピー管理テーブルを使用した分散キャッシュにより、より高速に作業コピーにおける必要なデータをユーザが取得することができる。さらに、作業コピー管理テーブルは、作業コピー単位でキャッシュデータの管理を行うため、キャッシュ管理のための作業コピー管理テーブルのサイズを小さくすると共に、そのテーブルをサーバ（マスタサーバ含む）間で同期するための転送情報を小さくすることができる。
【０１７２】
以上、本発明の実施形態を説明したが、本発明が上記の実施形態に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。
【０１７３】
例えば、ユーザが端末１００からサーバ２００にログインして、チェックアウトした作業コピーを直接読み書きする例を説明したが、サーバ２００のファイル共有サービスモジュール６５０で、Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＮＦＳ）プロトコルや、Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＣＩＦＳ）プロトコルに準拠したファイル共有機能を提供し、複数の端末上で作業コピーを共有してもよい。その場合、チェックインやチェックアウトの操作は、その作業コピーを管理するユーザが実施する。
【０１７４】
スタブ実体化処理として、オブジェクト単位でサーバ２００やマスタサーバ３００からデータを取得する例を示したが、ファイルシステムプログラム５００が保持するファイルのオフセット情報と、ＲＥＡＤ処理要求やＷＲＩＴＥ処理要求に含まれる読み書き対象のサイズに基づいて、必要な部分を、例えば、ブロック単位でデータを取得してもよい。
【０１７５】
上述のように、作業コピー管理テーブルのエントリは、作業コピーと一対一で対応していることが好ましいが、作業コピー管理テーブルは、作業コピーに対して複数のエントリを有していていもよい。例えば、ディレクトリ又はファイルを特定するフィールドを追加し、同一作業コピーエントリがこれらのフィールドの異なる値を格納することができる。このようなフィールドが存在する場合は、そのオブジェクトの更新の有無を示すフィールドも有していてもよい。
【０１７６】
リポジトリＩＤとサーバＩＤによりオブジェクトのキャッシュの問い合わせ先を特定することができる。そのため、作業コピー管理テーブルは、バージョンＩＤ及び作業コピーＩＤ及び他のフィールドを含まなくてもよい。上述のように、問い合わせ回数低減のためにはバージョンＩＤを含むことが好ましい。
【０１７７】
上記構成において、マスタサーバ３００が作業コピー管理テーブルのマスタテーブルを備え、それをサーバ２００がコピーする。マスタサーバ３００がマスタテーブルを有することで作業コピー管理テーブルの同期管理をより適切に行うことがきると共に、各サーバ間で発生する同期のためのデータ転送を低減することができる。これと異なり、各サーバ２００間において、作業コピー管理テーブルの同期処理を行ってもよい。
【０１７８】
上記構成は、１つのマスタサーバのみを有するが、本発明は、複数のマスタサーバを有するシステムに適用でき、また、１つのサーバと１又は複数のマスタサーバからなるシステムにも適用することができる。
【０１７９】
上記構成において、作業コピーはリポジトリのルートディレクトリを含むが、作業コピーは、ルートディレクトリより下層のディレクトリをトップディレクトリとするファイルシステムであってもよい。例えば、ユーザは、チェックアウトにおいて、リポジトリの特定のディレクトリをトップディレクトリとして指定する。
【０１８０】
本発明は、上述のように、バージョン管理機能を有するファイルシステムに特に好適であるが、これとは異なるファイルシステムに適用することができる。例えば、ユーザは、マスタサーバよりファイルシステムのコピーを取得のみで、マスタサーバが更新データを受け付けないシステムに適用してもよい。
【０１８１】
上記の各構成、機能、処理、処理部等は、それらの一部を、ハードウェアで実現してもよい。各機能を実現するためのプログラム及びデータを含む情報は、不揮発性半導体メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の、計算機読み取り可能な非一時的記録媒体に格納することができる。
【符号の説明】
【０１８２】
１００Ａ、１００Ｂ：端末、２００：サーバ、３００：マスタサーバ、２７０：ファイルシステム、３７０：ファイルシステム、２８０：作業コピー、３８０：リポジトリ、３９０：ファイルシステムプログラム、４００Ａ、４００Ｂ、４００Ｃ：作業コピー管理テーブル、５００：ファイルシステムプログラム、５１０：ＯＰＥＮ処理モジュール、５２０：ＲＥＡＤ処理モジュール、５３０：ＷＲＩＴＥ処理モジュール、６００：バージョン管理クライアントプログラム、６１０：スタブ実体化モジュール、６２０：チェックアウトモジュール、６３０：チェックインモジュール、６４０：作業コピー管理モジュール、６５０：ファイル共有サービスモジュール、６８０：作業コピー検索ポリシ、６９０：マスタサーバ情報、７００：バージョン管理サーバプログラム、７１０：ファイル共有サービスモジュール、７２０：チェックアウトサービスモジュール、７３０：チェックインサービスモジュール、７４０：作業コピー管理モジュール、７５０：バージョン管理モジュール、７７０：作業コピー管理テーブル、８００：バージョン管理テーブル、９００：作業コピー管理テーブル
【図１】
0005602311.tif 000002
【図２】
0005602311.tif 000003
【図３】
0005602311.tif 000004
【図４】
0005602311.tif 000005
【図５】
0005602311.tif 000006
【図６】
0005602311.tif 000007
【図７】
0005602311.tif 000008
【図８】
0005602311.tif 000009
【図９】
0005602311.tif 000010
【図１０】
0005602311.tif 000011
【図１１】
0005602311.tif 000012
【図１２】
0005602311.tif 000013
【図１３】
0005602311.tif 000014
【図１４】
0005602311.tif 000015
【図１５】
0005602311.tif 000016
【図１６】
0005602311.tif 000017
【図１７】
0005602311.tif 000018
【図１８】
0005602311.tif 000019
【図１９】
0005602311.tif 000020