(57)【要約】  第１のエッジノード（いずれかのエッジノード）が提供する第１のローカル名前空間のアップデートをセンタ名前空間に反映することであるマイグレーションにおいて、センタノードが、又は、センタ名前空間のアップデートを第２のエッジノード（第１のエッジノード以外のいずれかのエッジノード）が提供する第２のローカル名前空間に反映することである同期において、第２のエッジノードが、反映元の名前空間と反映先の名前空間との間において異なるオブジェクトについて、（Ａ）及び（Ｂ）を行う。具体的には、センタノード又は第２のエッジノードが、（Ａ）定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断し、（Ｂ）（Ａ）の判断の結果が肯定の場合に、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行する。
2016121083.tif 000002
【特許請求の範囲】
【請求項１】
複数のローカル名前空間をそれぞれ提供する複数のエッジノードと、
前記複数のエッジノードに接続され前記複数のローカル名前空間に対応したセンタ名前空間を提供するセンタノードと
を有し、
第１のエッジノードが提供する第１のローカル名前空間のアップデートをセンタ名前空間に反映することであるマイグレーションにおいて、又は、前記センタ名前空間のアップデートを第２のエッジノードが提供する第２のローカル名前空間に反映することである同期において、前記センタノード又は前記第２のエッジノードが、反映元の名前空間と反映先の名前空間との間において異なるオブジェクトについて、
（Ａ）定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断し、
（Ｂ）（Ａ）の判断の結果が肯定の場合に、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行し、
前記第１のエッジノードは、いずれかのエッジノードであり、
前記第２のエッジノードは、前記第１のエッジノード以外のいずれかのエッジノードである、
計算機システム。
【請求項２】
前記複数のエッジノードと、前記センタノードと、前記複数のエッジノード及び前記センタノードとのうちの少なくとも１つに接続された管理ノードとのうちの少なくとも１つである対象ノードが、
ユーザ又は管理者から情報の入力を受け付けるユーザインターフェースを提供し、
前記ユーザインターフェースを通じて入力された情報に従い、前記定義された複数の衝突ケースと、前記定義された複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーとのうちの少なくとも１つをアップデート又は削除する、又は、衝突ケースと衝突解決ポリシーとの組を新たに追加する、
請求項１記載の計算機システム。
【請求項３】
前記対象ノードが、
前記ユーザインターフェースを通じて、前記複数のエッジノードと前記センタノードのうちの２以上のノードの各々についての優先順位の入力を受け、
前記２以上のノードの各々の入力された優先順位に従い、前記定義された複数の衝突ケースと、前記定義された複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーとのうちの少なくとも１つをアップデートする、
請求項２記載の計算機システム。
【請求項４】
前記複数のエッジノードの各々が、前記定義された複数の衝突ケースと、前記定義された複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーとを表す情報を記憶し、
前記複数のエッジノードの各々が、前記センタ名前空間のアップデートをそのエッジノードが提供するローカル名前空間に反映することである同期において、前記センタ名前空間内の複数のオブジェクトのうち変更された１以上のオブジェクトの各々について、（Ａ）及び（Ｂ）を実行する、
請求項１記載の計算機システム。
【請求項５】
前記該当する衝突ケースに対応した衝突解決ポリシーが、前記第２のローカル名前空間における衝突オブジェクトの退避を必要とする場合、前記第２のエッジノードが、（Ｂ）において、その衝突オブジェクトの退避先とする退避用ディレクトリを、前記第２のローカル名前空間に作成し、作成した退避用ディレクトリに、その衝突オブジェクトを移動する、
請求項１記載の計算機システム。
【請求項６】
該当する衝突ケースが、反映元の名前空間において作成又はリネームされたディレクトリと同名のファイルが反映先の名前空間において作成されているというケースであり、
前記該当する衝突ケースに対応した衝突解決ポリシーは、ファイルよりディレクトリを優先することに従うポリシーであり、
（Ｂ）において、該当する衝突ケースに対応した衝突解決ポリシーに従う処理として、
前記第２のローカル名前空間に、前記作成又はリネームされたディレクトリが格納され、
前記同名のファイルが、前記第２のローカル名前空間に作成された退避用ディレクトリに移動される、
請求項５記載の計算機システム。
【請求項７】
該当する衝突ケースが、反映元の名前空間において作成、アップデート、削除又はリネームされたファイルパスと同名のファイルパスが反映先の名前空間において作成、アップデート、削除又はリネームされているというケースであり、
前記該当する衝突ケースに対応した衝突解決ポリシーは、最先のマイグレーションを優先することに従うポリシーであり、
（Ｂ）において、該当する衝突ケースに対応した衝突解決ポリシーに従う処理として、
前記第２のローカル名前空間に、反映元の名前空間における作成、アップデート、削除又はリネームの結果が反映され、
前記第２のローカル名前空間において作成、アップデート、削除又はリネームされたファイルパスに属するファイルが、前記第２のローカル名前空間に作成された退避用ディレクトリに移動される、
請求項５記載の計算機システム。
【請求項８】
該当する衝突ケースが、反映元の名前空間において削除されたディレクトリと同一ディレクトリ内のオブジェクトが反映先の名前空間においてアップデートされているというケースであり、
前記該当する衝突ケースに対応した衝突解決ポリシーは、ディレクトリ削除を優先することに従うポリシーであり、
（Ｂ）において、該当する衝突ケースに対応した衝突解決ポリシーに従う処理として、前記第２のローカル名前空間における前記同一のディレクトリが、退避されること無しに削除される、
請求項５記載の計算機システム。
【請求項９】
前記第２のエッジノードが、前記第２のエッジノードのユーザからの前記退避用ディレクトリへの書き込みを禁止する、
請求項５記載の計算機システム。
【請求項１０】
前記退避用ディレクトリへのファイルパスに、前記第２のエッジノードにより、移動されるオブジェクトの使用に関する情報として、以下のうちの少なくとも１つが含まれる、
（ａ）そのオブジェクトが作成、アップデート又はリネームされた最新の時刻を表す時刻情報、
（ｂ）そのオブジェクトを使用するユーザのユーザＩＤ、
請求項５記載の計算機システム。
【請求項１１】
前記第２のローカル名前空間に、退避用ディレクトリの上位ディレクトリとなる特殊ディレクトリがあり、
前記第２のエッジノードが、退避用ディレクトリの作成として、
前記特殊ディレクトリの子ディレクトリとして、前記時刻情報の上位部分とユーザＩＤとのうちの一方を含んだ名前をディレクトリ名として有する第１のディレクトリを作成し、
前記第１のディレクトリの子ディレクトリとして、前記時刻情報の上位部分とユーザＩＤとのうちの他方を含んだ名前をディレクトリ名として有する第２のディレクトリを作成し、
前記第２のエッジノードが、
前記第２のディレクトリにオブジェクトを移動し、
前記第２のディレクトリに移動されるオブジェクトの名前に、前記時刻情報の下位部分を含める、
請求項１０記載の計算機システム。
【請求項１２】
複数のローカル名前空間をそれぞれ提供する複数のエッジノードと、前記複数のエッジノードに接続され前記複数のローカル名前空間に対応したセンタ名前空間を提供するセンタノードとを有する計算機システムにおいて行われる分散オブジェクト共有方法であって、
第１のエッジノードが提供する第１のローカル名前空間のアップデートをセンタ名前空間に反映することであるマイグレーションにおいて、又は、前記センタ名前空間のアップデートを第２のエッジノードが提供する第２のローカル名前空間に反映することである同期において、前記センタノード又は前記第２のエッジノードにより、反映元の名前空間と反映先の名前空間との間において異なるオブジェクトについて、
（Ａ）定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断し、
（Ｂ）（Ａ）の判断の結果が肯定の場合に、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行し、
前記第１のエッジノードは、いずれかのエッジノードであり、
前記第２のエッジノードは、前記第１のエッジノード以外のいずれかのエッジノードである、
分散オブジェクト共有方法。
【請求項１３】
別のエッジノードに接続されたセンタノードに接続されたインターフェースデバイスと、
前記インターフェースデバイスに接続されローカル名前空間を提供するプロセッサと
を有し、
前記センタノードは、センタ名前空間を提供し、
前記センタ名前空間は、前記別のエッジノードが提供する別のローカル名前空間のアップデートが反映されることによりアップデートされ、
前記センタ名前空間のアップデートを前記ローカル名前空間に反映することである同期において、前記プロセッサが、反映元の名前空間と反映先の名前空間との間において異なるオブジェクトについて、
（Ａ）定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断し、
（Ｂ）（Ａ）の判断の結果が肯定の場合に、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行する、
エッジノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、分散オブジェクト共有に関する。
【背景技術】
【０００２】
複数の拠点の各々に、エッジサーバが配置され、複数の拠点から離れたデータセンタに、各エッジサーバと通信可能なコアサーバが配置される計算機システムが知られている（例えば特許文献１）。各拠点において、エッジノードが、クライアントに、ファイルシステムのような名前空間（以下、ローカル名前空間）を提供し、クライアントが、そのローカル名前空間をアップデートする（例えば、ローカル名前空間内のオブジェクト（ディレクトリ又はファイル）に対して変更操作（例えば、作成、アップデート、削除、リネーム、又はコピー）を行う）。いずれかのエッジノードが提供するローカル名前空間のアップデートが、コアノードが管理する名前空間（以下、センタ名前空間）に反映される（マイグレーション）。コアノードが管理するセンタ名前空間のアップデートが、別のエッジノードが提供するローカル名前空間に反映される（同期）。このようにして、複数のエッジノードが名前空間を共有する。【０００３】
異なる複数のローカル名前空間内の同一のオブジェクトに対する異なる変更操作によりオブジェクトの衝突が発生し得る。特許文献１は、衝突ファイルを退避用特殊ディレクトリへ移動することにより衝突を解決する。非特許文献１は、衝突ファイルを退避用特殊ディレクトリへ移動する方法と、衝突ファイルに別の変更操作に従うファイルを上書きする方法とのいずれかの方法により衝突を解決する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】WO2014/154578
【非特許文献】
【０００５】
【非特許文献１】IBM, “Panache: A Parallel File System Cache for Global File Access”, FAST’10, 2010.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上書きという方法（以下、第１の方法）を単に採用した場合、先に更新したオブジェクトの内容が失われてしまう。衝突ファイルを退避用特殊ディレクトリへ移動するという方法（以下、第２の方法）を単に採用した場合、退避用特殊ディレクトリの下位に多数のオブジェクトが存在し得ることになり、管理が煩雑になり得る。
【課題を解決するための手段】
【０００７】
第１のエッジノード（いずれかのエッジノード）が提供する第１のローカル名前空間のアップデートをセンタ名前空間に反映することであるマイグレーションにおいて、又は、センタ名前空間のアップデートを第２のエッジノード（第１のエッジノード以外のいずれかのエッジノード）が提供する第２のローカル名前空間に反映することである同期において、センタノード又は第２のエッジノードが、反映元の名前空間と反映先の名前空間との間において異なるオブジェクトについて、（Ａ）及び（Ｂ）を行う。具体的には、センタノード又は第２のエッジノードが、（Ａ）定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断し、（Ｂ）（Ａ）の判断の結果が肯定の場合に、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行する。
【発明の効果】
【０００８】
第１及び第２の方法のいずれかだけを常に行うことに比べて、利便性及び柔軟性のうちの少なくとも１つが高い。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係る計算機システムの概要を示す。
【図２】ＮＡＳの構成を示す。
【図３】ＣＡＳの構成を示す。
【図４】ポリシー情報の一例を示す。
【図５】特殊ディレクトリの構造の一例を示す。
【図６】拠点ＡのＮＡＳからＣＡＳへのマイグレーション処理の前後の様子の一例を示す。
【図７】ＣＡＳから拠点ＢのＮＡＳへの同期処理の前後の様子の一例を示す。
【図８】自拠点アップデートリストの例を示す。
【図９】ＮＡＳからＣＡＳへのマイグレーション処理のフローチャートである。
【図１０】ＣＡＳからＮＡＳへの同期処理のフローチャートである。
【図１１】名前空間反映処理のフローチャートである。
【図１２】第１のＵＩの一例を示す。
【図１３】第２のＵＩの一例を示す。
【発明を実施するための形態】
【００１０】
以下、一実施形態を説明する。
【００１１】
以下の説明では、「×××リスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××リスト」を「×××情報」と呼ぶことができる。
【００１２】
また、以下の説明では、要素の識別情報として、ＩＤ又は名前が使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
【００１３】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００１４】
また、以下の説明では、「記憶部」は、メモリを含んだ１以上の記憶デバイスでよい。例えば、記憶部は、主記憶デバイス（典型的には揮発性のメモリ）及び補助記憶デバイス（典型的には不揮発性の記憶デバイス）のうちの少なくとも主記憶デバイスでよい。また、記憶部は、キャッシュ領域（例えばキャッシュメモリ又はその一部領域）とバッファ領域（例えばバッファメモリ又はその一部領域）とのうちの少なくとも１つを含んでもよい。
【００１５】
また、以下の説明では、「ＰＤＥＶ」は、物理的な記憶デバイスを示し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）でよい。ＰＤＥＶは、例えば、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）でよい。
【００１６】
また、以下の説明では、「ＲＡＩＤ」は、Redundant  Array  of  Independent  （or  Inexpensive）  Disksの略である。ＲＡＩＤグループは、複数のＰＤＥＶで構成され、そのＲＡＩＤグループに関連付けられたＲＡＩＤレベルに従いデータを記憶する。ＲＡＩＤグループは、パリティグループと呼ばれてもよい。パリティグループは、例えば、パリティを格納するＲＡＩＤグループのことでよい。
【００１７】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディア（例えば可搬型の記憶メディア）であってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１８】
また、以下の説明では、管理ノードは、一以上の計算機で構成されてよい。具体的には、例えば、管理計算機が情報を表示する場合（具体的には、例えば、管理計算機が自分の表示デバイスに情報を表示する、或いは、管理計算機が表示用情報を遠隔の表示用計算機に送信する場合）、管理計算機が管理ノードである。また、例えば、複数の計算機で管理計算機と同等の機能が実現されている場合は、当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機を含んでよい）が、管理ノードである。管理計算機は、表示システムを含むＩ／Ｏシステムに接続されたインターフェースデバイスと、記憶部（例えばメモリ）と、インターフェースデバイス及び記憶部に接続されたプロセッサとを有してよい。表示システムは、管理計算機が有する表示デバイスでもよいし、管理計算機に接続された表示用計算機でもよい。Ｉ／Ｏシステムは、管理計算機が有するＩ／Ｏデバイス（例えばキーボード及びポインティングデバイス、タッチパネル）でもよいし、管理計算機に接続された表示用計算機又は別の計算機でもよい。管理計算機が「表示用情報を表示する」ことは、表示システムに表示用情報を表示することであり、これは、管理計算機が有する表示デバイスに表示用情報を表示することであってもよいし、管理計算機が表示用計算機に表示用情報を送信することであってもよい（後者の場合は表示用計算機によって表示用情報が表示される）。また、管理計算機が情報を入出力するとは、管理計算機が有するＩ／Ｏデバイスとの間で情報の入出力を行うことであってもよいし、管理計算機に接続された遠隔の計算機（例えば表示用計算機）との間で情報の入出力を行うことであってもよい。情報の出力は、情報の表示であってもよい。
【００１９】
また、以下の実施形態では、エッジノードの一例として、ＮＡＳ（Network  Attached  Storage）が採用され、コアノードの一例として、ＣＡＳ（Content  Addressed  Storage）が採用される。
【００２０】
また、以下の実施形態では、ＣＡＳと複数のＮＡＳを有する計算機システムにおいて、反映先のローカル名前空間よりセンタ名前空間（言い換えれば、先にアップデートされたローカル名前空間）を優先する衝突解決ポリシーが採用される。しかし、いずれの名前空間が優先されてもよい。例えば、或るＮＡＳのローカル名前空間の優先順位はセンタ名前空間の優先順位より高く、別のＮＡＳローカル名前空間の優先順位はセンタ名前空間の優先順位より低くてもよい。また、衝突解決ポリシーは、各ＮＡＳ、ＣＡＳ、及び、ＣＡＳと複数のＮＡＳとのうちの少なくとも１つに接続された管理ノードのうちのいずれに設けられてもよい。
【００２１】
また、以下の実施形態では、ＮＡＳからＣＡＳへの反映（ローカル名前空間のアップデートのセンタ名前空間への反映）を「マイグレーション」と呼び、ＣＡＳからＮＡＳへの反映（センタ名前空間のアップデートのローカル名前空間への反映）を「同期」と呼ぶ。
【００２２】
また、以下の実施形態では、計算機システムが、複数のＮＡＳと１つのＣＡＳとに代えて、複数のクライアントと、１つのＮＡＳとを有してもよい。つまり、エッジノードの一例がクライアントであって、コアノードの一例がＮＡＳであってもよい。
【００２３】
また、複数のＮＡＳ（又は複数のクライアント）に共通のオブジェクトを参照する際、その共通のオブジェクトを有するＣＡＳ（又はＮＡＳ）において少なくともその共通のオブジェクトについてロックが必要であるが、ロック処理は既に知られている方法を利用すればよい。そのため、以下の実施形態の説明では、ロック処理の説明は省略する。
【００２４】
また、以下の実施形態では、名前空間の一例として「ファイルシステム」が採用される。ファイルシステムは、「ＦＳ」と呼ばれることもある。
【００２５】
また、以下の説明では、或るオブジェクトよりルートノードに近いオブジェクトを、「上位のオブジェクト」と言うことがあり、そのうち、特にその或るオブジェクトに直近のオブジェクトを、「親オブジェクト」と言うことがある。一方、或るオブジェクトよりルートノードに遠いオブジェクトを、「下位のオブジェクト」と言うことがあり、そのうち、特にその或るオブジェクトに直近のオブジェクトを、「子オブジェクト」と言うことがある。なお、オブジェクトは、例えばディレクトリ又はファイルである。
【００２６】
図１は、実施形態に係る計算機システムの概要を示す。
【００２７】
１つのデータセンタ１２０に対して複数の拠点１００が存在する。本実施形態では、複数の拠点１００として、２つの拠点、すなわち、拠点Ａ（１００Ａ）と拠点Ｂ（１００Ｂ）が存在するものとするが、拠点１００の数は２より多くてもよい。また、以下の説明では、拠点Ａ内の要素については、参照符号の末尾に「Ａ」を付して説明し、拠点Ｂ内の要素については、参照符号の末尾に「Ｂ」を付して説明することがある。また、拠点Ａ内の要素であるか拠点Ｂ内の要素であるかを区別しない場合には、参照符号の末尾に「Ａ」及び「Ｂ」のいずれも付さないことがある。また、以下、拠点Ａ及び拠点Ｂのうちの一方を例に取って説明し他方についてその説明を省略することあるが、それは説明の冗長（重複）を避けるためである。拠点Ａ及び拠点Ｂは、それぞれ同じ機能を有している。
【００２８】
拠点Ａ（１００Ａ）は、クライアント１０１Ａと、クライアント１０１Ａに通信ネットワーク１０３Ａ（例えばＬＡＮ（Local  Area  Network））を介してローカルＦＳ１０４Ａを提供するＮＡＳ１０２Ａとを有する。同様に、拠点Ｂ（１００Ｂ）は、クライアント１０１Ｂと、クライアント１０１Ｂに通信ネットワーク１０３Ｂ（例えばＬＡＮ）を介してローカルＦＳ１０４Ｂを提供するＮＡＳ１０２Ｂとを有する。クライアント１０１Ａ及び１０１Ｂのいずれも、１以上存在してよい。クライアント１０１は、ＮＡＳ１０２が提供するファイル共有サービスを利用する計算機である。クライアント１０１は、ＮＦＳ（Network  File  System）やＣＩＦＳ（Common  Internet  File  System）等のファイル共有プロトコルを利用して、ネットワーク１０３を経由してＮＡＳ１０２が提供するファイル共有サービスを利用する。
【００２９】
データセンタ１２０は、センタＦＳ１２２を提供するＣＡＳ１２１を有する。ＣＡＳ１２１に、通信ネットワーク１０５Ａ及び１０５Ｂ（例えばＷＡＮ（Wide  Area  Network））を介してＮＡＳ１０２Ａ及び１０２Ｂがそれぞれ接続される。通信ネットワーク１０５Ａ及び１０５Ｂは、一体でもよいし、別の通信ネットワークでもよい。また、ＣＡＳ１２１に、通信ネットワーク１２３（例えばＬＡＮ）を介して管理ノード１２４が接続される。管理者（管理ノード１２４のオペレータ）は、管理ノード１２４から、ＣＡＳ１２１（及びＮＡＳ１０２）の管理を行う。管理として、例えば、ＣＡＳ１２１（及びＮＡＳ１０２）の運用開始、ＣＡＳ１２１（及びＮＡＳ１０２）の停止、クライアント１０１のアカウントの管理等がある。なお、管理ノード１２４は、少なくとも１つのＮＡＳに通信可能に接続されていてもよいし、管理ノード１２４とは別に少なくとも１つのＮＡＳの管理ノードとが設けられていてもよい。
【００３０】
クライアント１０１Ａが読み書きするデータは、ファイルとしてローカルＦＳ１０４Ａに格納される。同様に、クライアント１０１Ｂが読み書きするデータは、ファイルとしてローカルＦＳ１０４Ｂに格納される。ローカルＦＳ１０４Ａ及び１０４ＢとセンタＦＳ１２２は、同一の名前空間である。
【００３１】
ＮＡＳ１０２は、ローカルＦＳ１０４に格納されたファイルを、或る契機（所定又は任意のタイミング）で、データセンタ１２０に送信し、送信されたファイルは、センタＦＳ１２２に格納される（マイグレーション）。また、ＮＡＳ１０２は、或る契機（所定又は任意のタイミング）で、センタＦＳ１２２のアップデートを、ローカルＦＳ１０４に反映する（同期）。
【００３２】
異なるローカルＦＳ１０４Ａ及び１０４Ｂにおいて同一のオブジェクト（例えば、ディレクトリ、ファイル又はファイルパス）について異なる変更操作（例えば、作成、アップデート、削除又はリネーム）が行われると、衝突が生じ得る。
【００３３】
本実施形態では、各ＮＡＳ１０２が、ポリシー情報４００を保持する。ポリシー情報４００は、定義された複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーを含む。各ＮＡＳ１０２は、同期において、ポリシー情報４００を参照し、センタＦＳ１２２（反映元）とローカルＦＳ１０４（反映先）との間において異なるオブジェクトについて、定義された複数の衝突ケースのうちのいずれかの衝突ケースに該当するか否かを判断する。その判断の結果が肯定の場合に、ＮＡＳ１０２は、その異なるオブジェクトについて、該当する衝突ケースに対応した衝突解決ポリシーに従う処理を実行する。
【００３４】
該当する衝突ケースとそれに対応した衝突解決ポリシーに従う処理の一例は、図１に示す通りである。
【００３５】
ＮＡＳ１０２Ａが、クライアント１０１Ａからのライト要求に応答して、ローカルＦＳ１０４Ａをアップデートしたとする。そのアップデートは、ローカルＦＳ１０４Ａ内のディレクトリＡの子オブジェクトの１つであるファイルＸに対してアップデートを行ったことであるとする。ここでのファイルＸのアップデートは、ファイルＸの内容又はファイル名のアップデートであるとする。ＮＡＳ１０２ＡにおいてアップデートされたファイルＸを「ファイルＸ１」と言う。一方、ＮＡＳ１０２Ｂが、ローカルＦＳ１０４Ａのアップデート前又はそのアップデートの反映前に、クライアント１０１Ｂからのライト要求に応答して、ローカルＦＳ１０４Ｂをアップデートしたとする。そのアップデートは、同一のファイルパスに従う同一ファイル、すなわち、ディレクトリＡの子オブジェクトの１つであるファイルＸに対してアップデートを行ったことであるとする。そのアップデートも、ファイルＸの内容又はファイル名のアップデートであるとするが、ＮＡＳ１０２Ａでのアップデートとは異なるアップデートである。ＮＡＳ１０２ＢにおいてアップデートされたファイルＸを「ファイルＸ２」と言う。ファイルＸ１とファイルＸ２は衝突している。
【００３６】
先に、ＮＡＳ１０２Ａが、ＣＡＳ１２１と通信したとする。これにより、ＮＡＳ１０２Ａが、ファイルＸ１がセンタＦＳ１２２内のファイルと衝突しないことを特定したとする。そして、ＮＡＳ１０２ＡとＣＡＳ１２１間でマイグレーションが行われたとする。すなわち、ローカルＦＳ１０４ＡのアップデートがセンタＦＳ１２２に反映されたとする。従って、センタＦＳ１２２では、ディレクトリＡ内のファイルＸが、ファイルＸ１にアップデートされる。
【００３７】
その後、ＮＡＳ１０２Ｂが、ＣＡＳ１２１と通信したとする。これにより、ＮＡＳ１０２Ｂが、ファイルＸ２がセンタＦＳ１２２内のファイルＸ１と衝突することを特定したとする。ＮＡＳ１０２Ｂが、ポリシー情報４００から、その衝突のケースに対応する衝突解決ポリシーを特定し、特定した衝突解決ポリシーに従う処理を実行する。図１の例では、その処理は、以下の通りである。すなわち、ＮＡＳ１０２Ｂが、ローカルＦＳ１０４Ｂに、特殊ディレクトリ７０２Ｂ（「.conflict」）の下位に退避用ディレクトリ（図示せず）を作成する。特殊ディレクトリ７０２Ｂは、退避用ディレクトリの作成先となる所定のディレクトリである。ＮＡＳ１０２Ｂが、参照符号１５３により示すように、ローカルＦＳ１０４Ｂ内のパスであり衝突ファイルＸ２へのパスであるファイルパス（衝突ファイルＸ２と、衝突ファイルＸ２とルートノード間のパスに存在する上位オブジェクトとの一群）を、特殊ディレクトリ７０２Ｂの下位に作成された退避ディレクトリに退避する。また、ＮＡＳ１０２Ｂが、参照符号１５５により示すように、センタＦＳ１２２内のパスでありファイルＸ１へのパスであるファイルパス（ファイルＸ１と、ファイルＸ１とルートノード間のパスに存在する上位オブジェクトとの一群）を、ローカルＦＳ１０４Ｂに反映する。なお、退避ディレクトリへ退避する一群、及び、ローカルＦＳ１０４へ反映する一群は、衝突ファイルとその親オブジェクトのみとしても良い。
【００３８】
以上のように、該当する衝突ケースに対応した衝突解決ポリシーが実行される。本実施形態では、各ＮＡＳ１０２が、ポリシー情報４００を保持するが、ポリシー情報４００は、ＮＡＳ１０２に代えて又は加えて、破線で示すように、ＣＡＳ１２１と、ＣＡＳ１２１とＮＡＳ１０２のうちの少なくとも１つに接続される管理ノード１２４とのうちの少なくとも１つにより保持されてもよい。ＮＡＳ１０２以外のノードがポリシー情報４００を保持するケースでは、ＮＡＳ１０２とそのノード間で通知（又は問合せ）等の通信が必要になり得るが、本実施形態のように、各ＮＡＳ１０２がポリシー情報４００を保持していれば、そのような通信は不要である。特に、ＮＡＳ１０２のようなエッジノードは、ファイルに対する変更操作（例えば、作成、アップデート又はリネームの要求）を最初に受け付けるノードなので、そのようなノードがポリシー情報４００を持つ意義（及び、衝突解決ポリシーに従う処理を実行する意義）は、他種のノードがポリシー情報４００を持つことに比べて大きいと考えられる。また、衝突ケースの特定は、ＮＡＳ１０２に代えて、ＣＡＳ１２１及び管理ノード１２４のうちのいずれかが行ってもよい。また、衝突解決ポリシーに従う処理は、ＮＡＳ１０２により行われるが、その処理は、その衝突解決ポリシーを特定したＣＡＳ１２１又は管理ノード１２４からの指示に従って行われてよい。例えば、センタＦＳ１２２内に退避用ディレクトリが作成され、退避用ディレクトリに衝突ファイルが退避されてもよい。
【００３９】
本実施形態では、複数の衝突ケースと、その複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーが定義されており、該当する衝突ケースに対応した衝突解決ポリシーに従う処理が実行される。これにより、上書きという方法と衝突ファイルを退避用ディレクトリへ退避するという方法のいずれかだけを常に行うことに比べて、利便性及び柔軟性のうちの少なくとも１つが高い。具体的には、例えば、ユーザの意図する構造の名前空間を保持することが期待できる。
【００４０】
以下、実施形態を詳細に説明する。
【００４１】
図２は、ＮＡＳ１０２の構成を示す。なお、以下の説明では、インターフェースデバイスを「Ｉ／Ｆ」と略記する。
【００４２】
ＮＡＳ１０２は、ストレージ装置２２０と、ストレージ装置２２０に接続されたＮＡＳコントローラ２００とを有する。
【００４３】
ストレージ装置２２０は、ＮＡＳコントローラ２００に接続されるＩ／Ｆ２２３と、メモリ２２１と、複数のＰＤＥＶ２２４と、それらに接続されたＣＰＵ２２２とを有する。複数のＰＤＥＶ２２４は、１以上のＲＡＩＤグループでよい。ＣＰＵ２２２は、ＮＡＳコントローラ２００に１以上の論理ボリュームを提供してよく、その１以上の論理ボリュームの少なくとも一部に基づく記憶空間が、ＮＡＳコントローラ２００によりローカルＦＳ１０４としてクライアント１０１に提供されてよい。ローカルＦＳ１０４に格納されたファイルのデータは、１以上のＰＤＥＶ２２４に格納される。
【００４４】
ＮＡＳコントローラ２００は、いわゆるＮＡＳヘッドでよい。ＮＡＳコントローラ２００は、プログラム及び情報を記憶するメモリ（記憶部の一例）２０１、ネットワーク１０３を経由してクライアント１０１に接続される外部ネットワークＩ／Ｆ２０３、ネットワーク１０５を経由してＣＡＳ１２１に接続される内部ネットワークＩ／Ｆ２０４、ストレージ装置２２０に接続されるＩ／Ｆ２０５、及びそれらに接続されたＣＰＵ（プロセッサの一例）２０２を有する。Ｉ／Ｆ２０３〜２０５は、それぞれＩ／Ｆの一例であり、Ｉ／Ｆ２０３〜２０５のうちの２以上が、同一のＩ／Ｆでもよい。ＣＰＵ２０２は、メモリ２０１内のプログラムを実行する。
【００４５】
メモリ２０１は、ファイル共有サーバプログラム２０６、ファイル共有クライアントプログラム２０７、ＦＳプログラム２０８、アップデートリスト生成プログラム２０９、同期プログラム２１１、マイグレーションプログラム２１２、自拠点アップデートリスト２１３、及び、同期済バージョン情報２１４を記憶する。メモリ２０１に格納されたこれらのプログラム及び情報のうちの少なくとも一部が、ＣＰＵ２０２によりストレージ装置２２０からメモリ２０１へ読み出されてよい。
【００４６】
ファイル共有サーバプログラム２０６は、クライアント１０１からローカルＦＳ１０４内のオブジェクト（例えばファイル又はディレクトリ）についての操作を受け付けるプログラムである。ファイル共有クライアントプログラム２０７は、センタＦＳ１２２に格納されるファイルについての操作を行うプログラムである。ＦＳプログラム２０８は、ローカルＦＳ１０４を提供するプログラムである。アップデートリスト生成プログラム２０９は、自拠点アップデートリスト２１３を生成するプログラムである。同期プログラム２１１は、センタＦＳ１２２からローカルＦＳ１０４への同期を行うプログラムである。上述したポリシー情報４００は、例えば同期プログラム２１１が保持する。ポリシー情報４００は、同期プログラム２１１の他に他のプログラムもアクセス可能に保持されてよい。マイグレーションプログラム２１２は、ローカルＦＳ１０４からセンタＦＳ１２２へのマイグレーションを行うプログラムである。
【００４７】
自拠点アップデートリスト２１３は、ローカルＦＳ１０４のアップデートに関する情報のリストである。ローカルＦＳ１０４のアップデートの検知は、図示しないＯＳ（Operating  System）の監視機能により行われてよく、アップデートリスト生成プログラム２０９が、ローカルＦＳ１０４のアップデートが検知されたことの通知を受けて、自拠点アップデートリスト２１３を生成してよい。自拠点アップデートリスト２１３の例を図８に示す。自拠点アップデートリスト２１３は、ローカルＦＳ１０４がアップデートされた拠点のＩＤであるSYSTEM_ID８０６と、ＣＡＳ１２１かららの同期の最新バージョンを示す情報であるCURRENT SYNC VERSION８０７と、クライアント１０１により更新されたオブジェクトのタイプ（例えばファイル又はディレクトリ）を示す情報であるMIGTYPE８０８と、アップデート内容を示す情報であるアップデート内容８０９とを含む。参照符号２１３Ａ−１は、拠点Ａ内のファイルＸを編集した場合（ファイルＸの内容をアップデートした場合）の自拠点アップデートリストの一例を示す。このリスト２３１Ａ−１内のアップデート内容８０９は、編集後のファイルのファイルパス名を示す。参照符号２１３Ｂ−２は、拠点Ｂ内のファイルＸを編集した場合の自拠点アップデートリストの一例を示す。参照符号２１３Ａ−３は、拠点Ａ内のディレクトリ「dir001」を「dir004」にリネームした場合の自拠点アップデートリストの一例を示す。このリスト２１３Ａ−３内のアップデート内容８０９は、リネーム元とリネーム先の名前、及びその親ディレクトリの名前を示す。参照符号２１３Ａ−４は、拠点Ａ内のディレクトリ「dir001」に子ディレクトリ「dir002」を作成した場合の自拠点アップデートリストの一例を示す。このリスト２１３Ａ−４内のアップデート内容８０９は、作成したディレクトリと、その親ディレクトリを示す。参照符号２１３Ａ−５は、拠点Ａ内のディレクトリ「dir001」を削除した場合の自拠点アップデートリストの一例を示す。このリスト２１３Ａ−５内のアップデート内容８０９は、削除したディレクトリを示す。このような自拠点アップデートリスト２１３が、ＣＡＳ１２１に送信される。自拠点アップデートリスト２１３に従うアップデートが、ＣＡＳ１２１を通じて他のＮＡＳ１０２のローカルＦＳ１０４へ反映されることで、拠点間でＦＳの同期が可能となる。
【００４８】
同期済バージョン情報２１４は、ＣＡＳ１２１に保持されている自拠点アップデートリスト２１３の集合（１以上の自拠点アップデートリスト２１３）のうち、自拠点のＮＡＳ１０２に反映された自拠点アップデートリスト２１３の最新のバージョンを表す情報を含む。これにより、次回同期時に、ＣＡＳ１２１内の自拠点アップデートリスト２１３の集合の中から、自拠点へまだ反映していないリストを選んで反映することが可能となる。
【００４９】
図３は、ＣＡＳ１２１の構成を示す。
【００５０】
ＣＡＳ１２１は、ストレージ装置３２０と、ストレージ装置３２０に接続されたＣＡＳコントローラ３００とを有する。
【００５１】
ストレージ装置３２０の構成は、ストレージ装置２２０の構成と同じでよい。すなわち、ストレージ装置３２０も、ＣＡＳコントローラ３００に接続されるＩ／Ｆ３２３と、メモリ３２１と、複数のＰＤＥＶ３２４と、それらに接続されたＣＰＵ３２２とを有する。
【００５２】
ＣＡＳコントローラ３００は、プログラム及び情報を記憶するメモリ（記憶部の一例）３０１、ネットワーク１０５を経由してＮＡＳ１０２に接続されるフロントエンドネットワークＩ／Ｆ３０３、ネットワーク１２３を経由して管理ノード１２４に接続されるバックエンドネットワークＩ／Ｆ３０４、ストレージ装置３２０に接続されるＩ／Ｆ３０５、及びそれらに接続されたＣＰＵ（プロセッサの一例）３０２を有する。Ｉ／Ｆ３０３〜３０５は、それぞれＩ／Ｆの一例であり、Ｉ／Ｆ３０３〜３０５のうちの２以上が、同一のＩ／Ｆでもよい。ＣＰＵ３２２は、メモリ３０１内のプログラムを実行する。
【００５３】
メモリ３０１は、ファイル共有サーバプログラム３０６、ＦＳプログラム３０７、アップデートリスト３０９、及びアップデートリストバージョン情報３１０を記憶する。メモリ３０１に格納されたこれらのプログラム及び情報のうちの少なくとも一部が、ＣＰＵ３０２によりストレージ装置３２０からメモリ３０１へ読み出されてよい。
【００５４】
ファイル共有サーバプログラム３０６は、各ＮＡＳ１０２からセンタＦＳ１２２内のオブジェクト（例えばファイル又はディレクトリ）についての操作を受け付けるプログラムである。ＦＳプログラム３０７は、センタＦＳ１２２を提供する。
【００５５】
アップデートリスト３０９は、各ＮＡＳ１０２からマイグレーション時等で受信した自拠点アップデートリストである。アップデートリストバージョン情報３１０は、各ＮＡＳ１０２から受信された各アップデートリスト３０９のバージョン（例えばバージョンのＩＤ（数字））を含んだ情報である。
【００５６】
図４は、ポリシー情報４００の一例を示す。
【００５７】
ポリシー情報４００は、複数のＮＡＳ１０２の各々が保持する。ポリシー情報４００は、複数のＮＡＳ１０２において全て同じでもよいし、少なくとも１つのＮＡＳ１０２において異なっていてもよい。ポリシー情報４００は、１以上のエントリを含み、各エントリが保持する情報が、ポリシー名４０１、衝突ケース４０２及び衝突解決ポリシー４０３を含む。ポリシー名４０１は、ポリシーの名称を示す。衝突ケース４０２が、定義された衝突ケースを示す。衝突解決ポリシー４０３が、該当する衝突ケースを解決するための定義された処理の内容を示す。
【００５８】
第１のエントリ４０４によれば、自拠点及び他拠点の双方のアップデートがマージされる。具体的には、他拠点及び自拠点で同じディレクトリの下の異なるパスを作成、削除又はリネームした場合は、自拠点及び他拠点のそれぞれの操作がマージされる。第１のエントリ４０４の衝突ケース４０２によれば、実質的に衝突は生じていないためである。
【００５９】
第２のエントリ４０５によれば、ファイルよりディレクトリが優先される。具体的には、他拠点で作成又はリネームされたディレクトリと同名のファイルが自拠点で作成されていた場合、他拠点で作成したディレクトリが自拠点で保持され、自拠点で作成されたファイルが退避用ディレクトリへ移動される。
【００６０】
第３のエントリ４０６によれば、最先のマイグレーションが優先される。具体的には、他拠点で作成、アップデート、削除又はリネームされたファイルパスと同名のファイルパスが、自拠点で作成、アップデート/削除/リネームされていた場合、ＣＡＳ１２１上の状態（他拠点での操作）が自拠点に反映される。自拠点で作成、アップデート又はリネームされたファイルパスが、退避用ディレクトリへ移動される。
【００６１】
第４のエントリ４０７によれば、他拠点でのオブジェクト削除が優先される。具体的には、 他拠点で削除されたディレクトリより下位のいずれかのオブジェクトへのファイルパスが自拠点でアップデートされていた場合、他拠点での操作が反映される。その際、自拠点でアップデートされたファイルは削除され、退避用ディレクトリに移動されない。
【００６２】
このようなポリシー情報４００を、複数のＮＡＳ１０２と、ＣＡＳ１２１と、管理ノード１２４とのうちの少なくとも１つである対象ノードが、アップデートできる。具体的には、対象ノード内のメモリに格納されており対象ノード内のＣＰＵにより実行されるポリシーアップデートプログラム（図示せず）（又は、いずれかのプログラムが有するポリシーアップデート機能）が、エントリの作成、アップデート及び削除のうちの少なくとも１つを行うことができる。ポリシー更新プログラムは、計算機システムの構成変更（例えば、ＮＡＳ１０２（拠点１００）の追加、ＮＡＳ１０２の障害等によるＮＡＳ１０２の減少）に応答してポリシー情報４００を自動でアップデートしてもよい。また、対象ノード（ポリシーアップデートプログラム）が、ユーザ又は管理者から情報の入力を受け付けるユーザインターフェース（以下、ＵＩ）を提供し、ＵＩを通じて入力された情報に従い、エントリの少なくとも一部をアップデートしたり、エントリを追加又は削除したりしてもよい。ＵＩ（例えばＧＵＩ（Graphical  User  Interface））は、例えば、クライアント１０１の表示システム（例えば表示デバイス）、又は、管理ノード１２４の表示システム（例えば表示デバイス又は表示用計算機）に表示される。
【００６３】
図１２は、第１のＵＩの一例を示す。
【００６４】
第１のＵＩは、エントリの作成（追加）、アップデート又は削除を手動で行うためのＵＩである。ユーザ又は管理者は、ポリシー名、衝突ケース及び衝突解決ポリシーのうちの少なくとも１つを第１のＵＩを通じて計算機システムに定義することができる。対象ノードは、第１のＵＩを通じて入力された情報に従い、ポリシー情報４００にエントリを追加したり、ポリシー情報４００からエントリを削除したり、ポリシー情報４００内のエントリの少なくとも一部をアップデートしたりする（図示の例では、既存ポリシーの修正が選択され、且つ、修正対象として、第２のエントリが選択されている状態）。このようなＵＩにより、ユーザ又は管理者は、衝突ケースと、優先順位及びその基準（例えば、拠点１００とデータセンタ１２０のうちのいずれを優先するか、いずれの拠点１００を優先するか、ディレクトリとファイルのうちのいずれを優先するか）とに基づいて、ポリシー名、衝突ケース及び衝突解決ポリシーのうちの少なくとも１つを作成、アップデート又は削除できる。つまり、衝突ケース毎にユーザ又は管理者にとって最も望ましい衝突解決ポリシーを定義し易い。
【００６５】
図１３は、第２のＵＩの一例を示す。
【００６６】
第２のＵＩは、複数の拠点（ＮＡＳ）とデータセンタ（ＣＡＳ）のうちの２以上についてそれぞれ優先順位の入力を受け付けるＵＩである（また、第２のＵＩは、図示のように、ディレクトリとファイルのそれぞれの優先順位を受け付けてもよい）。対象ノード（ポリシー更新プログラム）は、２以上のノードの各々の入力された優先順位に従い（及び、ディレクトリとファイルの優先順位に従い）、定義された複数の衝突ケースと、定義された複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーとのうちの少なくとも１つを、例えば自動でアップデートしてよい。例えば、自拠点のＮＡＳ１０２と他拠点のＮＡＳ１０２の優先順位が逆にされた場合、対象ノード（ポリシーアップデートプログラム）は、図４に例示した［他拠点］を「自拠点」に自動で変更し、且つ、図４に例示した［自拠点］を「他拠点」に自動で変更してよい。このような自動アップデートにより、ユーザ又は管理者の負担を軽減できる。
【００６７】
以上のように、定義された複数の衝突ケースの各々に衝突解決ポリシーを関連付け、且つ、少なくとも衝突解決ポリシーがアップデート可能であることは、複数のＮＡＳ１０２で名前空間を共有する計算機システムにおいて、より優れた利便性及び柔軟性を提供できる。なお、図１２と図１３のＵＩは、一例であり、且つ、図１２及び図１３は、模試的な図である。ポリシー情報４００のアップデートのためのＵＩは、ユーザ又は管理者の知識レベルや操作スキル等を考慮した構成にすることができる。
【００６８】
例えば、拠点１００が増加した又は減少したことに伴い、既存の拠点１００の優先順位を下げる又は上げる必要性が生じ得る。或いは、拠点１００の数に変更が無くても、時区間（例えば１日、１月又は１年等の所定の期間における時区間）によって、拠点１００間の優先順位、又は、拠点１００とデータセンタ１２０間の優先順位が異なることがあり得る。本実施形態では、そのような状況に柔軟に対応できる。なお、時区間と優先順位との対応関係を予め定義した情報が対象ノードに設定されていれば、対象ノード（ポリシーアップデートプログラム）は、その設定されている情報と、タイマーにより検出される時刻とに基づいて、自動で、ポリシー情報４００をアップデートしてもよい。
【００６９】
また、拠点１００間で、従業員が異動することもある。例えば、拠点Ａが、経理部門に対応し、拠点Ｂが、技術部門に対応していて、特定の従業員が拠点間を移動した場合、拠点Ａと拠点Ｂの優先順位を逆にすることが望ましいこともあり得る。本実施形態では、そのような状況にも柔軟に対応できる。
【００７０】
複数のＮＡＳ１０２と複数のＮＡＳ１０２に共通のＣＡＳ１２１とを有する計算機システムにおいて、複数の衝突ケースとそれら複数の衝突ケースにそれぞれ対応した複数の衝突解決ポリシーとを定義することは、ポリシーを用いた一般的な制御の置換又は転用ではない。例えば、一般的なグループポリシーでは、ユーザの行動の制限（例えば、特定ディレクトリへのアクセスの禁止、実行ファイルのダウンロードの禁止等）が行われる。一方、本実施形態に従うポリシー情報４００を用いた分散オブジェクト共有によれば、衝突ケース毎に、その衝突ケースと、拠点等の優先順位とに適した衝突解決のための処理が行われる。これは、本実施形態に係る計算機システムに特有の問題を解決するものであり、ポリシーを用いた一般的な制御を置換又は転用するだけで導くことはできない。
【００７１】
図５は、特殊ディレクトリの構造の一例を示す。
【００７２】
特殊ディレクトリ７０２Ｂの下位に作成された退避用ディレクトリへのファイルパスに、ＮＡＳ１０２Ｂ（同期プログラム２１１Ｂ）により、移動（退避）されるオブジェクトの使用に関する情報として、以下のうちの少なくとも１つ、
（ａ）そのオブジェクトが作成、アップデート又はリネームされた最新の時刻を表す時刻情報、
（ｂ）そのオブジェクトを使用するユーザのユーザＩＤ、
が含まれる。ファイルパスでは、ユーザＩＤより時刻情報が上位に位置するが、ユーザＩＤが上位に位置してもよい。図５の例によれば、同期処理において、ファイルパス５０５（ファイルＸ）が、特殊ディレクトリ７０２Ｂに移動された。具体的には、参照符号５０４に示す通り、ファイルＸを最後にアップデートしたユーザのＩＤは「User_D」であり、アップデート時刻は、「年／月／日  時：分：秒」で表現すると、「2014/07/07  13:45:00」である。この場合、同期プログラム２１１Ｂは、特殊ディレクトリ７０２Ｂの下位に、ディレクトリ５０１Ｂ及び５０２Ｂで構成された退避用ディレクトリを作成する。具体的には、同期プログラム２１１Ｂは、特殊ディレクトリ７０２Ｂの子ディレクトリとして、アップデート時刻を示す情報のうちの上位部分「20140707」を含んだ名前をディレクトリ名として有するディレクトリ５０１Ｂを作成する。また、同期プログラム２１１Ｂは、ディレクトリ５０１の子ディレクトリとして、ユーザＩＤ「User_D」を含んだ名前をディレクトリ名として有するディレクトリ５０２Ｂを作成する。同期プログラム２１１Ｂは、ディレクトリ５０２Ｂに、ファイルパス５０５を移動する。移動されるファイルパスは、ファイルＸと、ファイルＸとルートノード間のパスにおける全てのオブジェクトを含む（または、ファイルＸとその親ディレクトリを含む）。図５の例では、ファイルパス５０５は、ファイルＸ及びそれの親ディレクトリで構成されている。ファイルパス５０５がディレクトリ５０２に移動されることにより、ファイルパス５０５内の最上位ディレクトリ（ファイルＸの親ディレクトリ）が、ディレクトリ５０２の１つの子ディレクトリとなる。更に、同期プログラム２１１Ｂは、ディレクトリ５０２内のファイルＸのファイル名に、アップデート時刻が示す情報のうちの下位部分「134500」を含める。
【００７３】
このように、特殊ディレクトリ７０２Ｂ内で、オブジェクトが、アップデート時刻とユーザＩＤとに基づいて分類される。このため、例えば、退避されたファイルの検索容易化が期待でき、衝突ファイルの修正解決ポリシーを決めやすくなることが期待できる。なお、ＮＡＳ１０２Ｂ（例えばＦＳプログラム２０８Ｂ）は、特殊ディレクトリ７０２Ｂ内のファイルのファイルパスから特定されるアップデート時刻から一定時間が経過していれば、そのファイル及び退避用ディレクトリ（５０１Ｂ及び５０２Ｂ）を特殊ディレクトリ７０２Ｂから削除してもよい。
【００７４】
また、ＮＡＳ１０２Ｂ（ファイル共有サーバプログラム２０６Ｂ）は、クライアント１０１Ｂに対して、特殊ディレクトリ７０２Ｂ内の少なくとも１つのオブジェクトに対する変更操作を制限する。具体的には、例えば、ＮＡＳ１０２Ｂ（ファイル共有サーバプログラム２０６Ｂ）は、作成した退避用オブジェクトに、アクセス制限として、リードオンリー（参照は許可されるが書き込みは禁止）を関連付ける。これにより、特殊ディレクトリ７０２Ｂ内の構造が崩れるのを防ぐことができる。
【００７５】
以下、図６〜図１１を用いて、マイグレーション処理及び同期処理を説明する。その際、衝突解決ポリシーに従う処理も説明する。
【００７６】
図６は、拠点ＡのＮＡＳ１０２ＡからＣＡＳ１２１へのマイグレーション処理の前後の様子の一例を示す。
【００７７】
まず、マイグレーション前の状態は、以下の通りである。ＣＡＳ１２１のアップデートリストバージョン情報３１０が、バージョンＩＤ「1」〜「99」を含んでいる。これは、センタＦＳ１２２が、複数のＮＡＳ１０２から合計９９回アップデートされたことを意味する。また、バージョンＩＤ「1」〜「99」にそれぞれ対応したアップデートリスト３０９がＣＡＳ１２１に格納されている。ＮＡＳ１０２Ａには、バージョンＩＤ「99」までのアップデートリスト３０９が、ローカルＦＳ１０４Ａに反映済（同期処理済）とする。そのため、同期済バージョン情報２１４ＡにバージョンＩＤ「99」が登録されている。その後、クライアント１０１ＡによりファイルＸがファイルＸ１に編集されたとする。そして、そのアップデート（編集）に対応した自拠点アップデートリスト２１３Ａが生成されている。即ち、ＣＡＳ１２１からＮＡＳ１０２Ａへ同期したときのＣＡＳ１２１の最新の状態が参照符号６０３により示される状態であり、その後、クライアント１０１ＡによりファイルＸが編集されたときのＮＡＳ１０２Ａの最新の状態が参照符号６０１により示される状態である。以上が、マイグレーション前の状態である。
【００７８】
図６の上記状態において、ＮＡＳ１０２ＡからＣＡＳ１２１へのマイグレーション処理を、図９のフローチャートを用いて説明する（マイグレーション後のＣＡＳ１２１の状態は、参照符号６０４により示される状態である）。
【００７９】
Ｓ９０１で、マイグレーションプログラム２１２Ａは、同期処理を実行する。これは、ＣＡＳ１２１の最新の状態を自拠点Ａへ反映し、その差分のみをＣＡＳ１２１へ送信するためである。ただし、最近同期した時から、ＣＡＳ１２１のアップデートリストバージョン情報３１０にバージョンＩＤの追加がない場合は、本処理は不要である。図６の例では、拠点ＡのＮＡＳ１０２Ａ（６０１）の同期済バージョン情報２１４は「99」を示し、ＣＡＳ１２１（６０３）のアップデートリストバージョン情報３１０は「1,2,…,99」を示している。拠点ＡのＮＡＳ１０２Ａ（６０１）が最後に同期したバージョン「99」からＣＡＳ１２１に変化がないため、本処理は不要である。
【００８０】
Ｓ９０２で、マイグレーションプログラム２１２Ａは、データマイグレーションを行う。本ステップでは、同期済バージョンからのアップデート分をＣＡＳ１２１へ反映する。なお、反映する際には、アップデートされた箇所の親ディレクトリを含めて反映する。図６の例では、ファイルＸにアップデートがある（内容が「X」から「X1」にアップデートされている）ため、ファイルＸとその親ディレクトリＡ（dirA）とを含んだファイルパス６０９がセンタＦＳ１２２へ反映される。反映後は、参照符号６０４に示すようになる。すなわち、ファイルＸの内容は「X1」となる。
【００８１】
Ｓ９０３で、マイグレーションプログラム２１２Ａは、自拠点アップデートリスト２１３をＣＡＳ１２１へ送信する。図６の例では、ファイルＸのアップデートに対応した自拠点アップデートリスト２１３Ａ−１（図８参照）が送信される。
【００８２】
Ｓ９０４で、マイグレーションプログラム２１２Ａは、アップデートリストバージョン情報３１０のアップデートを行う。本ステップでは、アップデートリストバージョン情報３１０の最終エントリの値を一つインクリメントした値を、アップデートリストバージョン情報３１０の末尾へ追加する。図６の例では、アップデートリストバージョン情報３１０の最終エントリの値は「99」である。このため、マイグレーションプログラム２１２Ａは、これに１を加えた「100」をアップデートリストバージョン情報３１０へ追加する。従って、アップデートリストバージョン情報３１０は、「1,2,…,99,100」を含む（参照符号６０４）。
【００８３】
なお、Ｓ９０２〜Ｓ９０４は、自拠点アップデートリスト２１３がある間、処理が継続される。
【００８４】
以上が、マイグレーション処理の説明である。
【００８５】
続いて、ＣＡＳ１２１からＮＡＳ１０２Ｂへの同期処理を説明する。
【００８６】
図７は、ＣＡＳ１２１から拠点ＢのＮＡＳ１０２Ｂへの同期処理の前後の様子の一例を示す。
【００８７】
まず、同期処理前の状態を以下に示す。ＣＡＳ１２１は、参照符号６０４により示す状態である。つまり、アップデートリストバージョン情報３１０には、「1」から「100」までが登録されており、アップデートリストバージョン「100」に対応するアップデートリストはリスト２１３Ａ−１（図８参照）であるとする。また、ＮＡＳ１０２Ｂの同期済バージョン情報は「99」を示しており、その後、クライアント１０１ＢによりファイルＸが編集され内容が「X2」になっている。そして、そのアップデートにより、ＮＡＳ１０２Ｂの自拠点アップデートリストとしてリスト２１３Ｂ−２（図８参照）が生成されている。以上が、同期処理前の状態の説明である。
【００８８】
図７の上記状態において、ＣＡＳ１２１からＮＡＳ１０２Ｂへの同期処理を、図１０のフローチャートを用いて説明する（同期処理後のＮＡＳ１０２Ｂの状態は参照符号７０１により示される状態である）。
【００８９】
Ｓ１００１で、同期プログラム２１１Ｂは、ＣＡＳ１２１のアップデートリストバージョン情報３１０を参照する。図７の例では、「1,2,…,100」を含むアップデートリストバージョン情報３１０が参照される。
【００９０】
Ｓ１００２で、同期プログラム２１１Ｂは、同期が必要か否か判断する。判断結果が肯定の場合（Ｓ１００２：Ｙｅｓ）、Ｓ１００３へ進む。判断結果が否定の場合（Ｓ１００２：Ｎｏ）、処理が終了する。本ステップでは、同期プログラム２１１Ｂは、前回ＣＡＳ１２１からＮＡＳ１０２Ｂへの同期を行った状態から、センタＦＳ１２２にアップデートがあったか否かを判断する。その判断結果が肯定の場合、Ｓ１００２：Ｙｅｓとなり、その判断結果が否定の場合、Ｓ１００２：Ｎｏとなる。本実施形態では、同期済バージョン情報２１４とアップデートリストバージョン情報３１０を用いてその判断が行われる。図７の例では、ＮＡＳ１０２Ｂの同期済バージョン情報には「99」が登録されており、ＣＡＳ１２１のアップデートリストバージョン情報３１０には、「1」から「100」までが登録されている。これは、前回ＣＡＳ１２１からＮＡＳ１０２Ｂへ同期を行った状態から、ＣＡＳ１２１のアップデートバージョンが１つ上がっていることを意味する。故に、同期が必要との判断結果となる（Ｓ１００２：Ｙｅｓ）。
【００９１】
Ｓ１００３で、同期プログラム２１１Ｂは、前回同期以降に作成されたアップデートリストをＣＡＳ１２１から取得する。図７の例では、アップデートリストバージョン「99」までは同期済であるため、アップデートリストバージョン「100」に対応するアップデートリスト３０９（２１３Ａ−１）が取得される。
【００９２】
Ｓ１００４で、同期プログラム２１１Ｂは、未処理のアップデートリスト３０９があるか否かを判断する。判断結果が肯定の場合（Ｓ１００４：Ｙｅｓ）、Ｓ１００５へ進み、判断結果が否定の場合（Ｓ１００４：Ｎｏ）、処理が終了する。図７の例では、Ｓ１００３で取得した未処理のアップデートリスト３０９（２１３Ａ−１）があるため、Ｓ１００５へ進む。
【００９３】
Ｓ１００５で、同期プログラム２１１Ｂは、名前空間反映処理を実行する。本ステップでは、センタＦＳ１２２（ＣＡＳ１２１の名前空間）がＮＡＳ１０２Ｂへ反映される。本ステップは、本実施形態の１つの特徴を含み、本ステップの詳細が、図１１に示される。従って、Ｓ１００６を説明する前に、図１１を用いてＳ１００５の説明を行う。
【００９４】
図１１は、名前空間反映処理のフローチャートである。
【００９５】
Ｓ１１０１で、同期プログラム２１１Ｂは、ポリシー情報４００を参照し、反映元の名前空間と反映先の名前空間との間において異なるオブジェクト（ここではファイルＸ）について、ファイル退避が必要ないずれかの衝突ケースに合致するか否かを判断する。本実施形態では、図４によれば、例えば、以下のいずれかに該当する場合、
（ｃ−１）ＣＡＳ１２１のファイルにアップデートがあり、且つ、同じファイル名のファイルを自拠点１００Ｂで新規作成又はアップデートしていた（ポリシー名「First-Mig-Win」）
（ｃ−２）ＣＡＳ１２１で作成又はリネームされたディレクトリと同名のファイルを自拠点Ｂで作成していた（ポリシー「Directory-Win」）
ファイル退避が必要ないずれかの衝突ケースに合致するとの判断結果が得られる。また、（ｃ−１）及び（ｃ−２）のいずれかに該当するか否かを判断するためには、Ｓ１００３で取得したアップデートリスト３０９と自拠点アップデートリスト２１３とを比較すればよい。
【００９６】
図７の例では、処理対象のアップデートリスト３０９（２１３Ａ−１）のアップデート内容８０９より、ＣＡＳ１２１の名前空間において、「/Root/dirA」下の「fileX」にアップデートがあったことがわかる。また、ＮＡＳ１０２Ｂの自拠点アップデートリスト２１３（２１３Ｂ−２）のアップデート内容８０９より、ＮＡＳ１０２Ｂにおいても名前空間において、「/Root/dirA」下の「fileX」にアップデートがあったことがわかる。即ち、ＣＡＳ１２１とＮＡＳ１０２Ｂで同じファイル名をアップデートしていることから、ファイル退避条件（ｃ−１）に合致するため（Ｓ１１０１：Ｙｅｓ）、Ｓ１１０２へ進む。
【００９７】
Ｓ１１０２で、同期プログラム２１１Ｂは、特殊ディレクトリ（ディレクトリ「.conflict」）７０２Ｂの下位に退避用ディレクトリを作成する。図７では図を簡略化しているが、図５に示す通り、「.conflict」７０２Ｂの下位に、アップデート日付を表すディレクトリ５０１Ｂ、ファイルを最後にアップデートしたユーザを表すディレクトリ５０２Ｂが設けられる。例えば、参照符号５０４に示すように、ファイルを最終アップデートしたユーザのユーザＩＤが「User_D」で、ファイル最終アップデート時刻が「2014/07/07  13:45:00」の場合、「.conflict」７０２Ｂの下位に、名前が「20140707」であるディレクトリ５０１Ｂが作成され、その下位に、名前が「User_D」であるディレクトリ５０２Ｂが作成される。本ディレクトリ階層は一例であり、発明を限定するものではない。名前が日付であるディレクトリを設けることにより、ある日付以降のファイルを削除して容量を削減する等の対応がとりやすくなる。
【００９８】
Ｓ１１０３で、同期プログラム２１１Ｂは、衝突ファイルの名称変更と退避先ディレクトリの下位への配置とを行う。本ステップでは、Ｓ１１０２で作成したディレクトリの下位へ衝突ファイルが移動される。図７の例では、同期プログラム２１１Ｂは、衝突ファイルを含んだファイルパス７０３を、参照符号７０１に示す通り、「.conflict」７０２Ｂの下位に移動する。より詳しくは、図５に示す通り、ファイルパス７０３は、ファイルパス７０３中の日付を含んだディレクトリ名を有するディレクトリ５０１と、ファイルパス７０３中のユーザＩＤを含んだディレクトリ名を有するディレクトリ５０２との下位に移動される。同期プログラム２１１Ｂは、図５に示す通り、移動したファイルのファイル名に、時刻情報の下位部分（時分秒）を含める（「fileX_134500」）。
【００９９】
更に、同期プログラム２１１Ｂは、Ｓ１１０３で退避用ディレクトリに移動したファイルのアクセス制御属性として、読み込み専用を割り当て、これにより、クライアント１０１Ｂからの、退避用ディレクトリ内のファイルの更新が禁止される。これにより、衝突ファイルの更新やディレクトリ階層の変更が回避され、その後の検索容易性を保つことが期待できる。
【０１００】
Ｓ１１０４で、同期プログラム２１１Ｂは、センタＦＳ１２２のアップデートをローカルＦＳ１０４Ｂへ反映し、処理を終了する。図７の例では、参照符号７０１に示すように、内容が「X1」のファイルＸを含んだファイルパス７０５が、ルートノードに追加される。
【０１０１】
以上により、図１１の名前空間反映処理の説明を終了する。本処理は、図１０のＳ１００５に該当するものであり、図１０のＳ１００６の説明に戻る。
【０１０２】
Ｓ１００６で、同期プログラム２１１Ｂは、ＮＡＳの同期済バージョン情報２１４をアップデートする。図７の例では、ＣＡＳ１２１のアップデートリストバージョン情報のバージョン「100」に該当する同期を実行したため、同期前（参照符号６０２）の同期済バージョン情報２１４の「99」を、「100」にアップデートする（参照符号７０１）。
【０１０３】
Ｓ１００４に戻り、Ｓ１００３で取得した未処理のアップデートリスト３０９が存在する間、Ｓ１００５とＳ１００６が繰り返される。未処理のアップデートリスト３０９が無くなったら処理が終了する。図７の例では、Ｓ１００３で取得したアップデートリスト３０９は、バージョン「100」に該当する１つのみであり、他に未処理のアップデートリスト３０９は存在しないため、処理が終了する。
【０１０４】
以上が、同期処理の説明である。
【０１０５】
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１０６】
１０１：クライアント、１０２：ＮＡＳ、１２１：ＣＡＳ 
【図１】
2016121083.tif 000003
【図２】
2016121083.tif 000004
【図３】
2016121083.tif 000005
【図４】
2016121083.tif 000006
【図５】
2016121083.tif 000007
【図６】
2016121083.tif 000008
【図７】
2016121083.tif 000009
【図８】
2016121083.tif 000010
【図９】
2016121083.tif 000011
【図１０】
2016121083.tif 000012
【図１１】
2016121083.tif 000013
【図１２】
2016121083.tif 000014
【図１３】
2016121083.tif 000015
【国際調査報告】
2016121083.tif 000016
2016121083.tif 000017
2016121083.tif 000018
2016121083.tif 000019