JP2008541263A - ファイルシステムディレクトリの高速かつ信頼性のある同期 - Google Patents
ファイルシステムディレクトリの高速かつ信頼性のある同期 Download PDFInfo
- Publication number
- JP2008541263A JP2008541263A JP2008511119A JP2008511119A JP2008541263A JP 2008541263 A JP2008541263 A JP 2008541263A JP 2008511119 A JP2008511119 A JP 2008511119A JP 2008511119 A JP2008511119 A JP 2008511119A JP 2008541263 A JP2008541263 A JP 2008541263A
- Authority
- JP
- Japan
- Prior art keywords
- computer
- directory
- directories
- action
- synchronization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99954—Version management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
- Multi Processors (AREA)
Abstract
コンピュータ/ファイルシステムディレクトリの高速かつ信頼性のある同期を促進するシステムおよび方法を説明する。同期(FastSync)サブシステムは発見/列挙段階で動作してコールするクライアントにディレクトリ間の差異の集合を提供し、次いでアクション段階で動作して、クライアントが指示するように動作を実施して相違なるディレクトリを同期する。発見/列挙およびアクション段階は並列動作およびI/O(入出力)パイプラインを使用する。複数スレッドを列挙中に使用して、各ディレクトリの子を列挙し、新しいスレッドが処理する各サブディレクトリをキューに入れる。アクション段階中は、動作が要求されるとき、FastSyncサブシステムは動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、プロセススレッドプールで処理する作業アイテムとしてそのパッケージをキューに入れる。
Description
本発明は一般にコンピュータシステムに関し、より詳細にはコンピュータファイルおよびディレクトリに関する。
旅行時、在宅作業時、またはネットワーク故障時のように、コンピュータユーザはしばしばネットワークから切断してオフライン作業を行う必要がある。その結果、様々なメカニズムは、ローカルコンピュータにネットワーク情報をキャッシュしてローカルコンピュータのネットワークからの切断時に情報へのアクセスを可能とすることに向けられてきた。ローカルにキャッシュすることはさらに、ネットワークサーバとオフラインモードで動作するクライアントとの間の通信データ量を削減する。送信データ量を削減する利点には、サーバ負荷の削減、クライアントの認識待ち時間の削減、および利用可能なネットワーク帯域の増加が含まれる。
オフライン作業は通常、サーバディレクトリ階層に対するオフラインディレクトリ階層の状態を変更する。階層内ディレクトリに対する変更は、属性変更またはデータ書込みのようなファイル変更の形、あるいは新規ファイルまたはディレクトリの生成、またはファイル削除のような名前空間の変更の形がある。
変更に関わらず、何らかの時点で何らかのプロセスを実施して、オフラインクライアントとサーバディレクトリとを同期して同期状態にする必要が出てくる。同期状態では、2つのディレクトリ階層は同一のサブディレクトリ構造を有し、これらディレクトリ内部に同一のファイル名を含む。また、双方のディレクトリに存在するそれぞれのファイルに対して、ファイルはそのデータストリーム内に同一データを含み、同一の関連属性、タイムスタンプおよび他のファイルシステムの情報を有する必要がある。
しかしながら、キャッシュしたオフラインアイテムとサーバのファイルシステムのアイテム(ディレクトリおよびファイル)との同期は複雑で、相対的に低速で、常に問題を抱えている。オフラインファイルを同期する高速かつ信頼性のある方法が必要である。
簡潔に述べると、本発明は、ローカルのオフラインキャッシュに保持したディレクトリをリモートネットワークファイルシステム内の別ディレクトリと同期するようなディレクトリおよびそのファイルの同期を促進する、多段階システムおよび方法に関する。この目的を達成するため、高速かつ信頼性のある同期(FastSync)サブシステムは、発見/列挙段階で動作してクライアントコーラーに差異の集合を提供し、次いでアクション段階においてクライアントが指示したように動作を実施して異なるディレクトリを同期する。
発見/列挙段階においては、FastSyncサブシステムはディレクトリ間に存在する差異を決定する。その差異には、あるディレクトリから削除されたがそれに対応するディレクトリからは削除されていないファイルのような名前空間の差異、あるいは2つのファイルの属性および/または内容の差異が含まれる。一実施例において、差異を記述するノードツリーのような同期構造がFastSyncサブシステムによりクライアントコーラーに返される。
同期ツリー構造は、変更されたアイテム(ファイルまたはディレクトリ)を表すノードを含むディレクトリ名前空間のサブセットとして構築される。メモリ使用量を節約するため、ノードは未修正のアイテムのツリー内には配置されないが、単純なノードは内部に変更アイテムを有する未修正のサブディレクトリのツリー内に保持され、正確な階層組織を保てるようにする。同期すべき各アイテムは、現在の状態を記述する同期ステータスフィールドを有する。現在の状態には例えば、一方のディレクトリまたは他方あるいはその両方でファイルが元の状態から変更されたか否か、ファイルが一方のディレクトリのみに存在するのはそのファイルが存在するディレクトリで新規作成されたためか、またはそのファイルがないディレクトリにおいてそのファイルが削除されたためかが含まれる。
クライアントコーラーは返された構造を望みどおりに分析し、次いでディレクトリの同期状態化に向けた特定のアクションをFastSyncサブシステムが取ることを要求する。アクション段階において、FastSyncサブシステムは同期プリミティブ(組み合わせてより複雑なアクションにすることが可能な動作)をクライアントが指示するように実行する。
一実施例において、FastSyncサブシステムの発見/列挙およびアクション段階は、各段階で複数スレッドを用いることによるものを含めて、並列動作およびI/O(入出力)パイプライン化を利用する。例えば、列挙中に、各スレッドは双方のディレクトリ下の同一パスを開いて、子(ファイルおよびディレクトリ)を列挙する。スレッドは新規スレッドで処理する各サブディレクトリをキューに入れ、次いでツリーを修正して変更要素に対する同期アイテムを含めることで、そのディレクトリ内部の差異を処理する。FastSyncサブシステムはまた、ファイル列挙よりもディレクトリ列挙を使用する。それぞれの列挙で新しいディレクトリが見つかると、これらのディレクトリは次いで別スレッドによる列挙のためにキューに入れられる。したがってディレクトリおよびそのサブディレクトリを異なるスレッドにより並列処理することが可能である。これはCPU利用率を最大化し、特にネットワーク上でI/Oパイプライン化の利点を生かす。ネットワーク上では、上記のパイプライン化は総同期時間に対する待ち時間の影響を削減する。
アクション段階中に動作を要求されると、FastSyncサブシステムは動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、そのパッケージをプロセススレッドプールで処理する作業アイテムとしてキューに入れる。内部のキューイングにより、アクションの正しい順序での実行が保証されることに注意されたい。動作を処理するスレッドが利用可能なとき、FastSyncサブシステムはアイテムをこのキューから抽出してその作業を実施し、必要に応じてコーラー(Caller)に対するコールバックを生成する。アクションが成功の場合、全体のプロセスは、別アイテムが後に必要とするまでスレッドをスレッドプールに返すものと見なされる。不成功の場合、クライアントは何回か再試行するか、または例えば失敗コードをコーラーに返すことでアイテムを作業リストに差し戻すことができる。
他の利点は、図面と関連させた以下の詳細な説明から明らかになるであろう。
動作環境例
図1は、本発明を実施できる適切なコンピューティングシステム環境100の例を示す。コンピューティングシステム環境100は適切なコンピューティング環境の一例でしかなく、本発明の使用または機能性の範囲に対するいかなる限定も示唆する意図はない。また、コンピューティング環境100は、動作環境例100に示したコンポーネントの任意の1つまたは組合せに関するいかなる依存性または条件を有するとも解釈されるべきでない。
図1は、本発明を実施できる適切なコンピューティングシステム環境100の例を示す。コンピューティングシステム環境100は適切なコンピューティング環境の一例でしかなく、本発明の使用または機能性の範囲に対するいかなる限定も示唆する意図はない。また、コンピューティング環境100は、動作環境例100に示したコンポーネントの任意の1つまたは組合せに関するいかなる依存性または条件を有するとも解釈されるべきでない。
本発明は、多数の他の汎用目的または特殊目的コンピューティングシステム環境または構成上で動作可能である。本発明での使用に適した公知のコンピューティングシステム、環境、および/または構成の例として、これらに限定されるものではないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能家電、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置の任意を含む分散コンピューティング環境、等を含む。
本発明を、コンピュータが実行中のプログラムモジュールのようなコンピュータ実行可能命令の一般的コンテキストで記述することができる。一般に、プログラムモジュールはルーチン、プログラム、オブジェクト、コンポーネント、データ構造、等を含み、これらは特定のタスクを実施するかまたは特定の抽象データ型を実装する。本発明を分散コンピューティング環境で実施することもでき、その環境では、通信ネットワークを通して接続したリモートプロセッシングデバイスによりタスクが実施される。分散コンピューティング環境においては、メモリ記憶装置を含むローカルおよび/またはリモートコンピュータ記憶媒体にプログラムモジュールを置くことができる。
図1を参照すると、本発明を実装するシステムの一例は汎用目的コンピューティングデバイスをコンピュータ110の形で含む。コンピュータ110の構成要素としては、処理ユニット120、システムメモリ130、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット120に接続するシステムバス121を含むことができるがこれらに限定されない。システムバス121は数種のバス構造のうち任意のものであることができ、それらはメモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャの任意を用いるローカルバスを含む。制限ではなく例として、上記アーキテクチャはISAバス、MCAバス、EISAバス、VESAローカルバス、およびメザニンバスとしても知られるPCIバスを含む。
コンピュータ110は典型的に様々なコンピュータ可読媒体を含む。コンピュータ可読媒体はコンピュータ110がアクセスできる任意の利用可能媒体であることができ、揮発性および不揮発性媒体、ならびにリムーバブルおよび非リムーバブル媒体の両方を含む。制限ではなく例として、コンピュータ可読媒体はコンピュータ記憶媒体と通信媒体を含む。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータのような情報を記憶する任意の方法または技術を実装した、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含む。コンピュータ記憶媒体はこれらに限定されないが、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報の記憶に使用可能でコンピュータ110がアクセスできる任意の他の媒体を含む。通信媒体は典型的にコンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを、搬送波または他の搬送機構のような変調データ信号で具現化し、任意の情報配信媒体を含む。“変調データ信号”という用語は、信号内の情報を符号化するような方式に設定あるいは変更された、1つまたは複数の特性を有する信号を意味する。制限ではなく例として、通信媒体は有線ネットワークまたは直接配線接続のような有線媒体、および音響、RF、赤外線および他の無線媒体のような無線媒体を含む。上記の任意の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
システムメモリ130はコンピュータ記憶媒体を、リードオンリメモリ(ROM)131およびランダムアクセスメモリ(RAM)132のような揮発性および/または不揮発性メモリの形で含む。例えば、起動時にコンピュータ110内部の要素間での情報転送を支援する基本ルーチンを含む基本入出力システム133(BIOS)が、典型的にROM131内に記憶される。RAM132は典型的に、処理ユニット120が即座にアクセス可能および/または処理ユニット120上で現在実行中のデータおよび/またはプログラムモジュールを含む。制限ではなく例として、図1はオペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137を示す。
コンピュータ110は他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ記憶媒体も含むことができる。例としてのみ、図1は非リムーバブル、不揮発性磁気媒体を読み書きするハードディスクドライブ141、リムーバブル、不揮発性磁気ディスク152を読み書きする磁気ディスクドライブ151、およびCD−ROMまたは他の光媒体のようなリムーバブル、不揮発性光ディスク156を読み書きする光ディスクドライブ155を示す。動作環境例で使用可能な他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク(DVD)、デジタルビデオテープ、固体RAM、固体ROM、等を含むが、これらに限定されない。ハードディスクドライブ141は典型的にインタフェース140のような非リムーバブルメモリインタフェースを通してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は典型的にインタフェース150のようなリムーバブルメモリインタフェースによりシステムバス121に接続される。
上述し図1に示したドライブとそれらの関連コンピュータ記憶媒体とは、コンピュータ110に対するコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータを記憶する。図1において例えば、ハードディスクドライブ141はオペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147を記憶するとして示される。これらのコンポーネントはオペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136、およびプログラムデータ137と同じかまたは異なるかのいずれかであることができることに注意されたい。本明細書においては、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146、およびプログラムデータ147に異なる数字を与え、少なくともそれらが異なるコピーであることを示している。ユーザは、タブレットまたは電子デジタイザ164、マイクロフォン163、キーボード162および、普通はマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス161のような入力装置を通して、命令(コマンド)および情報をコンピュータ110に入力することができる。図1に示していない他の入力装置はジョイスティック、ゲームパッド、衛星用アンテナ、スキャナ、等を含むことができる。これらおよび他の入力装置は、システムバスに接続されるユーザ入力インタフェース160を通して処理ユニット120に接続されることが多いが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス(USB)のような他のインタフェースおよびバス構造により接続することもできる。モニタ191または他種の表示装置も、ビデオインタフェース190のようなインタフェース経由でシステムバス121に接続される。モニタ191にタッチスクリーンパネル等を統合することもできる。モニタおよび/またはタッチスクリーンパネルを、タブレットタイプのパーソナルコンピュータのように、コンピューティングデバイス110が組み込まれる筐体に物理的に結合することができることに注意されたい。さらに、コンピューティングデバイス110のようなコンピュータは、スピーカ195およびプリンタ196のような他の周辺出力装置を含むこともでき、それらには周辺出力インタフェース194等を通して接続することができる。
コンピュータ110は、リモートコンピュータ180のような1つまたは複数のリモートコンピュータとの論理接続を用いてネットワーク環境で動作することができる。リモートコンピュータ180はパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノードであることができ、典型的にコンピュータ110に関して上述した要素の多くまたは全てを含むが、図1にはメモリ記憶装置181のみを示している。図1に示した論理接続はローカルエリアネットワーク(LAN)171および広域ネットワーク(WAN)173を含むが、他のネットワークを含むこともできる。上記のネットワーク環境は職場、企業規模のコンピュータネットワーク、イントラネットおよびインターネットで一般的である。
LANネットワーク環境で使用するとき、コンピュータ110はネットワークインタフェースまたはアダプタ170を通してLAN171に接続される。WANネットワーク環境で使用するとき、コンピュータ110は典型的にモデム172またはインターネットのような、WAN173上で通信を確立する他の手段を含む。モデム172は内蔵型または外付型であってよく、ユーザ入力インタフェース160または他の適切なメカニズムを経由してシステムバス121に接続することができる。ネットワーク環境において、コンピュータ110に対して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に格納することができる。制限ではなく例として、図1はリモートアプリケーションプログラム185がメモリ装置181上にあるとして示す。示したネットワーク接続は例であって、コンピュータ間の通信リンクを確立する他の手段を使用できることは理解されるであろう。
ローカルおよびリモートファイルならびにディレクトリの同期
本発明は一般に、ローカルのオフラインキャッシュおよびリモートネットワークファイルシステムにあるようなディレクトリを同期するシステムおよび方法に関する。この目的を達成するため、本発明はディレクトリ間にどのような差異が存在するかを発見し、その差異をクライアントコーラーに対して列挙(enumerate)し、次いで、同期状態に達するのに必要なファイルシステム関連命令の発行といったクライアントの要求アクションを実行する。以降理解されるように、本発明を実装する多数の方法が実現可能であり、その代替手段のいくつかのみを本明細書で説明する。例えば、本発明は主に多数の同期関連動作を並列に実施する多段階、マルチスレッドモデルを参照しながら以下で説明する。それでもなお、他種の配置が実現可能であり、本発明は本明細書で使用したいかなる特定の例にも限定されず、むしろ一般的なコンピューティングにおける利益と利点を提供する様々な方法で使用することができる。
本発明は一般に、ローカルのオフラインキャッシュおよびリモートネットワークファイルシステムにあるようなディレクトリを同期するシステムおよび方法に関する。この目的を達成するため、本発明はディレクトリ間にどのような差異が存在するかを発見し、その差異をクライアントコーラーに対して列挙(enumerate)し、次いで、同期状態に達するのに必要なファイルシステム関連命令の発行といったクライアントの要求アクションを実行する。以降理解されるように、本発明を実装する多数の方法が実現可能であり、その代替手段のいくつかのみを本明細書で説明する。例えば、本発明は主に多数の同期関連動作を並列に実施する多段階、マルチスレッドモデルを参照しながら以下で説明する。それでもなお、他種の配置が実現可能であり、本発明は本明細書で使用したいかなる特定の例にも限定されず、むしろ一般的なコンピューティングにおける利益と利点を提供する様々な方法で使用することができる。
多段階動作に関して、一実施例において同期サブシステムは発見段階で動作して同期すべき2つのディレクトリ構造間の差異を特定および列挙し、アクション段階で動作して同期プリミティブ(組み合わせてより複雑なアクションにすることが可能な動作)を実行する。これにより、分析段階で有利に(leverage)動作する、クライアントコーラー(client caller)のメカニズムが利用するための非常に高速で信頼性のあるメカニズムが提供される。以降明らかになるように、この実装におけるサブシステムは顕著な並列動作およびI/O(入出力)パイプライン化を提供し、したがって高速な同期を促進する。それによってサブシステムを本明細書では(略して)FastSyncサブシステム200(図2)と称する。
一般に、本実施例において、FastSyncサブシステム200のコンポーネントはディレクトリ間の差異を列挙して同期関連要求を実行するが、ディレクトリの同期方法に関する意思決定は行わない。FastSyncサブシステム200はその代わりに列挙段階におけるディレクトリの状態を報告し、動作段階において(アクションに対応する)どのような動作あるいは複数の動作を取って個々のファイルまたはディレクトリを同期すべきかに関する明示的な命令を、クライアントコーラー202から受け取る。これにより、様々な種類のコーラー(caller)がFastSyncサブシステム200と連動することができる。上記のコーラーとしては例えば、同期するためにユーザ入力を得る必要がある対話的(interactive)アプリケーション、またはユーザに入力を求めずにバックグラウンドで動作する必要があるグループポリシープロセッサおよびスクリプトがある。適切なクライアントコーラー202の1つはキャッシングサービスのクライアント側コントローラを備え、これは2005年1月10日出願の米国特許出願第11/032,870号で説明されている。この特許出願は本発明の譲受人に譲渡され、ここで引用により組み込まれる。このサービスモデルにおいては、サービスによりアプリケーションプログラムまたは同期マネージャプログラム204が、複雑な同期分析の大部分を実施せずとも同期機能を有することができることに注意されたい。
一般に、本実施例において、FastSyncサブシステム200は非同期状態を解決するロジックを含まない。その1つの理由は、これにより様々なコーラーが様々な方法で同期することができるからである。FastSyncサブシステム200のアクション動作はその代わり、以下の(2つのディレクトリAおよびBを同期する)動作例で説明するようなプリミティブを提供する。
動作は十分に高レベルであるので、コーラーは詳細を気にする必要がないが、競合を様々な方法で解決する選択肢がコーラーに与えられる。例えば、コーラーは(常にではないが)時々、削除または上書きする前にファイルのバックアップを作成したい場合があるが、本システムではそのような行為が可能である。別の例として、ある特定の環境において、フォルダAの変更ありなしに関わらず、コーラーは常にフォルダBをフォルダAのように見せたい場合がある。そのような場合、コーラーは、B内の変更を削除または上書きして新規内容をAからBにコピーする動作を単純に選択することができる。
内部に分析ロジックを有さないことで、FastSyncサブシステム200がある点においては簡略化されるが、他の点では物事がより複雑になることに注意されたい。複雑なことは、FastSyncサブシステム200が常にファイルまたはディレクトリの状態に関して最新かつ正確な情報を、例えばデータ構造を更新することで、提供する必要があるということである。
図2に戻ると、ここで表現されている配置例はアプリケーション/同期マネージャ204、クライアントコーラー/同期分析メカニズム202およびFastSyncサブシステム200を含む。一実施例において、これらの構成要素は定義済みのインタフェース集合を経由して通信する。
FastSyncサブシステム200は、ボリュームA214およびボリュームB216上のファイルシステム212および/または適切なリモートインタフェース(示さず)を経由してディレクトリ情報にアクセスする。図2は、ローカルボリューム214と、典型的にリモートボリューム上のネットワークサーバであるサーバボリューム216とを示すが、本発明はいかなる特定のボリューム配置に限定されない。実際、本発明は2つのリモートボリューム、2つのローカルボリューム上のファイルを同期することができ、しかも同一ボリューム上の2つのディレクトリを同期するよう調整することが可能である。本発明は、基本的に別ボリュームのディレクトリにマウントしたボリュームであるマウントポイントボリュームをサポートすることもできる。したがって、本発明を、ローカルボリューム(またはその何らかのディレクトリベースのサブセット)をリモートボリュームと同期する典型的な例で説明するが、それらは非制限的な例でしかない。
図3に表すように、列挙段階において、FastSyncサブシステム200は2つのディレクトリ314、316を評価する。これらのディレクトリの評価は、ローカルボリュームとサーバ上の対応ユーザ名前空間とのルートディレクトリを始点とすることができる(しかしながら、それらの始点は互いに対応するサブディレクトリでもよい)。図3において、ディレクトリは円で、ファイルは正方形で示されることに注意されたい。列挙段階は、以下で説明するように高速動作のために複数スレッドを使用できることにさらに注意されたい。
一般に、列挙段階に従って、クライアントコーラー202はFastSyncサブシステム200から、同期すべきアイテムに関する情報を含む同期状態のデータ構造を取得する。図3の実施例において、構造は同期ツリー320として配置されている。以下で説明するように、クライアントコーラー202はその情報を評価し、必要なときにシステムポリシー等を参照し、FastSyncサブシステム200に指示して1つまたは複数の同期関連アクション(プリミティブ)をこれらアイテムに対して実施する。これは図3において、クライアントコーラー202がアクション処理コンポーネント326に与えているアクション要求324によって表される。
同期ツリーデータ構造320を提供するため、FastSyncサブシステム200は各ディレクトリの状態を効率的に検査し、ディレクトリ間の差異をコーラーに報告する。同期ツリー320は、変更されたファイルまたはディレクトリを含むディレクトリ名前空間のサブセットとして構築される。メモリ使用量を節約するため、未修正のファイルはツリー内には現れず、変更内容を含まないかまたは自身が不変のディレクトリはツリー内に含まれない。しかしながら、自身は不変だが自身の中に変更ファイルを有するディレクトリは単純ノードとしてツリー内に保持され、正確な階層組織を保つことに注意する。
図4は、図3における同期すべきディレクトリの例から構築した別ノードを含む、同期ツリー320を表す。図4において、階層組織を保つために存在するツリー内の単純ノードを下付き文字Sで示す。さらに、図3と類似して、図4においてディレクトリを表すノードを円で、ファイルを表すノードを正方形で示す。
分かるように、同期ツリー320内にあるノードは名前空間の差異、またはファイル(属性および/または内容)間の差異に対応する。例えば、図4において、ノードEおよびI(およびEの子ノード)は双方のディレクトリには存在せず、したがってこれらの名前空間の差異は、それらの子ノードと合わせて同期ツリー320内のノードとなっている。ノードJおよびその子ファイルKはお互いに同一であり、したがって効率性のため同期ツリー320内には含まれない。さらに、ファイルHには図3のディレクトリ構造316内の網掛け四角形で表すファイル差異があり、したがってこのファイルは親として単純ノードCを伴って同期ツリー320に含まれる。
図5に表すように、ツリー320内の(単純ノード以外の)各ノードは、ある同期アイテムに対する情報のデータ構造550を含む。この同期アイテムはファイルまたはディレクトリのいずれかである。同期アイテムは同期記述を含み、その同期記述は同期アイテムの元の状態、同期状態、および最後に同期状態にあった時点からの各アイテムの変更態様を表す。例えば、修正ファイルに対して、同期アイテムは同期状態からの最初の書込み日時、ファイルサイズ、属性等を含み、コピーが存在するならば双方のディレクトリからのコピーに対するこれらフィールドの現在値を含む(少なくとも1つの値集合が元のものとは異ならなければならず、そうでなければ非同期状態ではないことに注意されたい)。
さらに、各同期アイテムはファイルの「状態」を記述する同期ステータスフィールドを含む。例えば、同期状態は、一方のディレクトリまたは他方あるいはその両方でファイルが元の状態から変更されたのか、または、ファイルが一方のディレクトリにのみにファイルが存在するのは、ファイルが存在するディレクトリで新規作成されたためか、それともファイルが失われたディレクトリからファイルが削除されたためかを示す。同期状態は十分に粒度が細かいので、コーラーはそれを自身のステートマシン適用の基礎として使用して、アイテムを同期するために実施すべき動作あるいは複数の動作を選択することができる。
前述の米国特許出願第11/032,870号で説明されているように、コーラー202は同期ツリー320およびその中のアイテムを使用して分析を実施する。この分析に基づき、次いでコーラー202は、ディレクトリの同期状態化に向けた1つまたは複数のアクションをFastSyncサブシステムが実施するよう要求する。
より詳細には、コーラー202からの動作要求に応答して、FastSyncサブシステム200は必要な呼出し(コール)をクライアント側キャッシングドライバおよびサーバボリュームドライバ(例えば、リダイレクタ)に対して行って、要求動作および他の動作を実施し、プログレス/ステータスをコーラー202に報告することができる。本発明に必要ではないが、一実施例において、動作要求時にFastSyncサブシステム200は動作、アイテムポインタ、およびコンテキスト情報を内部コンテキストブロックにパッケージ化し、そのパッケージをプロセススレッドプールで処理する作業アイテムとしてキューに入れる。内部のキューイングにより、動作の正しい順序での実行が保証されることに注意されたい。動作を処理するスレッドが利用可能なとき、FastSyncサブシステム200はアイテムをこのキューから抽出してその作業を実施し、必要に応じてコーラー202に対するコールバックを生成する。FastSyncサブシステムの動作は非同期であることにさらに注意されたい。しかしながら、コールバックは多数あるスレッドプールのスレッドの1つから任意の時点で実行可能なので、コールバックコンテキストは特定のスレッド親和性を有さず、したがってクライアントのプログレスに対する呼出しと競合処理の実装とは、例えばコーラー202によってシリアル化(serialized)される。コーラー202はプログレス/ステータスを呼出しアプリケーションプログラム204(図2)に反映し戻すこともできる。
図6は、FastSyncサブシステム200のコーラー202に対する典型的な制御/フローを表す。図6において、ステップ600を通して表すように、コーラー202はFastSyncサブシステム200が上記の列挙段階を実施することを要求する。ステップ602での評価時に(例えば、サーバが応答しない等の)何らかの理由で不成功の場合、プロセスはステップ616を通って報告される適切なエラーで終了する。
エラーが発生しない典型的な状況において、ステップ602は代わりにステップ604に分岐し、1つまたは複数のアクションアイテムを作業リストに追加する(この作業リストは、コーラーがシリアル化する上述の内部FastSyncサブシステムの作業アイテムのキューと異なることに注意されたい)。一般に、作業リストは、コーラーによって処理されるべき同期アイテムの集合を表す。
ステップ606は作業リストからアイテムを選択することを表し、ステップ608はその選択アイテムの処理を表す。一実施例において、ファイルを最初にキューに入れることは、深さ優先走査によりツリーを訪問して、各アイテムに対する最初のアクションを選択することを含む。そのアイテムはこのリストに追加され、リボルビングキューが生成される。ステップ606で、作業アイテムはツリーの初期訪問およびエラーから(以下で説明するステップ710を通って)到達することができ、以下で説明するように作業アイテムがなくなるまでプロセスは原則としてキュー上を反復する。
したがって一般に、アイテムの処理はそのアイテムに対して要求されるべきアクションを決定し、アイテムが回復不能なエラーを有するか否かを決定するか、またはアイテムが既に同期済であると結論付ける。アイテムが同期を必要とするものである場合、ステップ610および612は、FastSyncコントローラ200がアクション用のアイテムをキューに入れる要求を表す。
ステップ614は選択、処理および場合によってはキューへの追加の各ステップを作業リストが空になるまで繰り返す。空になるとコーラーの動作は完了するが、以下で説明するようにFastSyncサブシステム200が要求アクションを正しく実施できない場合には作業リストにアイテムを差し戻すことが可能である。同期はFastSyncサブシステム200がその処理の全てを無事完了し、コーラーに残された未処理の同期アイテムがなくなったときに実際に完了するし。
アクションがステップ612で(例えばFastSyncサブシステム200に対するAPIコールにより)キューに入れられるときは常に、FastSyncサブシステム200はキューから取り除くためのリソース(例えば、利用可能なスレッド)を得るとすぐにアクションをキューから取り除く。一般に図7はこれらの動作を表し、それらの動作にはステップ702でキュー内のアイテムを待機することが含まれる。一実施例において、キューから取り除いたアイテムは別スレッドによる消費のために別のキューに入れられ、それにより以下で説明する並列動作を促進する。
この並列実装において、FastSyncサブシステム200は同期アイテム上の動作を別のスレッドを通して処理し、したがってステップ704以下のステップは、独立したスレッドが実施した動作実行の完了(成功または不成功)後の制御フローを表す。一般に、ステップ706が表すようにアクションが試行されコールバックが生成される。アクションが成功の場合(ステップ708)、全体プロセスは後に別アイテムに対して必要になるまでスレッドをスレッドプールに返すと考えられる。不成功の場合、ステップ706に戻るステップ710が表すように、クライアントは何回かの再試行を許可することができる。再試行が許可されない場合、例えば図6に表すように失敗コードをコーラーに返して図7からステップ604に戻ることで、アイテムは作業リストに差し戻される。
図8は並列処理をより詳細に説明し、主にFastSyncサブシステム200のアプリケーションプログラミングインタフェース(API)のコーラーからの視点を表す。高レベルでは、FastSyncサブシステム200を用いる同期は2段階、すなわち上述の列挙および実行を有する。列挙の目的は迅速かつ効率的に、同期が必要なディレクトリの部分を発見および報告すること、ならびに何らかの論理的な方法でその差異をコーラー202に報告することである。アクション段階中に、コーラー202は非同期であるファイルまたはディレクトリの各々に対して1つまたは複数の動作を選択しており、その動作はアイテムを同期状態に戻すことを意図している。
コーラー202はFastSyncサブシステムのAPIセットを使用して動作をキューに入れることができ、その中でFastSyncサブシステム200は単純にそれらをキューに追加して即座に返る。FastSyncサブシステム200は複数スレッドを並列に用いて動作を実施し、その複数スレッドの各々は未完了動作をキューから取得して実行する。各動作が完了すると、FastSyncサブシステム200は、動作をキューに入れたときに与えたコールバックを実行することで、コーラーに通知する。コーラーは次いで動作結果を評価し、動作が失敗ならば動作を再試行するか、あるいはファイルまたはディレクトリに対する新規動作をキューに入れることができる。
コーラーがその呼出しスレッドの制御を長時間放棄する唯一の時点は、列挙が完了する(成功または不成功)までFastSyncサブシステム200が制御を戻さない列挙段階の間であるが、FastSyncサブシステム200は頻繁にコールバックを提供し、それによりコーラーは列挙行為の修正または列挙の中断ができることに注意されたい。アクション段階中、キューに動作を入れるというコーラーの要求は、同期アイテムと関連付けられる。その際、FastSyncサブシステム200は実施すべき動作のキューに動作を追加するのにほとんど作業を要しないので、コーラーの要求は比較的に迅速に返される。
アクション段階の終わりで、FastSyncサブシステム200のスレッドがその作業の実施を完了したとき、FastSyncサブシステム200は動作をキューに入れたときに与えたコールバックを実行し、動作結果に関する情報と、アクションにおいて動作していたファイルまたはディレクトリを表す同期アイテムとに関する情報を返す。コールバックは、FastSyncサブシステム200に対する動作をキューに入れるために用いたものから独立したスレッド上で発生する。コールバック内部でコーラーは動作を再試行する選択肢を有し、その場合コーラーは、再試行した動作の結果を報告する別のコールバックを受信する。または、完了コールバック中にコーラーが全く同一の動作の再試行を望まない場合でも、コーラーは後に同一の同期アイテムに対する新規動作(以前と同一の動作または新規動作のいずれか)をキューに入れることができる。
このように、並列動作およびI/Oパイプライン化(アイドル時間を削減するための、処理およびI/Oに対する複数スレッド)は一般に最大化され、転送される全データは最小化される。この目的を達成するため、図8に一般的に表すように、一実施例において複数スレッドが列挙およびアクションの両方において使用される。図8ではFastSyncサブシステム200は両方のディレクトリツリーの内容を複数スレッド上で列挙し、全スレッドが処理を完了したときに返る。
列挙中、各スレッドは両方のディレクトリ下の同一パスを開き、全ての子(ファイルおよびディレクトリ)を列挙する。スレッドは新規スレッドが処理する各サブディレクトリをキューに入れ、次いでツリーを修正して変更要素に対する同期アイテムを含めることで、そのディレクトリ内部の差異を処理する。
FastSyncサブシステム200の列挙方法における他の態様の1つは、同期すべきディレクトリ内の全ファイルをオープンせずに列挙を行うことである。オープンは特にネットワーク上ではコストがかかる。全ファイルをオープンすることでファイルのプロパティ(例えば、変更日時、サイズおよび属性)を決定すると、ファイルをオープンし、ファイル情報のクエリを行い、さらにファイルをクローズしなければならない。ローカルシステム上では、これら3つの動作の各々オペレーティングシステムに入ることを必要とし、リモートファイルシステム上では、これは少なくとも3回のネットワーク上のラウンドトリップ、および恐らくそれ以上のオーバヘッドを意味する。
このコストを回避するため、FastSyncサブシステム200は代わりにディレクトリ列挙を使用する。ディレクトリ列挙に対してはディレクトリを1回オープンすることが必要なだけで、その後、そのハンドルでの各クエリは実際にファイルをオープンせずに複数ファイルに関する情報を取得する。次いで、ディレクトリをクローズする必要がある。主な違いは、ディレクトリ列挙を利用することで、全てのファイルおよびディレクトリに対して1回ずつではなく、ディレクトリ毎に1回のオープンと1回のクローズのみがあるいうことである。さらに、唯一のクエリディレクトリを有することは、ファイル毎の方法を用いて各ファイルおよびディレクトリに関する情報のクエリを行うのと対照的に、多数のファイルに関する情報を生成する(ファイルおよびディレクトリは、オペレーティングシステムおよびラウンドトリップコストの点からは一般に等価である)。サーバとのラウンドトリップ交換の最小化に加えて、オーバヘッドの削減により転送データの総量も削減する。
それぞれの列挙が新規ディレクトリを発見すると、これらのディレクトリは次いで別スレッドによる列挙のためにキューに入れられる。したがって、様々なスレッドがディレクトリおよびその全サブディレクトリを並列処理することが可能である。これはCPU利用率を最大化し、特にネットワーク上でI/Oパイプライン化の利点を生かす。ネットワーク上では、上記パイプライン化は総同期時間に及ぼす待ち時間の影響を削減する。
アクション段階中、複数スレッドが、複数のスレッドがコーラーがキューに入れた動作を処理し、一つの動作につき一つのスレッド上で実行および完了される。すなわち、動作毎に1スレッドで、複数動作が同時に実行する。
容易に分かるように、信頼性のためにはシステムは割込みとファイルシステムの一部の(例えば、共有違反による)利用不能性とを、任意の動作を複数回再試行する能力により巧妙に処理しなければならない。列挙については、個々のファイルまたはディレクトリの列挙に失敗しても列挙段階は失敗しない。代わりに、FastSyncサブシステム200は、同期ツリー内の特定ノードが列挙不能であった旨を報告する。コーラーは、後の時点でそのサブツリーから新しい列挙を開始することができる。
アクション段階はより洗練された失敗処理ロジックを含むことができる。例えば、FastSyncサブシステム200が特定の同期アイテムに対して動作が失敗したことを報告するとき、FastSyncサブシステム200はアイテムを更新して、新しい同期状態(SyncState)および(属性、サイズ、および変更日時のような)ファイルの関連情報を反映する。コーラーはFastSyncサブシステム200と通信して前回のアクションを即座に再試行(および再試行動作の完了時に別のコールバックを受信)すること、または待機して任意の時点で同期アイテムを同一動作または新規動作のためにキューに入れることの選択肢を有する。
この柔軟性を有することで、コーラーは動作結果に応答するための豊富な可能性を実装することが可能である。例えば、コーラーは共有違反の応答の際、幾分かの時間待機して、その後にファイルをオープンしたアプリケーションがそのハンドルまたは複数のハンドルをクローズすることを期待して動作をキューに入れ、動作を再試行することが可能である。さらに、コーラーは失敗毎に任意の複雑さを有するステートマシン(例えば、多くの場合、ファイルの同期方法の決定に対して最初に用いたものと同一のステートマシン)を通してアイテムを実行することが可能である。そのようにすることで、ファイルの同期方法を決定する単一のステートレスシステムを通してコーラーが同期アイテムを繰り返し実行することが可能である。そのシステムは、ユーザに行うべきことを対話的に問い合わせること、マシンまたはドメインのポリシーを参照すること、ファイルのバックアップコピーを生成すること、等を含むことができる。
さらに本発明は、ファイルシステムがファイルまたはディレクトリが長期間ロックされるべきでないことを認識するので、ファイルシステムの使い勝手に及ぼす影響を削減する。一度に1つのファイルを同期するのでなく、効率性および速度のためにディレクトリツリー全体を一度に同期する上での問題の1つは、例えば他のアプリケーションによる書き込み動作を禁止するハンドルのオープンによってファイルを排他的に保持することが実用的でないということである。しかしながら、一度に1つのファイルを同期するときは、ファイルを排他的に保持してコーラーにそれに対して行うべきことを問い合わせ、次いでそれを解放せずにアクションを実施することを容認できる。FastSyncサブシステム200は、列挙からの全ての修正ファイルまたはディレクトリを最後の動作の完了まで一貫して保持しないことで、システムリソースの流出を防ぎアプリケーションユーザを不快にさせないよう試みる。
この目的を達成するため、FastSyncサブシステム200は、クエリおよびファイル/サブディレクトリ生成のようなディレクトリ操作を可能とするディレクトリ列挙を通してディレクトリ階層を列挙するが、ファイルに対する書き込みを防止しない。アクション段階中に、FastSyncサブシステム200はファイルが列挙中と同じ状態にあることを検証する。典型的にファイルは列挙中と同じ状態にあるが、ファイルが変更がしたという可能性もある。ファイルが列挙とアクションとの間で変更された場合、選択したものと異なる動作が適切である場合がある。そのような場合、FastSyncサブシステム200はファイルまたはディレクトリに触れずに動作を完了し、変更の発生をコーラーに説明する失敗コードを報告する。コーラーは即座に応答して動作を再試行するかまたは動作をキャンセルするかの選択肢を有する。後の時点で、コーラーがそのアイテムに対して新しいアクションを提示することが可能である。コーラーはFastSyncサブシステム200に対して、ファイルのある特定の側面で問題を起こすことなく変更しえるものについて無視するよう指示することもできる。
したがって、FastSyncサブシステム200がファイルをオープンする(したがって、ファイルを他のファイルシステムのアクセスからある程度ロックする)唯一の期間は、列挙中および動作が処理されているアクション中の短時間のみである。FastSyncサブシステム200は割込みを適切に受理するため、FastSyncサブシステム200およびそのコーラーは列挙段階とアクション段階との間の矛盾を同様に処理することができる。(米国特許第6,853,993号で説明されるトランザクションNTFSのような)トランザクションファイルシステムにより、FastSyncサブシステム200がトランザクションコンテキストを同期アイテムに関連付けて、同期による変更をロールバックする能力を与えることも可能であることに注意されたい。
本発明には必要ではないが、FastSyncサブシステム200の動作中に、実施すべき任意のファイル毎またはディレクトリ毎の処理に対して、コーラーはコールバックを備えるべきである。FastSyncサブシステム200は列挙およびアクションを推進するが、コーラーが何らかの処理を実施しFastSyncサブシステム200にフィードバックを与える必要がある場合がある。これらの場合、コールバックを用いてFastSyncサブシステム200がユーザに入力を求めることができる。一例として、列挙の間、コーラーは利用可能な全ディレクトリのサブセットのみを同期し他を無視することを選択することができる。ある特定のディレクトリが低速な接続上に実際にマウントしたリモートファイルシステムであるとき、または読取専用データのみを含むことが分かっているディレクトリがあるときが一例である。ディレクトリの列挙前にFastSyncサブシステム200がコールバックを実行して何を行うべきかをコーラーに原則として問い合わせるように、FastSyncサブシステム200はコールバックをコーラーに与えることができる。コーラーは次いで、FastSyncサブシステム200がディレクトリを列挙すべきか、またはスキップすべきか、または列挙を全て中止すべきかを指示することで、FastSyncサブシステム200に応答することができる。
別の例としてアクション段階中、新規作成したサブディレクトリをコピーする間、ある特定のファイルまたはディレクトリのみのコピーを回避して、コーラーが全ファイルを把握するようにすることが重要である場合がある。例えば、著作権で保護された内容をある特定のファイルサーバから切り離しておくことが重要である、またはリモートファイルシステムをマウントしたサブディレクトリをコピーしないことが重要である場合がある。その理由のため、ディレクトリツリーのコピー中にコールバックが与えられ、それによりコーラーはある特定のファイルまたはディレクトリをスキップする、あるいはコピーを全部キャンセルすることを選択することができる。
前述の詳細な説明から分かるように、コーラーが同期プロセスに対して必要とする制御を有することを許しつつ、列挙およびアクションの手順が原則として自己完結型でありFastSyncサブシステムにより推進される、同期モデルが提供される。同期プロセスは高速かつ信頼性があり、様々なコーラーが列挙情報および要求アクションを取得できるよう柔軟である。本発明はしたがって、現代のコンピューティングに必要とされる多数の利益と利点を提供する。
本発明は様々な修正および代替構成を受け入れることができるが、それらのある特定の例示実施態様を図面で示し、上で詳細に説明した。しかしながら、本発明を開示した特定の形態に限定する意図はなく、むしろ本発明の精神および範囲内にある全ての修正、代替構成、および等価物を包含するよう意図されることは理解されるべきである。
Claims (20)
- コンピューティング環境において、
第1段階で複数のディレクトリの内容を評価して、前記ディレクトリ間の差異を列挙するステップと、
第2段階で要求アクションに応答して前記ディレクトリを同期する動作を実施するステップと
を含むことを特徴とするコンピュータ実装方法。 - 前記第1および第2段階は少なくとも1つのクライアント要求に応答して実施され、前記ディレクトリ間の列挙した差異を備えるデータ構造を分析用としてクライアントコーラーに返すステップをさらに含むことを特徴とする請求項1に記載の方法。
- 前記データ構造をノードのツリーとして配置するステップをさらに含み、少なくとも前記ノードのいくつかは同期されていないファイルまたはディレクトリに関する情報を含むことを特徴とする請求項2に記載の方法。
- ノードのツリーとして前記データ構造を配置するステップは、同期されたノードを排除するステップを含むことを特徴とする請求項3に記載の方法。
- 第2段階で要求アクションに応答して前記ディレクトリの同期動作を実施するステップは、一つの複雑なアクションに統合されるプリミティブ動作の集合を処理するステップを含むことを特徴とする請求項1に記載の方法。
- 前記複数ディレクトリの内容を評価するステップは、マルチスレッド化したディレクトリ列挙を用いて2つのディレクトリツリー間の差異を決定するステップを含むことを特徴とする請求項1に記載の方法。
- 要求アクションに応答して動作を実施するステップは、別のスレッドによって並列処理される同期関連動作をキューに入れるステップを含むことを特徴とする請求項1に記載の方法。
- 完了動作の結果をコールバックで報告するステップをさらに含むことを特徴とする請求項7に記載の方法。
- 実行時に請求項1に記載の方法を実施するコンピュータ実行可能命令を有することを特徴とする、少なくとも1つのコンピュータ可読媒体。
- 複数の記憶装置を有するコンピューティング環境において、
一つ記憶装置上のディレクトリツリーを別の記憶装置上の対応方ディレクトリツリーに対して評価して、前記ディレクトリツリー間の差異を決定する手段を含む同期サブシステムと、
要求に応答して前記差異を報告する手段と、
要求動作を実施して前記ディレクトリツリーを同期する手段と
を備えることを特徴とするシステム。 - 前記ディレクトリツリーを評価する手段は、マルチスレッド化したディレクトリ列挙を実施する手段を備えることを特徴とする請求項10に記載のシステム。
- 要求動作を実施する前記手段において、スレッドプールの並列スレッドにより処理する動作をキューに入れる手段を備えることを特徴とする請求項10に記載のシステム。
- 実行時に、
クライアントコーラーから少なくとも1つの同期関連要求を受信するステップと、
第1段階で複数ディレクトリの内容を評価して前記ディレクトリ間の差異を列挙するステップと、
前記差異を前記クライアントコーラーに返すステップと、
第2段階で前記クライアントコーラーに指示された動作を実施して前記ディレクトリを同期するステップと
を実施するコンピュータ実行可能命令を有することを特徴とする少なくとも1つのコンピュータ可読媒体。 - 前記差異を前記クライアントコーラーに返すステップは、前記差異に対応する情報を有するアイテムノードのツリーを備えるデータ構造を配置するステップを備えることを特徴とする請求項13に記載のコンピュータ可読媒体。
- トランザクションベースのメカニズムを用いて少なくとも1つのファイルに対する同期による変更をロールバックするステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項13に記載のコンピュータ可読媒体。
- 複数のディレクトリの内容を評価するステップは、マルチスレッド化したディレクトリ列挙を用いるステップを備えることを特徴とする請求項13に記載のコンピュータ可読媒体。
- 要求アクションに応答して動作を実施するステップは、別のスレッドによって並列処理される同期関連動作をキューに入れるステップを備えることを特徴とする請求項13に記載のコンピュータ可読媒体。
- 完了動作の結果をコールバックで報告するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
- 失敗した動作を試行するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
- 同期すべきアイテムの状態が、前記差異を前記クライアントコーラーに返してそのアイテムに対する要求動作を実施して以来、変化していないことを保証するステップを備えるコンピュータ実行可能命令をさらに有することを特徴とする請求項17に記載のコンピュータ可読媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/124,739 US7634514B2 (en) | 2005-05-09 | 2005-05-09 | Synchronizing file system directories |
PCT/US2006/011980 WO2006121526A2 (en) | 2005-05-09 | 2006-04-03 | Fast and reliable synchronization of file system directories |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008541263A true JP2008541263A (ja) | 2008-11-20 |
Family
ID=37395230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008511119A Pending JP2008541263A (ja) | 2005-05-09 | 2006-04-03 | ファイルシステムディレクトリの高速かつ信頼性のある同期 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7634514B2 (ja) |
EP (1) | EP1880321A4 (ja) |
JP (1) | JP2008541263A (ja) |
KR (1) | KR20080006558A (ja) |
CN (1) | CN101523358A (ja) |
WO (1) | WO2006121526A2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018132848A (ja) * | 2017-02-14 | 2018-08-23 | 株式会社バッファロー | 記憶装置、ファイル複製システム、ファイル複製方法、および、コンピュータプログラム |
KR20200093548A (ko) * | 2017-12-28 | 2020-08-05 | 드롭박스, 인크. | 디프 값들의 효율적인 전파 |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2816090B1 (fr) * | 2000-10-26 | 2003-01-10 | Schlumberger Systems & Service | Dispositif de partage de fichiers dans un dispositif a circuit integre |
US7346664B2 (en) | 2003-04-24 | 2008-03-18 | Neopath Networks, Inc. | Transparent file migration using namespace replication |
WO2005029251A2 (en) | 2003-09-15 | 2005-03-31 | Neopath Networks, Inc. | Enabling proxy services using referral mechanisms |
US8195627B2 (en) * | 2004-04-23 | 2012-06-05 | Neopath Networks, Inc. | Storage policy monitoring for a storage network |
US8190741B2 (en) | 2004-04-23 | 2012-05-29 | Neopath Networks, Inc. | Customizing a namespace in a decentralized storage environment |
US8832697B2 (en) * | 2005-06-29 | 2014-09-09 | Cisco Technology, Inc. | Parallel filesystem traversal for transparent mirroring of directories and files |
US8131689B2 (en) * | 2005-09-30 | 2012-03-06 | Panagiotis Tsirigotis | Accumulating access frequency and file attributes for supporting policy based storage management |
US7464237B2 (en) * | 2005-10-27 | 2008-12-09 | International Business Machines Corporation | System and method for implementing a fast file synchronization in a data processing system |
JP4912026B2 (ja) * | 2006-04-27 | 2012-04-04 | キヤノン株式会社 | 情報処理装置、情報処理方法 |
US7917963B2 (en) * | 2006-08-09 | 2011-03-29 | Antenna Vaultus, Inc. | System for providing mobile data security |
US8775678B1 (en) * | 2007-12-19 | 2014-07-08 | Symantec Corporation | Automated wireless synchronization and transformation |
US8065381B2 (en) * | 2008-01-25 | 2011-11-22 | Microsoft Corporation | Synchronizing for directory changes performed while offline |
US8583600B2 (en) * | 2008-04-03 | 2013-11-12 | International Business Machines Corporation | Deploying directory instances |
US8805925B2 (en) * | 2009-11-20 | 2014-08-12 | Nbrella, Inc. | Method and apparatus for maintaining high data integrity and for providing a secure audit for fraud prevention and detection |
US9058334B2 (en) * | 2010-02-11 | 2015-06-16 | Emc Corporation | Parallel file system processing |
US8290900B2 (en) * | 2010-04-24 | 2012-10-16 | Research In Motion Limited | Apparatus, and associated method, for synchronizing directory services |
US9880860B2 (en) * | 2010-05-05 | 2018-01-30 | Microsoft Technology Licensing, Llc | Automatic return to synchronization context for asynchronous computations |
US8825598B2 (en) * | 2010-06-16 | 2014-09-02 | Apple Inc. | Media file synchronization |
CN102567341B (zh) * | 2010-12-09 | 2016-02-17 | 腾讯科技(深圳)有限公司 | 一种实现软件内外目录同步的方法和系统 |
KR101319465B1 (ko) * | 2011-09-27 | 2013-10-17 | 주식회사 미니게이트 | 엔스크린용 파일 제공 시스템 |
US20140040191A1 (en) * | 2012-08-01 | 2014-02-06 | A Charles BEDDOE | Inventorying and copying file system folders and files |
US9298391B2 (en) * | 2012-12-19 | 2016-03-29 | Dropbox, Inc. | Application programming interfaces for data synchronization with online storage systems |
US9552363B2 (en) * | 2013-04-30 | 2017-01-24 | Microsoft Technology Licensing, Llc | File management with placeholders |
US9405767B2 (en) | 2013-05-01 | 2016-08-02 | Microsoft Technology Licensing, Llc | Streaming content and placeholders |
GB2515192B (en) * | 2013-06-13 | 2016-12-14 | Box Inc | Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform |
US10140309B2 (en) * | 2014-06-10 | 2018-11-27 | Alfresco Software, Inc. | File tracking on client machines synchronized with a content management system repository |
WO2016018447A1 (en) | 2014-07-31 | 2016-02-04 | Hewlett-Packard Development Company, L.P. | File creation |
CN104994177B (zh) * | 2015-08-06 | 2019-01-25 | 上海爱数信息技术股份有限公司 | 网盘系统的同步方法、终端设备和网盘系统 |
US10083068B2 (en) * | 2016-03-29 | 2018-09-25 | Microsoft Technology Licensing, Llc | Fast transfer of workload between multiple processors |
US20180059990A1 (en) * | 2016-08-25 | 2018-03-01 | Microsoft Technology Licensing, Llc | Storage Virtualization For Files |
US20180335902A1 (en) * | 2017-05-16 | 2018-11-22 | Apple Inc. | Techniques for dynamically displaying relevant files for selection |
CN111566620A (zh) * | 2018-01-08 | 2020-08-21 | 赫尔环球有限公司 | 用于提供基于位置的服务的分布式处理系统和方法 |
CN112162964B (zh) * | 2020-10-15 | 2024-04-05 | 苏州交驰人工智能研究院有限公司 | 一种自适应数据同步方法、装置、计算机设备及存储介质 |
US11573931B2 (en) * | 2021-01-21 | 2023-02-07 | Microsoft Technology Licensing, Llc | Smart near-real-time folder scan based on a breadth first search |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11232159A (ja) * | 1998-02-13 | 1999-08-27 | The Japan Reserch Institute Ltd | ファイル管理方法およびファイル管理のためのプログラムを記憶した媒体 |
JP2000299698A (ja) * | 1999-04-13 | 2000-10-24 | Mitsubishi Electric Corp | データ通信装置 |
JP2001147849A (ja) * | 1999-11-19 | 2001-05-29 | Toshiba Corp | データ同期処理のための通信方法および電子機器 |
US20030191827A1 (en) * | 2002-04-02 | 2003-10-09 | Nokia Corporation | Method and apparatus for synchronizing how data is stored in different data stores |
JP2003330784A (ja) * | 2002-05-13 | 2003-11-21 | Tdk Corp | データベース同期方法、データベース同期システム、コンピュータプログラム及び記録媒体 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6147773A (en) * | 1995-09-05 | 2000-11-14 | Hewlett-Packard Company | System and method for a communication system |
US5778389A (en) * | 1996-05-23 | 1998-07-07 | Electronic Data Systems Corporation | Method and system for synchronizing computer file directories |
US6070254A (en) * | 1997-10-17 | 2000-05-30 | International Business Machines Corporation | Advanced method for checking the integrity of node-based file systems |
JP3464172B2 (ja) * | 1999-06-30 | 2003-11-05 | 株式会社次世代情報放送システム研究所 | 送信装置および送信方法、受信装置および受信方法、ならびに、送受信システムおよび送受信方法 |
AU2002303126A1 (en) * | 2001-03-16 | 2002-10-03 | Novell, Inc. | Client-server model for synchronization of files |
WO2002077862A1 (en) * | 2001-03-27 | 2002-10-03 | British Telecommunications Public Limited Company | File synchronisation |
US7389335B2 (en) * | 2001-11-26 | 2008-06-17 | Microsoft Corporation | Workflow management based on an integrated view of resource identity |
US6745303B2 (en) * | 2002-01-03 | 2004-06-01 | Hitachi, Ltd. | Data synchronization of multiple remote storage |
US7047377B2 (en) * | 2002-08-20 | 2006-05-16 | Gruintine Pueche, Inc. | System and method for conducting an auction-based ranking of search results on a computer network |
CA2565286A1 (en) * | 2004-05-26 | 2005-12-08 | Nokia Corporation | Method, system, computer programs and devices for management of media items |
US20060041596A1 (en) * | 2004-08-19 | 2006-02-23 | Vlad Stirbu | Caching directory server data for controlling the disposition of multimedia data on a network |
-
2005
- 2005-05-09 US US11/124,739 patent/US7634514B2/en not_active Expired - Fee Related
-
2006
- 2006-04-03 WO PCT/US2006/011980 patent/WO2006121526A2/en active Application Filing
- 2006-04-03 EP EP06740234A patent/EP1880321A4/en not_active Withdrawn
- 2006-04-03 JP JP2008511119A patent/JP2008541263A/ja active Pending
- 2006-04-03 CN CNA2006800124760A patent/CN101523358A/zh active Pending
- 2006-04-03 KR KR1020077023746A patent/KR20080006558A/ko not_active Application Discontinuation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11232159A (ja) * | 1998-02-13 | 1999-08-27 | The Japan Reserch Institute Ltd | ファイル管理方法およびファイル管理のためのプログラムを記憶した媒体 |
JP2000299698A (ja) * | 1999-04-13 | 2000-10-24 | Mitsubishi Electric Corp | データ通信装置 |
JP2001147849A (ja) * | 1999-11-19 | 2001-05-29 | Toshiba Corp | データ同期処理のための通信方法および電子機器 |
US20030191827A1 (en) * | 2002-04-02 | 2003-10-09 | Nokia Corporation | Method and apparatus for synchronizing how data is stored in different data stores |
JP2003330784A (ja) * | 2002-05-13 | 2003-11-21 | Tdk Corp | データベース同期方法、データベース同期システム、コンピュータプログラム及び記録媒体 |
Cited By (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018132848A (ja) * | 2017-02-14 | 2018-08-23 | 株式会社バッファロー | 記憶装置、ファイル複製システム、ファイル複製方法、および、コンピュータプログラム |
KR20200093548A (ko) * | 2017-12-28 | 2020-08-05 | 드롭박스, 인크. | 디프 값들의 효율적인 전파 |
KR20200093567A (ko) * | 2017-12-28 | 2020-08-05 | 드롭박스, 인크. | 클라이언트 동기화 업데이트들의 효율적인 관리 |
KR20200093556A (ko) * | 2017-12-28 | 2020-08-05 | 드롭박스, 인크. | 클라이언트 동기화 서비스에 대한 로컬 트리의 업데이트 |
KR20200093561A (ko) * | 2017-12-28 | 2020-08-05 | 드롭박스, 인크. | 클라이언트 동기화 서비스를 위한 원격 트리 업데이트 |
JP2021507341A (ja) * | 2017-12-28 | 2021-02-22 | ドロップボックス, インコーポレイテッド | クライアント同期サービスのためのローカルツリーの更新 |
JP2021507342A (ja) * | 2017-12-28 | 2021-02-22 | ドロップボックス, インコーポレイテッド | クライアント同期サービスのためのリモートツリーの更新 |
JP2021508103A (ja) * | 2017-12-28 | 2021-02-25 | ドロップボックス, インコーポレイテッド | クライアント同期更新の効率的な管理 |
JP2021509191A (ja) * | 2017-12-28 | 2021-03-18 | ドロップボックス, インコーポレイテッド | クライアント同期における違反の解決 |
JP2021509188A (ja) * | 2017-12-28 | 2021-03-18 | ドロップボックス, インコーポレイテッド | 段階的なクライアントの同期 |
JP2021509494A (ja) * | 2017-12-28 | 2021-03-25 | ドロップボックス, インコーポレイテッド | diff値の効率的な伝播 |
US11188559B2 (en) | 2017-12-28 | 2021-11-30 | Dropbox, Inc. | Directory snapshots with searchable file paths |
JP7044879B2 (ja) | 2017-12-28 | 2022-03-30 | ドロップボックス, インコーポレイテッド | クライアント同期サービスのためのローカルツリーの更新 |
JP7050931B2 (ja) | 2017-12-28 | 2022-04-08 | ドロップボックス, インコーポレイテッド | クライアント同期更新の効率的な管理 |
US11308118B2 (en) | 2017-12-28 | 2022-04-19 | Dropbox, Inc. | File system warnings |
US11314774B2 (en) | 2017-12-28 | 2022-04-26 | Dropbox, Inc. | Cursor with last observed access state |
JP7065958B2 (ja) | 2017-12-28 | 2022-05-12 | ドロップボックス, インコーポレイテッド | 段階的なクライアントの同期 |
JP7068454B2 (ja) | 2017-12-28 | 2022-05-16 | ドロップボックス, インコーポレイテッド | diff値の効率的な伝播 |
JP7075998B2 (ja) | 2017-12-28 | 2022-05-26 | ドロップボックス, インコーポレイテッド | クライアント同期サービスのためのリモートツリーの更新 |
US11386116B2 (en) | 2017-12-28 | 2022-07-12 | Dropbox, Inc. | Prevention of loss of unsynchronized content |
KR102434243B1 (ko) | 2017-12-28 | 2022-08-18 | 드롭박스, 인크. | 디프 값들의 효율적인 전파 |
US11423048B2 (en) | 2017-12-28 | 2022-08-23 | Dropbox, Inc. | Content management client synchronization service |
US11429634B2 (en) | 2017-12-28 | 2022-08-30 | Dropbox, Inc. | Storage interface for synchronizing content |
KR102444036B1 (ko) | 2017-12-28 | 2022-09-15 | 드롭박스, 인크. | 클라이언트 동기화 업데이트들의 효율적인 관리 |
KR102444729B1 (ko) | 2017-12-28 | 2022-09-16 | 드롭박스, 인크. | 클라이언트 동기화 서비스를 위한 원격 트리 업데이트 |
US11461365B2 (en) | 2017-12-28 | 2022-10-04 | Dropbox, Inc. | Atomic moves with lamport clocks in a content management system |
US11475041B2 (en) | 2017-12-28 | 2022-10-18 | Dropbox, Inc. | Resynchronizing metadata in a content management system |
JP7158482B2 (ja) | 2017-12-28 | 2022-10-21 | ドロップボックス, インコーポレイテッド | クライアント同期における違反の解決のための方法、コンピュータ可読媒体、及びシステム |
KR102459800B1 (ko) | 2017-12-28 | 2022-10-28 | 드롭박스, 인크. | 클라이언트 동기화 서비스에 대한 로컬 트리의 업데이트 |
US11500899B2 (en) | 2017-12-28 | 2022-11-15 | Dropbox, Inc. | Efficient management of client synchronization updates |
US11500897B2 (en) | 2017-12-28 | 2022-11-15 | Dropbox, Inc. | Allocation and reassignment of unique identifiers for synchronization of content items |
US11514078B2 (en) | 2017-12-28 | 2022-11-29 | Dropbox, Inc. | File journal interface for synchronizing content |
US11593394B2 (en) | 2017-12-28 | 2023-02-28 | Dropbox, Inc. | File system warnings application programing interface (API) |
US11630841B2 (en) | 2017-12-28 | 2023-04-18 | Dropbox, Inc. | Traversal rights |
US11657067B2 (en) | 2017-12-28 | 2023-05-23 | Dropbox Inc. | Updating a remote tree for a client synchronization service |
US11669544B2 (en) | 2017-12-28 | 2023-06-06 | Dropbox, Inc. | Allocation and reassignment of unique identifiers for synchronization of content items |
US11704336B2 (en) | 2017-12-28 | 2023-07-18 | Dropbox, Inc. | Efficient filename storage and retrieval |
US11755616B2 (en) | 2017-12-28 | 2023-09-12 | Dropbox, Inc. | Synchronized organization directory with team member folders |
US11782949B2 (en) | 2017-12-28 | 2023-10-10 | Dropbox, Inc. | Violation resolution in client synchronization |
US11836151B2 (en) | 2017-12-28 | 2023-12-05 | Dropbox, Inc. | Synchronizing symbolic links |
US11880384B2 (en) | 2017-12-28 | 2024-01-23 | Dropbox, Inc. | Forced mount points / duplicate mounts |
Also Published As
Publication number | Publication date |
---|---|
US7634514B2 (en) | 2009-12-15 |
EP1880321A4 (en) | 2010-09-22 |
CN101523358A (zh) | 2009-09-02 |
WO2006121526A2 (en) | 2006-11-16 |
EP1880321A2 (en) | 2008-01-23 |
WO2006121526A3 (en) | 2008-01-10 |
US20060253501A1 (en) | 2006-11-09 |
KR20080006558A (ko) | 2008-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008541263A (ja) | ファイルシステムディレクトリの高速かつ信頼性のある同期 | |
US11556396B2 (en) | Structure linked native query database management system and methods | |
US9432240B2 (en) | Flexible failover configuration | |
CA2583650C (en) | Oplogging for online recovery in direct connection client server systems | |
US8762547B2 (en) | Shared memory implementations for session data within a multi-tiered enterprise network | |
US7761435B2 (en) | External persistence of session state information | |
JP4237354B2 (ja) | トランザクション処理方法及びトランザクション処理システム | |
US7853698B2 (en) | Internal persistence of session state information | |
US8024566B2 (en) | Persistent storage implementations for session data within a multi-tiered enterprise network | |
US7908582B2 (en) | System and method to facilitate design-time component discovery | |
US8156507B2 (en) | User mode file system serialization and reliability | |
US20060248199A1 (en) | Shared closure persistence of session state information | |
JP5969610B2 (ja) | ポータブルコンピューティングデバイスにおける分散リソース管理 | |
JP2012520504A (ja) | デバイスおよびウェブ・サービスにわたってブラウザー・キャッシュを同期させるためのプログラミング・モデル | |
JPH09503328A (ja) | 非同期に順序付けされた動作を行うコンピュータ方法及び装置 | |
JPH11506552A (ja) | pipes及びfifosを用いてマルチプロセッサ・コンピュータ・システムのファイルをアクセスする方法 | |
US8407713B2 (en) | Infrastructure of data summarization including light programs and helper steps | |
JP2008165272A (ja) | データベース更新管理システム、プログラムおよび方法 | |
US8560691B2 (en) | Relocating item in distributed storage system | |
Steere | Using dynamic sets to reduce the aggregate latency of data access | |
JP5805887B2 (ja) | ポータブルコンピューティングデバイスにおけるリソース要求のバッチングおよびフォーク | |
Vasil | Reexamining operating system support for database management | |
Surtani et al. | JBoss Enterprise Application Platform 5 Cache User Guide | |
WO2004111854A1 (ja) | ファイルアクセス管理方法、ファイルアクセス管理装置、記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090302 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110719 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111019 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20120316 |