(57)【要約】  コンピュータ／ファイルシステムディレクトリの高速かつ信頼性のある同期を促進するシステムおよび方法を説明する。同期（ＦａｓｔＳｙｎｃ）サブシステムは発見／列挙段階で動作してコールするクライアントにディレクトリ間の差異の集合を提供し、次いでアクション段階で動作して、クライアントが指示するように動作を実施して相違なるディレクトリを同期する。発見／列挙およびアクション段階は並列動作およびＩ／Ｏ（入出力）パイプラインを使用する。複数スレッドを列挙中に使用して、各ディレクトリの子を列挙し、新しいスレッドが処理する各サブディレクトリをキューに入れる。アクション段階中は、動作が要求されるとき、ＦａｓｔＳｙｎｃサブシステムは動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、プロセススレッドプールで処理する作業アイテムとしてそのパッケージをキューに入れる。
2008541263.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境において、
第１段階で複数のディレクトリの内容を評価して、前記ディレクトリ間の差異を列挙するステップと、
第２段階で要求アクションに応答して前記ディレクトリを同期する動作を実施するステップと
を含むことを特徴とするコンピュータ実装方法。
【請求項２】
前記第１および第２段階は少なくとも１つのクライアント要求に応答して実施され、前記ディレクトリ間の列挙した差異を備えるデータ構造を分析用としてクライアントコーラーに返すステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記データ構造をノードのツリーとして配置するステップをさらに含み、少なくとも前記ノードのいくつかは同期されていないファイルまたはディレクトリに関する情報を含むことを特徴とする請求項２に記載の方法。
【請求項４】
ノードのツリーとして前記データ構造を配置するステップは、同期されたノードを排除するステップを含むことを特徴とする請求項３に記載の方法。
【請求項５】
第２段階で要求アクションに応答して前記ディレクトリの同期動作を実施するステップは、一つの複雑なアクションに統合されるプリミティブ動作の集合を処理するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記複数ディレクトリの内容を評価するステップは、マルチスレッド化したディレクトリ列挙を用いて２つのディレクトリツリー間の差異を決定するステップを含むことを特徴とする請求項１に記載の方法。
【請求項７】
要求アクションに応答して動作を実施するステップは、別のスレッドによって並列処理される同期関連動作をキューに入れるステップを含むことを特徴とする請求項１に記載の方法。
【請求項８】
完了動作の結果をコールバックで報告するステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
実行時に請求項１に記載の方法を実施するコンピュータ実行可能命令を有することを特徴とする、少なくとも１つのコンピュータ可読媒体。
【請求項１０】
複数の記憶装置を有するコンピューティング環境において、
一つ記憶装置上のディレクトリツリーを別の記憶装置上の対応方ディレクトリツリーに対して評価して、前記ディレクトリツリー間の差異を決定する手段を含む同期サブシステムと、
要求に応答して前記差異を報告する手段と、
要求動作を実施して前記ディレクトリツリーを同期する手段と
を備えることを特徴とするシステム。
【請求項１１】
前記ディレクトリツリーを評価する手段は、マルチスレッド化したディレクトリ列挙を実施する手段を備えることを特徴とする請求項１０に記載のシステム。
【請求項１２】
要求動作を実施する前記手段において、スレッドプールの並列スレッドにより処理する動作をキューに入れる手段を備えることを特徴とする請求項１０に記載のシステム。
【請求項１３】
実行時に、
クライアントコーラーから少なくとも１つの同期関連要求を受信するステップと、
第１段階で複数ディレクトリの内容を評価して前記ディレクトリ間の差異を列挙するステップと、
前記差異を前記クライアントコーラーに返すステップと、
第２段階で前記クライアントコーラーに指示された動作を実施して前記ディレクトリを同期するステップと
を実施するコンピュータ実行可能命令を有することを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項１４】
前記差異を前記クライアントコーラーに返すステップは、前記差異に対応する情報を有するアイテムノードのツリーを備えるデータ構造を配置するステップを備えることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
トランザクションベースのメカニズムを用いて少なくとも１つのファイルに対する同期による変更をロールバックするステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１６】
複数のディレクトリの内容を評価するステップは、マルチスレッド化したディレクトリ列挙を用いるステップを備えることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１７】
要求アクションに応答して動作を実施するステップは、別のスレッドによって並列処理される同期関連動作をキューに入れるステップを備えることを特徴とする請求項１３に記載のコンピュータ可読媒体。
【請求項１８】
完了動作の結果をコールバックで報告するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
失敗した動作を試行するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項２０】
同期すべきアイテムの状態が、前記差異を前記クライアントコーラーに返してそのアイテムに対する要求動作を実施して以来、変化していないことを保証するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項１７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にコンピュータシステムに関し、より詳細にはコンピュータファイルおよびディレクトリに関する。
【背景技術】
【０００２】
旅行時、在宅作業時、またはネットワーク故障時のように、コンピュータユーザはしばしばネットワークから切断してオフライン作業を行う必要がある。その結果、様々なメカニズムは、ローカルコンピュータにネットワーク情報をキャッシュしてローカルコンピュータのネットワークからの切断時に情報へのアクセスを可能とすることに向けられてきた。ローカルにキャッシュすることはさらに、ネットワークサーバとオフラインモードで動作するクライアントとの間の通信データ量を削減する。送信データ量を削減する利点には、サーバ負荷の削減、クライアントの認識待ち時間の削減、および利用可能なネットワーク帯域の増加が含まれる。
【０００３】
オフライン作業は通常、サーバディレクトリ階層に対するオフラインディレクトリ階層の状態を変更する。階層内ディレクトリに対する変更は、属性変更またはデータ書込みのようなファイル変更の形、あるいは新規ファイルまたはディレクトリの生成、またはファイル削除のような名前空間の変更の形がある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
変更に関わらず、何らかの時点で何らかのプロセスを実施して、オフラインクライアントとサーバディレクトリとを同期して同期状態にする必要が出てくる。同期状態では、２つのディレクトリ階層は同一のサブディレクトリ構造を有し、これらディレクトリ内部に同一のファイル名を含む。また、双方のディレクトリに存在するそれぞれのファイルに対して、ファイルはそのデータストリーム内に同一データを含み、同一の関連属性、タイムスタンプおよび他のファイルシステムの情報を有する必要がある。
【０００５】
しかしながら、キャッシュしたオフラインアイテムとサーバのファイルシステムのアイテム（ディレクトリおよびファイル）との同期は複雑で、相対的に低速で、常に問題を抱えている。オフラインファイルを同期する高速かつ信頼性のある方法が必要である。
【課題を解決するための手段】
【０００６】
簡潔に述べると、本発明は、ローカルのオフラインキャッシュに保持したディレクトリをリモートネットワークファイルシステム内の別ディレクトリと同期するようなディレクトリおよびそのファイルの同期を促進する、多段階システムおよび方法に関する。この目的を達成するため、高速かつ信頼性のある同期（ＦａｓｔＳｙｎｃ）サブシステムは、発見／列挙段階で動作してクライアントコーラーに差異の集合を提供し、次いでアクション段階においてクライアントが指示したように動作を実施して異なるディレクトリを同期する。
【０００７】
発見／列挙段階においては、ＦａｓｔＳｙｎｃサブシステムはディレクトリ間に存在する差異を決定する。その差異には、あるディレクトリから削除されたがそれに対応するディレクトリからは削除されていないファイルのような名前空間の差異、あるいは２つのファイルの属性および／または内容の差異が含まれる。一実施例において、差異を記述するノードツリーのような同期構造がＦａｓｔＳｙｎｃサブシステムによりクライアントコーラーに返される。
【０００８】
同期ツリー構造は、変更されたアイテム（ファイルまたはディレクトリ）を表すノードを含むディレクトリ名前空間のサブセットとして構築される。メモリ使用量を節約するため、ノードは未修正のアイテムのツリー内には配置されないが、単純なノードは内部に変更アイテムを有する未修正のサブディレクトリのツリー内に保持され、正確な階層組織を保てるようにする。同期すべき各アイテムは、現在の状態を記述する同期ステータスフィールドを有する。現在の状態には例えば、一方のディレクトリまたは他方あるいはその両方でファイルが元の状態から変更されたか否か、ファイルが一方のディレクトリのみに存在するのはそのファイルが存在するディレクトリで新規作成されたためか、またはそのファイルがないディレクトリにおいてそのファイルが削除されたためかが含まれる。
【０００９】
クライアントコーラーは返された構造を望みどおりに分析し、次いでディレクトリの同期状態化に向けた特定のアクションをＦａｓｔＳｙｎｃサブシステムが取ることを要求する。アクション段階において、ＦａｓｔＳｙｎｃサブシステムは同期プリミティブ（組み合わせてより複雑なアクションにすることが可能な動作）をクライアントが指示するように実行する。
【００１０】
一実施例において、ＦａｓｔＳｙｎｃサブシステムの発見／列挙およびアクション段階は、各段階で複数スレッドを用いることによるものを含めて、並列動作およびＩ／Ｏ（入出力）パイプライン化を利用する。例えば、列挙中に、各スレッドは双方のディレクトリ下の同一パスを開いて、子（ファイルおよびディレクトリ）を列挙する。スレッドは新規スレッドで処理する各サブディレクトリをキューに入れ、次いでツリーを修正して変更要素に対する同期アイテムを含めることで、そのディレクトリ内部の差異を処理する。ＦａｓｔＳｙｎｃサブシステムはまた、ファイル列挙よりもディレクトリ列挙を使用する。それぞれの列挙で新しいディレクトリが見つかると、これらのディレクトリは次いで別スレッドによる列挙のためにキューに入れられる。したがってディレクトリおよびそのサブディレクトリを異なるスレッドにより並列処理することが可能である。これはＣＰＵ利用率を最大化し、特にネットワーク上でＩ／Ｏパイプライン化の利点を生かす。ネットワーク上では、上記のパイプライン化は総同期時間に対する待ち時間の影響を削減する。
【００１１】
アクション段階中に動作を要求されると、ＦａｓｔＳｙｎｃサブシステムは動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、そのパッケージをプロセススレッドプールで処理する作業アイテムとしてキューに入れる。内部のキューイングにより、アクションの正しい順序での実行が保証されることに注意されたい。動作を処理するスレッドが利用可能なとき、ＦａｓｔＳｙｎｃサブシステムはアイテムをこのキューから抽出してその作業を実施し、必要に応じてコーラー(Caller)に対するコールバックを生成する。アクションが成功の場合、全体のプロセスは、別アイテムが後に必要とするまでスレッドをスレッドプールに返すものと見なされる。不成功の場合、クライアントは何回か再試行するか、または例えば失敗コードをコーラーに返すことでアイテムを作業リストに差し戻すことができる。
【００１２】
他の利点は、図面と関連させた以下の詳細な説明から明らかになるであろう。
【発明を実施するための最良の形態】
【００１３】
動作環境例
図１は、本発明を実施できる適切なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は適切なコンピューティング環境の一例でしかなく、本発明の使用または機能性の範囲に対するいかなる限定も示唆する意図はない。また、コンピューティング環境１００は、動作環境例１００に示したコンポーネントの任意の１つまたは組合せに関するいかなる依存性または条件を有するとも解釈されるべきでない。
【００１４】
本発明は、多数の他の汎用目的または特殊目的コンピューティングシステム環境または構成上で動作可能である。本発明での使用に適した公知のコンピューティングシステム、環境、および／または構成の例として、これらに限定されるものではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能家電、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置の任意を含む分散コンピューティング環境、等を含む。
【００１５】
本発明を、コンピュータが実行中のプログラムモジュールのようなコンピュータ実行可能命令の一般的コンテキストで記述することができる。一般に、プログラムモジュールはルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含み、これらは特定のタスクを実施するかまたは特定の抽象データ型を実装する。本発明を分散コンピューティング環境で実施することもでき、その環境では、通信ネットワークを通して接続したリモートプロセッシングデバイスによりタスクが実施される。分散コンピューティング環境においては、メモリ記憶装置を含むローカルおよび／またはリモートコンピュータ記憶媒体にプログラムモジュールを置くことができる。
【００１６】
図１を参照すると、本発明を実装するシステムの一例は汎用目的コンピューティングデバイスをコンピュータ１１０の形で含む。コンピュータ１１０の構成要素としては、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット１２０に接続するシステムバス１２１を含むことができるがこれらに限定されない。システムバス１２１は数種のバス構造のうち任意のものであることができ、それらはメモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャの任意を用いるローカルバスを含む。制限ではなく例として、上記アーキテクチャはＩＳＡバス、ＭＣＡバス、ＥＩＳＡバス、ＶＥＳＡローカルバス、およびメザニンバスとしても知られるＰＣＩバスを含む。
【００１７】
コンピュータ１１０は典型的に様々なコンピュータ可読媒体を含む。コンピュータ可読媒体はコンピュータ１１０がアクセスできる任意の利用可能媒体であることができ、揮発性および不揮発性媒体、ならびにリムーバブルおよび非リムーバブル媒体の両方を含む。制限ではなく例として、コンピュータ可読媒体はコンピュータ記憶媒体と通信媒体を含む。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータのような情報を記憶する任意の方法または技術を実装した、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。コンピュータ記憶媒体はこれらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報の記憶に使用可能でコンピュータ１１０がアクセスできる任意の他の媒体を含む。通信媒体は典型的にコンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを、搬送波または他の搬送機構のような変調データ信号で具現化し、任意の情報配信媒体を含む。“変調データ信号”という用語は、信号内の情報を符号化するような方式に設定あるいは変更された、１つまたは複数の特性を有する信号を意味する。制限ではなく例として、通信媒体は有線ネットワークまたは直接配線接続のような有線媒体、および音響、ＲＦ、赤外線および他の無線媒体のような無線媒体を含む。上記の任意の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【００１８】
システムメモリ１３０はコンピュータ記憶媒体を、リードオンリメモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２のような揮発性および／または不揮発性メモリの形で含む。例えば、起動時にコンピュータ１１０内部の要素間での情報転送を支援する基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）が、典型的にＲＯＭ１３１内に記憶される。ＲＡＭ１３２は典型的に、処理ユニット１２０が即座にアクセス可能および／または処理ユニット１２０上で現在実行中のデータおよび／またはプログラムモジュールを含む。制限ではなく例として、図１はオペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を示す。
【００１９】
コンピュータ１１０は他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体も含むことができる。例としてのみ、図１は非リムーバブル、不揮発性磁気媒体を読み書きするハードディスクドライブ１４１、リムーバブル、不揮発性磁気ディスク１５２を読み書きする磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭまたは他の光媒体のようなリムーバブル、不揮発性光ディスク１５６を読み書きする光ディスクドライブ１５５を示す。動作環境例で使用可能な他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク(DVD)、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭ、等を含むが、これらに限定されない。ハードディスクドライブ１４１は典型的にインタフェース１４０のような非リムーバブルメモリインタフェースを通してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は典型的にインタフェース１５０のようなリムーバブルメモリインタフェースによりシステムバス１２１に接続される。
【００２０】
上述し図１に示したドライブとそれらの関連コンピュータ記憶媒体とは、コンピュータ１１０に対するコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータを記憶する。図１において例えば、ハードディスクドライブ１４１はオペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を記憶するとして示される。これらのコンポーネントはオペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じかまたは異なるかのいずれかであることができることに注意されたい。本明細書においては、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７に異なる数字を与え、少なくともそれらが異なるコピーであることを示している。ユーザは、タブレットまたは電子デジタイザ１６４、マイクロフォン１６３、キーボード１６２および、普通はマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス１６１のような入力装置を通して、命令（コマンド）および情報をコンピュータ１１０に入力することができる。図１に示していない他の入力装置はジョイスティック、ゲームパッド、衛星用アンテナ、スキャナ、等を含むことができる。これらおよび他の入力装置は、システムバスに接続されるユーザ入力インタフェース１６０を通して処理ユニット１２０に接続されることが多いが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）のような他のインタフェースおよびバス構造により接続することもできる。モニタ１９１または他種の表示装置も、ビデオインタフェース１９０のようなインタフェース経由でシステムバス１２１に接続される。モニタ１９１にタッチスクリーンパネル等を統合することもできる。モニタおよび／またはタッチスクリーンパネルを、タブレットタイプのパーソナルコンピュータのように、コンピューティングデバイス１１０が組み込まれる筐体に物理的に結合することができることに注意されたい。さらに、コンピューティングデバイス１１０のようなコンピュータは、スピーカ１９５およびプリンタ１９６のような他の周辺出力装置を含むこともでき、それらには周辺出力インタフェース１９４等を通して接続することができる。
【００２１】
コンピュータ１１０は、リモートコンピュータ１８０のような１つまたは複数のリモートコンピュータとの論理接続を用いてネットワーク環境で動作することができる。リモートコンピュータ１８０はパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他の共通ネットワークノードであることができ、典型的にコンピュータ１１０に関して上述した要素の多くまたは全てを含むが、図１にはメモリ記憶装置１８１のみを示している。図１に示した論理接続はローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。上記のネットワーク環境は職場、企業規模のコンピュータネットワーク、イントラネットおよびインターネットで一般的である。
【００２２】
ＬＡＮネットワーク環境で使用するとき、コンピュータ１１０はネットワークインタフェースまたはアダプタ１７０を通してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用するとき、コンピュータ１１０は典型的にモデム１７２またはインターネットのような、ＷＡＮ１７３上で通信を確立する他の手段を含む。モデム１７２は内蔵型または外付型であってよく、ユーザ入力インタフェース１６０または他の適切なメカニズムを経由してシステムバス１２１に接続することができる。ネットワーク環境において、コンピュータ１１０に対して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に格納することができる。制限ではなく例として、図１はリモートアプリケーションプログラム１８５がメモリ装置１８１上にあるとして示す。示したネットワーク接続は例であって、コンピュータ間の通信リンクを確立する他の手段を使用できることは理解されるであろう。
【００２３】
ローカルおよびリモートファイルならびにディレクトリの同期
本発明は一般に、ローカルのオフラインキャッシュおよびリモートネットワークファイルシステムにあるようなディレクトリを同期するシステムおよび方法に関する。この目的を達成するため、本発明はディレクトリ間にどのような差異が存在するかを発見し、その差異をクライアントコーラーに対して列挙(enumerate)し、次いで、同期状態に達するのに必要なファイルシステム関連命令の発行といったクライアントの要求アクションを実行する。以降理解されるように、本発明を実装する多数の方法が実現可能であり、その代替手段のいくつかのみを本明細書で説明する。例えば、本発明は主に多数の同期関連動作を並列に実施する多段階、マルチスレッドモデルを参照しながら以下で説明する。それでもなお、他種の配置が実現可能であり、本発明は本明細書で使用したいかなる特定の例にも限定されず、むしろ一般的なコンピューティングにおける利益と利点を提供する様々な方法で使用することができる。
【００２４】
多段階動作に関して、一実施例において同期サブシステムは発見段階で動作して同期すべき２つのディレクトリ構造間の差異を特定および列挙し、アクション段階で動作して同期プリミティブ（組み合わせてより複雑なアクションにすることが可能な動作）を実行する。これにより、分析段階で有利に(leverage)動作する、クライアントコーラー(client caller)のメカニズムが利用するための非常に高速で信頼性のあるメカニズムが提供される。以降明らかになるように、この実装におけるサブシステムは顕著な並列動作およびＩ／Ｏ（入出力）パイプライン化を提供し、したがって高速な同期を促進する。それによってサブシステムを本明細書では（略して）ＦａｓｔＳｙｎｃサブシステム２００（図２）と称する。
【００２５】
一般に、本実施例において、ＦａｓｔＳｙｎｃサブシステム２００のコンポーネントはディレクトリ間の差異を列挙して同期関連要求を実行するが、ディレクトリの同期方法に関する意思決定は行わない。ＦａｓｔＳｙｎｃサブシステム２００はその代わりに列挙段階におけるディレクトリの状態を報告し、動作段階において（アクションに対応する）どのような動作あるいは複数の動作を取って個々のファイルまたはディレクトリを同期すべきかに関する明示的な命令を、クライアントコーラー２０２から受け取る。これにより、様々な種類のコーラー(caller)がＦａｓｔＳｙｎｃサブシステム２００と連動することができる。上記のコーラーとしては例えば、同期するためにユーザ入力を得る必要がある対話的（interactive）アプリケーション、またはユーザに入力を求めずにバックグラウンドで動作する必要があるグループポリシープロセッサおよびスクリプトがある。適切なクライアントコーラー２０２の１つはキャッシングサービスのクライアント側コントローラを備え、これは２００５年１月１０日出願の米国特許出願第１１／０３２，８７０号で説明されている。この特許出願は本発明の譲受人に譲渡され、ここで引用により組み込まれる。このサービスモデルにおいては、サービスによりアプリケーションプログラムまたは同期マネージャプログラム２０４が、複雑な同期分析の大部分を実施せずとも同期機能を有することができることに注意されたい。
【００２６】
一般に、本実施例において、ＦａｓｔＳｙｎｃサブシステム２００は非同期状態を解決するロジックを含まない。その１つの理由は、これにより様々なコーラーが様々な方法で同期することができるからである。ＦａｓｔＳｙｎｃサブシステム２００のアクション動作はその代わり、以下の（２つのディレクトリＡおよびＢを同期する）動作例で説明するようなプリミティブを提供する。
【００２７】
【表１】
2008541263.tif 000003
【００２８】
【表２】
2008541263.tif 000004
【００２９】
動作は十分に高レベルであるので、コーラーは詳細を気にする必要がないが、競合を様々な方法で解決する選択肢がコーラーに与えられる。例えば、コーラーは（常にではないが）時々、削除または上書きする前にファイルのバックアップを作成したい場合があるが、本システムではそのような行為が可能である。別の例として、ある特定の環境において、フォルダＡの変更ありなしに関わらず、コーラーは常にフォルダＢをフォルダＡのように見せたい場合がある。そのような場合、コーラーは、Ｂ内の変更を削除または上書きして新規内容をＡからＢにコピーする動作を単純に選択することができる。
【００３０】
内部に分析ロジックを有さないことで、ＦａｓｔＳｙｎｃサブシステム２００がある点においては簡略化されるが、他の点では物事がより複雑になることに注意されたい。複雑なことは、ＦａｓｔＳｙｎｃサブシステム２００が常にファイルまたはディレクトリの状態に関して最新かつ正確な情報を、例えばデータ構造を更新することで、提供する必要があるということである。
【００３１】
図２に戻ると、ここで表現されている配置例はアプリケーション／同期マネージャ２０４、クライアントコーラー／同期分析メカニズム２０２およびＦａｓｔＳｙｎｃサブシステム２００を含む。一実施例において、これらの構成要素は定義済みのインタフェース集合を経由して通信する。
【００３２】
ＦａｓｔＳｙｎｃサブシステム２００は、ボリュームＡ２１４およびボリュームＢ２１６上のファイルシステム２１２および／または適切なリモートインタフェース（示さず）を経由してディレクトリ情報にアクセスする。図２は、ローカルボリューム２１４と、典型的にリモートボリューム上のネットワークサーバであるサーバボリューム２１６とを示すが、本発明はいかなる特定のボリューム配置に限定されない。実際、本発明は２つのリモートボリューム、２つのローカルボリューム上のファイルを同期することができ、しかも同一ボリューム上の２つのディレクトリを同期するよう調整することが可能である。本発明は、基本的に別ボリュームのディレクトリにマウントしたボリュームであるマウントポイントボリュームをサポートすることもできる。したがって、本発明を、ローカルボリューム（またはその何らかのディレクトリベースのサブセット）をリモートボリュームと同期する典型的な例で説明するが、それらは非制限的な例でしかない。
【００３３】
図３に表すように、列挙段階において、ＦａｓｔＳｙｎｃサブシステム２００は２つのディレクトリ３１４、３１６を評価する。これらのディレクトリの評価は、ローカルボリュームとサーバ上の対応ユーザ名前空間とのルートディレクトリを始点とすることができる（しかしながら、それらの始点は互いに対応するサブディレクトリでもよい）。図３において、ディレクトリは円で、ファイルは正方形で示されることに注意されたい。列挙段階は、以下で説明するように高速動作のために複数スレッドを使用できることにさらに注意されたい。
【００３４】
一般に、列挙段階に従って、クライアントコーラー２０２はＦａｓｔＳｙｎｃサブシステム２００から、同期すべきアイテムに関する情報を含む同期状態のデータ構造を取得する。図３の実施例において、構造は同期ツリー３２０として配置されている。以下で説明するように、クライアントコーラー２０２はその情報を評価し、必要なときにシステムポリシー等を参照し、ＦａｓｔＳｙｎｃサブシステム２００に指示して１つまたは複数の同期関連アクション（プリミティブ）をこれらアイテムに対して実施する。これは図３において、クライアントコーラー２０２がアクション処理コンポーネント３２６に与えているアクション要求３２４によって表される。
【００３５】
同期ツリーデータ構造３２０を提供するため、ＦａｓｔＳｙｎｃサブシステム２００は各ディレクトリの状態を効率的に検査し、ディレクトリ間の差異をコーラーに報告する。同期ツリー３２０は、変更されたファイルまたはディレクトリを含むディレクトリ名前空間のサブセットとして構築される。メモリ使用量を節約するため、未修正のファイルはツリー内には現れず、変更内容を含まないかまたは自身が不変のディレクトリはツリー内に含まれない。しかしながら、自身は不変だが自身の中に変更ファイルを有するディレクトリは単純ノードとしてツリー内に保持され、正確な階層組織を保つことに注意する。
【００３６】
図４は、図３における同期すべきディレクトリの例から構築した別ノードを含む、同期ツリー３２０を表す。図４において、階層組織を保つために存在するツリー内の単純ノードを下付き文字Ｓで示す。さらに、図３と類似して、図４においてディレクトリを表すノードを円で、ファイルを表すノードを正方形で示す。
【００３７】
分かるように、同期ツリー３２０内にあるノードは名前空間の差異、またはファイル（属性および／または内容）間の差異に対応する。例えば、図４において、ノードＥおよびＩ（およびＥの子ノード）は双方のディレクトリには存在せず、したがってこれらの名前空間の差異は、それらの子ノードと合わせて同期ツリー３２０内のノードとなっている。ノードＪおよびその子ファイルＫはお互いに同一であり、したがって効率性のため同期ツリー３２０内には含まれない。さらに、ファイルＨには図３のディレクトリ構造３１６内の網掛け四角形で表すファイル差異があり、したがってこのファイルは親として単純ノードＣを伴って同期ツリー３２０に含まれる。
【００３８】
図５に表すように、ツリー３２０内の（単純ノード以外の）各ノードは、ある同期アイテムに対する情報のデータ構造５５０を含む。この同期アイテムはファイルまたはディレクトリのいずれかである。同期アイテムは同期記述を含み、その同期記述は同期アイテムの元の状態、同期状態、および最後に同期状態にあった時点からの各アイテムの変更態様を表す。例えば、修正ファイルに対して、同期アイテムは同期状態からの最初の書込み日時、ファイルサイズ、属性等を含み、コピーが存在するならば双方のディレクトリからのコピーに対するこれらフィールドの現在値を含む（少なくとも１つの値集合が元のものとは異ならなければならず、そうでなければ非同期状態ではないことに注意されたい）。
【００３９】
さらに、各同期アイテムはファイルの「状態」を記述する同期ステータスフィールドを含む。例えば、同期状態は、一方のディレクトリまたは他方あるいはその両方でファイルが元の状態から変更されたのか、または、ファイルが一方のディレクトリにのみにファイルが存在するのは、ファイルが存在するディレクトリで新規作成されたためか、それともファイルが失われたディレクトリからファイルが削除されたためかを示す。同期状態は十分に粒度が細かいので、コーラーはそれを自身のステートマシン適用の基礎として使用して、アイテムを同期するために実施すべき動作あるいは複数の動作を選択することができる。
【００４０】
前述の米国特許出願第１１／０３２，８７０号で説明されているように、コーラー２０２は同期ツリー３２０およびその中のアイテムを使用して分析を実施する。この分析に基づき、次いでコーラー２０２は、ディレクトリの同期状態化に向けた１つまたは複数のアクションをＦａｓｔＳｙｎｃサブシステムが実施するよう要求する。
【００４１】
より詳細には、コーラー２０２からの動作要求に応答して、ＦａｓｔＳｙｎｃサブシステム２００は必要な呼出し（コール）をクライアント側キャッシングドライバおよびサーバボリュームドライバ（例えば、リダイレクタ）に対して行って、要求動作および他の動作を実施し、プログレス／ステータスをコーラー２０２に報告することができる。本発明に必要ではないが、一実施例において、動作要求時にＦａｓｔＳｙｎｃサブシステム２００は動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、そのパッケージをプロセススレッドプールで処理する作業アイテムとしてキューに入れる。内部のキューイングにより、動作の正しい順序での実行が保証されることに注意されたい。動作を処理するスレッドが利用可能なとき、ＦａｓｔＳｙｎｃサブシステム２００はアイテムをこのキューから抽出してその作業を実施し、必要に応じてコーラー２０２に対するコールバックを生成する。ＦａｓｔＳｙｎｃサブシステムの動作は非同期であることにさらに注意されたい。しかしながら、コールバックは多数あるスレッドプールのスレッドの１つから任意の時点で実行可能なので、コールバックコンテキストは特定のスレッド親和性を有さず、したがってクライアントのプログレスに対する呼出しと競合処理の実装とは、例えばコーラー２０２によってシリアル化(serialized)される。コーラー２０２はプログレス／ステータスを呼出しアプリケーションプログラム２０４（図２）に反映し戻すこともできる。
【００４２】
図６は、ＦａｓｔＳｙｎｃサブシステム２００のコーラー２０２に対する典型的な制御／フローを表す。図６において、ステップ６００を通して表すように、コーラー２０２はＦａｓｔＳｙｎｃサブシステム２００が上記の列挙段階を実施することを要求する。ステップ６０２での評価時に（例えば、サーバが応答しない等の）何らかの理由で不成功の場合、プロセスはステップ６１６を通って報告される適切なエラーで終了する。
【００４３】
エラーが発生しない典型的な状況において、ステップ６０２は代わりにステップ６０４に分岐し、１つまたは複数のアクションアイテムを作業リストに追加する（この作業リストは、コーラーがシリアル化する上述の内部ＦａｓｔＳｙｎｃサブシステムの作業アイテムのキューと異なることに注意されたい）。一般に、作業リストは、コーラーによって処理されるべき同期アイテムの集合を表す。
【００４４】
ステップ６０６は作業リストからアイテムを選択することを表し、ステップ６０８はその選択アイテムの処理を表す。一実施例において、ファイルを最初にキューに入れることは、深さ優先走査によりツリーを訪問して、各アイテムに対する最初のアクションを選択することを含む。そのアイテムはこのリストに追加され、リボルビングキューが生成される。ステップ６０６で、作業アイテムはツリーの初期訪問およびエラーから（以下で説明するステップ７１０を通って）到達することができ、以下で説明するように作業アイテムがなくなるまでプロセスは原則としてキュー上を反復する。
【００４５】
したがって一般に、アイテムの処理はそのアイテムに対して要求されるべきアクションを決定し、アイテムが回復不能なエラーを有するか否かを決定するか、またはアイテムが既に同期済であると結論付ける。アイテムが同期を必要とするものである場合、ステップ６１０および６１２は、ＦａｓｔＳｙｎｃコントローラ２００がアクション用のアイテムをキューに入れる要求を表す。
【００４６】
ステップ６１４は選択、処理および場合によってはキューへの追加の各ステップを作業リストが空になるまで繰り返す。空になるとコーラーの動作は完了するが、以下で説明するようにＦａｓｔＳｙｎｃサブシステム２００が要求アクションを正しく実施できない場合には作業リストにアイテムを差し戻すことが可能である。同期はＦａｓｔＳｙｎｃサブシステム２００がその処理の全てを無事完了し、コーラーに残された未処理の同期アイテムがなくなったときに実際に完了するし。
【００４７】
アクションがステップ６１２で（例えばＦａｓｔＳｙｎｃサブシステム２００に対するＡＰＩコールにより）キューに入れられるときは常に、ＦａｓｔＳｙｎｃサブシステム２００はキューから取り除くためのリソース（例えば、利用可能なスレッド）を得るとすぐにアクションをキューから取り除く。一般に図７はこれらの動作を表し、それらの動作にはステップ７０２でキュー内のアイテムを待機することが含まれる。一実施例において、キューから取り除いたアイテムは別スレッドによる消費のために別のキューに入れられ、それにより以下で説明する並列動作を促進する。
【００４８】
この並列実装において、ＦａｓｔＳｙｎｃサブシステム２００は同期アイテム上の動作を別のスレッドを通して処理し、したがってステップ７０４以下のステップは、独立したスレッドが実施した動作実行の完了（成功または不成功）後の制御フローを表す。一般に、ステップ７０６が表すようにアクションが試行されコールバックが生成される。アクションが成功の場合（ステップ７０８）、全体プロセスは後に別アイテムに対して必要になるまでスレッドをスレッドプールに返すと考えられる。不成功の場合、ステップ７０６に戻るステップ７１０が表すように、クライアントは何回かの再試行を許可することができる。再試行が許可されない場合、例えば図６に表すように失敗コードをコーラーに返して図７からステップ６０４に戻ることで、アイテムは作業リストに差し戻される。
【００４９】
図８は並列処理をより詳細に説明し、主にＦａｓｔＳｙｎｃサブシステム２００のアプリケーションプログラミングインタフェース（ＡＰＩ）のコーラーからの視点を表す。高レベルでは、ＦａｓｔＳｙｎｃサブシステム２００を用いる同期は２段階、すなわち上述の列挙および実行を有する。列挙の目的は迅速かつ効率的に、同期が必要なディレクトリの部分を発見および報告すること、ならびに何らかの論理的な方法でその差異をコーラー２０２に報告することである。アクション段階中に、コーラー２０２は非同期であるファイルまたはディレクトリの各々に対して１つまたは複数の動作を選択しており、その動作はアイテムを同期状態に戻すことを意図している。
【００５０】
コーラー２０２はＦａｓｔＳｙｎｃサブシステムのＡＰＩセットを使用して動作をキューに入れることができ、その中でＦａｓｔＳｙｎｃサブシステム２００は単純にそれらをキューに追加して即座に返る。ＦａｓｔＳｙｎｃサブシステム２００は複数スレッドを並列に用いて動作を実施し、その複数スレッドの各々は未完了動作をキューから取得して実行する。各動作が完了すると、ＦａｓｔＳｙｎｃサブシステム２００は、動作をキューに入れたときに与えたコールバックを実行することで、コーラーに通知する。コーラーは次いで動作結果を評価し、動作が失敗ならば動作を再試行するか、あるいはファイルまたはディレクトリに対する新規動作をキューに入れることができる。
【００５１】
コーラーがその呼出しスレッドの制御を長時間放棄する唯一の時点は、列挙が完了する（成功または不成功）までＦａｓｔＳｙｎｃサブシステム２００が制御を戻さない列挙段階の間であるが、ＦａｓｔＳｙｎｃサブシステム２００は頻繁にコールバックを提供し、それによりコーラーは列挙行為の修正または列挙の中断ができることに注意されたい。アクション段階中、キューに動作を入れるというコーラーの要求は、同期アイテムと関連付けられる。その際、ＦａｓｔＳｙｎｃサブシステム２００は実施すべき動作のキューに動作を追加するのにほとんど作業を要しないので、コーラーの要求は比較的に迅速に返される。
【００５２】
アクション段階の終わりで、ＦａｓｔＳｙｎｃサブシステム２００のスレッドがその作業の実施を完了したとき、ＦａｓｔＳｙｎｃサブシステム２００は動作をキューに入れたときに与えたコールバックを実行し、動作結果に関する情報と、アクションにおいて動作していたファイルまたはディレクトリを表す同期アイテムとに関する情報を返す。コールバックは、ＦａｓｔＳｙｎｃサブシステム２００に対する動作をキューに入れるために用いたものから独立したスレッド上で発生する。コールバック内部でコーラーは動作を再試行する選択肢を有し、その場合コーラーは、再試行した動作の結果を報告する別のコールバックを受信する。または、完了コールバック中にコーラーが全く同一の動作の再試行を望まない場合でも、コーラーは後に同一の同期アイテムに対する新規動作（以前と同一の動作または新規動作のいずれか）をキューに入れることができる。
【００５３】
このように、並列動作およびＩ／Ｏパイプライン化（アイドル時間を削減するための、処理およびＩ／Ｏに対する複数スレッド）は一般に最大化され、転送される全データは最小化される。この目的を達成するため、図８に一般的に表すように、一実施例において複数スレッドが列挙およびアクションの両方において使用される。図８ではＦａｓｔＳｙｎｃサブシステム２００は両方のディレクトリツリーの内容を複数スレッド上で列挙し、全スレッドが処理を完了したときに返る。
【００５４】
列挙中、各スレッドは両方のディレクトリ下の同一パスを開き、全ての子（ファイルおよびディレクトリ）を列挙する。スレッドは新規スレッドが処理する各サブディレクトリをキューに入れ、次いでツリーを修正して変更要素に対する同期アイテムを含めることで、そのディレクトリ内部の差異を処理する。
【００５５】
ＦａｓｔＳｙｎｃサブシステム２００の列挙方法における他の態様の１つは、同期すべきディレクトリ内の全ファイルをオープンせずに列挙を行うことである。オープンは特にネットワーク上ではコストがかかる。全ファイルをオープンすることでファイルのプロパティ（例えば、変更日時、サイズおよび属性）を決定すると、ファイルをオープンし、ファイル情報のクエリを行い、さらにファイルをクローズしなければならない。ローカルシステム上では、これら３つの動作の各々オペレーティングシステムに入ることを必要とし、リモートファイルシステム上では、これは少なくとも３回のネットワーク上のラウンドトリップ、および恐らくそれ以上のオーバヘッドを意味する。
【００５６】
このコストを回避するため、ＦａｓｔＳｙｎｃサブシステム２００は代わりにディレクトリ列挙を使用する。ディレクトリ列挙に対してはディレクトリを１回オープンすることが必要なだけで、その後、そのハンドルでの各クエリは実際にファイルをオープンせずに複数ファイルに関する情報を取得する。次いで、ディレクトリをクローズする必要がある。主な違いは、ディレクトリ列挙を利用することで、全てのファイルおよびディレクトリに対して１回ずつではなく、ディレクトリ毎に１回のオープンと１回のクローズのみがあるいうことである。さらに、唯一のクエリディレクトリを有することは、ファイル毎の方法を用いて各ファイルおよびディレクトリに関する情報のクエリを行うのと対照的に、多数のファイルに関する情報を生成する（ファイルおよびディレクトリは、オペレーティングシステムおよびラウンドトリップコストの点からは一般に等価である）。サーバとのラウンドトリップ交換の最小化に加えて、オーバヘッドの削減により転送データの総量も削減する。
【００５７】
それぞれの列挙が新規ディレクトリを発見すると、これらのディレクトリは次いで別スレッドによる列挙のためにキューに入れられる。したがって、様々なスレッドがディレクトリおよびその全サブディレクトリを並列処理することが可能である。これはＣＰＵ利用率を最大化し、特にネットワーク上でＩ／Ｏパイプライン化の利点を生かす。ネットワーク上では、上記パイプライン化は総同期時間に及ぼす待ち時間の影響を削減する。
【００５８】
アクション段階中、複数スレッドが、複数のスレッドがコーラーがキューに入れた動作を処理し、一つの動作につき一つのスレッド上で実行および完了される。すなわち、動作毎に１スレッドで、複数動作が同時に実行する。
【００５９】
容易に分かるように、信頼性のためにはシステムは割込みとファイルシステムの一部の（例えば、共有違反による）利用不能性とを、任意の動作を複数回再試行する能力により巧妙に処理しなければならない。列挙については、個々のファイルまたはディレクトリの列挙に失敗しても列挙段階は失敗しない。代わりに、ＦａｓｔＳｙｎｃサブシステム２００は、同期ツリー内の特定ノードが列挙不能であった旨を報告する。コーラーは、後の時点でそのサブツリーから新しい列挙を開始することができる。
【００６０】
アクション段階はより洗練された失敗処理ロジックを含むことができる。例えば、ＦａｓｔＳｙｎｃサブシステム２００が特定の同期アイテムに対して動作が失敗したことを報告するとき、ＦａｓｔＳｙｎｃサブシステム２００はアイテムを更新して、新しい同期状態(SyncState)および（属性、サイズ、および変更日時のような）ファイルの関連情報を反映する。コーラーはＦａｓｔＳｙｎｃサブシステム２００と通信して前回のアクションを即座に再試行（および再試行動作の完了時に別のコールバックを受信）すること、または待機して任意の時点で同期アイテムを同一動作または新規動作のためにキューに入れることの選択肢を有する。
【００６１】
この柔軟性を有することで、コーラーは動作結果に応答するための豊富な可能性を実装することが可能である。例えば、コーラーは共有違反の応答の際、幾分かの時間待機して、その後にファイルをオープンしたアプリケーションがそのハンドルまたは複数のハンドルをクローズすることを期待して動作をキューに入れ、動作を再試行することが可能である。さらに、コーラーは失敗毎に任意の複雑さを有するステートマシン（例えば、多くの場合、ファイルの同期方法の決定に対して最初に用いたものと同一のステートマシン）を通してアイテムを実行することが可能である。そのようにすることで、ファイルの同期方法を決定する単一のステートレスシステムを通してコーラーが同期アイテムを繰り返し実行することが可能である。そのシステムは、ユーザに行うべきことを対話的に問い合わせること、マシンまたはドメインのポリシーを参照すること、ファイルのバックアップコピーを生成すること、等を含むことができる。
【００６２】
さらに本発明は、ファイルシステムがファイルまたはディレクトリが長期間ロックされるべきでないことを認識するので、ファイルシステムの使い勝手に及ぼす影響を削減する。一度に１つのファイルを同期するのでなく、効率性および速度のためにディレクトリツリー全体を一度に同期する上での問題の１つは、例えば他のアプリケーションによる書き込み動作を禁止するハンドルのオープンによってファイルを排他的に保持することが実用的でないということである。しかしながら、一度に１つのファイルを同期するときは、ファイルを排他的に保持してコーラーにそれに対して行うべきことを問い合わせ、次いでそれを解放せずにアクションを実施することを容認できる。ＦａｓｔＳｙｎｃサブシステム２００は、列挙からの全ての修正ファイルまたはディレクトリを最後の動作の完了まで一貫して保持しないことで、システムリソースの流出を防ぎアプリケーションユーザを不快にさせないよう試みる。
【００６３】
この目的を達成するため、ＦａｓｔＳｙｎｃサブシステム２００は、クエリおよびファイル／サブディレクトリ生成のようなディレクトリ操作を可能とするディレクトリ列挙を通してディレクトリ階層を列挙するが、ファイルに対する書き込みを防止しない。アクション段階中に、ＦａｓｔＳｙｎｃサブシステム２００はファイルが列挙中と同じ状態にあることを検証する。典型的にファイルは列挙中と同じ状態にあるが、ファイルが変更がしたという可能性もある。ファイルが列挙とアクションとの間で変更された場合、選択したものと異なる動作が適切である場合がある。そのような場合、ＦａｓｔＳｙｎｃサブシステム２００はファイルまたはディレクトリに触れずに動作を完了し、変更の発生をコーラーに説明する失敗コードを報告する。コーラーは即座に応答して動作を再試行するかまたは動作をキャンセルするかの選択肢を有する。後の時点で、コーラーがそのアイテムに対して新しいアクションを提示することが可能である。コーラーはＦａｓｔＳｙｎｃサブシステム２００に対して、ファイルのある特定の側面で問題を起こすことなく変更しえるものについて無視するよう指示することもできる。
【００６４】
したがって、ＦａｓｔＳｙｎｃサブシステム２００がファイルをオープンする（したがって、ファイルを他のファイルシステムのアクセスからある程度ロックする）唯一の期間は、列挙中および動作が処理されているアクション中の短時間のみである。ＦａｓｔＳｙｎｃサブシステム２００は割込みを適切に受理するため、ＦａｓｔＳｙｎｃサブシステム２００およびそのコーラーは列挙段階とアクション段階との間の矛盾を同様に処理することができる。（米国特許第６，８５３，９９３号で説明されるトランザクションＮＴＦＳのような）トランザクションファイルシステムにより、ＦａｓｔＳｙｎｃサブシステム２００がトランザクションコンテキストを同期アイテムに関連付けて、同期による変更をロールバックする能力を与えることも可能であることに注意されたい。
【００６５】
本発明には必要ではないが、ＦａｓｔＳｙｎｃサブシステム２００の動作中に、実施すべき任意のファイル毎またはディレクトリ毎の処理に対して、コーラーはコールバックを備えるべきである。ＦａｓｔＳｙｎｃサブシステム２００は列挙およびアクションを推進するが、コーラーが何らかの処理を実施しＦａｓｔＳｙｎｃサブシステム２００にフィードバックを与える必要がある場合がある。これらの場合、コールバックを用いてＦａｓｔＳｙｎｃサブシステム２００がユーザに入力を求めることができる。一例として、列挙の間、コーラーは利用可能な全ディレクトリのサブセットのみを同期し他を無視することを選択することができる。ある特定のディレクトリが低速な接続上に実際にマウントしたリモートファイルシステムであるとき、または読取専用データのみを含むことが分かっているディレクトリがあるときが一例である。ディレクトリの列挙前にＦａｓｔＳｙｎｃサブシステム２００がコールバックを実行して何を行うべきかをコーラーに原則として問い合わせるように、ＦａｓｔＳｙｎｃサブシステム２００はコールバックをコーラーに与えることができる。コーラーは次いで、ＦａｓｔＳｙｎｃサブシステム２００がディレクトリを列挙すべきか、またはスキップすべきか、または列挙を全て中止すべきかを指示することで、ＦａｓｔＳｙｎｃサブシステム２００に応答することができる。
【００６６】
別の例としてアクション段階中、新規作成したサブディレクトリをコピーする間、ある特定のファイルまたはディレクトリのみのコピーを回避して、コーラーが全ファイルを把握するようにすることが重要である場合がある。例えば、著作権で保護された内容をある特定のファイルサーバから切り離しておくことが重要である、またはリモートファイルシステムをマウントしたサブディレクトリをコピーしないことが重要である場合がある。その理由のため、ディレクトリツリーのコピー中にコールバックが与えられ、それによりコーラーはある特定のファイルまたはディレクトリをスキップする、あるいはコピーを全部キャンセルすることを選択することができる。
【００６７】
前述の詳細な説明から分かるように、コーラーが同期プロセスに対して必要とする制御を有することを許しつつ、列挙およびアクションの手順が原則として自己完結型でありＦａｓｔＳｙｎｃサブシステムにより推進される、同期モデルが提供される。同期プロセスは高速かつ信頼性があり、様々なコーラーが列挙情報および要求アクションを取得できるよう柔軟である。本発明はしたがって、現代のコンピューティングに必要とされる多数の利益と利点を提供する。
【００６８】
本発明は様々な修正および代替構成を受け入れることができるが、それらのある特定の例示実施態様を図面で示し、上で詳細に説明した。しかしながら、本発明を開示した特定の形態に限定する意図はなく、むしろ本発明の精神および範囲内にある全ての修正、代替構成、および等価物を包含するよう意図されることは理解されるべきである。
【図面の簡単な説明】
【００６９】
【図１】本発明を組み込むことが可能なコンピューティング環境を一般的に表すブロック図である。
【図２】本発明の様々な態様に従う高速かつ信頼性のある同期サブシステムによる同期を実装するための、一般的なアーキテクチャの例を備えるブロック図である。
【図３】本発明の様々な態様に従う同期ディレクトリを備えるブロック図である。
【図４】本発明の様々な態様に従う、列挙段階における同期サブシステムにより構築した同期ツリーの表現である。
【図５】本発明の様々な態様に従う、同期アイテム用データの保持に使用されるデータ構造例の表現である。
【図６】本発明の様々な態様に従う、一般にディレクトリの同期に向けたロジックの例を表すフロー図である。
【図７】本発明の様々な態様に従う、一般にディレクトリの同期に向けたロジックの例を表すフロー図である。
【図８】本発明の様々な態様に従う、クライアントコーラーと高速かつ信頼性のある同期サブシステムとの間の様々な相互作用の表現である。
【図１】
2008541263.tif 000005
【図２】
2008541263.tif 000006
【図３】
2008541263.tif 000007
【図４】
2008541263.tif 000008
【図５】
2008541263.tif 000009
【図６】
2008541263.tif 000010
【図７】
2008541263.tif 000011
【図８】
2008541263.tif 000012
【国際調査報告】
2008541263.tif 000013