(57)【要約】クライアントは、コンテンツ管理システムにおいてアカウントと関連するローカルコンテンツアイテムに一意の識別子を割り振り、再関連付けし、これらの一意の識別子を使用してコンテンツ管理システム上でコンテンツアイテムについての操作をコミットすることができる。例えば、クライアントは、コンテンツアイテムを作成し、このコンテンツアイテムがコンテンツ管理システムからの識別子を含まないと判定することができる。クライアントは、コンテンツアイテムについての識別子を取得し、識別子の一意性を検証することをコンテンツ管理システムに求める。この識別子が一意であるときに、クライアントは、コンテンツアイテムに対応するノードを、アカウントと関連するコンテンツアイテムのクライアントにおける状態を表すローカルツリーに追加し、識別子を含むコンテンツアイテムをコンテンツ管理システムにアップロードする。識別子が一意ではないときに、クライアントは、コンテンツアイテムについて新規の識別子を取得する。【選択図】図６Ｃ
2021509205.tif 000002
【特許請求の範囲】
【請求項１】
コンテンツ管理システムにおいてユーザアカウントに関連付けられたコンテンツアイテムをクライアントデバイスに追加することと、
前記クライアントデバイスにおいてクライアントアプリケーションを介して、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を有さないことを判定することであって、前記クライアントアプリケーションが前記コンテンツ管理システムと関連付けられる、前記判定することと、
前記コンテンツアイテムについての前記一意の識別子を取得することであって、前記一意の識別子が前記コンテンツ管理システムによって定義される、前記取得すること、
前記クライアントアプリケーションによって前記コンテンツ管理システムに、前記一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連づけられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについての新規の一意の識別子を取得することと、
を含む、方法。
【請求項２】
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから除去することと、
前記一意の識別子を前記コンテンツアイテムから除去した後に、前記コンテンツアイテムについての前記新規の一意の識別子を取得することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記一意の識別子を取得することは、前記コンテンツアイテムに対応するパスと、前記コンテンツアイテムに対応する名前とのうちの少なくとも１つに以前に関連付けられた第二コンテンツアイテムから、前記コンテンツアイテムが前記一意の識別子を継承するかどうかを判定することを含む、請求項１に記載の方法。
【請求項４】
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することに応答して、前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすること、
をさらに含む、請求項４に記載の方法。
【請求項６】
前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすることは、
前記一意の識別子が前記第二コンテンツアイテムに前記第二コンテンツアイテムのそれぞれの一意の識別子として割り当てられていると判定することと、
前記一意の識別子を前記第二コンテンツアイテムから抽出することと、
前記一意の識別子を前記コンテンツアイテムに関連付けることと、
を含む、請求項５に記載の方法。
【請求項７】
前記一意の識別子を前記コンテンツアイテムに拡張属性としてアペンドすることをさらに含む、請求項６に記載の方法。
【請求項８】
前記一意の識別子を取得することは、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムに要求することと、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムから受信することと、
前記クライアントアプリケーションを介して、前記一意の識別子を前記コンテンツアイテムに関連付けることと、
を含む、請求項１に記載の方法。
【請求項９】
前記一意の識別子を前記コンテンツアイテムに関連付けることは、前記一意の識別子を前記コンテンツアイテムに前記コンテンツアイテムの拡張属性として書き込むことを含む、請求項８に記載の方法。
【請求項１０】
前記一意の識別子を取得することは、
前記コンテンツアイテムに関連付けられたパスを識別することと、
第二コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第二コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を割り当てることと、
を含む、請求項１に記載の方法。
【請求項１１】
命令を含む非一時的コンピュータ可読媒体であって、
前記命令は、１つ以上のプロセッサによって実行されるときに、クライアントデバイスに、
コンテンツ管理システムにユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションを介して、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を有さないと判定することであって、前記クライアントアプリケーションが前記コンテンツ管理システムと関連付けられる、前記判定することと、
前記コンテンツアイテムについての前記一意の識別子を取得することであって、前記一意の識別子が前記コンテンツ管理システムによって定義される、前記取得することと、
前記クライアントアプリケーションによって前記コンテンツ管理システムに、前記一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについて新規の一意の識別子を取得することと、
を行わせる、非一時的コンピュータ可読媒体。
【請求項１２】
前記１つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから除去することと、
前記一意の識別子を前記コンテンツアイテムから除去した後に、前記コンテンツアイテムについて前記新規の一意の識別子を取得することと、
を行わせる命令を格納する、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１３】
前記一意の識別子を取得することは、前記コンテンツアイテムに対応するパスと、前記コンテンツアイテムに対応する名前とのうちの少なくとも１つに以前に関連付けられた第二コンテンツアイテムから、前記コンテンツアイテムが前記一意の識別子を継承するかどうかを判定することを含む、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１４】
前記１つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することに応答して、前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすることと、
を行わせる命令を格納する、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１５】
前記一意の識別子を取得することは、
前記コンテンツアイテムに関連付けられたパスを識別することと、
第二コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第二コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を再割り当てすることであって、前記再割り当てすることは、前記一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムに関連付けることを含む、前記再割り当てすることと、
を含む、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１６】
コンピューティングデバイスであって、
１つ以上のプロセッサと、
命令を格納する少なくとも１つの非一時的コンピュータ可読媒体と、
を備え、
前記命令は、前記１つ以上のプロセッサによって実行されるときに、前記コンピューティングデバイスに、
コンテンツ管理システムにユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションを介して、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を含まないと判定することであって、前記クライアントアプリケーションが前記コンテンツ管理システムと関連付けられる、前記判定することと、
前記コンテンツアイテムについての前記一意の識別子を取得することであって、前記一意の識別子が前記コンテンツ管理システムによって定義される、前記取得することと、
前記クライアントアプリケーションによって前記コンテンツ管理システムに、前記一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記コンピューティングデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについて新規の一意の識別子を取得することと、
を行わせる、コンピューティングデバイス。
【請求項１７】
前記１つ以上のプロセッサによって実行されるときに、前記コンピューティングデバイスに、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから抜き出すことと、
前記一意の識別子を前記コンテンツアイテムから抜き出した後に、前記コンテンツアイテムについて前記新規の一意の識別子を取得すること、
を行わせる命令を格納する、請求項１６に記載のコンピューティングデバイス。
【請求項１８】
前記一意の識別子を取得することは、
第二コンテンツアイテムが前記コンピューティングデバイス上で前記コンテンツアイテムに関連付けられたパスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに関連付けられた前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記第二コンテンツアイテムに割り当てられたそれぞれの識別子を継承すると判定することであって、前記それぞれの識別子が前記一意の識別子を含む、前記判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムに関連付けられた前記それぞれの識別子を継承すると判定することに応答して、
前記一意の識別子を前記第二コンテンツアイテムから取得することと、
前記一意の識別子を前記コンテンツアイテムの属性として前記コンテンツアイテムに関連付けることと、
を含む、請求項１６に記載のコンピューティングデバイス。
【請求項１９】
前記一意の識別子を取得することは、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムに要求することと、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムから受信することと、
前記クライアントアプリケーションを介して、前記一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムにアペンドすることと、
を含む、請求項１６に記載のコンピューティングデバイス。
【請求項２０】
前記一意の識別子を取得することは、
前記コンテンツアイテムに関連付けられたパスを識別することと、
前記コンテンツアイテムに関連付けられた前記パスが第二コンテンツアイテムの以前のパスを含むと判定することと、
前記コンテンツアイテムに関連付けられた前記パスが前記第二コンテンツアイテムの前記以前のパスを含むと判定することに応答して、前記コンテンツアイテムが前記コンピューティングデバイス上で、復活している、又は、前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記クライアントアプリケーションを介して、前記第二コンテンツアイテムが前記一意の識別子に関連付けられていると判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を割り当てることと、
を含む、請求項１６に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１８年１月１２に出願された米国非仮出願第１５／８７０，２２１号、２０１７年１２月２９日に出願された米国非仮出願第１５／８５８，３５７号、及び２０１７年１２月２８日に出願された米国仮出願第６２／６１１，４７３号に優先権を主張し、これらのすべては、それらの全体が本明細書に参照により明示的に援用される。
【０００２】
本技術は、分散ストレージ、コラボレーション及び同期システムに関する。
【背景技術】
【０００３】
クラウドストレージシステムにより、ユーザがクラウド上にデータを格納し、このデータにアクセスすることが可能である。幾つかのクラウドストレージシステムにより、コラボレーション方式において、ユーザが、他のユーザとデータを共有し、このデータにアクセスすることが可能である。幾つかの事例において、ユーザは、ユーザのクライアントデバイス上にデータのローカルコピーを格納し、これらのローカルコピーにアクセスすることができる。データのローカルコピーは、ユーザにデータへのより高速なアクセスを提供することができる。加えて、ローカルコピーにより、ユーザがオフラインであるときに、ユーザが、データにアクセスすることを可能にすることができる。また、クラウドストレージシステムにより、ユーザがデータのそれらのローカルコピーをクラウド上のデータと同期させることが可能であり、一貫性を確保することができる。クラウドストレージシステムは、複数のクライアントデバイス及びサーバにわたるデータのコピーを同期させようとすることができるため、データの各コピーは、同一である。しかしながら、複数のデバイスにわたるデータの同期は、非常に困難なタスクである可能性があり、データ及び一貫性の望ましくない損失をもたらすことが多い。
【０００４】
本技術の上記に列挙されている利点及び特徴、ならびに他の利点及び特徴は、添付の図面に示される具体的な実施態様への参照によって明らかになるであろう。当業者は、これらの図面が本技術の幾つかの実施例を示すに過ぎず、本技術の範囲をこれらの実施例に限定しないことを理解するであろう。さらに、当業者は、添付の図面の使用を通じて追加の特殊性及び詳細が記述され、説明される通りに、本技術の原理を理解する。
【図面の簡単な説明】
【０００５】
【図１Ａ】コンテンツ管理システム及びクライアントデバイスの実施例を示す。
【図１Ｂ】幾つかの態様によるクライアント同期サービスの実施例を示す。
【図２Ａ】図１Ａに示されるコンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャの概略図を示す。
【図２Ｂ】図２Ａに示されるコンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャにおいて、コンテンツアイテムのブロックを格納して追跡するための例示的な構成を示す。
【図３Ａ】コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間のファイルジャーナルインタフェースによって処理される例示的な通信の図を示す。
【図３Ｂ】コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間で通信を変換するための例示的なプロセスの図を示す。
【図４Ａ】サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。
【図４Ｂ】クライアントデバイスからの操作をサーバファイルジャーナルについてのリビジョンに変換するための例示的な変換及び線形化プロセスの図を示す。
【図４Ｃ】ネームスペース間操作の例示的な線形化を示す。
【図５Ａ】本技術の幾つかの態様に従いネームスペースビューを作成する例示的な方法を示す。
【図５Ｂ】本技術の幾つかの態様に従い例示的に構築されたネームスペースディレクトリを示す。
【図６Ａ】様々な態様による、ツリーデータ構造の実施例を示す。
【図６Ｂ】図６Ａに示されるツリーデータ構造への更新の実施例を示す。
【図６Ｃ】クライアントデバイスに作成され、クライアントデバイスとコンテンツ管理システムとの間で同期するコンテンツアイテムに対して一意の識別子を割り振り、再割り当てするための例示的な方法を示す。
【図６Ｄ】コンテンツ管理システムからクライアントデバイスにコンテンツアイテムをダウンロードし、ダウンロードされたコンテンツアイテム及び一意の識別子をクライアントデバイスに記録するための例示的な方法を示す。
【図７Ａ】ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるための例示的な方法を示す。
【図７Ｂ】ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるときに競合を解消するための例示的な方法を示す。
【図８Ａ】操作間で依存性及び因果関係を示す操作の図を示す。
【図８Ｂ】イベントのために計算されるランポートクロックに従い順序付けされるネームスペースにわたるイベントの図を示す。
【図９Ａ】ユーザのために実行される一連のマウント操作によって生成される例示的なマウント状態違反を示す。
【図９Ｂ】ネームスペース間コンテキストにおいてマウント操作及びマウント解除操作のためにランポートクロックを計算する例示的な方法を示す。
【図９Ｃ】図９Ｂに示される例示的な方法に基づきマウント操作のために計算される例示的なランポートクロック構成を示す。
【図９Ｄ】ランポートクロックに従いシリアル化される操作の例示的なリスト化を示す。
【図１０Ａ】マウント操作に基づきランポートクロックを更新するための例示的なプロセスを示す。
【図１０Ｂ】マウント解除操作に基づきランポートクロックを更新するための例示的なプロセスを示す。
【図１１Ａ】移動操作を追跡するためにサーバファイルジャーナルにおける例示的なテーブルを示す。
【図１１Ｂ】ネームスペース間の移動をランポートクロックによって処理するための例示的なシーケンスの図を示す。
【図１１Ｃ】移動操作の様々な状態における操作の例示的なフローを定義する例示的なステートマシンを示す。
【図１１Ｄ】コンテンツアイテムの一意の識別子に基づき位置にわたり、そして因果関係に基づき線形化される、例示的な移動操作の図を示す。
【図１２】コンテンツアイテム操作に基づきコンテンツアイテムを修正するインテントを反映する、図６Ａに示されるツリーデータ構造への例示的な更新を示す。
【図１３Ａ】コンテンツアイテム操作をサーバファイルジャーナルにコミットするための例示的な方法を示す。
【図１３Ｂ】コンテンツアイテム操作をクライアントデバイスからコミットする要求を処理するための例示的な方法を示す。
【図１４】例示的なシンボリックリンクの図を示す。
【図１５Ａ】ターゲット及びシンボリックリンクを同一のネームスペースに含むときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【図１５Ｂ】ターゲット及びシンボリックリンクを異なるネームスペース上に含むときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【図１５Ｃ】シンボリックリンクのターゲットが内部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【図１５Ｄ】シンボリックリンクのターゲットが外部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【図１６】本技術の様々な態様を実装するためのシステムの実施例を示す。
【発明を実施するための形態】
【０００６】
本技術の様々な実施例は、以下に詳細に考察される。具体的な実施態様を考察するが、これが例示目的のみのために行われていることを理解するであろう。当業者は、本技術の趣旨及び範囲から逸脱することなく他の構成要素及び構成を使用することができることを認識するであろう。
【０００７】
クラウドストレージシステムにより、ユーザが複数のデバイスにわたりコンテンツアイテムを格納し、これらのコンテンツアイテムにアクセスすることが可能である。コンテンツアイテムは、ファイル、ドキュメント、メッセージ（例えば、電子メールメッセージ又はテキストメッセージ）、メディアファイル（例えば、写真、ビデオ、及びオーディオファイル）、フォルダ、又はいずれかの他のコンテンツユニットを含むことができるが、これらに限定されない。コンテンツアイテムは、複数のユーザと共有される、編集される、削除される、追加される、リネームされる、又は移動され得る。しかしながら、幾つかのデバイス及びユーザアカウントにわたり共有される、又は格納されるコンテンツアイテムを同期させることにより、不具合が残り、技術的な障害が広まっている。
【０００８】
図示するよう、第一マシン（例えば、クライアントデバイス又はサーバ）は、クラウドストレージシステム上でのコンテンツアイテムのユーザの修正方法についての情報を提供する通信を、第二マシンに送信することができる。第一マシン上のコンテンツアイテムに実行されるアクションが第二マシン上のコンテンツアイテムに反映されるように、これらの通信を第二マシンが使用して、コンテンツアイテムを第二マシン上で同期させることができ、第一マシン上のコンテンツアイテムは、第二マシン上のコンテンツアイテムと実質的に同一である。
【０００９】
しかしながら、多くの場合、管理するのが困難である可能性がある、様々なマシン間に送信される幾つかの通信がある場合がある。さらに、これらの通信の幾つかを、クライアント又はネットワーク問題などの様々な問題の結果として、順不同に受信する場合がある。これは、コンテンツアイテム間の競合及びエラーを様々なマシンにもたらすことが多い。また、ユーザのアクティビティは、多数のリビジョンを生成する可能性があり、これらのリビジョンは、同期作業をさらに複雑にし、一貫性がないことを悪化させる可能性がある。例えば、ユーザは、多数の修正を様々なコンテンツアイテムに実行する、修正を短期間に取り消す、又は追加の修正を以前に修正されたコンテンツアイテムに迅速に実行する可能性がある。これは、期限切れの修正の原因となり、コンテンツアイテムを競合させる、ユーザからの変更及びリビジョンを順不同に受信する尤度を増加させる。結果として、幾つかの操作は、コンテンツアイテムの現在の状態と互換性がない場合がある。さらに、操作が競合しているかどうかを検出することは、非常に困難である可能性がある。
【００１０】
また、同期アクションによる固有のレイテンシがある。例えば、第一マシン上で行われるこれらのアクションを第一マシンが最初に検出し、次に、通信を生成し、ネットワークを介して送信する。以前の通信をまだ処理している可能性がある第二マシンが通信を受信し、通信に詳述されるアクションを第二マシンにおいて行う可能性がある。この例示的なシナリオにおいて、第一マシン、第二マシン、及びネットワークを含む、幾つかの可能なレイテンシポイントがある。レイテンシが増加すると、コンテンツアイテム間の競合の尤度も増加する。これらのような競合した通信を処理すること、及び競合を解消することは、非常に困難であり、計算上コストが高いタスクである。
【００１１】
コンテンツアイテムへのアクセスを有する第二マシン又は他のマシン上の同一の、又は異なるユーザが修正をコンテンツアイテムに行うときに、さらに複雑になる。そのうえ、クラウドストレージシステム及びクライアントデバイスなどの複数のシステムにわたり格納されるコンテンツアイテムを一意に識別することは、困難である。コンテンツアイテムをクライアントデバイスに生成するときに、識別子がランダムに生成され、本来であればクライアントデバイスにおいて一意である場合でさえ、クライアントデバイスは、クライアントデバイスによってコンテンツアイテムに割り当てられる識別子が他のシステムに一意であることを保証することができない。加えて、コンテンツアイテムをデバイスにわたり作成し、修正し、移動させ、そして削除する場合に、重複する識別子及びメタデータを１つ以上の位置にもたらすことが多いため、コンテンツアイテムを様々な位置にわたり追跡することが非常に困難である可能性がある。重複する識別子及びメタデータは、コンテンツアイテム間に一貫性がないことを引き起こし、操作を処理して変更をシステムにわたり同期させる機能を制限する可能性がある。
【００１２】
追加の技術上の問題は、コンテンツアイテムをローカルに、またリモートに大規模なコラボレーション環境において修正し、システムにわたり生成される様々な操作によって競合状態を引き起こすときに発生する。本明細書に示されるように、これらの問題は、コンテンツアイテムにおいて幅広い問題、及び一貫性がないことを引き起こすため、急速に増加し、複雑になる可能性がある。
【００１３】
コンテンツ管理システム
幾つかの実施形態において、開示されている科学技術は、とりわけ、コンテンツアイテム同期機能及びコラボレーション特徴を有するコンテンツ管理システムのコンテキストに展開される。例示的なシステム構成１００は、クライアントデバイス１５０とインタラクトするコンテンツ管理システム１１０を描く、図１Ａに示される。
【００１４】
アカウント
コンテンツ管理システム１１０は、アカウントと関連するコンテンツアイテムを格納し、コンテンツアイテム（複数可）を取得する、修正する、閲覧する、及び／又は共有するなどの、様々なコンテンツアイテム管理タスクを実行することができる。さらに、コンテンツ管理システム１１０は、アカウントが複数のクライアントデバイスからコンテンツアイテム（複数可）にアクセスすることを可能にすることができる。
【００１５】
コンテンツ管理システム１１０は、複数のアカウントをサポートする。エンティティ（ユーザ、ユーザグループ、チーム、会社など）は、コンテンツ管理システムによってアカウントを作成することができ、アカウント詳細は、アカウントデータベース１４０に格納されることができる。アカウントデータベース１４０は、登録されたエンティティについてのプロファイル情報を格納することができる。幾つかの事例において、登録されたエンティティについてのプロファイル情報は、ユーザ名及び／又は電子メールアドレスを含む。アカウントデータベース１４０は、アカウントタイプ（例えば、無料のアカウント、又は有料のアカウントの様々なティア）、割り振られるストレージスペース、使用されるストレージスペース、それらの上に常駐する登録されたコンテンツ管理クライアントアプリケーション１５２を含むクライアントデバイス１５０、セキュリティ設定、パーソナル構成設定などのような、アカウント管理情報を含むことができる。
【００１６】
アカウントデータベース１４０は、エンティティと関連するアカウントグループを格納することができる。グループは、グループポリシー及び／又はアクセス制御リストに基づくパーミッションを有することができ、これらのグループのメンバーは、これらのパーミッションを継承することができる。例えば、マーケティンググループは、１セットのコンテンツアイテムへのアクセスを有することができ、エンジニアリンググループは、別の１セットのコンテンツアイテムへのアクセスを有することができる。管理者グループは、グループを修正すること、ユーザアカウントを修正することなどができる。
【００１７】
コンテンツアイテムストレージ
コンテンツ管理システム１１０の特徴は、コンテンツストレージ１４２に格納されることができる、コンテンツアイテムのストレージである。コンテンツアイテムは、ドキュメント、コラボレーションコンテンツアイテム、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、ウェブページ、実行可能ファイル、バイナリファイルなどのような、いずれかのデジタルデータであり得る。また、コンテンツアイテムは、フォルダ、ｚｉｐファイル、プレイリスト、アルバムなどのような、異なるビヘイビアと共にコンテンツアイテムをグループ化するためのコレクション又は他のメカニズムを含むことができる。コレクションは、フォルダ、又は共通属性によって関連する、又はグループ化される複数のコンテンツアイテムを指すことができる。幾つかの実施形態において、コンテンツストレージ１４２を他のタイプのストレージ又はデータベースと組み合わせ、特定の機能をハンドリングする。コンテンツストレージ１４２は、コンテンツアイテムを格納し、これらのコンテンツアイテムについてのメタデータは、メタデータデータベース１４６に格納されることができる。同様に、コンテンツアイテムをコンテンツストレージ１４２に格納する位置についてのデータを、コンテンツディレクトリ１４４に格納することができる。加えて、変更、アクセスなどについてのデータをサーバファイルジャーナル１４８に格納することができる。コンテンツストレージ１４２、コンテンツディレクトリ１４４、サーバファイルジャーナル１４８、及びメタデータデータベース１４６のような、様々なストレージ／データベースのそれぞれは、１つより多いこれらのようなストレージ又はデータベースから構成されることができ、多くのデバイス及び位置上に分散されることができる。他の構成も可能である。例えば、コンテンツストレージ１４２、コンテンツディレクトリ１４４、サーバファイルジャーナル１４８、及び／又はメタデータデータベース１４６からのデータは、１つ又は複数のコンテンツストレージもしくはデータベースに統合される、又は追加のコンテンツストレージもしくはデータベースにさらにセグメント化されることができる。したがって、コンテンツ管理システム１１０は、図１Ａに示されるものより多い、又は少ないストレージ及び／又はデータベースを含むことができる。
【００１８】
幾つかの実施形態において、コンテンツストレージ１４２は、少なくとも１つのコンテンツストレージサービス１１６と関連付けられ、少なくとも１つのコンテンツストレージサービスは、ストレージ用のコンテンツアイテムを受信すること、ストレージ用のコンテンツアイテムを準備すること、コンテンツアイテム用のストレージ位置を選択すること、コンテンツアイテムをストレージから取得することなどを含むが、これらに限定されない、コンテンツアイテムのストレージを管理するために、ソフトウェア又は他のプロセッサ実行可能命令を含む。幾つかの実施形態において、コンテンツストレージサービス１１６は、コンテンツストレージ１４２におけるストレージのために、コンテンツアイテムをより小さなチャンクに分割することができる。コンテンツアイテムを構成する各チャンクの位置をコンテンツディレクトリ１４４に記録することができる。コンテンツディレクトリ１４４は、コンテンツストレージ１４２に格納される各コンテンツアイテムについてのコンテンツエントリを含むことができる。コンテンツエントリは、コンテンツアイテムを識別する、一意のＩＤと関連付けられることができる。
【００１９】
幾つかの実施形態において、一意のＩＤは、コンテンツディレクトリ１４４中のコンテンツアイテムを識別するが、確定的ハッシュ関数から導出されることができる。コンテンツアイテムに対して一意のＩＤを導出するこの方法は、確定的ハッシュ関数が同一のコンテンツアイテムのすべてのコピーに対して同じ識別子を出力するが、異なるコンテンツアイテムに対して異なる識別子を出力することなどから、コンテンツアイテム重複を認識することを確保することができる。この方法論を使用して、コンテンツストレージサービス１１６は、各コンテンツアイテムに対して一意のＩＤを出力することができる。
【００２０】
また、コンテンツストレージサービス１１６は、メタデータデータベース１４６中のコンテンツアイテムについてのコンテンツパスを指定する、又は記録することができる。コンテンツパスは、コンテンツアイテム及び／又はこのコンテンツアイテムと関連するフォルダ階層の名前を含むことができる。例えば、コンテンツパスは、コンテンツアイテムをクライアントデバイス上のローカルファイルシステムに格納するフォルダ、又はフォルダのパスを含むことができる。コンテンツアイテムをブロック中のコンテンツストレージ１４２に格納し、ディレクトリ構造のようなツリー下に格納しなくてもよいが、このようなディレクトリ構造は、ユーザにとって快適なナビゲーション構造である。コンテンツストレージサービス１１６は、ディレクトリ構造の「ルート」ノードが各アカウントについてのネームスペースであることができる、コンテンツアイテムについてのコンテンツパスを定義する、又は記録することができる。ネームスペース内には、アカウント及び／又はコンテンツストレージサービス１１６のユーザによって定義されるディレクトリ構造があることができる。メタデータデータベース１４６は、各コンテンツアイテムについてのコンテンツパスをコンテンツエントリの部分として格納することができる。
【００２１】
幾つかの実施形態において、ネームスペースは、それらがルートノード内に格納されるかのようにディレクトリ構造にネストされる追加のネームスペースを含むことができる。これは、アカウントが共有されたコレクションへのアクセスを有するときに起こり得る。共有されたコレクションは、それら自体のネームスペースをコンテンツ管理システム１１０内に割り当てられ得る。幾つかの共有されたコレクションは、実際には共有されたコレクションについてのルートノードであるが、それらは、ディレクトリ構造中のアカウントネームスペースの下位に位置し、アカウント用のフォルダ内のフォルダとして出現することができる。上述されるように、ディレクトリ構造は、ユーザにとって単に快適なナビゲーション構造であるが、コンテンツストレージ１４２中のコンテンツアイテムのストレージ位置に相関しない。
【００２２】
アカウントがコンテンツアイテムを表示するディレクトリ構造は、コンテンツ管理システム１１０においてストレージ位置に相関しないが、ディレクトリ構造は、クライアントデバイス１５０によって使用されるファイルシステムに依存するクライアントデバイス１５０上のストレージ位置に相関することができる。
【００２３】
上述されるように、コンテンツディレクトリ１４４中のコンテンツエントリは、コンテンツアイテムを構成する各チャンクの位置をも含むことができる。より具体的に、コンテンツエントリは、コンテンツアイテムを構成するチャンクのコンテンツストレージ１４２中の位置を識別するコンテンツポインタを含むことができる。
【００２４】
コンテンツパス及びコンテンツポインタに加えて、コンテンツディレクトリ１４４中のコンテンツエントリは、コンテンツアイテムへのアクセスを有するユーザアカウントを識別するユーザアカウント識別子、及び／又はコンテンツアイテムへのアクセスを有するグループを識別するグループ識別子、及び／又はコンテンツエントリが属するネームスペースをも含むことができる。
【００２５】
コンテンツストレージサービス１１６は、コンテンツアイテム、又はコンテンツアイテムのバージョンを構成する、重複するコンテンツアイテム、又は重複するブロックを識別することによってストレージスペースの所要量を減少させることができる。複数のコピーを格納する代替に、コンテンツストレージ１４２は、コンテンツアイテムの、又はコンテンツアイテムのブロックの、単一コピーを格納することができ、コンテンツディレクトリ１４４は、重複を単一コピーにリンクさせる、ポインタ又は他のメカニズムを含むことができる。
【００２６】
また、コンテンツストレージサービス１１６は、コンテンツアイテムの一意のＩＤと関連して、コンテンツアイテム、コンテンツアイテムタイプ、フォルダ、ファイルパス、及び／又はメタデータデータベース１４６中の様々なアカウント、コレクション、又はグループへのコンテンツアイテムの関係を記述するメタデータを格納することができる。
【００２７】
また、コンテンツストレージサービス１１６は、サーバファイルジャーナル１４８中の変更、アクセスなどについてのデータのログを格納することができる。サーバファイルジャーナル１４８は、タイムスタンプ又はバージョン番号及びいずれかの他の関連データに加えて、コンテンツアイテムの一意のＩＤ、及び変更又はアクセスアクションのディスクリプションを含むことができる。また、サーバファイルジャーナル１４８は、変更又はコンテンツアイテムアクセスによって影響されるブロックへのポインタを含むことができる。コンテンツストレージサービスは、コンテンツアイテムへの変更を追跡するコンテンツアイテムバージョン制御、コンテンツアイテムの異なるバージョン（分岐するバージョンツリーを含む）、及びサーバファイルジャーナル１４８から取得されることができる変更履歴を使用することによって、操作をアンドゥする機能を提供することができる。
【００２８】
コンテンツアイテム同期
コンテンツ管理システム１１０の別の特徴は、コンテンツアイテムの少なくとも１つのクライアントデバイス１５０との同期である。クライアントデバイス（複数可）は、異なる形を取り、異なる機能を有することができる。例えば、クライアントデバイス１５０１は、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むコンピューティングデバイスである。クライアントデバイス１４５２は、コンピューティングデバイスであり、そこでコンテンツアイテムは、特定のアプリケーションに、又は特定のアプリケーションにより与えられるパーミッションによってのみアクセス可能であり、コンテンツアイテムは、典型的に、特定用途向けスペースか、クラウドかのいずれか一方に格納される。クライアントデバイス１５０３は、ウェブブラウザを介してコンテンツ管理システム１１０にアクセスし、またウェブインタフェースを介してコンテンツアイテムにアクセスする、いずれかのクライアントデバイスである。例示的なクライアントデバイス１５０１、１４５２、及び１５０３は、ラップトップ、モバイルデバイス、又はウェブブラウザなどのフォームファクタで描かれ、それらの記述がこれらの例示的なフォームファクタのデバイスに限定されないことを理解するであろう。例えば、クライアント１４５２などのモバイルデバイスは、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むことができる、又はクライアント１４５２は、ウェブブラウザを介してコンテンツ管理システム１１０にアクセスすることができる。このように、フォームファクタは、クライアント１５０の機能を考慮するときに制限するものとみなされるべきではない。クライアントデバイス１５０に関して本明細書に記述される１つ以上の機能は、デバイスの特定の機能（ファイルアクセスモデルがこのような機能の１つである）に依存するすべてのクライアントデバイス上で利用可能であってもよいし、利用可能でなくてもよい。
【００２９】
多くの実施形態において、クライアントデバイスは、コンテンツ管理システム１１０のアカウントと関連付けられるが、幾つかの実施形態において、クライアントデバイスは、共有されたリンクを使用してコンテンツにアクセスし得、アカウントを必要としないことがある。
【００３０】
上述されるように、幾つかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム１１０にアクセスすることができる。しかしながら、クライアントデバイスは、クライアントデバイス１５０上で格納され、実行するクライアントアプリケーション１５２を使用して、コンテンツ管理システム１１０にもアクセスすることができる。クライアントアプリケーション１５２は、クライアント同期サービス１５６を含むことができる。
【００３１】
クライアント同期サービス１５６は、サーバ同期サービス１１２と通信し、クライアントデバイス１５０とコンテンツ管理システム１１０との間でコンテンツアイテムへの変更を同期させることができる。
【００３２】
クライアントデバイス１５０は、クライアント同期サービス１５６を介してコンテンツをコンテンツ管理システム１１０と同期させることができる。同期は、プラットフォームに依存しないことができる。すなわち、コンテンツは、様々なタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイスにわたり同期することができる。クライアント同期サービス１５６は、クライアントデバイス１５０のファイルシステムの指定の位置におけるコンテンツアイテムへのいかなる変更（新規の、削除された、修正された、コピーされた、又は移動されたコンテンツアイテム）をも同期させることができる。
【００３３】
コンテンツアイテムをクライアントデバイス１５０からコンテンツ管理システム１１０に同期させることができ、またその逆もできる。クライアントデバイス１５０からコンテンツ管理システム１１０への同期である実施形態において、ユーザは、クライアントデバイス１５０のファイルシステムから直接コンテンツアイテムを操作することができるが、クライアント同期サービス１５６は、監視されたフォルダ内のファイルへの変更についてディレクトリをクライアントデバイス１５０上で監視することができる。
【００３４】
クライアント同期サービス１５６が監視するディレクトリ中のコンテンツの書き込み、移動、コピー、又は削除を検出するときに、クライアント同期サービス１５６は、コンテンツ管理システムサービス１１６への変更を同期させることができる。幾つかの実施形態において、クライアント同期サービス１５６は、コンテンツアイテムをブロックに分割すること、コンテンツアイテムをハッシュ化して一意の識別子を生成することなどのような上述される機能を有するコンテンツ管理システムサービス１１６の幾つかの機能を実行することができる。クライアント同期サービス１５６は、クライアントストレージインデックス１６４内でコンテンツをインデックス化し、結果をストレージインデックス１６４に保存することができる。インデックス化は、各コンテンツアイテムについての、パスと一意のサーバ識別子、及び一意のクライアント識別子を格納することを備えることができる。幾つかの実施形態において、クライアント同期サービス１５６は、一意のサーバ識別子をサーバ同期サービス１１２から学習し、一意のクライアント識別子をクライアントデバイス１５０のオペレーティングシステムから学習する。
【００３５】
クライアント同期サービス１５６は、ストレージインデックス１６４を使用して、コンテンツ管理システム１１０上のユーザアカウントと関連するコンテンツとの、クライアントストレージ内のコンテンツの少なくとも一部分の同期を容易にすることができる。例えば、クライアント同期サービス１５６は、ストレージインデックス１６４をコンテンツ管理システム１１０と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム１１０上のユーザアカウントと関連するコンテンツとの間の差異を検出することができる。次いで、クライアント同期サービス１５６は、必要に応じてコンテンツをクライアントストレージ上で、アップロードし、ダウンロードし、修正し、そして削除することによって、差異のリコンサイルを試行することができる。コンテンツストレージサービス１１６は、必要に応じて、コンテンツアイテムについて変更されたブロック、又は新規のブロックを格納し、サーバファイルジャーナル１４８、メタデータデータベース１４６、コンテンツディレクトリ１４４、コンテンツストレージ１４２、アカウントデータベース１４０などを更新することができる。
【００３６】
コンテンツ管理システム１１０からクライアントデバイス１５０に同期させるときに、サーバファイルジャーナル１４８に記録されるコンテンツアイテムのマウント、修正、追加、削除、移動は、通知サービス１１７を使用してクライアントデバイス１５０に送信される通知をトリガすることができる。クライアントデバイス１５０に変更を通知するときに、クライアントデバイスに知られている最後の同期ポイント以降に、サーバファイルジャーナル１４８に列挙されている要求を変更する。クライアントデバイス１５０がコンテンツ管理システム１１０と同期していないと判定するときに、クライアント同期サービス１５６は、変更を含むコンテンツアイテムブロックを要求し、変更されたコンテンツアイテムのそのローカルコピーを更新する。
【００３７】
幾つかの実施形態において、ストレージインデックス１６４は、ツリーデータ構造を格納し、そこで１つのツリーは、サーバ同期サービス１１２に従いディレクトリの最新の表現を反映し、もう１つのツリーは、クライアント同期サービス１５６に従いディレクトリの最新の表現を反映する。クライアント同期サービスは、データをサーバ同期サービス１１２から要求することによって、又はクライアントデバイス１５０上の変更をコンテンツ管理システム１１０にコミットすることによって、ツリー構造がマッチングすることを確保するように機能することができる。
【００３８】
ときとして、クライアントデバイス１５０は、利用可能なネットワーク接続を有さない場合がある。このシナリオにおいて、クライアント同期サービス１５６は、ネットワーク接続が利用可能であるときに、コンテンツアイテム変更についてリンクされたコレクションを監視し、後のコンテンツ管理システム１１０への同期のためにこれらの変更をキューイングすることができる。同様に、ユーザは、コンテンツ管理システム１１０との同期を手動で、開始する、停止する、一時停止する、又は再開することができる。
【００３９】
クライアント同期サービス１５６は、特定のユーザアカウントと関連するすべてのコンテンツをコンテンツ管理システム１１０上で同期させることができる。代替的に、クライアント同期サービス１５６は、特定のユーザアカウントと関連する全コンテンツの一部のコンテンツをコンテンツ管理システム１１０上で選択的に同期させることができる。一部のコンテンツのみを選択的に同期させることにより、スペースをクライアントデバイス１５０上に保持し、帯域幅を節約することができる。
【００４０】
幾つかの実施形態において、クライアント同期サービス１５６は、コンテンツのリマインダ部分のためにクライアントストレージに、特定のユーザアカウントと関連するコンテンツの一部を選択的に格納し、プレースホルダコンテンツアイテムを格納する。例えば、クライアント同期サービス１５６は、プレースホルダコンテンツアイテムを格納することができ、このプレースホルダコンテンツアイテムは、コンテンツ管理システム１１０上の、そのそれぞれの完全なコンテンツアイテムの同じファイル名、パス、拡張子、メタデータを有するが、完全なコンテンツアイテムのデータを欠く。このプレースホルダコンテンツアイテムは、サイズが数バイト以下であることができるが、それぞれの完全なコンテンツアイテムは、著しくより大きくてもよい。クライアントデバイス１５０がコンテンツアイテムにアクセスすることを試行した後に、クライアント同期サービス１５６は、コンテンツアイテムのデータをコンテンツ管理システム１１０から取得し、完全なコンテンツアイテムを、アクセスするクライアントデバイス１５０に提供することができる。このアプローチは、有意なスペース、及び帯域幅節約を提供しながら、ユーザのコンテンツへのフルアクセスをコンテンツ管理システム１１０上に依然として提供することができる。
【００４１】
コラボレーション特徴
コンテンツ管理システム１１０の別の特徴は、ユーザ間のコラボレーションを容易にすることである。コラボレーション特徴は、コンテンツアイテムの共有、コンテンツアイテムについてのコメント、コンテンツアイテム上でのコワーキング、インスタントメッセージング、コンテンツアイテムについての存在及び表示状態情報を提供することなどを備える。
【００４２】
共有
コンテンツ管理システム１１０は、共有サービス１２８を介して共有コンテンツを管理することができる。コンテンツへのリンクを提供することによって共有するコンテンツは、コンテンツ管理システム１１０とネットワーク通信しているいずれかのコンピューティングデバイスからアクセス可能なコンテンツアイテムを作成することを含むことができる。しかしながら、幾つかの実施形態において、リンクは、コンテンツ管理システム１１０及びアクセス制御リスト１４５によって実施されるアクセス制限と関連付けられることができる。また、共有コンテンツは、共有サービス１２８を使用してコンテンツにリンクし、コンテンツ管理システム１１０内のコンテンツを少なくとも１つの追加のユーザアカウント（コンテンツアイテムと関連する元のユーザアカウントに加えて）と共有することを含むことができるので、各ユーザアカウントは、コンテンツアイテムへのアクセスを有する。追加のユーザアカウントは、コンテンツを許容することによってコンテンツへのアクセスを得ることができ、その後、ウェブインタフェースサービス１２４を介してか、直接にかのいずれか一方で、クライアントデバイス１５０上でそれらのアカウントと関連するディレクトリ構造内からアクセス可能である。プラットフォームに依存しない方式において、共有を実行することができる。すなわち、様々なタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイス１５０にわたりコンテンツを共有することができる。また、ユーザアカウントの様々なタイプにわたりコンテンツを共有することができる。
【００４３】
コンテンツアイテムをコンテンツ管理システム１１０内で共有するために、共有サービス１２８は、１つのユーザアカウント識別子、又は複数のユーザアカウント識別子を、コンテンツアイテムと関連するアクセス制御リストデータベース１４５中のコンテンツエントリに追加することができるので、コンテンツアイテムへの追加されたユーザアカウントアクセスを付与することができる。また、共有サービス１２８は、ユーザアカウント識別子をコンテンツエントリから除去し、コンテンツアイテムへのユーザアカウントのアクセスを制限することができる。共有サービス１２８は、コンテンツアイテム識別子、コンテンツアイテムへのアクセスを与えられるユーザアカウント識別子、及びアクセス制御リストデータベース１４５におけるアクセスレベルを記録することができる。例えば、幾つかの実施形態において、単一コンテンツエントリと関連するユーザアカウント識別子は、関連したコンテンツアイテムに関するそれぞれのユーザアカウント識別子に対して異なるパーミッションを指定することができる。
【００４４】
コンテンツ管理システム１１０の外部でコンテンツアイテムを共有するために、共有サービス１２８は、ユニフォームリソースロケータ（ＵＲＬ）などのカスタムネットワークアドレスを生成することができ、このカスタムネットワークアドレスにより、いかなる認証もなく、コンテンツ管理システム１１０においてコンテンツアイテム又はコレクションにいかなるウェブブラウザもアクセスすることが可能である。これを達成するために、共有サービス１２８は、コンテンツ識別データを生成されたＵＲＬに含むことができ、このコンテンツ識別データを後に使用して、要求されたコンテンツアイテムを適切に識別し、返すことができる。例えば、共有サービス１２８は、アカウント識別子及びコンテンツパス、又は生成されたＵＲＬ中でコードを識別するコンテンツアイテムを含むことができる。ＵＲＬの選択に際し、ＵＲＬに含まれるコンテンツ識別データをコンテンツ管理システム１１０に送信することができ、このコンテンツ管理システム１１０は、受信したコンテンツ識別データを使用して、適切なコンテンツアイテムを識別し、コンテンツアイテムを返すことができる。
【００４５】
ＵＲＬを生成することに加えて、共有サービス１２８は、コンテンツアイテムへのＵＲＬが作成されているアクセス制御リストデータベース１４５に記録されるように設定されることもできる。幾つかの実施形態において、コンテンツアイテムと関連するコンテンツエントリは、コンテンツアイテムへのＵＲＬが作成されているかどうかを示すＵＲＬフラグを含むことができる。例えば、ＵＲＬフラグは、コンテンツアイテムへのＵＲＬが作成されていないことを示す、０又は偽に最初に設定されるブール値であり得る。共有サービス１２８は、コンテンツアイテムへのＵＲＬを生成した後に、フラグの値を１又は真に変更することができる。
【００４６】
幾つかの実施形態において、共有サービス１２８は、１セットのパーミッションをコンテンツアイテムについてのＵＲＬに関連付けることができる。例えば、ユーザがＵＲＬを介してコンテンツアイテムにアクセスすることを試行する場合に、共有サービス１２８は、コンテンツアイテムに対して制限された１セットのパーミッションを提供することができる。制限されたパーミッションの実施例は、ユーザがコンテンツアイテムをダウンロードすることができない、コンテンツアイテムを保存することができない、コンテンツアイテムをコピーすることができない、コンテンツアイテムを修正することができないなどの制限を有する。幾つかの実施形態において、制限されたパーミッションは、特定のドメインから、すなわち、企業ネットワークドメイン内部から、又は特定のドメインと関連するアカウント、例えば、企業アカウントと関連するアカウント（例えば、＠ａｃｍｅ．ｃｏｍ）によって、アクセスされるコンテンツアイテムだけにパーミッションを与える制限を含む。
【００４７】
幾つかの実施形態において、共有サービス１２８も、生成されたＵＲＬを非アクティブ化するように構成されることができる。例えば、各コンテンツエントリも、生成されたＵＲＬからの要求に応答してコンテンツを返すべきかどうかを示す、ＵＲＬアクティブフラグを含むことができる。例えば、ＵＲＬアクティブフラグが１又は真に設定される場合に、共有サービス１２８は、生成されたリンクによって要求されるコンテンツアイテムのみを返すことができる。したがって、ＵＲＬが生成されているコンテンツアイテムへのアクセスは、ＵＲＬアクティブフラグの値を変更することによって容易に制限され得る。これにより、コンテンツアイテムを移動させる、又は生成されたＵＲＬを削除することを必要とせずに、ユーザが共有されたコンテンツアイテムへのアクセスを制限することができる。同様に、共有サービス１２８は、ＵＲＬアクティブフラグの値を１又は真に再度変更することによって、ＵＲＬを再アクティブ化することができる。したがって、ユーザは、新規のＵＲＬを生成する必要なく、コンテンツアイテムへのアクセスを容易に復元することができる。
【００４８】
幾つかの実施形態において、コンテンツ管理システム１１０は、コンテンツアイテムをアップロードするためにＵＲＬを指定することができる。例えば、ユーザアカウントを有する第一ユーザは、このようなＵＲＬを要求し、ＵＲＬを寄与するユーザに提供することができ、寄与するユーザは、このＵＲＬを使用して、コンテンツアイテムを第一ユーザのユーザアカウントにアップロードすることができる。
【００４９】
チームサービス
幾つかの実施形態において、コンテンツ管理システム１１０は、チームサービス１３０を含む。チームサービス１３０は、ユーザアカウントの定義されたチームを作成し、管理するための機能性を提供することができる。これらのチームは、サブチーム（例えば、ビジネスユニット、又はプロジェクトチームなど）とともに、企業用に作成されることができ、これらのチーム及びサブチームに、又はこれらのチームに割り当てられるユーザアカウントは、ユーザアカウントのいずれかの定義されたグループ用に作成され得る。これらのチームサービス１３０は、チーム用の共通の共有スペース、プライベートユーザアカウントフォルダ、及びアクセス制限された共有フォルダを提供することができる。また、チームサービスは、管理者用に管理インタフェースを提供し、コレクション及びコンテンツアイテムをチーム内で管理することができ、このチームと関連付けられるユーザアカウントを管理することができる。
【００５０】
認可サービス
幾つかの実施形態において、コンテンツ管理システム１１０は、認可サービス１３２を含む。認可サービス１３２は、ネームスペースにアクセスすることを試行するユーザアカウントがネームスペースにアクセスする適切な権限を有することを確保する。認可サービス１３２は、ネームスペースにアクセスする要求に従うトークンをクライアントアプリケーション１５２から受信することができ、ユーザアカウントにパーミッションを与えられている機能を返すことができる。複数のアクセスレベルを有するユーザアカウント（例えば、ユーザ権限及び管理者権限を有するユーザアカウント）について、認可サービス１３２は、管理者による意図しないアクションを回避するために、明示的な特権昇格をも要求することができる。
【００５１】
存在及び表示状態
幾つかの実施形態において、コンテンツ管理システムは、コンテンツアイテムを共有するユーザがどのようにコンテンツアイテムとインタラクトしている、又はインタラクトしていたかについての情報を提供することができる。幾つかの実施形態において、コンテンツ管理システム１１０は、コンテンツアイテムを共有するユーザがコンテンツアイテムを現在閲覧していることを報告することができる。例えば、クライアントデバイス１５０がコンテンツアイテムにアクセスしているときに、クライアントコラボレーションサービス１６０は、通知サービス１１７に通知することができる。次いで、通知サービス１１７は、このコンテンツアイテムに関してクライアントデバイス１５０のユーザの存在する同一コンテンツアイテムへのアクセスを有する他のユーザのすべてのクライアントデバイスに通知することができる。
【００５２】
幾つかの実施形態において、コンテンツ管理システム１１０は、共有されたコンテンツアイテムとのユーザインタラクションの履歴を報告することができる。コラボレーションサービス１２６は、メタデータデータベース１４６及びサーバファイルジャーナル１４８などのデータソースにクエリを行い、ユーザがコンテンツアイテムを保存していること、ユーザがまだコンテンツアイテムを閲覧していることなどを判定し、通知サービス１１７を使用して、この状態情報を他のユーザに広めることができるので、それらのユーザは、コンテンツアイテムを現在閲覧している、又は現在修正している、又は閲覧していた、又は修正したユーザを知ることができる。
【００５３】
コラボレーションサービス１２６は、コンテンツアイテムがコメント機能をネイティブにサポートしない場合でも、コンテンツと関連するコメントを容易にすることができる。これらのようなコメントをメタデータデータベース１４６に格納することができる。
【００５４】
コラボレーションサービス１２６は、ユーザに対して通知を発信し、送信することができる。例えば、ユーザは、コメント中に別のユーザについて言及することができ、コラボレーションサービス１２６は、ユーザがコメント中で言及されている通知をそのユーザに送信することができる。様々な他のコンテンツアイテムイベントは、コンテンツアイテムを削除すること、コンテンツアイテムを共有することなどを含む、通知をトリガすることができる。
【００５５】
コラボレーションサービス１２６は、メッセージングプラットフォームを提供することができ、このメッセージングプラットフォームにより、ユーザは、インスタントメッセージ、音声通話、電子メールなどを送信し、受信することができる。
【００５６】
コラボレーションコンテンツアイテム
幾つかの実施形態において、コンテンツ管理サービスは、コラボレーションドキュメントサービス１３４をも含むことができ、このコラボレーションドキュメントサービス１３４は、インタラクティブコンテンツアイテムコラボレーションプラットフォームを提供することができ、このインタラクティブコンテンツアイテムコラボレーションプラットフォームにより、ユーザは、コラボレーションコンテンツアイテム、これらのコラボレーションコンテンツアイテム中のコメントを同時に作成し、タスクをコラボレーションコンテンツアイテム内で管理することができる。コラボレーションコンテンツアイテムは、ユーザが作成し、コラボレーションコンテンツアイテムエディタを使用して編集することができ、コラボレーションコンテンツアイテム要素を含むことができるファイルであり得る。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテム識別子、１つ以上のオーサー識別子、コラボレーションコンテンツアイテムテキスト、コラボレーションコンテンツアイテム属性、インタラクション情報、コメント、共有するユーザなどを含むことができる。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテムを検索し、取得することを可能にする、データベースエンティティとして格納されることができる。複数のユーザは、同時に、又は異なる時間に、コラボレーションコンテンツアイテムにアクセスし、これらのコラボレーションコンテンツアイテムを閲覧し、編集し、そしてコラボレーションすることができる。幾つかの実施形態において、これは、２人のユーザがウェブインタフェースを介してコンテンツアイテムにアクセスすることを要求することによって管理されることができ、そしてそこでこれら２人のユーザは、同時にコンテンツアイテムの同じコピー上で操作することができる。
【００５７】
コラボレーションコンパニオンインタフェース
幾つかの実施形態において、クライアントコラボレーションサービス１６０は、クライアントデバイス１５０上に提示されるコンテンツアイテムに関連する情報を表示する目的のために、ネイティブアプリケーションコンパニオンインタフェースを提供することができる。クライアントデバイス１５０に格納され、このクライアントデバイス１５０上で実行されるネイティブアプリケーションがコンテンツアイテムにアクセスする、幾つかの実施形態において、そこでコンテンツアプリケーション１５２がコンテンツアイテムを管理するように、コンテンツアイテムは、クライアントデバイス１５０のファイルシステムの指定の位置にあり、ネイティブアプリケーションは、上記のアドレス指定されたコラボレーションデータを表示するいかなるネイティブな方式も提供しない場合がある。これらのような実施形態において、クライアントコラボレーションサービス１６０は、ユーザがコンテンツアイテムを開いていることを検出することができ、コラボレーションデータなどのコンテンツアイテムについての追加情報をオーバーレイに提供することができる。例えば、追加情報は、コンテンツアイテムに対するコメント、コンテンツアイテムの状態、コンテンツアイテムを以前に閲覧していた、又は現在閲覧している他のユーザのアクティビティを含むことができる。このようなオーバーレイは、別のユーザがコンテンツアイテムを現在編集しているため、変更が失われる可能性があることをユーザに警告することができる。
【００５８】
幾つかの実施形態において、パブリック又はプライベートアプリケーションプログラミングインタフェースを使用して、上記に考察される、サービス又はストレージ／データベースのうちの１つ以上にアクセスすることができる。
【００５９】
ある特定のソフトウェアアプリケーションは、コンテンツストレージ１４２にＡＰＩを介してユーザの代わりにアクセスすることができる。例えば、クライアントデバイス１５０上で実行するアプリケーションなどのソフトウェアパッケージは、ユーザが認証クレデンシャルを提供するときにコンテンツ管理システム１１０に直接ＡＰＩ呼び出しをプログラムに従い行い、コンテンツを読み出す、書き込む、作成する、削除する、共有する、又はその他の方法により操作することができる。
【００６０】
ユーザは、ウェブインタフェースサービス１２４によって生成され、サーブされるウェブインタフェースを介してユーザアカウントに格納されるコンテンツを閲覧する、又は操作することができる。例えば、ユーザは、ウェブブラウザにおいて、コンテンツ管理システム１１０によって提供されるウェブアドレスにナビゲートすることができる。コンテンツアイテムの新規のバージョンをアップロードするなど、ウェブインタフェースを介して行われるコンテンツストレージ１４２中のコンテンツへの変更又は更新は、伝播され、ユーザのアカウントと関連する他のクライアントデバイスに返されることができる。例えば、複数のクライアントデバイスは、これらのクライアントデバイス自体のそれぞれのクライアントソフトウェアとともに、単一アカウントと関連付けられることができ、このアカウント中のコンテンツアイテムは、複数のクライアントデバイスのそれぞれの間で同期することができる。
【００６１】
クライアントデバイス１５０は、ユーザの代わりにコンテンツ管理システム１１０に接続することができる。ユーザは、例えば、クライアントデバイス１５０がデスクトップ又はラップトップコンピュータ、電話、テレビ、モノのインターネットデバイスなどであるときに、クライアントデバイス１５０と直接インタラクトすることができる。代替的に、又は追加的に、クライアントデバイス１５０は、例えば、クライアントデバイス１５０がサーバであるときに、ユーザがクライアントデバイス１５０への物理的なアクセスを有することなく、ユーザの代理を務めることができる。
【００６２】
クライアントデバイス１５０の幾つかの特徴は、クライアントデバイス１５０上にインストールされるアプリケーションによって有効にされる。幾つかの実施形態において、このアプリケーションは、コンテンツ管理システム専用コンポーネントを含むことができる。例えば、コンテンツ管理システム専用コンポーネントは、スタンドアロンアプリケーション１５２、１つ以上のアプリケーションプラグイン、及び／又はブラウザ拡張であることができる。しかしながら、ユーザも、ウェブブラウザなどの第三者アプリケーションを介してコンテンツ管理システム１１０とインタラクトすることができ、この第三者アプリケーションは、クライアントデバイス１５０上にあり、コンテンツ管理システム１１０と通信するように構成される。様々な実装において、クライアント側アプリケーション１５２は、ユーザに対してユーザインタフェース（ＵＩ）を提示し、コンテンツ管理システム１１０とインタラクトすることができる。例えば、ユーザは、ファイルシステムと統合されるファイルシステムエクスプローラを介して、又はウェブブラウザアプリケーションを使用して表示されるウェブページを介して、コンテンツ管理システム１１０とインタラクトすることができる。
【００６３】
幾つかの実施形態において、クライアントアプリケーション１５２は、コンテンツ管理システム１１０の１つより多いアカウントに対してコンテンツを管理し、同期させるように構成されることができる。これらのような実施形態において、クライアントアプリケーション１５２は、複数のアカウントにログインしたままで、複数のアカウントに対して通常のサービスを提供することができる。幾つかの実施形態において、各アカウントは、ファイルシステム中のフォルダとして現れることができ、そのフォルダ内のすべてのコンテンツアイテムは、コンテンツ管理システム１１０と同期することができる。幾つかの実施形態において、クライアントアプリケーション１５２は、プライマリアカウント又はデフォルトアカウントである複数のアカウントのうちの１つを選ぶセレクタを含むことができる。
【００６４】
コンテンツ管理システム１１０に専用コンポーネントを提示しながら、当業者は、システム１００のアーキテクチャ構成が唯一可能な構成であり、より多い、又はより少ないコンポーネントに関する他の構成が可能であることを理解するであろう。さらに、サービスは、別のサービスとともにあると記述される機能性さえも含む、多い、又は少ない機能性を有することができる。さらに、１つの実施形態に関して本明細書に記述される特徴を、別の実施形態に関して記述される特徴と組み合わせることができる。
【００６５】
システム１００に専用コンポーネントを提示するが、当業者は、システム１００のアーキテクチャ構成が唯一可能な構成であり、より多い、又はより少ないコンポーネントに関する他の構成が可能であることを理解するであろう。
【００６６】
クライアント同期サービス
図１Ｂは、幾つかの実施形態による、クライアント同期サービス１５６の実施例を示す。幾つかの実施形態により、クライアント同期サービス１５６は、図１Ａに示されるクライアントデバイス１５０中に実装されることができる。しかしながら、他の実施形態において、クライアント同期サービス１５６は、別のコンピューティングデバイス上に実装されることができる。クライアント同期サービス１５６は、クライアント同期サービス１５６が実行する、コンテンツ管理システムとクライアントデバイスとの間のコンテンツアイテムへの変更を同期させるように構成される。
【００６７】
クライアント同期サービス１５６は、ファイルシステムインタフェース１７０、サーバインタフェース１７２、ツリーストレージ１７４、プランナ１７６、及びスケジューラ１７８を含むことができる。追加的な、又は代替的なコンポーネントをも含むことができる。クライアント同期サービス１５６及びそのコンポーネントの高水準のディスクリプションを図１Ｂに関して下記に考察する。しかしながら、クライアント同期サービス１５６及びそのコンポーネントのさらなる詳細及び実施形態は、全体を通して考察される。
【００６８】
ファイルシステムインタフェース１７０は、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を処理し、ローカルツリーを更新するように構成される。例えば、ファイルシステムインタフェース１７０は、クライアント同期サービス１５６と通信して、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を検出することができる。また、図１Ａのクライアントアプリケーション１５２を介して、これらの変更を行い、検出することができる。ファイルシステムインタフェース１７０は、クライアントデバイス上のコンテンツアイテムへの変更（新規の、削除された、修正された、コピーされた、リネームされた、又は移動されたコンテンツアイテム）に基づき行われることができる、ローカルツリーへの更新を行うことができる。
【００６９】
サーバインタフェース１７２は、コンテンツ管理システムのリモートストレージにおけるコンテンツアイテムへのリモート変更の処理、及びリモートツリーの更新の際に支援するように設定される。例えば、サーバインタフェース１７２は、図１Ａのサーバ同期サービス１１２と通信し、クライアントデバイス１５０とコンテンツ管理システム１１０との間でコンテンツアイテムへの変更を同期させることができる。コンテンツ管理システム１１０におけるコンテンツアイテムへの変更（新規の、削除された、修正された、コピーされた、リネームされた、又は移動されたコンテンツアイテム）を検出することができ、これらの変更をコンテンツ管理システム１１０に反映するために更新をリモートツリーに行うことができる。
【００７０】
ツリーストレージ１７４は、クライアント同期サービス１５６によって使用されるツリーデータ構造を格納し、維持するように構成される。例えば、ツリーストレージ１７４は、ローカルツリー、同期ツリー、及びリモートツリーを格納することができる。幾つかの実施形態により、ツリーストレージ２００は、レイテンシ及び応答時間を減少させるために、永続メモリ（例えば、ハードディスク又は他のセカンダリストレージデバイス）に、またメインメモリ（例えば、ＲＡＭ又は他のプライマリストレージデバイス）にツリーデータ構造を格納することができる。例えば、クライアントデバイス又はクライアント同期サービス１５６の起動時に、ツリーデータ構造を永続メモリから取得し、メインメモリにロードすることができる。ツリーストレージ１７４は、メインメモリ上でツリーデータ構造にアクセスし、これらのツリーデータ構造を更新し、クライアントデバイス又はクライアント同期サービス１５６を停止する前に、ツリーストレージ１７４は、更新されたツリーデータ構造を永続メモリ上に格納することができる。メインメモリはコストが高く、ほとんどのクライアントデバイス上でサイズが制限されることが多いため、メインメモリ上のツリーデータ構造のフットプリントを減少させる追加の技術的な改善を実施する。これらの技術的な解決策を以下にさらに説明する。
【００７１】
プランナ１７６は、コンテンツ管理システムと関連するサーバ状態と、クライアントデバイスと関連するファイルシステム状態との間の差異をツリーデータ構造の状態に基づき検出するように構成される。例えば、プランナ１７６は、リモートツリーと同期ツリーとの間に差異があるかどうかを判定し得る。リモートツリーと同期ツリーとの間の差異は、コンテンツ管理システムに格納される１つ以上のコンテンツアイテム上にリモートに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。同様に、プランナ１７６は、ローカルツリーと同期ツリーとの間の差異があるかどうかも判定し得る。ローカルツリーと同期ツリーとの間の差異は、クライアントデバイス上に格納される１つ以上のコンテンツアイテム上にローカルに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。差異を検出した場合、プランナ１７６は、ツリーデータ構造を同期させる操作シーケンスを生成する。
【００７２】
幾つかのシナリオにおいて、リモートツリーと同期ツリーとの間の差異に基づき生成される操作シーケンス、及びローカルツリーと同期ツリーとの間の差異に基づき生成される操作シーケンスは、競合する場合がある。また、プランナ１７６は、これら２つの操作シーケンスを単一のマージされた操作プランにマージするように構成されることができる。
【００７３】
スケジューラ１７８は、生成された操作シーケンスを行い、これらの操作の実行を管理するように構成される。幾つかの実施形態により、スケジューラ１７８は、操作シーケンス中の各操作を、操作を実行するために実行される必要がある一連の１つ以上のタスクに変換する。幾つかのシナリオにおいて、幾つかのタスクは、期限切れになる、又はもはや関連性がなくなる場合がある。スケジューラ１７８は、これらのタスクを識別し、それらをキャンセルするように構成される。
【００７４】
ファイルジャーナル及びストレージシステム（Ｔｏｍａｈａｗｋ及びＷａｔｅｒｆａｌｌ）
図２Ａは、システム構成１００において、コンテンツ管理システム１１０とクライアントデバイス１５０との間でコンテンツを同期させるための例示的なアーキテクチャの概略図を示す。この実施例において、クライアントデバイス１５０は、コンテンツストレージインタフェース２０６及びファイルジャーナルインタフェース２０２を介してそれぞれコンテンツストレージ１４２及びサーバファイルジャーナル１４８とインタラクトする。コンテンツストレージインタフェース２０６は、コンテンツストレージサービス１１６によって提供される、又は管理されることができ、ファイルジャーナルインタフェース２０２は、サーバ同期サービス１１２によって提供される、又は管理されることができる。例えば、コンテンツストレージインタフェース２０６は、コンテンツストレージサービス１１６のサブコンポーネント又はサブサービスであり得、ファイルジャーナルインタフェース２０２は、サーバ同期サービス１１２のサブコンポーネント又はサブサービスであり得る。
【００７５】
コンテンツストレージインタフェース２０６は、コンテンツ要求又はインタラクションなどの通信をクライアントデバイス１５０とコンテンツストレージ１４２との間で管理することができる。コンテンツストレージインタフェース２０６は、コンテンツストレージ１４２に、またコンテンツストレージ１４２からコンテンツをアップロードし、ダウンロードする、クライアントデバイス１５０からの要求を処理することができる。コンテンツストレージインタフェース２０６は、コンテンツ要求（例えば、ダウンロード、アップロードなど）をクライアントデバイス１５０から受信し、アクセス制御リスト１４５中のパーミッションを検証し、認可サービス１３２と通信してクライアントデバイス１５０（及び／又はクライアントデバイス１５０からの要求）がコンテンツストレージ１４２に、又はコンテンツストレージ１４２からコンテンツをアップロードする、又はダウンロードすることを認可されるかどうかを判定し、コンテンツストレージ１４２とインタラクトしてコンテンツストレージ１４２中のコンテンツをクライアントデバイス１５０にダウンロードする、又はアップロードすることができる。クライアントデバイス１５０からの要求がコンテンツアイテムをダウンロードする要求である場合に、コンテンツストレージインタフェース２０６は、コンテンツアイテムをコンテンツストレージ１４２から取得し、コンテンツアイテムをクライアントデバイス１５０に提供することができる。クライアントデバイス１５０からの要求がコンテンツアイテムをアップロードする要求である場合に、コンテンツストレージインタフェース２０６は、コンテンツアイテムをクライアントデバイス１５０から得て、コンテンツアイテムをストレージ用のコンテンツストレージ１４２にアップロードすることができる。
【００７６】
クライアントデバイス１５０からのコンテンツ要求を処理するときに、コンテンツストレージインタフェース２０６は、ストレージインデックス２１０と通信し、コンテンツストレージ１４２中の要求されたコンテンツの可用性及び／又はストレージ位置をチェックし、コンテンツストレージ１４２中でコンテンツアイテムを追跡することができる。ストレージインデックス２１０は、コンテンツストレージ１４２上でコンテンツアイテムを識別する、コンテンツストレージ１４２上のコンテンツアイテムのインデックスを維持することができ、そのうえコンテンツアイテムのそれぞれの位置をコンテンツストレージ１４２内で識別することができる。したがって、ストレージインデックス２１０は、コンテンツストレージ１４２上でコンテンツアイテムを、またコンテンツアイテムのストレージ位置を追跡することができる。ストレージインデックス２１０は、ファイルなどのすべてのコンテンツアイテム、及び／又はブロック又はチャンクなどのコンテンツアイテムの部分を追跡することができる。幾つかの事例において、コンテンツアイテムは、コンテンツストレージ１４２に格納され、ストレージインデックス２１０において追跡されることができるブロック又はチャンクに分割され得る。例えば、コンテンツストレージ１４２は、コンテンツアイテムのそれぞれのデータ部分を含むデータのブロック又はチャンクとして、コンテンツアイテムを格納することができる。ストレージインデックス２１０は、コンテンツストレージ１４２に格納されるコンテンツアイテムのブロック又はチャンクを追跡することができる。下記の図２Ｂは、コンテンツアイテムのブロックを格納して追跡するための例示的な構成を示す。
【００７７】
ファイルジャーナルインタフェース２０２は、メタデータ要求、ならびにコンテンツ同期及び操作などの通信を、クライアントデバイス１５０とサーバファイルジャーナル１４８との間で管理することができる。例えば、ファイルジャーナルインタフェース２０２は、操作、構成、及び状態情報を、クライアントデバイス１５０とサーバファイルジャーナル１４８との間で変換する、妥当性確認する、認証する、及び／又は処理することができる。ファイルジャーナルインタフェース２０２は、カーソル内の、もしくは認可サービス１３２を介してＦＳＡｕｔｈトークンからのパーミッションを検証し、クライアントデバイス１５０によってサーバファイルジャーナル１４８へ送信される要求を認可する、又はこれらの要求の認可を検証することができる。クライアントデバイス１５０からの要求又は操作を処理するときに、ファイルジャーナルインタフェース２０２は、ネームスペースメンバーシップストア２０８にアクセスして、クライアントデバイス１５０からの要求又は操作と関連するいずれかのネームスペースについてネームスペース所有権情報を判定し、又は検証し、パーミッション情報をアクセス制御リスト１４５から取得してクライアントデバイス１５０からの要求又は操作と関連するコンテンツのパーミッションを検証することができる。
【００７８】
ファイルジャーナルインタフェース２０２中の変換サービス２０４は、通信のための線形化操作及び変換操作をクライアントデバイス１５０とサーバファイルジャーナル１４８との間で実行することができる。例えば、変換サービス２０４は、クライアントデバイス１５０からの通信を、サーバファイルジャーナル１４８中のデータの構造及びフォーマットと一貫性がある異なるフォーマットに、そしてその逆もまた同様に変換することができる。図示するように、幾つかの事例において、クライアントデバイス１５０は、コンテンツアイテム情報（例えば、状態、変更、バージョンなど）をクライアントデバイス１５０において操作として処理することができ、サーバファイルジャーナル１４８は、データベーステーブルなどのデータ構造中のロウによって反映されるコンテンツアイテムリビジョンと同一の情報を処理することができる。クライアントデバイス１５０とサーバファイルジャーナル１４８との間のコンテンツアイテム情報の同期を有効にするために、変換サービス２０４は、クライアントデバイス１５０からの操作を、サーバファイルジャーナル１４８に適しているリビジョンに変換することができ、サーバファイルジャーナル１４８上でデータのロウ中に反映されるリビジョンを、クライアントデバイス１５０に適している操作に変換することができる。
【００７９】
幾つかの事例において、認可サービス１３２は、クライアントデバイス１５０が要求されたコンテンツアイテムにアクセスする、このコンテンツアイテムを更新する、ダウンロードする、又はアップロードすることを認可されることを検証する、又は指示するトークンを生成することができる。このトークンは、クライアントデバイス１５０と関連するデバイス識別子、クライアントデバイス１５０に認証される、又は認可されるユーザアカウントと関連するアカウント識別子、クライアントデバイス１５０に認可されたセッションと関連するセッション識別子、ビューコンテキスト、及び識別されたコレクションへのアクセスパーミッションを含むことができる。トークンは、以下により詳細に記述される、カーソルと称される暗号によって署名されたデータオブジェクト中に含まれ得る。コンテンツ管理システム１１０及び／又は認可サービス１３２は、トークン（複数可）をクライアントデバイス１５０に送信することができ、クライアントデバイス１５０は、以下にさらに記述されるようなサーバファイルジャーナル１４８へのコンテンツアイテムのリビジョン及び／又は更新を要求するときに、トークンをコンテンツ管理システム１１０に提供することができる。また、クライアントデバイス１５０は、トークンをコンテンツストレージインタフェース２０６に提供し、いずれかのコンテンツ要求（例えば、ダウンロード、アップロードなど）を有効にすることができる。コンテンツストレージインタフェース２０６は、トークンを使用して、ストレージインデックス２１０へのクエリを認可し、コンテンツアイテムをコンテンツストレージ１４２に、又はコンテンツストレージ１４２からアップロードする、又はダウンロードすることができる。
【００８０】
例えば、クライアントデバイス１５０は、コンテンツストレージ１４２にコンテンツアイテムをアップロードする要求をコンテンツストレージインタフェース２０６に送信することができる。この要求は、トークン、及びアップロードされるコンテンツアイテムを含むことができる。コンテンツストレージインタフェース２０６は、トークンを使用して、コンテンツアイテムがコンテンツストレージ１４２に既に存在するかどうかをチェックするストレージインデックス２１０へのクエリを認可し、そしてコンテンツストレージ１４２へのコンテンツアイテムのアップロードを認可することができる。また、クライアントデバイス１５０は、トークンをファイルジャーナルインタフェース２０２に提供し、メタデータをサーバファイルジャーナル１４８上に格納してコンテンツアイテムのアップロード及びリビジョンを追跡する要求を認可することができる。
【００８１】
図２Ｂは、例示的なブロックストレージ及び同期構成を示す。この実施例において、コンテンツストレージ１４２は、特定のサイズ（例えば、４ＭＢ）までコンテンツアイテム（例えば、ファイル）の不透明チャンクであることができる、データブロックを格納することができる。コンテンツアイテムは、ブロック中に分割されることができ、これらのブロックは、アクセス用にコンテンツストレージ１４２に格納されることができる。ストレージインデックス２１０は、コンテンツストレージ１４２に格納されるブロックと、コンテンツストレージ１４２に格納されるブロックのそれぞれの位置とを追跡することができる。ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８とインタラクトし、コンテンツストレージ１４２に格納されるコンテンツアイテム及び／又はブロックへのリビジョンを追跡することができる。
【００８２】
例えば、コンテンツアイテム２２０（例えば、ＭｙＦｉｌｅ．ａｂｃ）をブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ中に分割することができる。コンテンツストレージインタフェース２０６は、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎを受信して、コンテンツストレージ１４２におけるストレージのためにブロックデータ２２２Ｂをコンテンツストレージ１４２に送信することができる。ブロックデータ２２２Ｂは、コンテンツアイテム２２０と関連するブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎを含むことができる。
【００８３】
ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎは、コンテンツストレージ１４２において１つ以上のストレージデバイス又はボリューム上に格納される、及び／又は１つ以上の論理ストレージコンテナ（例えば、バケット）又はデータクラスタ内に集約されることができる。幾つかの事例において、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎは、同一位置（例えば、ストレージデバイス、ボリューム、コンテナ、及び／又はクラスタ）上に合わせて格納されることができる。他の事例において、幾つかの、又はすべてのブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎは、２つ以上の異なる位置（例えば、２つ以上の異なるストレージデバイス、ボリューム、コンテナ、及び／又はクラスタ）上に格納されることができる。
【００８４】
また、コンテンツストレージインタフェース２０６は、ブロックメタデータ２２２Ａをストレージインデックス２１０に格納することができる。ブロックメタデータ２２２Ａは、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎを識別することができ、ストレージインデックス２１０がブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎをコンテンツストレージ１４２において追跡することを可能にする。ブロックメタデータ２２２Ａは、各ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎについての識別子を含むことができる。ブロックについての識別子は、ブロックを識別する、ブロックのハッシュなどの名前又はキーであることができる。
【００８５】
また、ブロックメタデータ２２２Ａは、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎのそれぞれのストレージ位置を示す、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎについての位置情報を含むことができる。ブロックの位置情報は、ブロックが格納されているストレージデバイス又はボリューム、及び／又はブロックが含まれている論理ストレージコンテナ又はデータクラスタを識別することができる。この位置情報を使用して、関連したブロックにアクセスする、又はこのブロックを取得することができる。
【００８６】
コンテンツストレージインタフェース２０６は、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎをコンテンツストレージ１４２に格納する前に、又はこれらを格納した後に、ブロックメタデータ２２２Ａをストレージインデックス２１０に格納することができる。例えば、コンテンツストレージインタフェース２０６は、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎをコンテンツストレージ１４２に格納した後に、ブロックメタデータ２２２Ａをストレージインデックス２１０に格納し、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎがコンテンツストレージ１４２に格納されていることを示すことができる。
【００８７】
幾つかの事例において、コンテンツストレージインタフェース２０６は、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎをコンテンツストレージ１４２に格納する前に、ストレージインデックス２１０にクエリを行い、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎがコンテンツストレージ１４２に格納されているかどうか（又は格納されている位置）を判定することができる。例えば、コンテンツストレージインタフェース２０６は、ブロックメタデータ２２２Ａに基づきストレージインデックス２１０にクエリを行い、ブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎがコンテンツストレージ１４２に格納されているかどうかをチェックすることができる。ストレージインデックス２１０は、ブロックメタデータ２２２Ａ中のブロック識別子をストレージインデックス２１０におけるブロック識別子と比較して、任意のマッチをチェックすることができる。ブロック識別子間のマッチは、関連したブロックがコンテンツストレージ１４２に格納されていることを示す。
【００８８】
前述されるように、サーバファイルジャーナル１４８は、コンテンツアイテムの追加、編集、移動又はリネーム、削除などを有する、コンテンツアイテムリビジョンを追跡する。その結果、ファイルジャーナルインタフェース２０２は、リビジョン２２２Ｃをサーバファイルジャーナル１４８に格納し、コンテンツアイテム２２０及び／又はブロック２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎをコンテンツストレージ１４２に追加したことを示すことができる。リビジョン２２２Ｃは、サーバファイルジャーナル１４８においてコンテンツアイテムリビジョンのジャーナル内にコンテンツアイテム２２０のリビジョンを表すことができる。
【００８９】
リビジョン２２２Ｃは、コンテンツアイテム２２０、及びコンテンツアイテム２２０と関連する操作、例えば、追加操作（例えば、アップロード）、編集操作、移動又はリネーム操作、削除操作などを識別することができる。また、リビジョン２２２Ｃは、コンテンツアイテム２２０が格納されているコンテンツ管理システム１１０中のネームスペースと、リビジョン２２２Ｃを格納するためのサーバファイルジャーナル１４８におけるコンテンツアイテムリビジョンのジャーナル中のロウとを識別することができる。コンテンツアイテムリビジョンのジャーナル内のロウは、コンテンツアイテム２２０についてのリビジョン２２２Ｃと関連するリビジョン番号を表すことができる。
【００９０】
ファイルジャーナルインタフェース（Ｔｏｍａｈａｗｋ）
図３Ａは、ファイルジャーナルインタフェース２０２によってクライアントデバイス１５０とサーバファイルジャーナル１４８との間で処理される通信の図を示す。サーバファイルジャーナル１４８は、ロウ中の値、及びサーバファイルジャーナル１４８中のフィールドとして、コンテンツアイテム状態及び変更（例えば、リビジョン）を追跡する。例えば、サーバファイルジャーナル１４８は、コンテンツストレージ１４２中でコンテンツアイテムへのリビジョンの１つ以上のジャーナルを維持することができる。１つ以上のジャーナルは、各コンテンツアイテムのリビジョンを各ネームスペース上で追跡することができる。サーバファイルジャーナル１４８上のジャーナル中の値のロウは、コンテンツアイテムをネームスペース中で識別することができ、このコンテンツアイテムの状態をネームスペース中に反映する。ネームスペース中の同一のコンテンツアイテムに対応するジャーナル中の後のロウは、コンテンツアイテムへの後のリビジョンをネームスペース中に反映することができる。したがって、コンテンツアイテムと関連するサーバファイルジャーナル１４８中のロウは、コンテンツアイテムの現在の状態と、このコンテンツアイテムへのいずれかのリビジョンの作成から現在の状態までとを識別することができる。
【００９１】
コンテンツアイテム情報（例えば、状態、変更又はリビジョンなど）をクライアントデバイス１５０と同期させるために、サーバファイルジャーナル１４８は、サーバファイルジャーナル１４８中で追跡される、又は格納される、１つ以上のコンテンツアイテムについてのリビジョンを表すリビジョンデータ３０４を、ファイルジャーナルインタフェース２０２へ、又はこのファイルジャーナルインタフェース２０２から送信する、又は受信することができる。リビジョンデータ３０４は、例えば、サーバファイルジャーナル１４８中のロウに対応するコンテンツアイテムリビジョンのログを含むことができる。サーバファイルジャーナル１４８は、リビジョンデータ３０４をファイルジャーナルインタフェース２０４に送信することができ、このファイルジャーナルインタフェース２０４は、以下にさらに記述されるように、リビジョンデータ３０４をクライアントデバイス１５０についての操作データ３０２に変換することができる。
【００９２】
クライアントデバイス１５０は、クライアントデバイス１５０においてコンテンツアイテムを更新する、又は修正するコンテンツ操作を実行することができる。コンテンツアイテム情報をサーバファイルジャーナル１４８と同期させるために、クライアントデバイス１５０は、操作データ３０２をファイルジャーナルインタフェース２０２へ、又はこのファイルジャーナルインタフェース２０２から送信する、又は受信することができる。クライアントデバイス１５０は、操作データ３０２をファイルジャーナルインタフェース２０２に送信し、コンテンツアイテムへの変更をクライアントデバイス１５０に報告し、操作データ３０２をファイルジャーナルインタフェース２０２から受信してコンテンツアイテムの最新の状態（例えば、リビジョンデータ３０４）をサーバファイルジャーナル１４８から得ることができる。
【００９３】
例えば、クライアントデバイス１５０は、コンテンツアイテムＡをクライアントデバイス１５０において編集し、コンテンツアイテムＡへの編集を示す編集操作をファイルジャーナルインタフェース２０２に報告することができる。この編集操作は、ファイルジャーナルインタフェース２０２と通信して、コンテンツアイテムＡへのリビジョンを示す、操作データ３０２中に含まれ得る。ファイルジャーナルインタフェース２０２は、編集操作を含む操作データ３０２を受信して、サーバファイルジャーナル１４８におけるストレージのためのリビジョンを生成し、このコンテンツアイテムＡへの編集を追跡することができる。ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８を更新してコンテンツアイテムＡの編集された状態を表すリビジョンを格納するために、リビジョンデータ３０４中の編集操作と関連するリビジョンをサーバファイルジャーナル１４８に含むことができる。
【００９４】
以下にさらに記述されるように、操作データ３０２は、クライアントデバイス１５０によってクライアントデバイス１５０と関連する各ネームスペースについて取得される最新の状態又はリビジョンを識別するカーソルを含むことができる。例えば、カーソルは、クライアントデバイス１５０によって、このクライアントデバイス１５０と関連する各ネームスペースについて取得される最新のリビジョンをサーバファイルジャーナル１４８中で識別することができる。このカーソル中の情報により、クライアントデバイス１５０からの操作データ３０２中の操作がこの操作と関連するネームスペース（複数可）について最新の状態又はリビジョンをサーバファイルジャーナル１４８中で反映するかどうかをファイルジャーナルインタフェース２０２が判定することが可能である。これは、サーバファイルジャーナル１４８中の既存のリビジョンと、操作データ３０２から変換されるリビジョンとの間の競合を生じる可能性がある、より古いリビジョンに対応するクライアントデバイス１５０からの操作データ３０２中の操作がサーバファイルジャーナル１４８に書き込まれていないことをファイルジャーナルインタフェース２０２が確保することを援助することができる。
【００９５】
クライアントデバイス１５０とサーバファイルジャーナル１４８との間のコンテンツアイテム情報の同期を可能にするために、ファイルジャーナルインタフェース２０２は、操作データ３０２をリビジョンデータ３０４に、そしてその逆も同様に変換する（例えば、変換サービス２０４を介して）ことができる。操作データ３０２をクライアントデバイス１５０から受信するときに、ファイルジャーナルインタフェース２０２は、操作データ３０２を、この操作データ３０２中の操作から解釈されるコンテンツアイテムリビジョンを含むリビジョンデータ３０４に変換することができる。リビジョンデータ３０４をサーバファイルジャーナル１４８から受信するときに、ファイルジャーナルインタフェース２０２は、リビジョンデータ３０４を、リビジョンデータ３０４中のリビジョンをクライアントデバイス１５０に実装するための操作を含む操作データ３０２に変換することができる。リビジョンデータ３０４は、１つ以上のコンテンツアイテムに起こっていること（すなわち、１つ以上のコンテンツアイテムへのリビジョン）を記述する、データをサーバファイルジャーナル１４８中に含み、操作データ３０２は、クライアントデバイス１５０に実行されている、又は実行されるであろう、１つ以上のコンテンツアイテムを修正する操作を含む。したがって、ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８からの１つ以上のコンテンツアイテムへのリビジョンを記述するデータ（例えば、操作データ３０４）を、クライアントデバイス１５０に実行されている、又は実行されるであろう１つ以上のコンテンツアイテムをクライアントデバイス１５０において修正する操作に変換することができる。
【００９６】
前述されるように、クライアントデバイス１５０からの操作データ３０２をサーバファイルジャーナル１４８についてのリビジョンデータ３０４に変換することに加えて、ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８からのリビジョンデータ３０４をクライアントデバイス１５０についての操作データ３０２に変換することができる。ファイルジャーナルインタフェース２０２は、リビジョンデータ３０４をサーバファイルジャーナル１４８から取得し、リビジョンデータ３０４中のリビジョンを、これらのようなリビジョンに従いクライアントデバイス１５０において１つ以上コンテンツアイテムをリバイスする、クライアントデバイス１５０における実行のための操作に変換することができる。リビジョンデータ３０４中のリビジョンから生成されるこれらの操作は、ファイルジャーナルインタフェース２０２によってクライアントデバイス１５０に提供される操作データ３０２に含まれる。操作データ３０２とリビジョンデータ３０４との間のこの変換により、クライアントデバイス１５０及びサーバファイルジャーナル１４８は、コンテンツアイテム情報を必要に応じて互いに同期させることが可能である。
【００９７】
クライアントデバイス１５０によって提供される操作データ３０２から生成されるいずれかのリビジョンデータ３０４をサーバファイルジャーナル１４８に書き込む前に、ファイルジャーナルインタフェース２０２は、操作データ３０２中のカーソルをチェックし、及び／又はサーバファイルジャーナル１４８にクエリを行い、リビジョンデータ３０４中のいかなるリビジョンもサーバファイルジャーナル１４８中で競合を生じないことを確保することができる。例えば、ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８にクエリを行い、リビジョンデータ３０４中のリビジョンと関連するコンテンツアイテムのバージョンがサーバファイルジャーナル１４８におけるコンテンツアイテムのバージョンと同一であるかどうか、又はリビジョンデータ３０４中のリビジョンが関係するコンテンツアイテムとして、サーバファイルジャーナル１４８におけるコンテンツアイテムのバージョンが更新されたバージョンであるか、異なるバージョンであるかどうかをチェックすることができる。リビジョンデータ３０４が関係するバージョンと、コンテンツアイテムの最新のバージョンが異なるバージョンであることをサーバファイルジャーナル１４８が示す場合に、これら２つのバージョンは、競合している。
【００９８】
ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８を更新して、操作データ３０２から導出されるリビジョンデータ３０４に含まれる新規のリビジョンを格納することができる。サーバファイルジャーナル１４８中のリビジョンにクエリを行う、及び／又はこれらのリビジョンを更新するときに、ファイルジャーナルインタフェース２０２は、ネームスペースメンバーシップストア２０８にクエリを行い、リビジョンデータ３０４中のリビジョンが影響するいずれのネームスペースと関連するネームスペース所有権情報を取得することができる。このネームスペース所有権情報は、所有するユーザアカウント（複数可）、又は特定のネームスペースのメンバーであるユーザアカウント（複数可）を示すことができるため、特定のネームスペースにアクセスすることができる。したがって、ファイルジャーナルインタフェース２０２は、ネームスペース所有権情報を分析し、サーバファイルジャーナル１４８がネームスペースのメンバーではないユーザアカウントからのネームスペースへのリビジョンを含むように更新されないことを確保することができる。
【００９９】
図３Ｂを参照して、サーバファイルジャーナル１４８は、ジャーナル３１０、３１２を格納し、コンテンツアイテムのリビジョン及び状態を追跡し、識別することができる。この実施例において、ジャーナル３１０は、ネームスペース識別子（ＮＳ＿ＩＤ）、サーバジャーナル識別子（ＳＪ＿ＩＤ）、パス、ブロック、前のリビジョン（Ｐｒｅｖ＿Ｒｅｖ）、及びターゲットネームスペース（Ｔａｒｇｅｔ＿ＮＳ）を有する記録を含む。ＮＳ＿ＩＤは、ネームスペースをサーバファイルジャーナル１４８中で一意に識別するために１つ以上の値を含むことができる。ＳＪ＿ＩＤは、所与のネームスペース中のロウにマッピングする、単調に増加する値を含み、そのネームスペース内で操作又はリビジョンの順序付けを提供する。パスは、関連したコンテンツアイテムを識別するネームスペース相対パスであることができる。Ｐｒｅｖ＿Ｒｅｖは、このパスと関連するコンテンツアイテムの前の状態に対応するロウのＳＪ＿ＩＤを識別する。Ｔａｒｇｅｔ＿ＮＳは、マウントされたネームスペースのマウントポイントについてのターゲットネームスペースのＮＳ＿ＩＤを識別する。Ｔａｒｇｅｔ＿ＮＳフィールドは、マウントポイントに対応していないロウ（例えば、リビジョン）に設定されない。
【０１００】
ジャーナル３１２は、ＮＳ＿ＩＤ、ＳＪ＿ＩＤ、クロック（例えば、タイムスタンプ）、ファイル識別子（Ｆｉｌｅ＿ＩＤ）、拡張属性（複数可）（ｘａｔｔｒ）などを有する記録を含む。ｘａｔｔｒは、コンテンツアイテム又は操作と関連するメタデータを格納することができる。
【０１０１】
幾つかの事例において、ジャーナル３１０は、関連したコンテンツアイテムのサイズを表すサイズフィールド、コンテンツアイテムがディレクトリであるときを示すように設定されることができるディレクトリフィールド（例えば、Ｉｓ＿Ｄｉｒ）、関連したファイルを一意に識別するファイル識別子、クロック又はタイムスタンプフィールドなどのような他のフィールドを含むことができる。
【０１０２】
ファイルジャーナルインタフェース２０２は、前述されるように、操作データ３０２及びリビジョンデータ３０４に基づき変換３２０を実行することができる。変換３２０を実行するときに、変換サービス２０４は、サーバファイルジャーナル１４８におけるストレージのために線形化されたリビジョンを含むリビジョン３２２に、操作データ３０２を変換することができる。また、変換サービス２０４は、リビジョンデータ３０４を線形化された操作３２４Ａに変換することができ、これらの線形化された操作３２４Ａは、クライアントデバイス１５０に送信される操作データ３０２に含まれ、クライアントデバイス１５０によって適用され、クライアントデバイス１５０においてコンテンツアイテム情報（例えば、状態、変更など）を更新することができる。また、変換サービス２０４は、カーソル３２４Ｂを生成して、又は更新して、操作データ３０２中のカーソル３２４Ｂをクライアントデバイス１５０に提供することができる。カーソル３２４Ｂは、線形化された操作３２４Ｂと関連する各ネームスペース及び／又はコンテンツアイテムに対応するそれぞれのリビジョン又はロウをサーバファイルジャーナル１４８中で識別する。
【０１０３】
例えば、カーソル３２４Ｂは、そのネームスペース（例えば、ＳＪ＿ＩＤ）についてサーバファイルジャーナル１４８中でネームスペース（例えば、ＮＳ＿ＩＤ）及びロウを識別することができ、そのネームスペースについてサーバファイルジャーナル１４８中で最新のリビジョンを示す。カーソル３２４Ｂ中のネームスペース及びロウは、線形化された操作３２４Ａ中の操作と関連付けられることができる。カーソル３２４Ｂは、線形化された操作３２４Ａがクライアントデバイス１５０に適用された後に、及び／又は適用される前に、サーバファイルジャーナル１４８中のネームスペースのリビジョン又は状態を示す、特定のネームスペースについてのサーバファイルジャーナル１４８中のリビジョンのログ上の特定の位置を識別することができる。したがって、カーソル３２４Ｂは、線形化された操作３２４Ａの前又は後に、サーバファイルジャーナル１４８中のネームスペース及び／又はコンテンツアイテムの状態を示すことができ、リビジョン競合を回避すること、ならびに線形化された操作３２４Ａが適用される前に、及び適用された後に、リビジョンの順序を追跡することを援助することができる。
【０１０４】
図４Ａは、サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。この実施例において、サーバファイルジャーナル１４８中のジャーナル３１０は、サーバファイルジャーナル１４８によって追跡されるリビジョン３２２を有するロウ４０２を含む。ジャーナル３１０中のリビジョン３２２は、ネームスペース１００及び１０１（すなわち、ＮＳ＿ＩＤ１００及び１０１）と関連付けられる。幾つかの事例において、サーバファイルジャーナル１４８は、それぞれのネームスペースに固有なリビジョンを追跡するネームスペース固有ジャーナルを格納することができる。ネームスペース固有ジャーナル中のこれらのロウ（例えば、４０２）は、そのネームスペースに固有なデータを含み、各ロウは、そのネームスペースに固有なリビジョンを反映する。
【０１０５】
ジャーナル３１０中の各ロウ（４０２）は、そのロウと関連するネームスペースを一意に識別するネームスペース識別子フィールド（ＮＳ＿ＩＤ）、所与のネームスペース中のロウにマッピングする単調に増加する値を含み、そのネームスペース内で操作又はリビジョンの順序付けを提供するサーバジャーナル識別子フィールド（ＳＪ＿ＩＤ）を含む。また、ジャーナル３１０は、コンテンツアイテムのネームスペース相対パスを識別するためのパスフィールド（Ｐａｔｈ）、コンテンツアイテムと関連するブロック又はブロックリストを識別するためのブロックフィールド（Ｂｌｏｃｋ）、コンテンツアイテムの前の状態又はリビジョンを表すジャーナル３１０中のロウ（すなわち、ＳＪ＿ＩＤ）を識別するための前のリビジョンフィールド（Ｐｒｅｖ＿Ｒｅｖ）、及びマウントされたネームスペースのマウントポイントについてのターゲットネームスペースを識別する（ロウがマウントに対応する場合）ためのターゲットネームスペースフィールド（Ｔａｒｇｅｔ＿ＮＳ）を含む。マウントポイントに対応しないロウ（例えば、リビジョン）に対してＴａｒｇｅｔ＿ＮＳフィールドについてのデータはない。
【０１０６】
ジャーナル３１０中の最初のロウ４０２は、ブロック「ｈ１」に対応し、前のリビジョン（Ｐｒｅｖ＿Ｒｅｖ）又はターゲットネームスペース（Ｔａｒｇｅｔ＿ＮＳ）を含まない、ネームスペース「１００」（ＮＳ＿ＩＤ１００）中の「Ｆｉｌｅ１」（パスフィールド値Ｆｉｌｅ１）について最初のリビジョン（ＳＪ＿ＩＤ１）を識別する。ロウが前のリビジョン又はターゲットネームスペースを含まないことから、ロウによって表されるリビジョンは、ブロック「ｈ１」と関連する「Ｆｉｌｅ１」のネームスペース「１００」における追加に対応する。ＳＪ＿ＩＤ「４」を含むジャーナル３１０中のロウは、このロウがネームスペース「１００」上の「Ｆｉｌｅ１」に対応するジャーナル３１０中の最後のロウ又はＳＪ＿ＩＤであることから、ネームスペース「１００」上の「Ｆｉｌｅ１」についてジャーナル３１０中の最後のリビジョンを表す。ＳＪ＿ＩＤ「４」を含むこのロウは、ネームスペース「１００」上の「Ｆｉｌｅ１」がＳＪ＿ＩＤ「１」に加えられた後に編集され、この編集がブロック「ｈ４」に対応することを示す。
【０１０７】
修正４０４は、リビジョン３２２を表す修正の実施例を描く。この実施例において、修正４０４のそれぞれは、ジャーナル３１０中の対応するロウ（４０２）からのコンテンツリビジョンを示す。各修正は、ジャーナル３１０中のＳＪＩＤ及びＮＳＩＤに対応し、ジャーナル３１０中のこれらの対応するＳＪＩＤ及びＮＳＩＤと関連するファイルに対応する。この実施例において、修正４０４と関連するコンテンツは、ジャーナル３１０中のブロック（例えば、「ｈ１」、「ｈ２」、「ｈ３」、「ｈ４」）の例示的なコンテンツ値を表す。修正４０４におけるこれらのコンテンツ値を例示目的のために提供し、各リビジョンと関連するコンテンツへの例示的な修正を描く。
【０１０８】
例えば、修正４０４における第一修正は、ジャーナル３１０中のＳＪＩＤ「１」及びＮＳＩＤ「１００」を表し、加えられているネームスペース「１００」中の「Ｆｉｌｅ１」を描く。コンテンツ「ａａａ」は、ＮＳＩＤ「１００」のＳＪＩＤ「１」において「Ｆｉｌｅ１」についての「ｈ１」の値を表す。また、修正４０４は、「ａａ２」（例えば、「ｈ４」）に修正されているネームスペース「１００」中の「Ｆｉｌｅ１」と関連するコンテンツ「ａａａ」（例えば、「ｈ１」）を説明する、ジャーナル３１０中のＳＪＩＤ「４」及びＮＳＩＤ「１００」を表す、ネームスペース「１００」中の「Ｆｉｌｅ１」の編集を描く。
【０１０９】
変換３２０において、ジャーナル３１０中のロウ４０２からのリビジョン３２２を、線形化された操作３２４Ａに変換する。線形化された操作３２４Ａは、ジャーナル３１０中のリビジョン３２２から生成され、線形化後の修正４０４を表す。線形化された操作３２４Ａによって示されるように、線形化された操作３２４Ａ中の操作は、複数のリビジョン（３２２）及び／又は修正（４０４）、又は単一のリビジョン（３２２）及び／又は修正（４０４）に基づくことができる。
【０１１０】
例えば、修正４０４は、ジャーナル３１０中のＳＪＩＤ「１」及びＮＳＩＤ「１００」に対応する、「Ｆｉｌｅ１」をネームスペース「１００」に加えるリビジョンと、ジャーナル３１０中のＳＪＩＤ「４」及びＮＳＩＤ「１００」に対応する、ネームスペース「１００」中の「Ｆｉｌｅ１」を編集するリビジョンとを描く。追加リビジョンは、「Ｆｉｌｅ１」及びＮＳＩＤ「１００」と関連するコンテンツ値「ａａａ」（例えば、「ｈ１」）、ならびに「Ｆｉｌｅ１」及びＮＳＩＤ「１００」についてのいずれかの前のリビジョンの欠如から推測されることができる。換言すれば、コンテンツ「ａａａ」は、コンテンツ（例えば、「ｈ１」）が加えられたか、編集されたかのいずれかであったことを示し、「Ｆｉｌｅ１」及びＮＳＩＤ「１００」についての前のリビジョンの欠如は、コンテンツ「ａａａ」が編集されているコンテンツとは対照的に追加されているコンテンツ（例えば、「ｈ１」）を表すことを示唆する。編集リビジョンは、「Ｆｉｌｅ１」及びＮＳＩＤ「１００」と関連するコンテンツ値「ａａ２」（例えば、「ｈ４」）と、「Ｆｉｌｅ１」及びＮＳＩＤ「１００」と関連する前のリビジョン（ＳＪＩＤ「１」及びＮＳＩＤ「１００」）とから推測されることができる。換言すれば、「Ｆｉｌｅ１」及びＮＳＩＤ「１００」と関連する、コンテンツ「ａａａ」から「ａａ２」への変更は、コンテンツ「ａａ２」が編集を表すことを示唆する。
【０１１１】
線形化された操作３２４Ａにおいて、ＮＳＩＤ「１００」についてのＳＪＩＤ「１」及びＳＪＩＤ「４」に対応する追加及び編集修正（４０４）を、「ａａａ」（例えば、「ｈ１」）から「ａａ２」（例えば、「ｈ４」）に「Ｆｉｌｅ１」と関連するコンテンツ値を編集する単一の線形化された操作（編集操作）に変換することができる。「Ｆｉｌｅ１」のコンテンツ（例えば、「ｈ１」）を「ａａ２」（例えば、「ｈ４」）に編集する、単一の線形化された操作は、コンテンツ「ａａａ」（例えば、「ｈ１」）と関連する「Ｆｉｌｅ１」をネームスペース「１００」に追加する修正と、ネームスペース「１００」中の「Ｆｉｌｅ１」と関連するコンテンツ「ａａａ」（例えば、「ｈ１」）を「ａａ２」（例えば、「ｈ４」）に編集する修正とを反映する。その結果、この線形化された操作は、２つの修正４０４、及びリビジョン３２２中の２つの対応するリビジョンに基づく。
【０１１２】
ジャーナル３１０中のＳＪＩＤ「２」及びＮＳＩＤ「１００」に対応する修正４０４における修正は、コンテンツ「ｂｂｂ」（例えば、「ｈ２」）と関連する「Ｆｉｌｅ２」をネームスペース「１００」に追加するリビジョンを表す。この修正は、ネームスペース「１００」上で「Ｆｉｌｅ２」に対応するジャーナル３１０からのリビジョン３２２のみを表す。その結果、線形化された操作３２４Ａは、コンテンツ「ｂｂｂ」（例えば、「ｈ２」）と関連する「Ｆｉｌｅ２」をネームスペース「１００」に追加し、単一の修正４０４（ネームスペース「１００」上での「Ｆｉｌｅ２」の追加）、及びリビジョン３２２に基づく、ネームスペース「１００」上での「Ｆｉｌｅ２」についての単一の操作を含む。
【０１１３】
また、この実施例において、修正４０４は、ジャーナル３１０中のＳＪＩＤ「３」及びＮＳＩＤ「１００」に対応する、コンテンツ「ｃｃｃ」（例えば、「ｈ３」）と関連する「Ｆｉｌｅ３」をネームスペース「１００」に追加する修正と、ジャーナル３１０中のＳＪＩＤ「５」及びＮＳＩＤ「１００」に対応する、ネームスペース「１００」からの「Ｆｉｌｅ３」の削除（「−１」として表される）とのために含む。したがって、リビジョン３２２は、ネームスペース「１００」上の「Ｆｉｌｅ３」と関連する２つの修正４０４を含む。「Ｆｉｌｅ３」及びネームスペース「１００」と関連するジャーナル３１０中の最後のリビジョンがジャーナル３１０中のＳＪＩＤ「５」及びＮＳＩＤ「１００」を表す削除修正に対応することから、リビジョン３２２からの「Ｆｉｌｅ３」及びネームスペース「１００」と関連する追加及び削除修正４０４は、ネームスペース「１００」から「Ｆｉｌｅ３」を削除する単一の操作に線形化されることができる。その結果、線形化された操作３２４Ａは、「Ｆｉｌｅ３」をネームスペース「１００」から削除する単一の操作である、「Ｆｉｌｅ３」及びネームスペース「１００」についての単一の操作を備える。
【０１１４】
ジャーナル３１０において、ＮＳＩＤ「１００」についてのＳＪＩＤ「６」及び「７」、ならびにＮＳＩＤ「１０１」についてのＳＪＩＤ「１」は、ネームスペース「１００」に加えられて、その後、ネームスペース「１００」からネームスペース「１０１」に移動する「Ｄｉｒ」を表す。例えば、ＳＪＩＤ「６」及びＮＳＩＤ「１００」は、「Ｄｉｒ」及びネームスペース「１００」を識別し、「Ｄｉｒ」がＳＪＩＤ「６」においてネームスペース「１００」に追加されたことを示す前のリビジョンを含まない。ＳＪＩＤ「７」は、ブロックフィールド（「−」）、前のリビジョンフィールド（ＳＪＩＤ「６」）、及びターゲットネームスペースフィールド（「１０１」）によって反映される場合、ネームスペース「１００」からネームスペース「１０１」に移動する「Ｄｉｒ」を識別する。次いで、ＮＳＩＤ「１０１」についてのＳＪＩＤ「１」は、「Ｄｉｒ」及びネームスペース「１０１」についての前のロウ又はリビジョンの欠如によって示される場合、ネームスペース「１０１」に追加される「Ｄｉｒ」を識別する。ＮＳＩＤ「１００」中のＳＪＩＤ「６」及び「７」、ならびにＮＳＩＤ「８」中のＳＪＩＤ「１」における追加及び移動リビジョンは、ＳＪＩＤ「６」及びＮＳＩＤ「１００」に対応するネームスペース「１００」への「Ｄｉｒ」の追加、ＳＪＩＤ「７」及びＮＳＩＤ「１００」に対応するネームスペース「１００」からの「Ｄｉｒ」の削除、ならびにＳＪＩＤ「１」及びＮＳＩＤ「１０１」に対応するネームスペース「１０１」への「Ｄｉｒ」の追加という、３つの修正４０４によって描かれる。
【０１１５】
ジャーナル３１０中のＮＳＩＤ「１００」のＳＪＩＤ「６」及び「７」にそれぞれ対応する、「Ｄｉｒ」及びネームスペース「１００」の追加及び削除修正４０４は、「Ｄｉｒ」及びネームスペース「１００」に対応するジャーナル３１０中の最後のリビジョンがＳＪＩＤ「７」及びＮＳＩＤ「１００」におけるネームスペース「１００」からの「Ｄｉｒ」の削除であることから、「Ｄｉｒ」をネームスペース「１００」から削除する単一の操作に線形化される。ジャーナル３１０中のＳＪＩＤ「１」及びＮＳＩＤ「１０１」に対応する、ネームスペース「１０１」への「Ｄｉｒ」の追加は、「Ｄｉｒ」及びネームスペース「１０１」に対応する修正４０４及びリビジョン３２２のみである。その結果、「Ｄｉｒ」及びネームスペース「１０１」についての単一のマウント操作として、線形化された操作３２４Ａに追加を提供する。したがって、ＮＳＩＤ「１００」中のＳＪＩＤ「６」及び「７」、ならびにＮＳＩＤ「１０１」中のＳＪＩＤ「１」に対応するリビジョン３２２からの３つの修正４０４（すなわち、ネームスペース「１００」上での「Ｄｉｒ」の追加及び削除、ならびにネームスペース「１０１」上での「Ｄｉｒ」の追加）は、ネームスペース「１００」中の「Ｄｉｒ」についての削除操作、及びネームスペース「１０１」中の「Ｄｉｒ」についてのマウント操作という、線形化された操作３２４Ａ中の２つの操作に線形化される。
【０１１６】
上記に示されるように、線形化された操作３２４Ａは、「Ｆｉｌｅ１」及びネームスペース「１００」についての編集操作、「Ｆｉｌｅ２」及びネームスペース「１００」についての追加操作、ネームスペース「１００」中の「Ｆｉｌｅ３」の削除操作、ネームスペース「１００」中の「Ｄｉｒ」についての削除操作、ならびに「Ｄｉｒ」をネームスペース「１０１」に追加するためのマウント操作を備える。線形化された操作３２４Ａ中のこれらの操作は、リビジョン３２２から生成され、ジャーナル３１０中の各コンテンツアイテムの最新の状態を反映する。ファイルジャーナルインタフェース２０２は、線形化された操作３２４Ａを生成し、線形化された操作３２４Ａをクライアントデバイス１５０に送信して、クライアントデバイス１５０がリビジョン３２２からの最新の状態をジャーナル３１０中に含むことを確保することができる。
【０１１７】
線形化された操作３２４Ａをクライアントデバイス１５０に提供するときに、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０への線形化された操作３２４Ａに加えてカーソル３２４Ｂを含むことができる。カーソル３２４Ｂは、ジャーナル３１０中の各ネームスペース（ＮＳＩＤ）について最後のリビジョン（ＳＪＩＤ）を識別することができる。幾つかの実施形態において、カーソル３２４Ｂは、ユーザＩＤを有するＦＳＡｕｔｈトークン、及びカーソルに提供されるＮＳ＿ＩＤへの最後に観測されたアクセスパーミッションをも含むことができる。各ネームスペースについての最後のリビジョンは、各ネームスペースに対してクライアントデバイス１５０に送信された最新のリビジョンに対応するジャーナル３１０中の位置を示すことができる。
【０１１８】
幾つかの事例において、カーソル３２４Ｂは、線形化された操作３２４Ａ中の各操作をジャーナル３１０中のネームスペース（ＮＳＩＤ）及びロウ（ＳＪＩＤ）にマッピングすることができる。操作と関連するネームスペース及びロウは、この操作に対応するジャーナル３１０中の位置を示すことができる。換言すれば、操作と関連するネームスペース及びロウは、ジャーナル３１０中にその操作によって表されるリビジョン番号を示すことができる。カーソル３２４Ｂ中のネームスペース及びロウは、線形化された操作３２４Ａと関連する各ネームスペース及びコンテンツアイテムについてジャーナル３１０中で最新の状態に対応する。クライアントデバイス１５０からの変更（例えば、操作データ３０２を介して）を１つ以上のネームスペース及び／又はコンテンツアイテムに適用することを試みるときに、カーソル３２４Ｂをクライアントデバイス１５０用のツールとしてクライアントデバイス１５０に提供し、１つ以上のネームスペース及び／又はコンテンツアイテムについてクライアントデバイス１５０によって取得される最新の状態又はリビジョンを、ファイルジャーナルインタフェース２０２に対して識別することができる。ファイルジャーナルインタフェース２０２がカーソル３２４Ｂをクライアントデバイス１５０から受信するときに、それは、カーソル３２４Ｂを使用して、ジャーナル３１０においてクライアントデバイス１５０の位置（例えば、クライアントデバイス１５０によって取得されるジャーナル３１０からの最新のリビジョン）を識別し、クライアントデバイス１５０からの操作によって引き起こされる競合を検出する、又は回避することができる。
【０１１９】
例えば、ファイルジャーナルインタフェース２０２が「Ｆｉｌｅ１」をネームスペース「１００」中で修正する操作をクライアントデバイス１５０から受信する場合に、ファイルジャーナルインタフェース２０２は、それが操作に加えてクライアントデバイス１５０から受信する、カーソル３２４Ｂを使用して、ジャーナル３１０がネームスペース「１００」中の「Ｆｉｌｅ１」に対して、クライアントデバイス１５０からカーソル３２４Ｂ中で識別されるリビジョンよりも、新しいいずれかのリビジョンを含むかどうかをチェックすることができる。カーソル３２４Ｂ中のリビジョンがジャーナル３１０中で直近のリビジョンである場合に、ファイルジャーナルインタフェース２０２は、ネームスペース「１００」中の「Ｆｉｌｅ１」についてジャーナル３１０中の新規のリビジョン（例えば、ＮＳＩＤ「１００」中のＳＪＩＤ「８」）として編集操作をコミットすることができる。
【０１２０】
代替に、カーソル３２４Ｂ中のリビジョンがネームスペース「１００」中の「Ｆｉｌｅ１」に対してジャーナル３１０中の直近のリビジョンではない場合に、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からの編集操作がネームスペース「１００」中の「Ｆｉｌｅ１」に対して、ジャーナル３１０中で直近のバージョンに基づいていないと判定することができる。例えば、カーソル３２４Ｂがジャーナル３１０中でＳＪＩＤ「４」及びＮＳＩＤ「１００」を識別し、ジャーナル３１０がネームスペース「１００」中の「Ｆｉｌｅ１」に対して、ＳＪＩＤ「１２」及びＮＳＩＤ「１００」におけるリビジョンを含むとファイルジャーナルインタフェース２０２が判定する場合に、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からの編集操作がネームスペース「１００」上の「Ｆｉｌｅ１」のより古いバージョン（例えば、ＳＪＩＤ「４」及びＮＳＩＤ「１００」）に関係があると判定することができ、この編集操作は、その後修正されたファイルを編集する場合に競合を生じる可能性がある。ファイルジャーナルインタフェース２０２は、この編集操作によって生じるこの競合を検出して編集操作を拒否し、この競合を調整することを試みる、又は最新のリビジョンをクライアントデバイス１５０に提供してクライアントデバイス１５０が競合を調整することを可能にすることができる。
【０１２１】
ファイルジャーナルインタフェース２０２は、線形化された操作をクライアントデバイス１５０に送信するたびに、各ネームスペース及び／又はコンテンツアイテムについてのそれぞれの位置をジャーナル３１０中で識別する、本明細書に記述されるようなカーソルを含むことができる。同様に、いつでもクライアントデバイス１５０は、操作をファイルジャーナルインタフェース２０２に送信し、ファイルジャーナルインタフェース２０２がクライアントデバイス１５０における状態をジャーナル３１０における状態にマッピングするために使用することができる、その最新のカーソルを含むことができる。
【０１２２】
この実施例におけるジャーナル３１０は、複数のネームスペースを備えるジャーナルを描く。前述されるように、幾つかの実施例において、サーバファイルジャーナル１４８は、ネームスペース固有のジャーナルを維持することができる。カーソル３２４Ｂは、各ネームスペースについてＳＪＩＤ及びＮＳＩＤを含み、各ネームスペースについての最新のリビジョンを示すことができる。カーソル３２４Ｂに基づき、ファイルジャーナルインタフェース２００は、複数のジャーナルが維持されている実施形態において、本明細書にさらに説明されるように、複数のジャーナルにクエリを行う、及び／又はリビジョンを複数のジャーナルから取得することができる。
【０１２３】
図４Ｂは、クライアントデバイス１５０からの操作データ３０２をサーバファイルジャーナル１４８においてジャーナル３１０についてのリビジョン３２２に変換する、線形化４１０のための例示的なプロセスの図を示す。クライアントデバイス１５０は、操作データ３０２をファイルジャーナルインタフェース２０２に提供することができる。この実施例における操作データ３０２は、コンテンツアイテムの編集、追加、リネーム、移動、マウント、又は削除操作などの、操作４１２をクライアントデバイス１５０に含む。幾つかの事例において、操作４１２は、同一のコンテンツアイテムに対して複数の操作を含むことができる。例えば、操作４１２は、ネームスペース「１００」上の「Ｆｉｌｅ４」を編集する操作、ネームスペース「１００」からの「Ｆｉｌｅ４」を削除する操作を備えることができる。
【０１２４】
また、操作データ３０２は、ファイルジャーナルインタフェース２０２からクライアントデバイス１５０によって以前に受信されたカーソル３２４Ｂを含む。カーソル３２４Ｂは、ジャーナル３１０において１つ以上のネームスペース及び／又はコンテンツアイテムについての状態（例えば、ＮＳＩＤ及びＳＪＩＤ）又は最新のリビジョンを識別することができる。クライアントデバイス１５０は、カーソル３２４Ｂを操作４１２についての基準ポイントとしてファイルジャーナルインタフェース２０２に提供することができる。この実施例において、カーソル３２４Ｂは、ＳＪＩＤ「９」によって表されている、ネームスペース「１００」についての最新の状態を提供する。
【０１２５】
幾つかの事例において、カーソルは、コンテンツ管理システム１１０によって暗号により署名され、カーソルが改ざんされていないことをファイルジャーナルインタフェース２０２が判定することを可能にする。さらに、クライアントデバイス１５０がネームスペースについて直近のリビジョンをサーバファイルジャーナル１４８から受信したときに、クライアントデバイス１５０がリビジョンをサーバファイルジャーナル１４８にコミットすることから、ファイルジャーナルインタフェース２０２は、ＮＳ＿ＩＤに対して最後に観測されたアクセスパーミッションがまだ有効であるため、クライアントデバイス１５０がネームスペースへのアクセスを有することを許容することができる。
【０１２６】
ファイルジャーナルインタフェース２０２は、操作４１２及びカーソル３２４Ｂを受信して線形化４１０を実行し、クライアントデバイス１５０からの操作４１２を線形化してジャーナル３１０についてのリビジョン３２２に変換することができる。操作４１２に基づき、ファイルジャーナルインタフェース２０２は、操作のログ４１４を生成することができる。ログ４１４は、ジャーナル３１０中のそれぞれのネームスペース（複数可）にマッピングされる操作４１２からの操作リストを含むことができる。幾つかの事例において、ログ４１４は、以前に説明されるような操作４１２から生成される線形化された操作（３２４Ａ）を備えることができる。
【０１２７】
ファイルジャーナルインタフェース２０２は、ジャーナル３１０を更新してログ４１４に操作を反映する前に、カーソル３２４Ｂを使用して、その操作４１２がジャーナル３１０に最新の状態又はリビジョンを反映することを検証することができる。カーソル３２４Ｂがジャーナル３１０においてログ４１４と関連するネームスペース及び／又はコンテンツアイテムに対して最新の状態又はリビジョンを反映することをファイルジャーナルインタフェース２０２が確認する場合に、ファイルジャーナルインタフェース２０２は、ログ４１４に基づきリビジョン３２２をジャーナル３１０に追加することができる。リビジョン３２２は、ログ４１４中の操作と関連する各コンテンツアイテム及び／又はネームスペースの最新の状態又はリビジョンを含むことができる。
【０１２８】
ログ４１４における操作は、「Ｆｉｌｅ５」についての追加及び編集操作を備える。その結果、リビジョン３２２は、ファイルジャーナルインタフェース２０２がジャーナル３１０に「Ｆｉｌｅ５」の最新状態（すなわち、線形化方式において追加及び編集操作を「Ｆｉｌｅ５」に適用した後の状態）として書き込むことができる、「Ｆｉｌｅ５」の編集を備える。また、ログ４１４におけるこれらの操作は、「Ｄｉｒ２」についての追加操作、ならびにネームスペース「１００」上での「Ｆｉｌｅ４」についての編集及び削除操作を備える。したがって、リビジョン３２２は、「Ｄｉｒ２」をネームスペース「１００」に追加する操作、ならびに「Ｆｉｌｅ４」をネームスペース「１００」から削除する操作を、それぞれ「Ｄｉｒ２」及び「Ｆｉｌｅ４」の最新の状態として有することができる。
【０１２９】
図４Ｂにおいて、ジャーナル３１０中に描かれるリビジョン（３２２）は、操作４１２と関連する各コンテンツアイテム（「Ｆｉｌｅ４」、「Ｆｉｌｅ５」、「Ｄｉｒ２」）の最新の状態を反映する。しかしながら、幾つかの事例において、ファイルジャーナルインタフェース２０２がログ４１４に起因する各ネームスペース及び／又はコンテンツアイテムの最新の状態のリビジョンだけではなく、最新の状態又はリビジョンまでに導出するいずれかの前の状態又はリビジョンをも反映するため、ログ４１４によって表されるあらゆるリビジョンをジャーナル３１０に書き込むことができることに留意するべきである。例えば、ファイルジャーナルインタフェース２０２は、操作４１２からの最新の状態を反映する「Ｆｉｌｅ４」の編集のみを書き込むこととは対照的に、ジャーナル３１０に「Ｆｉｌｅ４」の編集についてのリビジョン、及び「Ｆｉｌｅ４」の削除についての後のリビジョンを書き込み、ジャーナル３１０に操作４１２からの「Ｆｉｌｅ４」のリビジョンのフルシーケンスを示すことができる。
【０１３０】
ファイルジャーナルインタフェース２０２は、ログ４１４中の操作をリビジョン３２２に変換し、ジャーナル３１０を更新してリビジョン３２２を含むことができる。ファイルジャーナルインタフェース２０２は、ジャーナル３１０中のそれぞれのロウにおいて、リビジョン３２２をジャーナル３１０に書き込むことができる。ファイルジャーナルインタフェース２０２は、リビジョン３２２をジャーナル３１０中の次の利用可能なロウ（例えば、ＳＪＩＤ）に追加することができる。幾つかの事例において、ファイルジャーナルインタフェース２０２は、線形化４１０及び／又はそれぞれのタイムスタンプ又はクロックに基づき決定されることができる相対的な順序に基づきリビジョン３２２を追加することができる。
【０１３１】
図４Ｂに示されるように、ネームスペース「１００」中の「Ｆｉｌｅ４」の削除操作は、ネームスペース「１００」についてのロウ「１１」又はＳＪＩＤ「１１」に含まれる。ジャーナル３１０のＳＪＩＤ「１１」中のリビジョンは、ブロックフィールド中のマイナス記号によって反映される場合、ネームスペース「１００」中の「Ｆｉｌｅ４」が削除されていることを示し、ネームスペース「１００」中の「Ｆｉｌｅ４」についてのジャーナル３１０において、ＳＪＩＤ「９」を前のリビジョンとして識別する。「Ｄｉｒ２」の追加、及び「Ｆｉｌｅ５」の編集は、ロウ又はＳＪＩＤ１２及び１４にそれぞれ含まれる。
【０１３２】
図４Ｂ中のジャーナル３１０は、ログ４１４及びカーソル３２４Ｂに基づくリビジョン３２２を含み、ログ４１４中で修正される各コンテンツアイテムの状態を反映するように更新されている。ジャーナル３１０中の各ロウにおけるパスフィールドは、関連したネームスペース（例えば、ネームスペース「１００」）内でコンテンツアイテムを識別する。ロウのパスフィールドは、ログ４１４中の対応する操作からのファイル及びネームスペースに基づく。ジャーナル３１０中のブロックフィールドは、コンテンツアイテムを表す。幾つかの事例において、ブロックフィールドは、それぞれのコンテンツアイテム又はデータブロックのハッシュを含むことができる。コンテンツアイテムが削除されている、及び／又はディレクトリ、フォルダ、マウントなどである場合に、ブロックフィールドは、空であり得る。
【０１３３】
ジャーナル３１０がログ４１４に基づくリビジョン３２２、及びカーソル３２４Ｂを含むように更新するときに、変換サービス２０４は、ジャーナル３１０のパスフィールド中に含む、各コンテンツアイテムのパスを識別することができる。幾つかの事例において、変換サービス２０４は、コンテンツアイテムの識別子（例えば、ファイルＩＤ）をコンテンツアイテムのパス（例えば、／ｄｉｒｅｃｔｏｒｙ／ｆｉｌｅｎａｍｅ）に変換することができる。例えば、クライアントデバイス１５０は、コンテンツアイテムについてのそれぞれのパスを追跡する、又は計算することなく、識別子を使用して、コンテンツアイテム（例えば、操作データ３０２中のコンテンツアイテム）を識別することができる。ジャーナル３１０は、コンテンツアイテムのパスを代替に使用して、コンテンツアイテムを識別することができる。変換サービス２０４は、クライアントデバイス１５０からのコンテンツアイテムの識別子を使用してジャーナル３１０についてのコンテンツアイテムのパスを計算し、コンテンツアイテムについて計算されるパスを使用してジャーナル３１０を更新することができる。また、変換サービス２０４は、逆変換を実行してコンテンツアイテムのパスに基づきコンテンツアイテムの識別子を取得し、クライアントデバイス１５０と通信するコンテンツアイテムを参照するときにコンテンツアイテムの識別子を使用することができる。
【０１３４】
例えば、変換サービス２０４は、ジャーナル３１０中のパス、ジャーナル３１０中のＮＳＩＤ、及び／又はジャーナル３１０中のディレクトリフィールド（又はサーバファイルジャーナル１４８中の他の箇所）を使用して、コンテンツアイテムを識別し、そのコンテンツアイテムの識別子（例えば、ファイルＩＤ）を取得することができる。ファイルジャーナルインタフェース２０２がそのコンテンツアイテムに関係がある更新又は情報をクライアントデバイス１５０に送信する場合に、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０がコンテンツアイテムのパスを含む、又は含まないコンテンツアイテムを識別するために使用することができる、コンテンツアイテムの識別子をクライアントデバイス１５０に提供することができる。
【０１３５】
前述されるように、操作４１２からのリビジョン３２２をジャーナル３１０に書き込む前に、ファイルジャーナルインタフェース２０２は、カーソル３２４Ｂが操作４１２と関連する各ネームスペース及び／又はコンテンツアイテムについてジャーナル３１０中の最新の状態又はリビジョンを反映するかどうかをチェックすることができる。幾つかの事例において、カーソル３２４Ｂがジャーナル３１０中の最新の状態又はリビジョンを反映することを確認した後に、ファイルジャーナルインタフェース２０２は、操作４１２から生成されるリビジョンがジャーナル３１０中の既存のリビジョンと競合しないことを確保する第二チェックも実行することができる。例えば、ジャーナル３１０においてネームスペース「１００」中のＳＪＩＤ「５」が「Ｆｉｌｅ５」の削除操作を表す場合に、クライアントデバイス１５０からのファイルジャーナルインタフェース２０２によって受信される操作４１２から発行されるＳＪＩＤ「１４」中に描かれる「Ｆｉｌｅ５」の編集リビジョン３２２は、「Ｆｉｌｅ５」がＳＪＩＤ「５」において削除された場合でも、「Ｆｉｌｅ５」を編集することを試みることによって競合を生じる。したがって、ファイルジャーナルインタフェース２０２は、この実施例において編集操作及びリビジョンを拒否し、編集操作が無効であることをクライアントデバイス１５０に通信することができる。ファイルジャーナルインタフェース２０２は、カーソル３２４Ｂを更新し、更新されたカーソルをクライアントデバイス１５０に提供し、必要に応じて「Ｆｉｌｅ５」（及びいずれかの他のコンテンツアイテム）についてジャーナル３１０中の最新の状態又はリビジョンのクライアントデバイス１５０に通知することができる。
【０１３６】
図４Ｃは、ネームスペース間操作の例示的な線形化の図を示す。ネームスペース間線形化、及びシャード間又はネームスペース間のリスト化は、クロック順序付けを介して実行されることができる。テーブル４５４Ａ、４５２Ｂ（合わせて「４５２」）は、線形化のためのネームスペース間操作のバッチを示す。テーブル４５４Ａ、４５２Ｂは、テーブル４５４Ａ、４５２Ｂ中の記録用のネームスペースを識別するためのネームスペース（ＮＳＩＤ）フィールドであるカラム４５６Ａ、４５８Ａと、カラム４５６Ａ、４５８Ａ中のそれぞれのネームスペース用のテーブル４５２Ａ、４５２Ｂ中のロウ又はＳＪＩＤを識別するためのＳＪＩＤフィールドであるカラム４５６Ｂ、４５８Ｂと、各ＳＪＩＤと関連する操作を識別するための操作フィールドであるカラム４５６Ｃ、４５８Ｃと、カラム４５６Ｃ、４５８Ｃ中の操作と関連するタイムスタンプを識別するためのクロックフィールドであるカラム４５６Ｄ、４５８Ｄとをそれぞれ含む。
【０１３７】
この実施例において、テーブル４５２Ａは、ＮＳＩＤ「１」についてのＳＪＩＤ「１００」及び「１０１」を描く。ＳＪＩＤ「１００」は、タイムスタンプ「１０００」において「ｆｏｏ．ｔｘｔ」をネームスペース「１」に追加する操作と関連付けられ、そしてＳＪＩＤ「１０１」は、タイムスタンプ「１００１」においてネームスペース「２」をマウントする操作と関連付けられる。テーブル４５２Ｂは、ＮＳＩＤ「２」についてのＳＪＩＤ「１」及び「２」を描く。ＳＪＩＤ「１」は、タイムスタンプ「５００」において「ｂａｒ．ｔｘｔ」をネームスペース「２」に追加する操作と関連付けられ、そしてＳＪＩＤ「２」は、タイムスタンプ「１００２」において「ｂａｒ．ｔｘｔ」を編集する操作と関連付けられる。
【０１３８】
リニアライザ（例えば、変換サービス２０４）は、テーブル４５２中の操作のバッチを取得し、カーソル（４６４）によって操作（４６２）の単一のストリームを発行することができる。リニアライザは、テーブル４５２中に少なくとも１つの操作を含むすべてのネームスペースを識別し、それぞれタイムスタンプ、ＮＳＩＤ、ＳＪＩＤに基づきすべてのネームスペースについての操作を線形化することができる。この実施例において、テーブル４５２中の操作のバッチは、テーブル４５４に示される操作のストリームに線形化する。
【０１３９】
テーブル４５４は、各操作のネームスペースを識別するためのＮＳＩＤフィールドを含むＮＳＩＤカラム４６０、テーブル４５４中の操作を識別するための操作フィールドを含む操作カラム４６２、及び各操作についてのカーソル状態を識別するためのカーソルフィールドを含むカーソルカラム４６４を含む。テーブル４５４中のロウ４５４Ａは、テーブル４５２Ａ中のネームスペース「１」のＳＪＩＤ「１００」からの追加操作を備える。ロウ４５４Ａについてのカーソルカラム４６４中のカーソル状態は、追加操作がテーブル４５２Ａに示されるネームスペース「１」中のＳＪＩＤ「１００」に対応することを示す、ネームスペース「１」及びＳＪＩＤ「１００」である。テーブル４５４中のロウ４５４Ｂは、ＮＳＩＤカラム４６０又は操作カラム４６２中に値を含まないが、この実施例において、ネームスペース「２」についてＳＪＩＤ「０」を追加する、ネームスペース間のカーソル状態を含む、カーソルカラム４６４中のカーソル状態を更新する。
【０１４０】
テーブル４５４中のロウ４５４Ｃは、テーブル４５２Ａに示されるネームスペース「２」中のＳＪＩＤ「１」からの追加操作を含む。ロウ４５４Ｃについてのカーソルカラム４６４中のカーソル状態は、ロウ４５４Ｃ中の追加操作と関連するネームスペース「１」及び「２」についてそれぞれＳＪＩＤ「１００」及び「１」を含む。示されるように、カーソル状態は、カーソルがネームスペース「１」中のＳＪＩＤ「１００」、及びネームスペース「２」中のＳＪＩＤ「１」にあることを示す。換言すれば、ネームスペース「１」中のロウ又はＳＪＩＤは、追加操作がネームスペース「１」の状態に影響しない場合に増加しないが、ネームスペース「２」中のロウ又はＳＪＩＤは、追加操作がネームスペース「２」中のリビジョンを表し、ネームスペース「２」の状態に影響する場合に１つ増加した。したがって、ロウ４５４Ｃ中のカーソル状態は、ネームスペース「２」中のＳＪＩＤ「１」における追加操作後に、ネームスペース「１」及びネームスペース「２」についてそれぞれのＳＪＩＤを追跡する。
【０１４１】
テーブル４５４中のロウ４５４Ｄは、ＳＪＩＤ「１０１」におけるマウント操作、及びテーブル４５２Ａにおけるネームスペース「１」を含む。マウント操作は、ネームスペース「２」をネームスペース「１」にマウントする。マウント操作は、ネームスペース「１」中のＳＪＩＤを「１００」から「１０１」に増加させるが、ネームスペース「２」中のＳＪＩＤを増加させない。その結果、ロウ４５４Ｄについてのカーソルカラム４６４中のカーソル状態は、ネームスペース「１」についてＳＪＩＤ「１０１」を含み、ネームスペース「２」についてＳＪＩＤ「１」を維持する。このカーソル状態は、ネームスペース「１」及び「２」における状態及び／又は順序を反映する。
【０１４２】
テーブル４５４中のロウ４５４Ｅは、マウント及び編集操作のそれぞれのタイムスタンプに従い、ネームスペース「１」中のＳＪＩＤ「１０１」におけるマウント操作後である、テーブル４５２Ａ中のＳＪＩＤ「２」及びネームスペース「２」における編集操作を含む。ロウ４５４Ｅのカーソルカラム４６４中のカーソル状態は、ＳＪＩＤ「１０１」におけるネームスペース「１」についてのカーソル状態を維持するが、ＳＪＩＤ「２」へのネームスペース「２」についてのカーソル状態を増加させる。
【０１４３】
テーブル４５４中に示されるように、操作４６２は、ネームスペース「１」及び「２」にわたる因果関係及びタイムスタンプに基づき線形化される操作のストリームとしてリスト化される。操作４６２をテーブル４５４中で線形化してネームスペース間の因果関係及び連鎖を反映すると、操作４６２をサーバファイルジャーナル１４８中のリビジョン（例えば、ジャーナル３１０中のリビジョン３２２）に変換し、サーバファイルジャーナル１４８に書き込むことができる。
【０１４４】
例えば、サーバファイルジャーナル１４８中のネームスペース「１」についてのジャーナルは、「ｆｏｏ．ｔｘｔ」をネームスペース「１」に追加する追加操作を表すＳＪＩＤ「１００」におけるリビジョン、及びネームスペース「２」をネームスペース「１」上にマウントするマウント操作を表すＳＪＩＤ「１０１」におけるリビジョンを含むように更新されることができる。さらに、サーバファイルジャーナル１４８中のネームスペース「２」についてのジャーナルは、「ｂａｒ．ｔｘｔ」をネームスペース「２」に追加する追加操作を表すＳＪＩＤ「１」におけるリビジョン、及びネームスペース「２」上の「ｂａｒ．ｔｘｔ」を編集する編集操作を表すＳＪＩＤ「２」におけるリビジョンを含むように更新されることができる。
【０１４５】
ネームスペースビュー及びスナップショット
図５Ａは、コンテンツ管理システム１１０によって最新のネームスペースビューを構築するための例示的なプロセスを示す。最初にコンテンツ管理システム１１０は、ネームスペースビューを作成するために最も効率的なメカニズムを決定する（５０２）ことができる。
【０１４６】
第一の方法は、サーバファイルジャーナル中の任意のポイントを選択して、そのポイントからネームスペースについて読み出すこと、そして時間内にそのポイントにおいてネームスペース中のすべてのパスを識別することである。上述されるように、サーバファイルジャーナル１４８は、コンテンツアイテムへのリビジョンを記述するロウのコレクションである。これらのロウは、ネームスペース識別子及びサーバファイルジャーナル識別子によって編成される。ネームスペース識別子及びサーバファイルジャーナル識別子（ｎｓ＿ｉｄ、ｓｊ＿ｉｄ）の組み合わせは、サーバファイルジャーナル１４８中の特定のロウ、及び識別されるネームスペース内の特定のリビジョンに対応する。コンテンツ管理システム１１０は、サーバファイルジャーナル１４８中の最近のロウのときに、又はこの最近のロウの前に、特定のネームスペースＩＤについてサーバファイルジャーナル１４８から読み出す（５０４）ことができる。サーバファイルジャーナル１４８中のこれらのリビジョンは、最新のタグによってフィルタリングされることができ、いずれかの特定のパスへの最後のリビジョンである場合にサーバファイルジャーナル１４８中のロウを識別する。その結果、適用される最新のタグを含む所定のネームスペースについてのサーバファイルジャーナル１４８のすべてのロウを読み出すことにより、所定のネームスペースについてのすべてのファイルパスを識別する、リビジョンのリストをもたらす。これらのファイルパスをサーバファイルジャーナル１４８のエントリから抽出し（５０８）、これらのファイルパスを使用してネームスペースビューのディレクトリ構造を構築する（５１０）ことができる。
【０１４７】
第二の方法は、コンテンツストレージ１４２中のネームスペースの要約されたスナップショットを時間内に最近のポイントに格納する、コンテンツストレージサービス１１６によって提供されるスナップショットサービスから読み出すことである。このスナップショットサービスは、以下により詳細に記述されるが、前置きとして、スナップショットサービスは、時間内に最近のポイントに対して、ネームスペースの要約されたビュー（その中にすべてのコンテンツアイテムを含む）を格納する。大きなネームスペースは、複数のディスク経由でシャード化される必要がある場合があり、シャード名は、そのシャード上に格納される各ファイルパスを識別するハッシュを含むことができる。シャード名にパス情報を格納する利点は、シャードがファイルパスを抽出するために開かれる必要がないことであり、使用者は、スナップショットサービスの使用時に、ファイルパス情報を使用して使用者が探しているシャード（複数可）のみを開くことができることである。各スナップショットは、特定のサーバファイルジャーナルＩＤ（ｎｓ＿ｉｓ、ｓｊ＿ｉｄ）における特定のネームスペースについて最新のものである。
【０１４８】
図５Ａに戻り、ネームスペースについてのファイルパスをスナップショットサービスから抽出する（５０６）ことができ、これらからのファイルパスを使用して、ネームスペースビューのディレクトリ構造を構築する（５１０）。
【０１４９】
コンテンツ管理システム１１０は、最も効率的なメカニズムである可能性が高いメカニズムをヒューリスティックに判定する（５０２）ことができる。ネームスペースがあまりアクティブではないため、いずれかの所与のコンテンツアイテムについてサーバファイルジャーナル１４８中のリビジョンのロウが多すぎない場合に、コンテンツ管理システムは、サーバファイルジャーナル方法が好ましいと決定することができる。ただし、ネームスペースが非常にアクティブである場合に、又はある他の因子によって、スナップショットサービスから読み出すのがより効率的であるとコンテンツ管理システム１１０に判定させる場合に、その方法を使用することができる。
【０１５０】
両方のメカニズムは、抽出されたファイルパスを使用して、過去の特定の時点についてのネームスペースビューのディレクトリ構造を構築する（５１０）ことをもたらす。サーバファイルジャーナル方法において、コンテンツ管理システムは、所与のサーバファイルジャーナルＩＤのときに、又はこのＩＤの前に、エントリをサーバファイルジャーナル１４８から読み出し、スナップショット方法において、これらのパスは、所与のサーバファイルジャーナルＩＤの時点で最新であったスナップショットから抽出された。その結果、コンテンツ管理システム１１０は、上述されるようにサーバファイルジャーナルエントリ又はスナップショットサービスからパスが抽出されたときに使用されたサーバファイルジャーナルＩＤの後であるサーバファイルジャーナル１４８中のロウに格納されるリビジョンを処理する（５１２）ことによって、ネームスペースビューをより最新の状態にすることができる。
【０１５１】
上述されるようなことから、ここでネームスペースビューを要求するユーザアカウントについてビューがフィルタリングされる必要がある特定のネームスペースの現在のビューをサーバが含むので、所与のユーザアカウントは、ネームスペース中のすべてのコンテンツアイテムを閲覧することが不可能である場合がある。コンテンツ管理システムは、原理を使用するネームスペース中のユーザアカウントについてのアクセスが上記の図４に関して記述すると判定する（５１４）ことができ、ユーザアカウントについてのアクセスパーミッションに従い構築されたネームスペースビューをフィルタリングする（５１６）ことができる。コンテンツ管理システム１１０は、フィルタリングされたネームスペースビューを２つのクライアントデバイス１５０に送信して、リモートツリーを構築する（５１８）ことができる。
【０１５２】
クライアントデバイス１５０は、そのローカルツリーを更新し、リモートツリーにマッチングさせる（５２０）ことができる。そのローカルツリーを更新するときに、新規のディレクトリを作成することは、比較的に容易なタスクであるが、コンテンツアイテムを格納することは、大量のデータをダウンロードすることを必要とする場合がある。幸いなことに、クライアントデバイス上に既に格納されている、いずれかのコンテンツアイテムは、ダウンロードされる必要がない。クライアントデバイス１５０は、削除されたコンテンツアイテムについてのブロック、及びこれらのコンテンツアイテムについてのコメントを含む、クライアントデバイス１５０上のブロックキャッシュからのものを使用してコンテンツアイテムを再作成することができる。これらの既にダウンロードされたブロックを使用することは、ブロックをダウンロードすることよりもより効率的である。しかしながら、ブロックキャッシュ中にみいだされない、いかなるブロックもサーバからダウンロードされる（５２４）必要がある。
【０１５３】
図５Ａに示されるプロセスは、編成ディレクトリ５３２にマウントされる各ネームスペースについて繰り返されることができる。
【０１５４】
図５Ｂは、共有ディレクトリ５３２のユーザ（ユーザ１）のビュー（５３０）を構築するために使用される例示的な情報を示す。いずれかのネームスペースについて、図５Ａに関して記述されるネームスペースビュービルダープロセスは、ユーザ１のアクセス権に従いフィルタリングされるネームスペースについて抽出されたパスをもたらすことができる。ビュー５３０は、ユーザ１のユーザアカウントフォルダ５３４についてのネームスペース中のパスを示す。これを使用して、ネームスペースについてのディレクトリツリーを決定することができ、このプロセスを各ネームスペースに対して繰り返すことがきる。各ネームスペースは、マウントテーブルからの情報に基づき編成ディレクトリ内に位置し得る。
【０１５５】
ユーザ１についてのビュー５３０は、ユーザ１の視点からコンテンツ管理システム１１０上にネームスペース及び共有フォルダのビューを提供する。図示されるように、ビュー５３０は、コンテンツ管理システム１１０上で他のユーザアカウントに可視である、ユーザ１についてのユーザアカウントフォルダ５３４、及び共有フォルダ５４０を含む。
【０１５６】
コンテンツ管理システム１１０は、アクセスなし（ユーザアカウントはフォルダにアクセスする、又はこのフォルダを見ることができない）、ビュー名のみ（ユーザアカウントがフォルダの存在を閲覧することを可能にする）、トラバーサル（ユーザアカウントがフォルダの存在を閲覧することを可能にしてフォルダを開くが、ユーザアカウントが所定のフォルダ（複数可）もしくはコンテンツアイテム（複数可）以外の、いずれかのフォルダ（複数可）、又はフォルダを含むコンテンツアイテム（複数可）を閲覧することを不可能にする）、読み出しアクセス（閲覧すること、及び開くことができるが、いかなるコンテンツアイテムも変更する、又はフォルダに書き込むことができない）、書き込みアクセス（フォルダ又はコンテンツアイテムを修正することができる）などを含む、様々なアクセスレベルを提供することができる。幾つかの事例において、これらのアクセスレベルをコンテンツアイテム管理システム１１０が使用して、フォルダ（ユーザ１のこれらのような）をクライアントデバイス１５０と同期させないと判定することができる。これらのような事例において、ユーザ１についてのクライアントデバイス１５０は、他のユーザアカウントフォルダの存在に気づかない可能性がある。
【０１５７】
したがって、これらのアクセスレベルは、ユーザ１が見る、アクセスする、ナビゲートする、修正することなどができる、フォルダを含むコンテンツアイテムを判定することができる。例えば、ビュー５３０において、共有フォルダ５４０は、機密共有フォルダ５４２を含む。機密共有フォルダ５４２は、機密共有フォルダ５４２へのアクセスを有さないディレクトリ５３２のメンバーがみることができる機密フォルダであるが、機密共有フォルダ５４２へのアクセスを有さないディレクトリ５３２のこれらのようなメンバーは、機密共有フォルダ５４２中のコンテンツアイテムをみることができない場合がある。
【０１５８】
幾つかの例において、一箇所に合わせて保存される完全なネームスペースを含むことが有益であることができる。例えば、ネームスペースが新規のアカウントと共有されているとき、新規のクライアントデバイスがユーザアカウントに追加されるとき、又は編成ディレクトリに移行するときなどの、すべてのネームスペースが構築される必要があるときの例において、サーバファイルジャーナル１４８から各リビジョンを読み出し、またコンテンツストレージサービス１１６を使用してコンテンツストレージ１４２からコンテンツアイテムを構成するブロックを抽出する代替に、一箇所からすべてのネームスペースをダウンロードすることがより効率的であることができる。
【０１５９】
その結果、コンテンツストレージサービス１１６は、ある時点で、又はより具体的に、そのネームスペースについてのサーバジャーナル識別子（ＳＪＩＤ）の時点で、ネームスペースビューを格納するスナップショットサービスを含むことができる。ネームスペースビューは、そのネームスペース（ＮＳＩＤ）においてネームスペースのコンテンツの圧縮されたスナップショットである。このスナップショットは、ネームスペースのコンテンツを含み、ユーザアカウントのパーミッション、又は隠しファイルなどについてフィルタリングされない場合がある。ネームスペースのスナップショットは、大きく、ページに分割される必要がある場合がある。各ページは、ネームスペース内のパスの表現（例えば、ネームスペースを構成する１サブセットのパス）を含むことができる。
【０１６０】
各ページが圧縮されることから、コンテンツ管理システム１１０上でページを開くことは、そこで大容量のメモリを潜在的に利用する可能性があるため、回避されることが好ましい場合がある。その結果、幾つかの事例において、各パス、及びこのパスのプレフィックスは、ハッシュ化されることができ、これらのハッシュは、スナップショットページの名前に格納されることができる。したがって、そのパスを見つけるためにスナップショットのページを開くことなく、パスのハッシュを検索することが可能である。また、この最適化は、パス名をスナップショットページから抽出してネームスペースについてディレクトリツリーを再構築する場合に逆に機能する。
【０１６１】
ディレクトリツリーを再構築するために、これらのパスをトポロジー的にソートすることができる（ｐａｒｅｎｔ＿ｐｒｅｆｉｘ＿ｈａｓｈ→ｐａｔｈ＿ｈａｓｈ）。依存関係のないパスの初期セットは、ネームスペースのルートの子であり、フルパス（例えば、「／ｆｏｏ／ｂａｒ／ｂａｚ」）は、このパスのセットから再構築されることができる（例えば、「／ｆｏｏ」、「／ｆｏｏ」→「／ｆｏｏ／ｂａｒ」、「／ｆｏｏ／ｂａｒ」→「／ｆｏｏ／ｂａｒ／ｂａｚ」）。このセットに沿って各パス状態は、そのパスの最後のコンポーネント、例えば、「ｆｏｏ」、「ｂａｒ」、「ｂａｚ」を含む。
【０１６２】
上述されるように、ネームスペースのスナップショットは、ユーザアカウントアクセスパーミッションについてフィルタリングされていない。代替に、ディレクトリツリーをネームスペースから構築した後に、ディレクトリツリー中のこれらのパスは、ユーザアカウントアクセスパーミッションに従いフィルタリングされることができる。ユーザアカウントアクセスパーミッションをコンテンツ管理システム１１０から取得することができる。ユーザアカウントがアクセスを有する各パスは、例えば、以下のように、フィルタのセットを表すことが、許可されるように指定されることができる。
ＡＬＬＯＷ＿ＯＮＬＹ（ハッシュ１、ハッシュ２、ハッシュ３、．．．）
ＡＬＬＯＷ＿ＭＯＵＮＴ（ハッシュ４、ハッシュ５、．．．）
【０１６３】
各フィルタは、フルパスハッシュを含むことができる。フィルタが指定される場合、コンテンツストレージサービスは、フルトポロジカルソートを行わずに実行時にフィルタでパスを除くことができる。これにより、スナップショットの単一ページ中のデータのみをみて、フィルタをそのページに適用することを可能にする。
【０１６４】
ツリーデータ構造
図６Ａは、様々な実施形態による、ツリーデータ構造の実施例を示す。ツリーデータ構造は、クライアントデバイスに格納され、クライアント同期サービス１５６などのクライアント同期サービスによって管理されることができる。図６Ａにおいて、リモートツリー６１０、同期ツリー６２０、及びローカルツリー６３０を含む、ツリーデータ構造を示す。
【０１６５】
リモートツリー６１０は、クライアントデバイスから遠隔に格納される（例えば、コンテンツ管理システムのサーバ上の）サーバ状態又はコンテンツアイテムの状態を表す。ローカルツリー６３０は、クライアントデバイス上でローカルに格納される、ファイルシステム状態、又は対応するコンテンツアイテムの状態を表す。同期ツリー６２０は、ローカルツリー及びリモートツリーについてのマージベースを表す。マージベースは、ローカルツリー及びリモートツリーの共通祖先、又はローカルツリーとリモートツリーとの間で最後に既知の同期した状態であると考えられることができる。
【０１６６】
各ツリーデータ構造（例えば、リモートツリー６１０、同期ツリー６２０、又はローカルツリー６３０）は、１つ以上のノードを含むことができる。各ノードは、１つ以上の子ノードを含むことができ、親子関係は、エッジによって表される。例えば、リモートツリー６１０は、ノード６０２及び６０４を含む。ノード６０２は、ノード６０４の親であり、ノード６０４は、ノード６０２の子である。この親子関係は、エッジ６０６によって表される。ルートノード６０２などのルートノードは、親ノードを含まない。ノード６０４などの葉ノードは、子ノードを含まない。
【０１６７】
ツリーデータ構造中の各ノードは、コンテンツアイテム（例えば、ファイル、ドキュメント、フォルダなど）を表すことができる。例えば、ルートノード６０２は、コンテンツ管理システムと関連するルートフォルダを表すことができ、ノード６０４は、そのルートフォルダに位置しているファイル（例えば、「Ｆｏｏ．ｔｘｔ」と称されるテキストファイル）を表すことができる。ツリーデータ構造中の各ノードは、例えば、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子（「ＤｉｒＦｉｌｅＩＤ」）、コンテンツアイテムについてのファイル名、コンテンツアイテムについてのファイル識別子、及びコンテンツアイテムについてのメタデータなどのデータを含むことができる。
【０１６８】
上述されるように、クライアント同期サービスは、３つのツリー（例えば、リモートツリー６１０、同期ツリー６２０、及びローカルツリー６３０）がすべて同一であるときに、クライアントデバイスのサーバ状態及びファイルシステム状態が同期していると判定することができる。換言すれば、ツリーは、それらのツリー構造、及びそれらが表現する関係が同一であり、またそれらのノードに含まれるデータが同様に同一であるときに同期している。一方、３つのツリーが同一ではない場合に、これらのツリーは、同期していない。図３に示される例示的なシナリオにおいて、リモートツリー６１０、同期ツリー６２０、及びローカルツリー６３０は、同一であり、同期している場合が示されているため、結果として、サーバ状態及びファイルシステム状態は、同期している。
【０１６９】
ツリーデータ構造を使用する変更の追跡
図６Ｂは、様々な実施形態による、ツリーデータ構造の実施例を示す。この実施例は、図６Ａに示されるシナリオなど、前に同期した状態の後のシナリオを示し、ツリーがもはや同期していないようにコンテンツアイテムを修正する、追加のアクションをツリーに表されるコンテンツアイテム上で実行する。同期ツリー６２０は、前の既知の同期した状態の表現を維持し、クライアント同期サービスによって、サーバ状態とファイルシステム状態との間の差異を識別するだけではなく、コンテンツ管理システム及び／又はクライアントデバイスについての操作を生成して実行し、サーバ状態及びファイルシステム状態が同期するように収束させるために使用されることができる。
【０１７０】
例えば、ユーザ（クライアントデバイスと関連するユーザと同一のユーザ、又はコンテンツアイテムへのアクセスを有する異なるユーザ）は、コンテンツ管理システムによって格納される「ｆｏｏ．ｔｘｔ」コンテンツアイテムへの修正をすることができる。このコンテンツアイテムは、リモートツリー６１０中のノード６０４によって表される。リモートツリー６１０に示される修正は、ｆｏｏ．ｔｘｔコンテンツアイテムの除去（例えば、コンテンツ管理システムによって管理されるスペースからのコンテンツアイテムの除去）又は削除である。これらの修正は、例えば、別のクライアントデバイス上で実行されることができ、これらの修正は、コンテンツ管理システムによって格納されるコンテンツアイテム、又はウェブブラウザを介してコンテンツ管理システムによって格納されるコンテンツアイテムに同期した。
【０１７１】
コンテンツ管理システム上で変更を行うときに、コンテンツ管理システムは、行われる変更を指定する修正データを生成し、この修正データをクライアントデバイス上のクライアント同期サービスに送信する。クライアント同期サービスは、修正データに基づきコンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーを更新する。例えば、リモートツリー６１０において、ｆｏｏ．ｔｘｔコンテンツアイテムを表すノード６０４が削除された場合を示す。
【０１７２】
クライアント同期サービスは、リモートツリー６１０と同期ツリー６２０との間の差異を識別することができ、結果として、コンテンツ管理システムにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態が同期しているようにそれらサーバ状態及びファイルシステム状態を収束させるように構成される、クライアントデバイス上に格納されるコンテンツアイテムについての操作シーケンスをさらに生成して、実行することができる。
【０１７３】
追加的に、又は代替的に、ユーザ（コンテンツ管理システムにおける修正と関連するユーザと同一のユーザ、又はコンテンツアイテムへのアクセスを有する異なるユーザ）は、コンテンツ管理システムと関連付けられるクライアントデバイス上にローカルに格納されるコンテンツアイテムへの修正を行うことができる。例えば、ユーザは、フォルダ「／ｂａｒ」を「／ｒｏｏｔ」フォルダに追加し、「Ｈｉ．ｄｏｃ」ドキュメントを「／ｂａｒ」フォルダに追加することができる。
【０１７４】
変更をクライアントデバイス上で行うときに、クライアントデバイス（例えば、クライアント同期サービス１５６又はクライアントアプリケーション１５２）は、行われる変更を指定する修正データを生成し、修正データをクライアントデバイス上のクライアント同期サービスに渡す。クライアント同期サービスは、修正データに基づきクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態を表すローカルツリーを更新する。例えば、ローカルツリー６３０において、ノード６１２及びノード６１４が追加される場合を示す。ノード６１２及びノード６１４は、それぞれ「／ｂａｒ」フォルダ及び「Ｈｉ．ｄｏｃ」ドキュメントを表す。
【０１７５】
クライアント同期サービスは、ローカルツリー６３０と同期ツリー６２０との間の差異を識別し、結果として、クライアントデバイスにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態が同期しているようにそれらサーバ状態及びファイルシステム状態を収束させるように構成されるコンテンツ管理システムによって格納されるコンテンツアイテムについての操作シーケンスをさらに生成することができる。この操作シーケンスを実行のためにコンテンツ管理システムに送信することができる。
【０１７６】
図６Ｂに示されるように、クライアントデバイス上に格納されるコンテンツアイテム、及びコンテンツ管理システムによって格納されるコンテンツアイテムへの修正は、実質的に同時に、又は特定の期間内に起こる可能性がある。これらの修正をツリーデータ構造に反映し、クライアント同期サービスによって使用して、クライアントデバイスについての、またコンテンツ管理システムについての操作シーケンスを並列して生成することができる。他のシナリオにおいて、しかしながら、修正は、同じ期間内に必ずしも起こらない場合があり、操作シーケンスは、必要に応じた方式において生成されることができる。さらに、図６Ｂがコンテンツアイテムを追加するための、またコンテンツアイテムを削除するためのシナリオを示すが、コンテンツアイテムを編集する、リネームする、コピーする、又は移動させるなどの他のタイプの修正をもサポートする。
【０１７７】
様々な実施形態に従い、２つのツリーデータ構造間の差異を識別すること、そして操作を生成することは、両方のツリーデータ構造中の各ノードをチェックすること、そしてアクションがこのノード上で実行されているかどうかを判定することを伴うことがある。これらのアクションは、例えば、ノードの追加、ノードの削除、ノードの編集、又はノードの移動を含むことができる。次いで、これらのアクションを使用して、サーバ状態及びファイルシステム状態を収束させるように構成される操作シーケンスを生成することができる。
【０１７８】
例えば、２つのツリーデータ構造が同期ツリー及びリモートツリーである場合に、クライアント同期サービスは、例えば、同期ツリー中のすべてのノードのファイル識別子を要求することによって、同期ツリー中の各ノードを識別することができる。同期ツリー中の各ノード、又はこのノードについてのファイル識別子のために、クライアント同期サービスは、ノード又はファイル識別子もリモートツリー中にあるかどうかを判定することができる。リモートツリー中に見つからない同期ツリー中のノード又はファイル識別子は、ノードがリモートツリーによって表されるサーバ状態から削除されていることを示すことができる。その結果、クライアント同期サービスは、削除アクションがリモートツリー上に発生したと判定することができる。ノード、又はこのノードについてのファイル識別子がリモートツリー中に見つかる場合に、クライアント同期サービスは、リモートツリー中のノードが編集されているか、移動しているかをチェックすることができる。
【０１７９】
リモートツリー中のノードが同期ツリー中のノードに関して編集されているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについてのメタデータを、リモートツリー中の対応するノード（例えば、同一のファイル識別子を有するノード）についてのメタデータと比較することができる。メタデータは、ノードによって表されるコンテンツアイテムが編集されているかどうかを判定するために使用され得る情報を含むことができる。例えば、メタデータは、コンテンツアイテム中のデータに基づき生成される１つ以上のハッシュ値、又はそれらの一部を含むことができる。メタデータは、追加的に、又は代替的に、コンテンツアイテムについての、サイズ値、最後に修正された値、又は他の値を含むことができる。クライアント同期サービス中のノードについてのメタデータを、リモートツリー中のノードについてのメタデータと比較することができる。メタデータがマッチングしない場合、コンテンツアイテムの編集は、リモートツリーによって表されるサーバ状態において編集されている。その結果、クライアント同期サービスは、編集アクションがリモートツリー上のノードに発生していると判定することができる。メタデータがマッチングする場合に、編集は発生しなかった可能性がある。
【０１８０】
リモートツリー中のノードが移動しているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについての位置を、リモートツリー中の対応するノード（例えば、同一のファイル識別子を含むノード）についての位置と比較することができる。この位置は、例えば、ノードが位置しているパス、ファイル名、及び／又はノードの親のファイル識別子を指定するディレクトリファイル識別子（「ＤｉｒＦｉｌｅＩＤ」）を含むことができる。これらの位置がマッチングする場合に、移動は、起こらなかった可能性がある。一方、これらの位置がマッチングしない場合に、コンテンツアイテムの移動は、リモートツリーによって表されるサーバ状態に起こった可能性がある。その結果、クライアント同期サービスは、移動アクションがリモートツリー上のノードに対して発生したと判定することができる。
【０１８１】
ノードをリモートツリーに追加したかどうかを判定するために、クライアント同期サービスは、同期ツリー中に見つからない、リモートツリー中のいずれかのノード又はファイル識別子を識別することができる。ノード又はファイル識別子がリモートツリー中に見つかり、同期ツリー中に見つからない場合に、クライアント同期サービスは、このノードの追加アクションがサーバ状態を表すリモートツリー上に発生したと判定することができる。
【０１８２】
上記の実施例が同期ツリー及びリモートツリーに関して記述されているが、他の実施形態において、同様のプロセスは、同期ツリーとローカルツリーとの間の差異を識別し、ファイルシステム状態を表すローカルツリー上に発生したアクションを判定するために、同期ツリー及びローカルツリーに関して発生することができる。
【０１８３】
ファイルＩＤ割り振り及び再割り当て
図６Ｃは、クライアントデバイス１５０において作成され、クライアントデバイス１５０とコンテンツ管理システム１１０との間で同期する、コンテンツアイテムに対して一意の識別子を割り振り、再割り当てするための例示的な方法を示す。本明細書に記述される、特定の順序で、ある特定のステップ及び操作を備える、これらの方法及びプロセスを示すことができるが、同様の、もしくは代替の順序で、又は並列して実行される、追加の、少数の、又は代替のステップ及び操作は、特に明示されない限り、様々な実施形態の範囲内にある。この方法は、例えばクライアントデバイス１５０上のクライアント同期サービス１５６などの、システムによって実装されることができる。
【０１８４】
ステップ６４０において、クライアントデバイス１５０は、コンテンツアイテムを作成する。ステップ６４２において、クライアントアプリケーション１５２（例えば、クライアント同期サービス１５６を介して）は、ステップ６４０において作成されるコンテンツアイテムに基づきコンテンツアイテムイベントを検出する。
【０１８５】
ステップ６４４において、クライアントアプリケーション１５２は、コンテンツアイテムがコンテンツ管理システム１１０からの一意の識別子（例えば、ファイルＩＤ）を含むかどうかを判定する。この一意の識別子は、コンテンツ管理システム１１０に割り当てられる、及び／又は格納される、グローバルに一意の識別子を指すことができる。コンテンツ管理システム１１０は、コンテンツ管理システム１１０上に格納されるコンテンツアイテムに対して一意の識別子を割り当て、コンテンツ管理システム１１０において各コンテンツアイテムを、またクライアントデバイス（例えば、クライアントデバイス１５０）上でいずれかのそれぞれの同期したコピーを、一意に識別することができる。幾つかの事例において、一意の識別子は、一意の識別子に割り当てられるコンテンツアイテムに対応するコンテンツ管理システム１１０上で、特定のネームスペース（複数可）と関連付けられることができる。しかしながら、他の事例において、一意の識別子は、ネームスペースに依存しない、又はネームスペースから独立していることができる。
【０１８６】
さらに、コンテンツ管理システム１１０によって割り当てられる一意の識別子は、コンテンツ管理システム１１０によって作成され、クライアントデバイスにおいてオペレーティングシステムによって生成されるローカルファイルシステム識別子又はローカル識別子のような、クライアントデバイスに格納される、及び／又は生成される特定のコンテンツアイテムについてクライアントデバイスによって生成されるいかなるローカルコンテンツ識別子とも異なることができる。
【０１８７】
コンテンツアイテムがコンテンツ管理システム１１０からの一意の識別子を既に含むとクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、下記のステップ６５０に進む。コンテンツアイテムがコンテンツ管理システム１１０からの一意の識別子を含まないとクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、ステップ６４６に進み、そのクライアントアプリケーションは、コンテンツアイテムが別のコンテンツアイテムからの一意の識別子を継承するかどうかを判定する。幾つかの事例において、コンテンツアイテムが一意の識別子を継承するかどうかを判定する、このプロセスは、「パス親化」を指し、コンテンツアイテムのパスを別のコンテンツアイテムのパスと比較することを伴う。
【０１８８】
例えば、ステップ６４０においてパス「／Ｒｏｏｔ／Ｄｉｒｅｃｔｏｒｙ１／」についてコンテンツアイテム「Ａ」を作成し、「１２３」の一意の識別子を含む前のコンテンツアイテムが「／Ｒｏｏｔ／Ｄｉｒｅｃｔｏｒｙ１／」に以前に、又は最近に格納されたとクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、新規のコンテンツアイテム、コンテンツアイテム「Ａ」が「１２３」の一意の識別子を含む前のコンテンツアイテムのバージョンもしくはコピーであると、又は「／Ｒｏｏｔ／Ｄｉｒｅｃｔｏｒｙ１／」から移動したと判定することができ、コンテンツアイテム「Ａ」は、「Ｒｏｏｔ／Ｄｉｒｅｃｔｏｒｙ１」に再追加される、又はこの「Ｒｏｏｔ／Ｄｉｒｅｃｔｏｒｙ１」に移動して戻るコンテンツアイテムを表すため、前のコンテンツアイテムの一意の識別子「１２３」を継承する。
【０１８９】
幾つかの事例において、クライアントアプリケーション１５２は、クライアントアプリケーション１５２がコンテンツアイテムの前のバージョン又はコピーであるとみなす、別のコンテンツアイテムからの一意の識別子をコンテンツアイテムが継承すると判定する。例えば、クライアントデバイス上で特定の位置（例えば、パス）中に格納されるコンテンツアイテムを編集する、又は修正するときに、幾つかのアプリケーション又はオペレーティングシステムは、コンテンツアイテムをクライアントデバイス上の一時的な位置に移動させることができ、次に、編集された、又は修正されたコンテンツアイテムをコンテンツアイテムの特定の位置に追加し直すことができる。したがって、コンテンツアイテムが作成されたが一意の識別子を含んでいないことをクライアントアプリケーション１５２が検出し、作成されたコンテンツアイテムと同一のパス及び／又は名前を以前に含んだ別のコンテンツアイテムを識別するときにもまた、クライアントアプリケーション１５２は、他のコンテンツアイテムが移動したと判定することができ、新規のコンテンツアイテムと同一のコンテンツアイテムに関連する、又はこの同一のコンテンツアイテムを表す。したがって、クライアントアプリケーション１５２は、新規のコンテンツアイテムが他のコンテンツアイテムの一意の識別子を継承すると判定することができる。
【０１９０】
幾つかの実施例において、クライアントアプリケーション１５２は、コンテンツアイテムが関連した、同等の、相互のバージョンであるとみなされるなどのいずれかの理由により、コンテンツアイテムのメタデータを、クライアントデバイス１５０上の他のコンテンツアイテムのメタデータと比較し、コンテンツアイテムが別のコンテンツアイテムの一意の識別子を継承するかどうかを判定することができる。コンテンツアイテムを比較するために使用されるメタデータは、例えば、それぞれのコンテンツアイテムのパス、ファイル名、ディレクトリ識別子、ディレクトリ名、ネームスペース識別子（ＮＳＩＤ）、ジャーナル識別子（ＳＪＩＤ）、リビジョン識別子などを含むことができる。２つのコンテンツアイテムの幾つかの、又はすべてのメタデータのマッチは、新規に作成されたコンテンツアイテムが他のコンテンツアイテムの一意の識別子を割り当てられる判定をトリガすることができる。例えば、ステップ６４０において作成されるコンテンツアイテム「Ａ」がクライアントデバイス１５０においてコンテンツアイテム「Ｂ」と同一のパス、ファイル名、ディレクトリ識別子、ＮＳＩＤ、及び／又はＳＪＩＤを含む場合に、クライアントアプリケーション１５２は、コンテンツアイテム「Ｂ」の現在の、一意の識別子をコンテンツアイテム「Ａ」に割り当てることができる。
【０１９１】
ステップ６４６においてコンテンツアイテムが別のコンテンツアイテムの一意の識別子を継承するとクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、以下にさらに記述されるステップ６５０に進む。ステップ６４６においてコンテンツアイテムがクライアントデバイス１５０上で別のコンテンツアイテムから一意の識別子を継承しない（例えば、それが同一のパス、ファイル名、及び／又はメタデータのいずれかの他の部分と関連するコンテンツアイテムを見つけられないため）とクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、それがコンテンツ管理システム１１０からコンテンツアイテムについて一意の識別子を取得するステップ６４８に進む。
【０１９２】
ステップ６４８において、クライアントアプリケーション１５２は、コンテンツ管理システム１１０からコンテンツアイテムについて一意の識別子を要求し、コンテンツ管理システム１１０によってコンテンツアイテムに割り当てられる一意の識別子を受信することができる。一意の識別子は、前に説明されるような、コンテンツ管理システム１１０にわたり一意であることができる。したがって、一意の識別子を使用して、コンテンツアイテムをコンテンツ管理システム１１０及びクライアントデバイス１５０において一意に識別することができる。
【０１９３】
ステップ６５０において、コンテンツアイテムが一意の識別子を含むときに、クライアントアプリケーション１５２は、コンテンツアイテムについての一意の識別子を記録する。例えば、クライアントアプリケーション１５２は、一意の識別子をコンテンツアイテムについてのメタデータとして書き込むことができる。幾つかの事例において、クライアントアプリケーション１５２は、拡張属性（ｘａｔｔｒ）などの属性として、一意の識別子をコンテンツアイテムにアペンドする、又は一意の識別子をコンテンツアイテムに割り当てる。
【０１９４】
ステップ６５２において、クライアントアプリケーション１５２は、コンテンツアイテム用に記録される一意の識別子がコンテンツ管理システム１１０において一意であることを検証する。前述されるように、コンテンツ管理システム１１０は、識別子がコンテンツ管理システム１１０において各コンテンツアイテムを一意に識別することを可能にするために、コンテンツアイテムに割り当てられる識別子がコンテンツ管理システム１１０において一意であることを要求する場合がある。コンテンツ管理システム１１０は、一意の識別子を使用して、コンテンツアイテムを追跡し、管理し、同期させ、修正し、認識することができる。ステップ６５２において、この一意性属性をクライアントアプリケーション１５２が検証して、同一の識別子を１つより多いコンテンツアイテムに割り当てた結果として、識別子を意図せずに重複させること、又は競合もしくはエラーを生じることを防ぐことができる。
【０１９５】
一意の識別子の一意性を検証するために、クライアントアプリケーション１５２は、コンテンツアイテムと関連する一意の識別子のコンテンツ管理システム１１０に通知し、一意の識別子がコンテンツ管理システム１１０において実際に一意であるという、コンテンツ管理システム１１０からの検証又は肯定応答を要求することができる。クライアントアプリケーション１５２からコンテンツ管理システム１１０への検証又は肯定応答についての要求は、一意の識別子を識別することができ、コンテンツ管理システム１１０が一意性を検証することを援助することができる、いずれかの他の情報を含むことができる。例えば、幾つかの事例において、クライアントアプリケーション１５２からコンテンツ管理システム１１０への検証又は肯定応答についての要求は、コンテンツアイテムと関連するブロック又はブロックリスト、コンテンツアイテムの少なくとも一部のハッシュ、及び／又はコンテンツアイテムと関連する、パス、ディレクトリ識別子、ファイル名などのメタデータも含むことができる。
【０１９６】
コンテンツ管理システム１１０は、クライアントアプリケーション１５２から要求を受信し、コンテンツ管理システム１１０において一意の識別子を検索することができる。例えば、コンテンツ管理システム１１０は、一意の識別子を含むいずれかの記録についてサーバファイルジャーナル１４８にクエリを行うことができる。コンテンツ管理システム１１０が別のコンテンツアイテムに割り当てられる、及び／又はサーバファイルジャーナル１４８上の記録に含まれるマッチングする識別子を識別する場合に、コンテンツ管理システム１１０は、一意の識別子が一意ではない（少なくとも、それがこのコンテンツアイテム、及びコンテンツ管理システム１１０上のいずれかの他のコンテンツアイテムに関係がある場合に）と判定することができる。コンテンツ管理システム１１０は、一意の識別子が一意ではない、又は一意性テストに失敗したことをクライアントアプリケーション１５２に通知することができる。幾つかの事例において、コンテンツ管理システム１１０は、識別子が割り当てられている他のコンテンツアイテム（複数可）、及びこれらのコンテンツアイテムについてのいずれかの情報又はメタデータを識別することができる。
【０１９７】
コンテンツ管理システム１１０が別のコンテンツアイテムに割り当てられる、又はサーバファイルジャーナル１４８上の記録に含まれる、マッチングする識別子を識別しない場合に、コンテンツ管理システム１１０は、一意の識別子が実際に一意であることを肯定応答する、又は検証することができる。幾つかの事例において、コンテンツ管理システム１１０は、クライアントアプリケーション１５２に一意の識別子の一意性を肯定応答する前に、追加の検索又は検証を実行することができる。例えば、コンテンツ管理システム１１０は、コンテンツアイテムと関連するパス、ファイル名などのメタデータについてサーバファイルジャーナル１４８中の記録を検索することができる。
【０１９８】
ステップ６５４において、一意の識別子がコンテンツ管理システム１１０にわたり一意ではない（すなわち、一意性検証が失敗する）とクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、この識別子を含み、重複識別子を引き起こすコンテンツアイテムのうちの１つから識別子を取り除くことができる。例えば、クライアントアプリケーション１５２は、このコンテンツアイテムからの、又は同一の識別子を含むと判定される他のコンテンツアイテムからの識別子を除去する、又は割り当て解除することができる。幾つかの事例において、クライアントアプリケーション１５２は、そのコンテンツアイテムからの識別子を取り除くために、同一の識別子を含むコンテンツアイテムのうちの１つから識別子を含む属性（例えば、ｘａｔｔｒ）、メタデータ、又はタグを削除することができる。
【０１９９】
クライアントアプリケーション１５２が同一の識別子を含むコンテンツアイテムのうちの１つからこの識別子を取り除くと、クライアントアプリケーション１５２は、ステップ６４４に戻り、この識別子を取り除かれたコンテンツアイテムを処理する。ステップ６４４において、クライアントアプリケーション１５２は、識別子なしでコンテンツアイテムを処理し、ステップ６４４、６４６、６４８、６５０、６５２を通して続行し、このようなコンテンツアイテムについての一意の識別子を取得することができる。ステップ６４４、６４６、６４８、６５０、６５２からの論理及びヒューリスティックにより、クライアントアプリケーション１５２がコンテンツアイテムについて一意の識別子を取得して検証し、重複識別子を回避することが可能である。
【０２００】
幾つかの事例において、ステップ６４４、６４６、６４８、６５０、６５２を使用して、位置から移動した、又は削除されたコンテンツアイテムを復活させることもできる。例えば、コンテンツアイテムがクライアントデバイス１５０に再追加される、又は移動する必要がある場合に、クライアントアプリケーション１５２は、ステップ６４４、６４６、６４８、６５０、６５２を実行して、コンテンツアイテムについて一意の識別子を取得し、このコンテンツアイテムをコンテンツアイテムについての特定のパスに格納することができる。前に説明されるように、幾つかの実施例において、パス及び／又はコンテンツアイテム識別子は、コンテンツアイテムのパス又はファイル名と前に関連したコンテンツアイテムを分析することによって決定されることができる。
【０２０１】
ステップ６５６において、一意の識別子がコンテンツ管理システム１１０にわたり一意である（すなわち、一意性検証が成功する）とクライアントアプリケーション１５２が判定する場合に、クライアントアプリケーション１５２は、コンテンツアイテムをローカルツリー６３０に報告することができる。ここで、クライアントアプリケーション１５２は、コンテンツアイテムを表すノードをローカルツリー６３０に追加することができる。コンテンツアイテムについてのローカルツリー６３０中のこのノードは、一意の識別子に基づきコンテンツアイテムを識別することができ、コンテンツアイテムと関連する、パス、ディレクトリ識別子、ファイル名、タイムスタンプ、サイズ、ハッシュなどのような他のメタデータを含むことができる。
【０２０２】
ステップ６５８において、クライアントアプリケーション１５２は、コンテンツアイテムについての一意の識別子を含むコンテンツアイテムをコンテンツ管理システム１１０にアップロードすることができる。コンテンツアイテムをアップロードするときに、クライアントアプリケーション１５２は、コンテンツ管理システム１１０へのコンテンツアイテムを識別するために、一意の識別子を提供することができる。クライアントアプリケーション１５２は、コンテンツアイテム、一意の識別子、及びパス、ディレクトリ識別子、ファイル名、ネームスペース識別子、タイムスタンプなどのようないずれかの他のメタデータの実際のデータ又はブロック（例えば、２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ）をコンテンツ管理システム１１０に提供することができる。
【０２０３】
幾つかの事例において、クライアントアプリケーション１５２は、コンテンツストレージ１４２上のストレージのために、コンテンツアイテム（例えば、２２０）及び／又はこのコンテンツアイテムのブロック（例えば、２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ）をコンテンツストレージインタフェース２０６にアップロードし、サーバファイルジャーナル１４８においてクライアントデバイス１５０の位置を示すカーソル（例えば、３２４Ｂ）と、コンテンツアイテムをクライアントデバイス１５０に追加する追加操作を識別する１つ以上の操作（例えば、４１２）とを含む操作データ（例えば、３０２）をファイルジャーナルインタフェース２０２に送信することができる。ファイルジャーナルインタフェース２０２は、前に説明されるように、クライアントアプリケーション１５２からのカーソル及び１つ以上の操作を使用して、コンテンツアイテムがクライアントデバイス１５０に追加されたことを示すリビジョンをサーバファイルジャーナル１４８に（例えば、リビジョン３２２をジャーナル３１０に）追加することができる。前に説明されるように、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からのカーソルが、それがサーバファイルジャーナル１４８において最新のリビジョン又は状態を反映することを意味する、「先頭」にあることを検証し、１つ以上の操作をサーバファイルジャーナル１４８についてのリビジョンに変換することができる。さらに、コンテンツストレージインタフェース２０６は、コンテンツアイテム（例えば、２２０）及び／又はブロック（例えば、２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ）を受信し、コンテンツアイテム（例えば、２２０）及び／又はブロック（例えば、２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ）をコンテンツストレージ１４２にアップロードし、そしてコンテンツアイテム（例えば、２２０）及び／又はブロック（例えば、２２０Ａ、２２０Ｂ、２２０Ｃ、２２０Ｎ）をストレージインデックス２１０において記録する、又はインデックス付けすることができる。
【０２０４】
コンテンツアイテムをアップロードするときに、クライアントアプリケーション１５２は、図１３Ａを参照して以下にさらに記述されるように、コンテンツアイテムの追加をコンテンツ管理システム１１０にコミットする。操作（例えば、クライアントデバイス１５０におけるコンテンツアイテムの追加）をコミットすることにより、クライアントアプリケーション１５２がコンテンツアイテムの追加を追跡するリビジョンをコンテンツ管理システム１１０（例えば、サーバファイルジャーナル１４８）に報告する、又は記録することが可能である。コンテンツアイテムをアップロードする間に、及び／又は追加操作をコンテンツ管理システム１１０にコミットする間に、クライアントアプリケーション１５２は、クラッシュセーフティプロシージャを実装して、エラーを防ぎ、アップロード及び／又はコミットがいずれかの時点で成功しない、又は失敗するイベントにおけるリカバリを有効にすることができる。幾つかの事例において、クライアントアプリケーション１５２は、クライアントデバイス１５０上に操作（例えば、コンテンツアイテムの追加及び／又はアップロード）をコミットするインテントを永続的に記録し、コミットが成功する（例えば、コンテンツ管理システム１１０にコミットされる、又は記録される）か、失敗するかのいずれかまでコミットの追跡を続けることができる。コミットが成功する、又は失敗すると、クライアントアプリケーション１５２は、図１３Ａにさらに記述されるように、記録されるコミットへのインテントをクリアし、コンフュージョン又はエラーを回避することができる。
【０２０５】
追加されるコンテンツアイテムについてのノードを含むようにローカルツリー６３０を更新すること、及びコンテンツアイテムをコンテンツ管理システム１１０にアップロードすることにクライアントアプリケーション１５２が成功する場合に、クライアントアプリケーション１５２は、ツリーデータ構造６１０、６２０、６３０（すなわち、リモートツリー、同期ツリー、及びローカルツリー）を同期させ、コンテンツアイテムについてのリモート及びローカルメタデータをクライアントデバイス１５０に確保することができ、コンテンツ管理システム１１０は、同期し、一貫性があり、エラーがない。この同期は、本明細書に記述されるように増分同期及び／又は競合ハンドリングプロシージャを伴い、リモートツリー６１０、同期ツリー６２０、及びローカルツリー６１０を同期させることができる。
【０２０６】
図６Ｄは、コンテンツ管理システム１１０からダウンロードされるコンテンツアイテムをクライアントデバイス１５０に追加し、このダウンロードされたコンテンツアイテム及び一意の識別子を記録するための例示的な方法を示す。ステップ６７０において、クライアントアプリケーション１５２は、コンテンツアイテムをコンテンツ管理システム１１０からダウンロードする。このコンテンツアイテムは、別のユーザアカウント、クライアントデバイスによって、又はウェブインタフェース（例えば、１２４）を介して、コンテンツ管理システム１１０に追加され、クライアントデバイス１５０に同期する、コンテンツアイテムであり得る。
【０２０７】
ダウンロードされるコンテンツアイテムは、コンテンツ管理システム１１０によってコンテンツアイテムに割り当てられる一意の識別子を含むことができる。幾つかの事例において、クライアントアプリケーション１５２は、ダウンロードのために、コンテンツアイテムをクライアントデバイス１５０に追加する操作を受信することができる。例えば、クライアントアプリケーション１５２は、ファイル名、パス、一意の識別子などを識別する追加操作を受信することができる。図示するように、クライアントアプリケーション１５２は、操作「Ａｄｄ（／Ｄｉｒｅｃｔｏｒｙ／ｆｉｌｅ．ｊｐｇ：３２１）」を受信することができ、そこで「Ａｄｄ」は、操作を識別し、「ｆｉｌｅ．ｊｐｇ」は、ファイル名を識別し、「／Ｄｉｒｅｃｔｏｒｙ／」は、ファイルが常駐するディレクトリを識別し、「／Ｄｉｒｅｃｔｏｒｙ／ｆｉｌｅ．ｊｐｇ」は、フルパス及び／又はファイル名を識別し、そして「３２１」は、ファイルの一意の識別子を識別する。
【０２０８】
ステップ６７２において、クライアントアプリケーション１５２は、クライアントデバイス１５０における使用のために、コンテンツアイテムの一意の識別子を記録して、コンテンツアイテムを識別する。例えば、クライアントアプリケーション１５２は、一意の識別子をコンテンツアイテムの属性（例えば、ｘａｔｔｒ）として書き込む、一意の識別子をコンテンツアイテムにアペンドする、コンテンツアイテムを一意の識別子によってタグ付けする、及び／又は一意の識別子をコンテンツアイテムについてのメタデータ記録又はファイルに書き込む（例えば、ｃｏｍ．ａｐｐｌｉｃａｔｉｏｎ．ｆｉｌｅＩＤ）ことができる。
【０２０９】
ステップ６７４において、クライアントアプリケーション１５２は、コンテンツアイテムをクライアントデバイス１５０上のコンテンツアイテムについての宛先に格納することができる。この宛先は、コンテンツアイテムについて定義されるパスであり得る。例えば、宛先は、クライアントデバイス１５０上のネームスペース内に特定のディレクトリを含むことができる。
【０２１０】
クライアントアプリケーション１５２は、コンテンツアイテムについてのデータ及び／又は様々なタイプの情報をクライアントデバイス１５０上に格納することができる。例えば、クライアントアプリケーション１５２は、コンテンツアイテムのコンテンツ又はデータ、修正日、特定用途向けメタデータなどを格納することができる。
【０２１１】
ステップ６７６において、クライアントアプリケーション１５２は、コンテンツアイテムをローカルツリー６３０、同期ツリー６２０、及び／又はリモートツリー６１０に報告することができる。例えば、クライアントアプリケーション１５２は、コンテンツアイテムをリモートツリー６１０に報告することができ、コンテンツアイテムについてのノードをリモートツリー６１０上に追加する。次いで、クライアントアプリケーション１５２は、リモートツリー６１０に追加されるコンテンツアイテムについてのノードに基づき、ローカルツリー６３０、同期ツリー６２０、及びリモートツリー６１０を同期させることができる。
【０２１２】
ツリーデータ構造を使用する同期
図７Ａは、本発明の技術の様々な実施形態による、ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるための例示的な方法を示す。本明細書に記述される、これらの方法及びプロセスが特定の順序における、ある特定のステップ及び操作によって示されることができるが、同様な順序もしくは代替の順序において、又は並列して実行される追加の、より少数の、又は代替のステップ及び操作は、特に明示されない限り様々な実施形態の範囲内にある。この方法は、例えば、クライアントデバイス１５０上のクライアント同期サービス１５６のような、システムによって実装されることができる。
【０２１３】
このシステムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーと、クライアントデバイス上に格納される対応するコンテンツアイテムについてのファイルシステム状態を表すローカルツリーと、サーバ状態及びファイルシステム状態の間の既知の同期した状態を表す同期ツリーとの間の差異を識別するように設定される。これらの差異に基づき、生成されることができる操作シーケンスは、実行される場合に、３つのツリーデータ構造が同一である同期した状態に向けてサーバ状態及びファイルシステム状態を収束させるように構成される。
【０２１４】
例えば、操作７０２において、システムは、コンテンツ管理システムによって、又はクライアントデバイス上に、格納されるコンテンツアイテムについての修正データを受信することができる。操作７０４において、この修正データを使用して、リモートツリー又はローカルツリーを更新することができる。
【０２１５】
修正データは、コンテンツ管理サービスと関連する１つ以上のコンテンツアイテムに行われる変更を指定する。その結果、修正データをコンテンツ管理システムから、又はクライアントデバイスから（例えば、クライアントアプリケーション１５２から）受信することができる。コンテンツ管理システムから受信する修正データは、サーバ修正データと称されることができる。サーバ修正データは、コンテンツ管理システムによって１つ以上のコンテンツアイテムに行われる変更を指定し、操作７０４において、リモートツリーを更新するために使用され得る。クライアントデバイスから受信する修正データは、クライアント修正データと称されることができる。クライアント修正データは、クライアントデバイス上で１つ以上のコンテンツアイテムに行われる変更を指定し、操作７０４においてローカルツリーを更新するために使用されることができる。
【０２１６】
操作７０６において、システムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態、及びクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態が同期しているかどうかを判定することができる。ローカルツリー及びリモートツリーがファイルシステム状態及びサーバ状態を表し、コンテンツ管理システム及びクライアントデバイスに発生する変更を追跡して、継続的に更新されているため、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、ローカルツリー及び／又はリモートツリーを同期ツリーと比較して、ツリー間の差異を見つけることによって行われ得る。ツリー間の差異を見つける、このプロセスは、ときとしてツリーの「差分を取る」と称される。
【０２１７】
幾つかの実施形態及びシナリオによる、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、リモートツリーと同期ツリーとの間の差異を識別すること、及び／又はローカルツリーと同期ツリーとの間の差異を識別することのうちの１つ以上を含むことができる。リモートツリーと同期ツリーとの間の差異は、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更の発生を示すことができる。同様に、ローカルツリーと同期ツリーとの間の差異は、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更の発生を示すことができる。
【０２１８】
ツリー間に差異がない場合に、サーバ状態及びファイルシステム状態は、同期し、同期アクションは、必要とされない。その結果、この方法は、操作７０２に戻り、新規の修正データを待機することができる。一方で、これらの差異が検出される場合に、システムは、操作７０８においてサーバ状態及びファイルシステム状態を収束させるように構成される操作シーケンスを生成することができる。
【０２１９】
生成される操作シーケンスは、検出される１つ以上の差異に依存する。例えば、２つのツリー間の差異が追加されたコンテンツアイテムである場合に、生成された操作シーケンスは、追加されたコンテンツアイテムを取得して、それを追加することを含むことができる。２つのツリー間の差異がコンテンツアイテムの削除である場合に、生成された操作シーケンスは、コンテンツアイテムを削除することを含むことができる。また、操作シーケンスは、ツリー制約が維持されていることを確保する複数のチェックを含むことができる。以下にさらに記述されるように、操作シーケンスは、サーバ状態、ファイルシステム状態、又は実行を保留している他の操作の現在の状態によって競合する場合がある。その結果、システムは、続行する前にこれらの競合をも解消することができる。
【０２２０】
上述されるように、リモートツリーと同期ツリーとの間に差異がある場合に、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更を発生している場合がある。その結果、このシナリオにおいて、システムは、クライアントデバイス上に格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作シーケンスを生成することができ、このクライアント操作シーケンスは、操作７１０において、実行のためにクライアントデバイスに提供され得る。
【０２２１】
一方、ローカルツリーと同期ツリーとの間の差異がある場合に、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更が発生している可能性がある。その結果、このシナリオにおいて、システムは、コンテンツ管理システムによって格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作シーケンスを生成することができ、このサーバ操作シーケンスは、操作７１０において、実行のためにコンテンツ管理システムに提供されることができる。幾つかの事例において、両方の事例は、真であることができ、クライアント操作シーケンス及びサーバ操作シーケンスは、操作７１０において生成され、それらの意図された受取人に提供され得る。
【０２２２】
操作シーケンス（複数可）が意図された受取人（複数可）に提供されると、方法は、操作７０２に戻り、新規の修正データを待機することができる。これらの操作シーケンス（複数可）は、サーバ状態及びファイルシステム状態の収束に向けて１つ以上のステップを提供する、又はサーバ状態及びファイルシステム状態を同期させるために必要とされるすべてのステップを提供することができる。例えば、コンテンツ管理システムは、サーバ操作シーケンスを受信し、このサーバ操作シーケンスをコンテンツ管理システムによって格納されるコンテンツアイテム上で実行することができる。サーバ操作シーケンスのこの実行は、変更をコンテンツ管理システムによって格納されるコンテンツアイテムに引き起こし、これらの変更をサーバ修正データ中で検出し、指定し、システムに返送する。次いで、このシステムは、リモートツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。
【０２２３】
クライアントデバイスは、クライアント操作シーケンスを受信し、このクライアント操作シーケンスをクライアントデバイス上に格納されるコンテンツアイテム上で実行することができる。クライアント操作シーケンスのこの実行は、変更をクライアントデバイス上に格納されるコンテンツアイテムに引き起こし、これらの変更をクライアント修正データ中で検出し、指定し、システムに渡す。次いで、このシステムは、ローカルツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。方法７００のこれらの操作は、サーバ状態及びファイルシステム状態が同期するまで継続することができる。
【０２２４】
方法７００の操作は、クライアント側及びサーバ側（例えば、ローカルツリー及びリモートツリー、ファイルシステム状態及びサーバ状態、クライアント操作シーケンス及びサーバ操作シーケンス、クライアント修正データ及びサーバ修正データ）に関して記述されている。様々な実施形態において、これら２つの側と関連する操作は、並列して、順次に、他の側から切り離されて、又は組み合わせて、発生し得る。
【０２２５】
競合ハンドリング
図７Ａに関して上述されるように、同期ツリーとリモートツリーとの間の差異を識別し、使用してサーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作シーケンスを生成する。しかしながら、幾つかの事例において、クライアント操作シーケンスは、ローカルツリーの現在の状態と競合する場合がある。同様に、同期ツリーとローカルツリーとの間の差異を識別し、使用してサーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作シーケンスを生成する。しかしながら、サーバ操作シーケンスは、リモートツリーの現在の状態と競合する。追加的に、又は代替的に、クライアント操作シーケンス及びサーバ操作シーケンスは、互いに競合する場合がある。その結果、本発明の技術の様々な実施形態は、これらの競合を解消することによってさらなる技術的な改善を提供する。
【０２２６】
例えば、クライアント同期サービスは、ルールと競合する操作シーケンス（例えば、クライアント操作シーケンス又はサーバ操作シーケンス）中の操作を識別することができる。競合を識別するために使用される各ルールは、競合の解消とも関連付けられることができる。クライアント同期サービスは、実行のための操作シーケンスを提供する前に、競合についての解消に基づき操作シーケンスを更新する、又は競合についての解消と関連する操作を実行することによって競合の解消を実行することができる。
【０２２７】
図７Ｂは、本発明の技術の様々な実施形態による、ツリーデータ構造を使用して、サーバ状態及びファイルシステム状態を同期させるときに競合を解消するための例示的な方法を示す。ある特定のステップ及び操作を有する、本明細書に記述されるこれらの方法及びプロセスは、特定の順序で示されることができるが、同様の順序もしくは代替の順序で、又は並列して、実行される追加の、より少数の、又は代替のステップ及び操作は、特に明示されない限り、様々な実施形態の範囲内にある。この方法６００は、例えばクライアント同期サービス１５６などのシステムによって実装され、クライアントデバイス上で実行される。
【０２２８】
システムは、操作７２０において、サーバ状態及びファイルシステム状態を収束させるように設定される操作シーケンスを受信することができる。操作シーケンスは、例えば、図７Ａの方法７００に関して生成され、記述されるクライアント操作シーケンス又はサーバ操作シーケンスであることができる。
【０２２９】
操作７２０において、システムは、１セットのルールに基づき操作シーケンス中で１つ以上の違反を識別する。この１セットのルールは、クライアント同期サービス１５６によって格納され、解消される必要がある複数の制約、不変式、又は競合を指定することができる。この１セットのルールは、ツリーデータ構造に適用され、同期ビヘイビアの制御を援助する。また、この１セットのルールの中の各ルールは、そのルールの違反への解消に関連付けられる、又はその他の方法によりリンクされることができる。例えば、この解消は、操作シーケンス中の１つ以上の操作の変更、１つ以上の操作の除去、１つ以上の操作の追加、サーバ状態もしくはファイル状態への１つ以上の追加アクション、又はアクションの組み合わせを備えることができる。
【０２３０】
操作シーケンス中の各操作について、システムは、１セットのルールのうちのいずれかのルールに違反しているかどうかを判定することができる。ルールに違反している場合に、システムは、違反の解消を識別し、操作７２２において、解消を実行する。この解消は、操作シーケンス中の１つ以上の操作を修正するようなアクション、１つ以上の操作を除去する、もしくは追加するアクション、又はサーバ状態もしくはファイル状態上の追加アクションを備えることができる。
【０２３１】
解消アクションが実行されると、システムは、操作７２４において解消及び操作シーケンスに基づき、解消された、又はリベースされた操作シーケンスを生成し、操作７２８において解消された操作シーケンスを実行のために適切なエンティティに提供することができる。例えば、操作シーケンスがクライアント操作シーケンスである場合に、解消された操作シーケンスは、クライアントデバイスに提供されることができる。操作シーケンスがサーバ操作シーケンスである場合に、解消された操作シーケンスは、コンテンツ管理サービスに提供されることができる。加えて、方法は、並列して、又は様々な異なる順序で、シーケンス中のクライアント操作シーケンス及びサーバ操作シーケンス上で実行されることができる。
【０２３２】
幾つかの実施形態に従い、各操作タイプは、同一の、又は異なる１セットのルールと関連付けられることができる。例えば、操作タイプは、例えば、コンテンツアイテムを追加すること、コンテンツアイテムを削除すること、コンテンツアイテムを編集すること、コンテンツアイテムを移動させること、コンテンツアイテムをリネームすることなどを含むことができる。操作シーケンスは、上記の操作タイプのうちの１つに各属する操作からなることができる。各操作タイプは、特定の１セットのルールと関連付けられることができる。
【０２３３】
例示的な目的のために、「Ａｄｄ」操作タイプについての１セットのルールは、コンテンツアイテムについてのファイル識別子がツリー中で一意でなければならない（例えば、１つのツリー中の２つのノードが同一のファイル識別子を含むことができない）ようなルールを有することができ、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子（「ＤｉｒＦｉｌｅＩＤ」）は、対向するツリーデータ構造中に存在しなければならず、コンテンツアイテムについてのＤｉｒＦｉｌｅＩＤ及びファイル名の組み合わせは、対向するツリー中に使用されない。
【０２３４】
対向するツリーは、本明細書に使用される場合、対向するエンティティの状態を表すツリーデータ構造を指す。例えば、クライアントデバイス上で動作するように構成されるクライアント操作シーケンス、及びクライアントデバイス上でのファイルシステムへの結果として生じる変更をローカルツリーに反映する。その結果、クライアント操作シーケンスについて対向するツリーは、リモートツリーである。同様に、サーバ操作シーケンスは、コンテンツ管理システムに送信され、実行されるように構成され、サーバ状態への結果として生じる変更は、リモートツリーに反映される。その結果、サーバ操作シーケンスについて対向するツリーは、ローカルツリーである。
【０２３５】
ランポートクロック
図８Ａは、様々な操作（８０２）間の依存性及び因果関係を示す操作８０２の図を示す。操作８０２は、追加操作、削除操作、編集操作、移動操作、マウント操作及びマウント解除操作を含む。各操作は、インテント又は機能を有する。追加操作は、追加インテント（８０２Ａ）を含み、削除操作は、削除インテント（８０２Ｂ）を含み、編集操作は、編集インテント（８０２Ｃ）を含み、移動操作は、移動インテント（８０２Ｄ）を含み、マウント操作は、マウントインテント（８０２Ｅ）を含み、そしてマウント解除操作は、マウント解除インテント（８０２Ｆ）を含む。操作８０２は、依存性又は因果関係を有することができ、それらのそれぞれのインテント（８０２Ａ〜Ｆ）を達成するために１つ以上のアトミック操作を伴うことができる。
【０２３６】
例えば、追加操作は、アトミック操作であり、追加インテント８０２Ａを実行するために追加８０４Ａを単に伴う。削除操作は、コンテンツアイテムについての追加操作後にコンテンツアイテムに対して削除操作を実行することを意味する、追加８０４Ａに依存する削除８０４Ｂを伴う。編集操作は、コンテンツアイテムについて追加操作後にコンテンツアイテムに対して編集操作を実行することを意味する、追加８０４Ａに同様に依存する編集８０４Ｃを伴う。
【０２３７】
移動操作は、移動操作についての移動インテント８０２Ｄを達成するように実行されるアトミック操作である、削除８０４Ｂ及び追加８０４Ａを伴う。マウント操作は、マウントインテント８０２Ｅを実行するためにマウント８０４Ｅを伴うことができる。しかしながら、幾つかの事例において、マウント操作は、マウントインテント８０２Ｅを実行するためにマウント解除８０４Ｆ及びマウント８０４Ｅを伴うことができる。例えば、ネームスペース間コンテキストにおいて、ネームスペース中のマウント操作は、マウント解除（８０４Ｆ）及びマウント（８０４Ｅ）を伴うことができる。幾つかの事例において、コンテンツ管理システム１１０は、図８Ｂを参照して以下にさらに記述されるように、２つのマウントが２つのパスを同一のネームスペースに作成する場合に、これら２つのマウントが実行されることを禁止するルールを含むことができる。この事例において、同一のネームスペースの第二のマウントは、そのネームスペースのマウント解除をトリガして、第二のマウントがそのユーザについての同一のネームスペースへの複数のパスにつながらないことを確保することができる。したがって、この実施例において、２つのマウント操作のうちの少なくとも１つは、マウント解除８０４Ｆ及びマウント８０４Ｅを伴う。マウント解除８０４Ｆは、マウント操作の依存性である。
【０２３８】
マウント解除操作は、マウント解除インテント８０２Ｆを実行するためにマウント８０４Ｅ及びマウント解除８０４Ｆを伴う。換言すれば、コンテンツアイテムに対してマウント解除インテント８０２Ｆを実行するために、コンテンツアイテムは、マウント（８０４Ｅ）を介して最初にマウントされている。次いで、コンテンツアイテムは、マウント解除（８０４Ｆ）を介してマウント解除されることができる。
【０２３９】
操作８０２についてのランポートクロックを計算するときに、インテント（８０２Ａ〜Ｆ）、及び操作８０２のためのアトミック操作、依存性、因果関係などを使用することができる。ランポートクロックを使用して、１つ以上のネームスペースにおいてイベントの順序付け及び因果関係を判定し、イベントの状態が１つ以上のルールに違反しないことを確保することができる。ランポートクロックを使用して、操作８０２が適切に同期する、線形化される、シリアル化されることなどを確保し、１つ以上のデバイスにおいて競合を回避することができる。
【０２４０】
図８Ｂは、イベントのために計算されるランポートクロックを含むネームスペースにわたるイベントの図を示す。この実施例において、様々な操作は、ネームスペースＮＳＩＤ１、ＮＳＩＤ２、及びＮＳＩＤ３にわたり実行されている。各ネームスペースは、ネームスペース内の操作の順序付けを決定するために、そのネームスペースにおけるすべての操作に対してＳＪＩＤを維持する。しかしながら、ネームスペースのＳＪＩＤは、ネームスペースにわたる操作の順序付け及び因果関係を識別しない。その結果、ランポートクロックをネームスペースＮＳＩＤ１、２、３中の操作について計算し、因果関係を判定し、操作のネームスペース間順序付けを取得する。
【０２４１】
ＮＳＩＤ１において、操作８１０は、ＳＪＩＤ１及びクロック１を含む。ＮＳＩＤ２において、操作８１６は、ＳＪＩＤ１及びクロック１を含む。ＮＳＩＤ３において、操作８２０は、ＳＪＩＤ１及びクロック１を含む。操作８１０、８１６、８２０は、複数のネームスペースにまたがり、因果関係を含まない。その結果、操作８１０、８１６、８２０は、互いのクロックに影響しない。
【０２４２】
ネームスペース内の操作の順序付けは、ネームスペースにおいてＳＪＩＤに基づき決定されることができる。同一のネームスペース内の操作についてのクロックは、１つ単にインクリメントされることができる。したがって、ＮＳＩＤ１中のＳＪＩＤ２において、操作８１２についてのクロックは、２にインクリメントされる。
【０２４３】
ＮＳＩＤ１中の操作８１２は、Ｆｉｌｅ１からＮＳＩＤ２への移動である。その結果操作８１２は、Ｆｉｌｅ１のＮＳＩＤ２における追加である、操作８１８をＮＳＩＤ２にトリガする。ＮＳＩＤ２における操作８１８が異なるネームスペースからの別な操作、すなわち、ＮＳＩＤ１からの操作８１２に因果関係によって依存していることから、操作８１８についてのクロックは、ＮＳＩＤ１におけるクロック、及びＮＳＩＤ２におけるクロックに基づき計算される。このアルゴリズムは、ＴａｒｇｅｔＮＳ＿ｃｌｏｃｋｔ１＝ｍａｘ（Ｓｏｕｒｃｅ＿ＮＳｃｌｏｃｋ，ＴａｒｇｅｔＮＳ＿ｃｌｏｃｋｔ０）＋１として表現されることができる。したがって、この実施例において、ＮＳＩＤ２における操作８１８についてのクロックは、３（例えば、ｍａｘ（２，１）＋１）である。その結果、ＮＳＩＤ２における操作８１８は、ＳＪＩＤ２及びクロック３を含む。
【０２４４】
同様に、ＮＳＩＤにおける操作８１６は、ＮＳＩＤ２からＮＳＩＤ１へのＦｉｌｅ２の移動である。したがって、操作８１６は、Ｆｉｌｅ２をＮＳＩＤ１に追加するための、ＮＳＩＤ１における操作８２２をトリガする。操作８２２についてのクロックは、クロックアルゴリズムに基づき計算され、３に等しい。したがって、操作８２２は、ＮＳＩＤ１におけるＳＪＩＤ３、及びクロック３を含む。
【０２４５】
ＮＳＩＤ３における操作８２４は、同一のネームスペースにおける操作、すなわち、ＮＳＩＤ３における操作８２０に因果関係によって依存している。したがって、操作８２４についてのクロックは、ＮＳＩＤ３における操作８２０のクロックをインクリメントすることによって計算され得る。この実施例において、したがって、操作８２４についてのクロックは、２である。ＮＳＩＤ３における操作８２４は、ＳＪＩＤ２及びクロック２を含む。操作８２４がＤｉｒをＮＳＩＤ１に移動させるための移動操作であることから、操作８２４は、ＤｉｒをＮＳＩＤ１に追加する、ＮＳＩＤ１における操作８２６をトリガする。
【０２４６】
操作８２６が操作８２４によって異なるネームスペース（ＮＳＩＤ３）にトリガされることから、操作８２６についてのクロックは、ＮＳＩＤ１におけるクロック、及び操作８２４についてのクロックに基づき計算される。その結果、操作８２６についてのクロックは、４に設定される（例えば、ｍａｘ（２，３）＋１）。したがって、操作８２６は、ＮＳＩＤ１におけるＳＪＩＤ４、及びクロック４を含む。
【０２４７】
ＮＳＩＤ１における操作８２８は、Ｆｉｌｅ３をＮＳＩＤ１に追加し、ネームスペース間操作ではない。その結果、操作８２８についてのクロックは、ＮＳＩＤ１においてクロックをインクリメントすることによって計算される。したがって、操作８２８についてのクロックは、８に設定される。
【０２４８】
操作８３０は、ＮＳＩＤ１内で操作８２８にも因果関係によって依存している。したがって、操作８３０についてのクロックは、ＮＳＩＤ１において操作８２８のクロックをインクリメントすることによって、６に設定される。操作８３０は、ＮＳＩＤ１におけるＳＪＩＤ６、及びクロック６を含む。
【０２４９】
操作８３０は、Ｆｉｌｅ３をＮＳＩＤ３に移動させる移動操作である。したがって、操作８３０は、ＮＳＩＤ３に操作８３２をトリガする。操作８３２が異なるネームスペースからの操作に基づくことから、そのクロックは、ＮＳＩＤ３におけるクロック、及び操作８３０のクロックに基づくクロックアルゴリズムを使用して計算される。この事例において、操作８３２についてのクロックは、７に設定される。したがって、操作８３２は、ＮＳＩＤ３におけるＳＪＩＤ３、及びクロック７を含む。
【０２５０】
操作８３４、８３６は、ネームスペース間操作ではなく、ＮＳＩＤ３における操作８３０に因果関係によって関連がある。したがって、操作８３４、８３６についてのクロックは、操作８３２のクロックをインクリメントすることによって計算されることができる。この実施例において、操作８３４、８３６についてのクロックは、それぞれ８及び９に設定される。
【０２５１】
図９Ａは、ユーザに対して実行される一連のマウント操作によって生成される例示的なマウント状態違反９００を示す。マウント状態違反は、ユーザ１が複数のパス（例えば、／ａ／ｃ／及び／ｂ／）を同一のネームスペース（例えば、ＮＳＩＤ２）にマウントするのを禁止するマウント操作について定義される不変式に基づく。
【０２５２】
この実施例において、マウント操作９０８、９１０、９１２は、ステップ９０２、９０４、９０６において実行される。ステップ９０２において、ユーザ１は、ネームスペース１（ＮＳＩＤ１）をパス／ａにマウントするマウント操作９０８を実行する。したがって、この時点で、ユーザ１は、パス／ａを介するＮＳＩＤ１へのマウントを有する。
【０２５３】
ステップ９０４において、次いで、ユーザ１は、ネームスペース２（ＮＳＩＤ２）をパス／ｃにマウントするマウント操作９１０を実行する。したがって、この時点で、ユーザ１は、パス／ａを介するＮＳＩＤ１へのマウント、及びパス／ａ／ｃを介するＮＳＩＤ２へのマウントを有する。
【０２５４】
ステップ９０６において、次いで、ユーザ１は、ネームスペース２（ＮＳＩＤ２）をパス／ｂにマウントするマウント操作９１２を実行する。この時点で、ユーザ１は、パス／ａを介するＮＳＩＤ１へのマウント、パス／ａ／ｃを介するＮＳＩＤ２へのマウント、及びパス／ｂを介するＮＳＩＤ２へのマウントを有する。したがって、ユーザ１は、ＮＳＩＤ２への２つのパス、すなわち、／ａ／ｃ及び／ｂを含む。これは、複数のパスが同一のネームスペースを指すのを防ぐ不変式に違反するため、マウント状態違反９００をもたらす。この不変式に違反することを回避するために、ＮＳＩＤ２をパス／ｂにマウントし、ＮＳＩＤ２への第二のパスを確立する操作９１２は、ＮＳＩＤ２へのパスのうちの１つを中断するマウント解除操作に依存することができる。例えば、操作９１２は、ＮＳＩＤ２をパス／ａ／ｃにおいてマウント解除するためのマウント解除操作に依存することができる。このマウント解除操作を操作９１２の前に実行し、マウント状態違反９００を回避する。これは、ステップ９０６における操作９１２によって生じるマウント状態違反９００を解消し、ユーザ１にＮＳＩＤ２への１つのパス、すなわち、ＮＳＩＤ２へのパス／ｂを残す。
【０２５５】
ランポートクロック及び依存性を活用して、マウント解除操作が操作９１２の前に実行されることを確保することができる。操作９０２、９０４、９０６が依存するいずれかのマウント解除と同様に操作９０２、９０４、９０６上でランポートクロックを適切に設定することにより、マウント及びマウント解除操作は、マウント状態違反９００を防ぐ方式で、シリアル化され、実行されることができる。一方、ランポートクロックを不適切に設定することにより、マウント状態違反９００だけではなく、他の違反も、もたらす可能性がある。
【０２５６】
図８Ｂに前に示されるように、同一のネームスペース中のイベントについてのランポートクロックは、ネームスペース中のそれぞれ新規の操作のクロックをインクリメントすることによって計算されることができる。しかしながら、複数のネームスペースのコンテキストにおいて、マウント及びマウント解除を有する操作が複数のネームスペースにわたり生成される場合に、ランポートクロックの計算は、さらに困難になる可能性がある。さらに、同一のネームスペースを指す２つのパスを禁止するマウント操作についての不変式を考慮するときに、マウント及びマウント解除操作のランポートクロックを計算するための追加のルールは、マウント及びマウント解除操作についてのこのような不変式に関するコンプライアンスを確保するために必要である場合がある。ランポートクロックを、適切に計算される場合に使用して、これらのような不変式を強制し、マウント状態違反９００を防ぐことができる。適切に計算されない場合に、ランポートクロックは、その他の方法によりマウント状態違反９００などの違反につながる可能性がある。
【０２５７】
図９Ｂは、ネームスペース間コンテキスト中のマウント及びマウント解除操作のためにランポートクロックを計算するための方法を示す。この方法は、ランポートクロックを使用して、マウント操作が同一のネームスペースへの複数のパス（例えば、マウント状態違反９００）につながらないことを提供する不変式の違反を防ぐことを可能にする方式で、ランポートクロックを計算する。ランポートクロックは、クライアントデバイス１５０が同一のネームスペースへの複数のパスを含むようにコンテンツ管理システム１１０中のネームスペースの一貫したカット又は状態が至らせないことを確保するような方式で、マウント及びマウント解除操作が線形化される、シリアル化される、及び／又は実行されることができるように計算される。例えば、方法は、図９Ａに示される操作９０８、９１０、９１２についてのランポートクロックを計算し、ＮＳＩＤ２がパス／ａ／ｃ／に既にマウントされているにもかかわらず、ＮＳＩＤ２をパス／ｂにマウントするステップ９０６において、操作９１２の結果としてネームスペース２に２つのパスが作成されることを防ぐことによって、マウント状態違反９００を回避することができる。
【０２５８】
例示的な方法に従い、ステップ９２０において、コンテンツ管理システム１１０は、ネームスペース（例えば、ＮＳＩＤ２）を特定のパス（例えば、／ｂ）にマウントするマウント操作（例えば、操作９１２）を検出する。ステップ９２２において、コンテンツ管理システム１１０は、マウント操作が同一のネームスペース（例えば、ＮＳＩＤ２）に２つのパスを作成すると判定する。この状況は、図９Ａのステップ９０６に示される。前述されるように、この状況は、ネームスペースへの複数のパスを禁止する不変式に違反し、マウント状態違反９００をもたらす。その結果、この例示的な方法のステップ９２４、９２６、９２８は、下記のように、この状況（例えば、マウント状態違反９００）が発生するのを防ぐために実装されることができる。
【０２５９】
ステップ９２４において、コンテンツ管理システム１１０は、マウント操作に対する依存性を識別する。例えば、コンテンツ管理システム１１０は、マウント操作に対する依存性を識別するマウント依存性計算を実行することができる。これらの依存性は、マウント操作前に発生するマウント操作に対して発生しなければならない操作を伴う。
【０２６０】
例えば、マウント操作が同一のネームスペースへの２つのパスを禁止する不変式に違反する場合に、マウント操作は、不変式がマウント操作によって違反されるのを防ぐために、同一のネームスペースを指す２つのパスのうちの１つをマウント解除するマウント解除操作に依存する。図９Ａ中のステップ９０６からの実施例に基づき図示するように、ＮＳＩＤ２をパス／ｂにマウントするマウント操作９１２は、ＮＳＩＤ２をパス／ａ／ｃ／においてマウント解除するマウント解除操作に依存することができる。別の実施例として、マウント操作は、マウントについての依存性を生成することができる、ソースのマウント解除、及び宛先のマウントのような、複数のアトミック操作を伴うことができる。
【０２６１】
ステップ９２６において、コンテンツ管理システム１１０は、マウント操作の依存性において、いずれかのマウント解除操作を識別する。これらのようなマウント解除操作は、マウント操作についての依存性をマウント解除される。例えば、コンテンツ管理システム１１０は、マウント操作９１２についての依存性において、マウント解除操作を識別することができる。マウント解除操作は、ＮＳＩＤ２をパス／ａ／ｃ／においてマウント解除する操作であることができる。このマウント解除操作は、マウント操作９１２の依存性である。
【０２６２】
ステップ９２８において、コンテンツ管理システム１１０は、依存性においてすべてのマウント解除操作より高いランポートクロックの値をマウント操作に割り当てる。コンテンツ管理システム１１０は、マウント操作のクロック値を増加させて、それがその依存性においてすべてのマウント解除操作のクロック値を上回ることを確保するか、マウント操作に対してより高いクロック値を生成する必要に応じて、その依存性においてマウント操作のうちの１つ以上のクロック値を減少させるかのいずれかであることができる。また、コンテンツ管理システム１１０は、このようなマウント解除操作が依存するそれぞれのマウント操作より高いクロック値を各マウント解除操作が有することを確保することができる。
【０２６３】
図９Ｂからの実施例を参照して、コンテンツ管理システム１１０は、ＮＳＩＤ２をパス／ａ／ｃ／からマウント解除するためのマウント解除操作より高いクロック値をマウント操作９１２に割り当てることができる。また、コンテンツ管理システム１１０は、ＮＳＩＤ２をパス／ａ／ｃ／からマウント解除するためのマウント解除操作のクロック値より低いように、ＮＳＩＤ２をパス／ａ／ｃ／にマウントするマウント操作９１０のクロック値を設定することができる。ランポートクロックのこの計算及び構成は、ＮＳＩＤ２についてのマウント解除操作がＮＳＩＤ２をパス／ａ／ｃ／にマウントするマウント操作９１０と、ＮＳＩＤ２をパス／ｂ／にマウントするマウント操作９１２との間に実行される／処理されることを確保することができる。結果として、操作９０８、９１０、９１２の状態は、同一のネームスペース（ＮＳＩＤ２）を指す複数のパスに決して至らせず、マウント状態違反９００は、防がれる。
【０２６４】
図９Ｃは、図９Ｂに示される方法に基づき、マウント操作９０８、９１０、９１２について計算される例示的なランポートクロック構成９３０を示す。この実施例において、ランポートクロック構成９３０は、ユーザ１についてＮＳＩＤ１をパス／ａにマウントするマウント操作９０８、ユーザ１についてＮＳＩＤ２を／ａ／ｃ／にマウントするマウント操作９１０、ユーザ１についてＮＳＩＤ２を／ｂ／にマウントするマウント操作９１２を描く。また、ランポートクロック構成９３０は、ＮＳＩＤ２を／ａ／ｃ／からマウント解除するマウント解除操作９１４を備える。同一のネームスペースへの複数のパスを禁止する不変式と一貫して、マウント操作９１２は、マウント解除操作９１４に依存する。その結果、マウント解除操作９１４は、マウント操作９１２の依存性である。したがって、コンテンツ管理システム１１０は、図９Ｂのステップ９２６に前述されているように、マウント解除操作９１４をマウント操作９１２の依存性におけるマウント解除操作として識別することができる。
【０２６５】
ランポートクロック構成９３０は、操作９０８、９１０、９１２、９１４に対して計算され、割り当てられる、ランポートクロック９３２、９３４、９３６を含む。ランポートクロック９３２、９３４、９３６を計算し、マウント操作９１２の前にマウント解除操作９１４がリスト化されることを確保することによって、マウント状態違反９００を防ぐ。例えば、マウント操作９１２がマウント解除操作９１４に依存するため、マウント操作９１２は、マウント解除操作９１４より高いクロック値を割り当てられる。この実施例において、マウント解除操作９１４は、「１」のクロック値を有するランポートクロック９３４を含み、マウント操作９１２は、「２」のクロック値を有するランポートクロック９３６を含む。したがって、マウント操作９１２は、マウント解除操作９１４後に順序付けされる。さらに、マウント解除操作９１４がマウント操作９１０に依存することから、マウント操作９１０についてのランポートクロック９３２は、マウント解除操作９１４についてのランポートクロック９３４より低く設定される。図示されるように、ランポートクロック９３２は、「０」の値を含む。
【０２６６】
幾つかの事例において、コンテンツ管理システム１１０は、マウント操作９１２についてのクロック値より下にマウント解除操作９１４についてのクロック値を減少させることによって、そしてマウント解除操作９１４についてのクロック値より下にマウント操作９１０についてのクロック値を減少させることによって、ランポートクロック９３２、９３４、９３６を設定することができる。換言すれば、コンテンツ管理システム１１０は、マウント操作９１０及びマウント解除操作９１４のクロック値を上回るようにマウント操作９１２のクロック値をインクリメントすることによって、ランポートクロック９３２、９３４、９３６を設定することができる。
【０２６７】
ランポートクロック９３２、９３４、９３６は、操作９０８、９１０、９１２、９１４を適切にシリアル化し、マウント状態違反９００及びいかなる他のマウント／マウント解除の不変式をも防ぐことを確保することができる。図９Ｄは、ランポートクロック９３２、９３４、９３６に従いシリアル化される操作９０８、９１０、９１２、９１４の例示的なリスト化９４０を示す。
【０２６８】
リスト化９４０は、操作９０８、９１０、９１２、９１４、及びカーソル状態９４２、９４４、９４６、９４８を含む。リスト化９４０は、マウント操作９０８についてＮＳＩＤ１及びＳＪＩＤ１を識別するカーソル状態９４２に相関する、ＮＳＩＤ１におけるマウント操作９０８を最初に含む。つぎに、リスト化９４０は、ランポートクロック９３２において「０」のクロック値を有するマウント操作９１０を含む。マウント操作９１０に対応するカーソル状態９４４は、ＮＳＩＤ１においてＳＪＩＤ１、及びＮＳＩＤ２においてＳＪＩＤ０を含む。
【０２６９】
つぎに、リスト化９４０は、ランポートクロック９３４において「１」のクロック値を有するマウント解除操作９１４を含むため、マウント操作９１０の後に順序付けされる。マウント解除操作９１４に対応するカーソル状態９４６は、ＮＳＩＤ１においてＳＪＩＤ１、及びＮＳＩＤ２においてＳＪＩＤ１を含む。したがって、カーソル状態９４６は、カーソル状態９４４の後にＮＳＩＤ２においてＳＪＩＤをインクリメントした。
【０２７０】
最終的に、リスト化９４０は、ランポートクロック９３６において「２」のクロック値を有するマウント操作９１２を含むため、マウント解除操作９１４及びマウント操作９１０の後に順序付けされる。マウント操作９１２に対応するカーソル状態９４８は、ＮＳＩＤ１においてＳＪＩＤ１、及びＮＳＩＤ２においてＳＪＩＤ２を含む。したがって、カーソル状態９４８は、カーソル状態９４６の後に、ＮＳＩＤ２においてＳＪＩＤをインクリメントした。
【０２７１】
リスト化９４０に基づき、マウント操作９０８、９１０を最初に実行し、ＮＳＩＤ１を／ａに、そしてＮＳＩＤ２を／ａ／ｃ／にマウントする。ＮＳＩＤ２を／ｂにマウントするためのマウント操作９１２を実行する前に、マウント解除操作９１４を実行して、ＮＳＩＤ２を／ａ／ｃからマウント解除する。ＮＳＩＤ２がマウント解除されると、マウント操作９１２を実行して、ＮＳＩＤ２を／ｂにマウントする。結果として生じる状態は、ＮＳＩＤ２への単一のパス、及びＮＳＩＤ１への単一のパス、すなわち、それぞれ／ｂ及び／ａを含む。
【０２７２】
マウント又はネームスペースは、異なるパス及びタイムスタンプを有する複数のコンテンツアイテムを含むことができる。結果として、マウント操作が発生するときに、マウント操作は、１つのマウント内に他の複数のマウントを含む、このマウント中の複数のコンテンツアイテムに影響する場合がある。マウント中のコンテンツアイテム又はランポートクロックへの不適切な更新は、有意な競合の、また一貫性がないことの原因となる可能性がある。その結果、マウントが適切なランポートクロック、及びマウント内に任意のコンテンツを含むことを確保する、マウント操作に基づきランポートクロックを更新することができる。マウント内の各サブアイテムについてのランポートクロックの個々の計算は、マウント及びサブアイテム数が増加すると特に、計算的なコストが高い場合がある。マウントを実行するときにランポートクロック計算のパフォーマンスを向上させ、計算的な負担を減少させるために、ランポートクロックの計算は、マウント及び／又はコンテンツアイテム間の関係に基づき伝播され得る。
【０２７３】
図１０Ａは、マウント操作に基づきランポートクロックを更新するための例示的なプロセスを示す。この実施例において、ユーザ１、ユーザ２、及びユーザ３は、マウントされたネームスペース１００２間の相互関係に基づきツリー構造１０００に描かれるネームスペース１００２をマウントした。例えば、ＮＳＩＤ３は、ＮＳＩＤ２内にマウントされ、ＮＳＩＤ２は、ＮＳＩＤ１内にマウントされる。その結果、ＮＳＩＤ１、２、及び３は、ツリー構造１０００のブランチとして描かれている。同様にＮＳＩＤ４は、ＮＳＩＤ１内にマウントされるため、ツリー構造１０００内で別のブランチとして描かれている。
【０２７４】
さらに、マウントされたネームスペース１００２は、それぞれの対応するマウントについて計算されるランポートクロック１００４を含む。この実施例において、ＮＳＩＤ３は、「３」のクロック値を有し、ＮＳＩＤ２は、「２」のクロック値を有し、ＮＳＩＤ１は、「１」のクロック値を有し、そしてＮＳＩＤ４は、「４」のクロック値を有する。
【０２７５】
マウント操作１０１０は、ネームスペース１００６（ＮＳＩＤ５）をＮＳＩＤ４にマウントするためのマウント操作を表す。ＮＳＩＤ５がマウント操作１０１０に従いマウントされるときに、ランポートクロック１００８は、ＮＳＩＤ５について計算される。ランポートクロック１００８についての新規のクロック値は、新規のマウント（１００６）、及びこの新規のマウント（１００６）からツリー（１０００）までのすべてのマウント１００２の最大クロック値を決定し、決定された最大クロック値をインクリメントすることによって計算される。この実施例において、ランポートクロック１００８についてのクロック値は、ＮＳＩＤ５、４、及び１の最大のクロック値をインクリメントすることによって計算される。ツリー１０００に基づき、ＮＳＩＤ５についてのマウント操作１０１０は、「５」のクロック値をもたらす。ＮＳＩＤ４は、「４」のクロック値を有し、ＮＳＩＤ１は、「１」のクロック値を有する。したがって、ＮＳＩＤ５、４、及び１の最大クロック値は、ＮＳＩＤ５に対応する、「５」である。次いで、「５」の最大クロック値は、「６」にインクリメントされ、クロック値「６」は、ランポートクロック１００８のクロック値として割り当てられる。
【０２７６】
次いで、前に計算されるようにランポートクロック１００８のクロック値は、新規のマウント（１００６）からツリー（１０００）までのすべてのランポートクロック１００４に伝播される。したがって、ツリー１０００中のＮＳＩＤ５の親であるＮＳＩＤ４及びＮＳＩＤ１のクロック値をランポートクロック１００８に従い「６」に設定する更新１０１２を生成する。結果として、ＮＳＩＤ１、ＮＳＩＤ４、及びＮＳＩＤ５について格納されるランポートクロックの値は、マウント操作１０１０に応答して計算されるランポートクロック１００８に基づき「６」である。したがって、ツリー１０００により、新規のマウントがツリー１０００内に作成されるときに必要に応じて、ランポートクロック１００４を迅速に更新することが可能である。
【０２７７】
また、ツリー１０００を使用して、マウント解除のランポートクロックをインクリメントしてクロック値をマウント解除からツリーまでのランポートクロックに伝播することによって、マウント解除操作についてのクロック値を計算することができる。例えば、図１０Ｂを参照して、ＮＳＩＤ５（１００６）をマウント解除するためのマウント解除操作１０２２を生成するときに、ランポートクロック１０２４は、ＮＳＩＤ５、ＮＳＩＤ４、及びＮＳＩＤ１に対してランポートクロック１００８、１００４の最大クロック値に基づき計算される。計算される最大クロック値は、インクリメントされ、ＮＳＩＤ５、ＮＳＩＤ４、及びＮＳＩＤ１を含む、ＮＳＩＤ５からツリー（１０００）までの各マウントについてのランポートクロックのクロック値として設定される。更新１０２６は、ランポートクロック１０２４について計算されるクロック値を、ＮＳＩＤ４及びＮＳＩＤ１と関連するランポートクロック１００４に伝播することができる。
【０２７８】
図１１Ａは、移動操作を追跡するためのサーバファイルジャーナル１４８中の例示的なテーブルを示す。テーブル１１０２は、操作についてのジャーナル記録を含む。幾つかの実施例において、テーブル１１０２は、操作、これらの操作についてのクロック（例えば、タイムスタンプ）、これらの操作と関連するネームスペース（ＮＳＩＤ）、これらのネームスペースと関連するジャーナル識別子（ＳＪＩＤ）などを格納することができる。例示的な操作は、追加操作、削除操作、マウント操作、マウント解除操作、移動操作などを含むことができる。また、これらの操作は、制御操作を含むことができる。例えば、移動は、移動の各ステージにインテントを定義する様々な移動制御操作と関連付けられることができる。例示的な制御操作は、アウトゴーイング移動操作、インカミング移動操作、終了操作などを含むが、限定されない。幾つかの事例において、テーブル１１０２は、操作識別子をも含むことができる。例えば、テーブル１１０２は、特定の移動操作を識別する移動識別子（Ｍｏｖｅ＿ＩＤ）を含むことができる。
【０２７９】
テーブル１１０４Ａ、１１０４Ｂは、進行中の移動についてのインテントを定義する記録をホストすることができる。例えば、テーブル１１０４Ａは、宛先ネームスペース上で進行中の移動についてのインテントを反映するインカミング移動記録を格納することができ、テーブル１１０４Ｂは、ソースネームスペース上で進行中の移動についてのインテントを反映するアウトゴーイング移動記録を格納することができる。
【０２８０】
テーブル１１０４Ａにおいて、インカミング移動記録は、例えば、移動操作について移動識別子（Ｍｏｖｅ＿ＩＤ）、この操作のインディケーション、ソースネームスペース識別子（Ｓｏｕｒｃｅ  ＮＳＩＤ）、宛先ネームスペース識別子（Ｄｅｓｔｉｎａｔｉｏｎ  ＮＳＩＤ）、宛先パスのハッシュ、宛先パス、移動操作の状態、開始クロック（例えば、開始タイムスタンプ）、終了クロック（例えば、終了タイムスタンプ）などを含むことができる。この状態は、移動が進行中であるか、中止されているか、終了しているかどうかを示すことができる。したがって、この状態は、移動が処理されているか、完了したか、中止しているかどうかを識別することができる。
【０２８１】
テーブル１１０４Ｂにおいて、アウトゴーイング移動記録は、例えば、移動操作についての移動識別子（Ｍｏｖｅ＿ＩＤ）、この操作のインディケーション、ソースネームスペース識別子（Ｓｏｕｒｃｅ  ＮＳＩＤ）、宛先ネームスペース識別子（Ｄｅｓｔｉｎａｔｉｏｎ  ＮＳＩＤ）、ソースパスのハッシュ、ソースパス、移動操作の状態、クロック（例えば、タイムスタンプ）、カーソル（例えば、移動識別子及び操作状態）などを含むことができる。前述されるように、状態は、移動が進行中であるか、中止されているか、終了しているかどうかを示すことができる。
【０２８２】
これらの操作が検出される場合に、ファイルジャーナルインタフェース２０２は、エントリ又は記録をテーブル１１０２、１１０４Ａ、１１０４Ｂに書き込み、操作及び状態を追跡する、これらの操作をシリアル化する、又はこれらの操作をクライアントデバイス１５０に同期させることができる。
【０２８３】
図１１Ｂは、ランポートクロックによってネームスペース間移動を処理するための例示的なシーケンスの図を示す。この実施例において、プロセスは、ＮＳＩＤ１（ネームスペース１）からＮＳＩＤ２（ネームスペース２）へのネームスペース間移動を描く。移動についての様々な操作は、移動が両方のネームスペースにおいて完了するまでＮＳＩＤ１及びＮＳＩＤ２について処理され、シリアル化され、クライアントデバイス１５０に発行されることができる。
【０２８４】
コンテンツ管理システム１１０は、サーバファイルジャーナル１４８におけるＮＳＩＤ１についての追加操作１１０６を最初に記録する。追加操作１１０６は、「／Ａ／Ｄｉｒ／」、「／Ａ／Ｄｉｒ／ｆｏｏ．ｔｘｔ」、及び「／Ａ／Ｄｉｒ／ｂａｒ．ｔｘｔ」をＮＳＩＤ１に追加する。ここで、「Ｄｉｒ」は、ディレクトリ「Ａ」内のサブディレクトリであり、ファイル「ｆｏｏ．ｔｘｔ」及び「ｂａｒ．ｔｘｔ」は、サブディレクトリ「Ｄｉｒ」内に追加される。
【０２８５】
次いで、コンテンツ管理システム１１０は、追加操作１１０６についてのランポートクロック１１２０をインクリメントし、追加操作１１０６についてインクリメントされたランポートクロックを記録する。
【０２８６】
追加操作１１０６の後に、コンテンツ管理システム１１０は、ＮＳＩＤ１からＮＳＩＤ２へのディレクトリ「／Ａ／」の移動を検出する。次いで、コンテンツ管理システム１１０は、テーブル１１０２においてＮＳＩＤ１についてのアウトゴーイング移動操作１１０８を記録する。この事例において、ＮＳＩＤ１は、ＮＳＩＤ１におけるディレクトリ「／Ａ／」の移動操作についてのソースネームスペースである。アウトゴーイング移動操作１１０８を処理するときに、コンテンツ管理システム１１０は、移動識別子１１１２を、ＮＳＩＤ１からＮＳＩＤ２への「／Ａ／」の移動に割り当てる。さらに、コンテンツ管理システム１１０は、アウトゴーイング移動を含むテーブル１１０４Ｂにおけるアウトゴーイング移動と関連する情報を記録することができる。例えば、コンテンツ管理システム１１０は、移動識別子１１１２を記録し、ＮＳＩＤ１をソースネームスペースとして識別し、ＮＳＩＤ２が宛先ネームスペースであることを示し、ＮＳＩＤ１においてソースパスを識別し、移動の状態（例えば、進行中）を示し、アウトゴーイング移動操作１１０８に基づくカーソルを定義し、アウトゴーイング移動操作１１０８についてのランポートクロック１１２０を格納することができる。
【０２８７】
アウトゴーイング移動操作１１０８についてのランポートクロック１１２０を記録するときに、コンテンツ管理システム１１０は、アウトゴーイング移動操作１１０８に基づきランポートクロック１１２０の値をインクリメントし、このインクリメントされたランポートクロック値を記録する。
【０２８８】
次いで、コンテンツ管理システム１１０は、テーブル１１０２にＮＳＩＤ２についてのインカミング移動操作１１１０を記録する。インカミング移動操作１１１０は、ＮＳＩＤ２におけるディレクトリ「／Ａ／」のインカミング移動に対応する。また、コンテンツ管理システム１１０は、インカミング移動を含む、インカミング移動操作１１１０についてのインカミング移動記録をテーブル１１０４Ａに格納することができる。インカミング移動操作１１１０を移動識別子１１１２と関連付け、又はこの移動識別子１１１２とともに記録し、ＮＳＩＤ２におけるインカミング移動操作１１１０をＮＳＩＤ１におけるアウトゴーイング移動操作１１０８と関連する移動に相関することができる。コンテンツ管理システム１１０は、移動識別子１１１２、ソースネームスペース（ＮＳＩＤ１）、宛先ネームスペース（ＮＳＩＤ２）、ＮＳＩＤ１におけるソースパス、移動の状態（例えば、進行中）、開始クロック、及び終了クロックをテーブル１１０４Ａに記録することができる。開始クロックは、ランポートクロック１１２０の現在の値であることができ、終了クロックは、ランポートクロック１１２０のインクリメントされた値であることができる。
【０２８９】
次いで、コンテンツ管理システム１１０は、「／Ａ／Ｄｉｒ／」、「／Ａ／Ｄｉｒ／ｆｏｏ．ｔｘｔ」、及び「／Ａ／Ｄｉｒ／ｂａｒ．ｔｘｔ」をＮＳＩＤ１から削除する、削除操作１１１４をＮＳＩＤ１において処理する。コンテンツ管理システム１１０は、削除操作１１１４を移動識別子１１１２と関連付け、削除操作１１１４がアウトゴーイング移動操作１１０８と関連するＮＳＩＤ１からＮＳＩＤ２へのディレクトリ「／Ａ／」の移動に対応することを示し、削除操作１１１４を移動と無関係のいずれかの他の削除操作と区別する。幾つかの事例において、コンテンツ管理システム１１０は、拡張属性（ｘａｔｔｒ）などの、移動識別子１１１２を削除に相関する属性によって削除（例えば、「／Ａ／Ｄｉｒ／」、「／Ａ／Ｄｉｒ／ｆｏｏ．ｔｘｔ」、及び「／Ａ／Ｄｉｒ／ｂａｒ．ｔｘｔ」）をタグ付けする。
【０２９０】
次いで、コンテンツ管理システム１１０は、ＮＳＩＤ１において削除操作１１１４についてのランポートクロック１１２０をインクリメントし、このインクリメントされたクロック値を記録する。
【０２９１】
コンテンツ管理システム１１０は、「／Ａ／Ｄｉｒ／」、「／Ａ／Ｄｉｒ／ｆｏｏ．ｔｘｔ」、及び「／Ａ／Ｄｉｒ／ｂａｒ．ｔｘｔ」をＮＳＩＤ２に追加する、追加操作１１１６をＮＳＩＤ２において後で処理する。コンテンツ管理システム１１０は、追加操作１１１６を移動識別子１１１２に相関し、追加操作１１１６がインカミング移動操作１１１０と関連する移動に相当することを示し、これらの追加を移動に無関係ないずれかの他の追加と区別する。前に説明されるように、コンテンツ管理システム１１０は、移動識別子１１１２を識別する属性（例えば、ｘａｔｔｒ）によってこれらの追加を同様にタグ付けすることができる。
【０２９２】
次いで、コンテンツ管理システム１１０は、ランポートクロック１１２０をインクリメントし、追加操作１１１６についてインクリメントされたクロックをＮＳＩＤ２に記録する（例えば、テーブル１１０２）。
【０２９３】
次いで、コンテンツ管理システム１１０は、テーブル１１０２にＮＳＩＤ１についての終了操作１１１８Ａを記録する。コンテンツ管理システム１１０は、終了操作１１１８Ａと移動識別子１１１２を記録し、ＮＳＩＤ１において終了操作１１１８Ａを識別し、終了操作をアウトゴーイング移動操作１１０８からの移動と相関する。また、コンテンツ管理システム１１０は、ランポートクロック１１２０をインクリメントし、終了操作１１１８ＡについてインクリメントされたクロックをＮＳＩＤ１に記録する。終了操作１１１８Ａ後に、アウトゴーイング移動操作１１０８と関連する移動は、ＮＳＩＤ１において完了し、クリアされることができる。コンテンツ管理システム１１０は、アウトゴーイング移動についての記録を含む、終了した状態をテーブル１１０４Ｂに書き込むことができる。
【０２９４】
次いで、コンテンツ管理システム１１０は、テーブル１１０２にＮＳＩＤ２についての終了操作１１１８Ｂを記録し、ＮＳＩＤ２における移動を完了する。コンテンツ管理システム１１０は、終了操作１１１８Ｂを移動識別子１１１２と関連付け、終了操作１１１８Ｂを識別し、それをＮＳＩＤ２におけるインカミング移動操作１１１０と関連する移動に相関する。また、コンテンツ管理システム１１０は、ランポートクロック１１２０をインクリメントし、終了操作１１１８Ｂについてインクリメントされたクロック値をＮＳＩＤ２に記録する。この時点で、移動操作は、ＮＳＩＤ２において完了し、コンテンツ管理システム１１０は、インカミング移動記録を含む、終了した状態をテーブル１１０４Ａに書き込むことができる。
【０２９５】
この実施例に図示されるように、移動を処理するときに、コンテンツ管理システム１１０は、ＮＳＩＤ２における追加操作１１１６の前に、ＮＳＩＤ１における削除操作１１１４を処理することができる。この順序付け又はシーケンスにより、クライアントデバイス１５０がそれらのランポートクロック順序に従い削除及び追加操作（１１１４、１１１６）をリスト化して処理し、移動が同一のコンテンツアイテム又はコンテンツアイテム識別子（例えば、Ｆｉｌｅ  ＩＤ）の２つのインスタンスを含むクライアントデバイス１５０をもたらすシナリオを回避することが可能である。例えば、この順序付け又はシーケンスは、クライアントデバイス１５０が追加操作１１１６を処理し、「／Ａ」をＮＳＩＤ２に追加し、「／Ａ／」がＮＳＩＤ１にもあり、ＮＳＩＤ１から除去されていない状態を防ぐ。このようなシーケンスは、クライアントデバイス１５０において「／Ａ／」の２つのインスタンスをもたらし、両方のインスタンスは、同一のコンテンツアイテムのパス及びＩＤに対応することができる。
【０２９６】
このようなシナリオを防ぐために、移動中の削除操作（１１１４）は、本明細書に記述されるように、ランポート依存性に基づく移動についての追加操作前にシリアル化されることができる。ランポートクロック（１１２０）が各プロセスにおいてインクリメントされることから、これらの追加は、削除に因果関係によって依存し、削除後にリスト化されて、処理される。
【０２９７】
幾つかの事例において、インカミング移動操作も、アウトゴーイング移動操作前にシリアル化される。この方式、インカミング移動は、それらの対応するアウトゴーイング移動前に記録され、処理される。したがって、クライアントデバイス１５０は、アウトゴーイング移動（１１０８）の前にインカミング移動（１１１０）を検出する場合に、削除を処理するまで移動についての追加を検出しない保証を伴って、本明細書に記述されるような移動を処理し続けることができる。
【０２９８】
さらに、クライアントデバイス１５０が前のインカミング移動なしでアウトゴーイング移動をコンテンツ管理システム１１０から受信するときに、クライアントデバイス１５０は、アウトゴーイング移動を削除として処理することができる。例えば、クライアントデバイス１５０がＮＳＩＤ１へのアクセスを有するが、ＮＳＩＤ２へのアクセスを有さない場合に、インカミング移動操作１１１０を示すことなく、アウトゴーイング移動操作１１０８をリスト化することができる。クライアントデバイス１５０がＮＳＩＤ２へのアクセスを有さないことから、それは、削除操作１１１４を処理し、削除後に完了することができる。図示するように、クライアントデバイス１５０（又はクライアントデバイス１５０におけるユーザ）がＮＳＩＤ２へのアクセスを有さない場合に、クライアントデバイス１５０は、ＮＳＩＤ１においてディレクトリ「／Ａ／」のアウトゴーイング移動を検出することができるが、移動についてＮＳＩＤ２と関連するビュー又はプロセス操作１１１０、１１１６、１１１８Ｂへのアクセスを有さない場合がある。クライアントデバイス１５０の観点から、移動は、削除として出現することができる。
【０２９９】
したがって、本明細書において、シリアル化及びランポートクロック計算は、移動中に操作の適切な順序付け及び処理を確保し、クライアントデバイス１５０がアクセスを有さないソースネームスペース（例えば、ＮＳＩＤ１）又は宛先ネームスペース（例えば、ＮＳＩＤ２）と関連する移動などの、クライアントデバイス１５０が遭遇する可能性がある様々なシナリオにおいてエラー及び競合を防ぐことができる。適切なシリアル化及びランポートクロック依存性は、移動中に生成される変更に起因する問題及び競合をも防ぐ。移動中に遭遇する可能性がある、非限定的な実施例のシナリオは、移動中のソース及び／又は宛先ネームスペースのマウント又はマウント解除、移動中のソース及び／又は宛先ネームスペースの再マウント、移動中の追加又は削除操作、移動中のクラッシュなどを含む。
【０３００】
移動中に遭遇する可能性がある様々なシナリオに対処するために、ステートマシンは、各移動状態において異なるシナリオについてのタスク及び操作のフローを定義することができる。図１１Ｃは、移動の様々な状態における操作フローを定義する例示的な移動ステートマシン（１１３０）を示す。移動ステートマシン１１３０は、テーブル１１０２、１１０４Ａ、１１０４Ｂ中のすべての移動識別子について処理されることができる。移動ステートマシン１１３０は、ネームスペース間移動中に検出されるマウント又はマウント解除、及びこの移動中のいずれかの他の操作又はアクセス条件を含む、移動中に遭遇する可能性がある様々なシナリオ又は条件に対処する。
【０３０１】
図示されるように、移動ステートマシン１１３０は、アウトゴーイング移動操作１１０８が検出されるときに開始状態１１５０に入る。したがって、アウトゴーイング移動操作１１０８は、移動ステートマシン１１３０をトリガし、開始状態１１５０に入り、移動を処理し始める。操作ストリームを処理するときに、移動ステートマシン１１３０がアウトゴーイング移動（１１０８）以外の操作を検出する場合に、移動ステートマシン１１３０は、１１４０を中止し、開始状態１１５０に移行しない。例えば、移動ステートマシン１１３０が追加操作（例えば、１１１６）、削除操作（例えば、１１１４）、終了操作（例えば、１１１８Ａ、１１１８Ｂ）、マウント解除ソース操作、又はマウント解除宛先操作を検出する場合に、移動ステートマシン１１３０は、移動を開始する開始状態１１５０に入ることなく、１１４０を中止する。
【０３０２】
アウトゴーイング移動操作１１０８が検出されると、移動ステートマシン１１３０は、開始状態１１５０に移行し、移動を処理する。開始状態１１５０において、インカミング移動操作１１１０が検出されるときに、この移動は、クライアントデバイス１５０に発行され、移動ステートマシン１１３０は、発行された状態１１６０に移行する。
【０３０３】
インカミング移動操作１１１０は、テーブル１１０２に記録され、テーブル１１０４Ａにおいてｘ−１のランポートクロック値と関連付けられることができる。アウトゴーイング移動操作１１０８は、テーブル１１０２に記録され、テーブル１１０４Ｂにおいてｘのランポートクロック値と関連付けられることができる。この方式、インカミング移動操作１１１０は、前述されるように、アウトゴーイング移動操作１１０８の前にシリアル化される。
【０３０４】
移動が発行された（例えば、発行された状態１１６０）後に、この移動は、終了又はマウント解除１１３４に設定され、移動ステートマシン１１３０は、終了状態１１９０に到達する。終了した状態又は操作は、移動について処理される、又は記録されることができ、終了した状態又は操作は、移動と関連する移動識別子（例えば、１１１２）と相関されることができる。
【０３０５】
移動が同一ネームスペース（例えば、非同期）内にある場合に、ネームスペース中のソースは、終了１１３４、又はマウント解除に設定されることができる。移動がネームスペース（例えば、ＮＳＩＤ１からＮＳＩＤ２）にわたる場合に、移動は、ソースネームスペース（例えば、ＮＳＩＤ１）及び／又は宛先ネームスペース（例えば、ＮＳＩＤ２）において終了１１３４に設定されることができる。幾つかの事例において、終了した操作は、移動の移動識別子（例えば、１１１２）に相関され、ソースネームスペース及び／又は宛先ネームスペースについて記録される。
【０３０６】
移動が発行された（例えば、発行された状態１１６０）後に、追加操作１１１４又は削除操作１１１６が検出される場合に、移動ステートマシン１１３０は、追加及び削除（１１１４、１１１６）を無視し、終了状態１１９０に進む。したがって、移動ステートマシン１１３０は、発行された状態１１６０と終了状態１１９０との間に検出される追加操作１１１４及び削除操作１１１６をスキップする。
【０３０７】
ネームスペース間移動（例えば、ＮＳＩＤ１からＮＳＩＤ２）において、移動が発行された（例えば、発行された状態１１６０）後であるが、移動が終了状態１１９０に到達する前に、マウント解除ソース操作１１３６Ａが検出される場合に、移動ステートマシン１１３０は、マウント解除ソース状態１１７０に移行する。マウント解除ソース状態１１７０において、移動ステートマシン１１３０は、検出される、いかなる追加操作１１１６も無視する。移動ステートマシン１１３０は、宛先ネームスペース（例えば、ＮＳＩＤ２）を終了又はマウント解除１１１８Ｂに設定し、終了状態１１９０に進む。宛先ネームスペースを終了又はマウント解除１１１８Ｂに設定することは、終了又はマウント解除操作を移動識別子によって処理すること、及び／又は移動識別子について終了又はマウント解除状態を記録することを伴うことができる。
【０３０８】
マウント解除ソース状態１１７０において、再マウントシナリオ１１３２が検出される場合に、移動ステートマシン１１３０は、ソースネームスペース（例えば、ＮＳＩＤ１）についてのアウトゴーイング移動（例えば、１１０８）を処理し、ソースネームスペース（例えば、ＮＳＩＤ１）についての削除操作（例えば、１１１４）を処理し、又は発行し、宛先ネームスペース（例えば、ＮＳＩＤ２）について検出される、いかなる追加操作１１１６も無視する。マウント解除ソース状態１１７０から、移動ステートマシン１１７０は、ソースネームスペースが終了する、又はマウント解除されるときに進行し、宛先ネームスペースを終了又はマウント解除１１１８Ｂに設定し、終了状態１１９０に到達する。
【０３０９】
再マウントシナリオ１１３２は、マウント解除ソース操作１１３６Ａ後に、終了状態１１９０前のいずれかの時点で、ソースネームスペース（ＮＳＩＤ１）を再マウントすることを含むことができる。幾つかの事例において、マウント解除ソース操作１１３６Ａ及び再マウントシナリオ１１３２は、終了状態１１９０前に１回より多く発生する可能性がある。例えば、ユーザは、ソースネームスペースをマウント解除し、移動中にソースネームスペースを複数回、再マウントすることができる。ソースネームスペースがマウント解除され、再マウントされる各回に、移動ステートマシン１１３０は、ソースネームスペースが終了し、又はマウント解除され、移動ステートマシン１１３０が終了状態１１９０に進むまで、再マウントシナリオ１１３２をマウント解除ソース状態１１７０において処理する。したがって、幾つかの事例において、移動ステートマシン１１３０は、ソース及び宛先ネームスペースが終了し、終了状態１１９０に到達するまで、再マウントシナリオ１１３２を通してマウント解除ソース状態１１７０にループすることができる。
【０３１０】
移動が発行された（例えば、発行された状態１１６０）後に、マウント解除宛先操作１１３６Ｂが検出される場合に、移動ステートマシン１１３０は、マウント解除宛先状態１１８０に移行する。マウント解除宛先状態１１８０において、移動ステートマシン１１３０は、ソースネームスペース（例えば、ＮＳＩＤ１）が終了、又はマウント解除１１１８Ａであると判定し、終了状態１１９０に進む。ソースネームスペースは、終了した、又はマウント解除された状態に設定されることができ、終了した、又はマウント解除された記録又は操作は、この移動の移動識別子に相関されることができる。
【０３１１】
再マウントシナリオ１１３２がマウント解除宛先状態１１８０において検出される場合に、移動ステートマシン１１３０は、宛先ネームスペース（例えば、ＮＳＩＤ２）上でインカミング移動（例えば、１１１０）を処理し、宛先ネームスペース（例えば、ＮＳＩＤ２）において追加操作１１１６を処理し、検出される削除操作１１１４を無視する。移動ステートマシン１１３０は、宛先ネームスペースの終了又はマウント解除時に、マウント解除宛先状態１１８０から進む。マウント解除宛先状態１１８０後に、移動ステートマシン１１３０は、ソースネームスペースが終了する、又はマウント解除される（１１１８Ａ）ときに、終了状態１１９０に進む。
【０３１２】
マウント解除宛先操作１１３６Ｂの後に、再マウントシナリオ１１３２は、マウント解除宛先操作１１３６Ｂの後で、終了状態１１９０の前の、いずれかの時点で宛先ネームスペース（ＮＳＩＤ２）を再マウントすることを含むことができる。幾つかの事例において、マウント解除宛先操作１１３６Ｂ及び再マウントシナリオ１１３２は、終了状態１１９０の前に１回より多く発生し、終了状態１１９０に進むまで、再マウントシナリオ１１３２を通してマウント解除宛先状態１１８０に移動ステートマシン１１３０をループさせることができる。
【０３１３】
図１１Ｄは、コンテンツアイテムの一意の識別子に基づき位置にわたり、因果関係に基づき線形化される、例示的な移動操作の図を示す。この実施例において、移動操作１１９７Ａ〜Ｂは、操作１１９５Ａ、１１９５Ｂに基づき位置１、位置２、及び位置３にわたり実行される。位置１、２、３は、例えば、異なるネームスペース、又は共有されたフォルダを表すことができる。リビジョン番号１１９２は、位置１、２、３内の操作１１９７Ａ〜Ｂの順序付けを表す。
【０３１４】
位置１における追加操作１１９５Ａにおいて、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」を位置１に追加する。追加操作１１９５Ａは、位置１中にリビジョン番号１、及びランポートクロック１を割り当てられる。移動操作１１９７Ａを生成して、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」を位置１から位置２に移動させるときに、削除操作１１９５Ｂは、位置１において最初に処理され、位置１中のリビジョン番号２がランポートクロック２によって指定される。次いで、追加操作１１９５Ａを位置２において処理し、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」を位置２に追加する。位置２における追加操作１１９５Ａは、位置２におけるリビジョン番号１、及びランポートクロック３を取得する。図示されるように、ファイル（「Ｆｏｏ．ｔｘｔ」）は、位置１から位置２に移動するときに、その一意の識別子「１２３」を保持する。したがって、一意の識別子「１２３」は、いかなる位置でもファイルを一意に識別する。
【０３１５】
移動操作１１９７Ａを処理するときに、位置１における削除操作１１９５Ｂ、及び位置２における追加操作１１９５Ａは、ソース（すなわち、位置１）からのファイルの削除が宛先（すなわち、位置２）へのファイルの追加の前に起こるようにシリアル化される。このシリアル化は、削除及び追加操作を因果関係によって関連させ、宛先上の追加操作（すなわち、位置２における追加操作１１９５Ａ）に、ソース上の削除操作（すなわち、クロック２に関する位置１における削除操作１１９５Ｂ）より高いランポートクロック（クロック３）を割り当てることによって保証されることができる。
【０３１６】
移動操作１１９７Ｂは、位置２から位置３への、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」の移動をトリガする。移動操作１１９７Ｂは、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」を位置２から削除する、位置２における削除操作１１９５Ｂと、一意の識別子「１２３」を含むファイル「Ｆｏｏ．ｔｘｔ」を位置３に追加する、位置３における追加操作１１９５Ａとを伴う。再度、ファイル「Ｆｏｏ．ｔｘｔ」は、移動の前後に、その一意の識別子「１２３」を保持する。位置２における削除操作１１９５Ｂは、位置２におけるリビジョン番号２、及びランポートクロック４を割り当てられるため、必然的にランポートクロック３を含む、位置２における追加操作１１９５Ａ後となる。位置３における追加操作１１９５Ａは、位置３におけるリビジョン番号１、及びランポートクロック５を割り当てられる。
【０３１７】
図示されるように、移動操作１１９７Ａ〜Ｂは、移動しているコンテンツアイテム（すなわち、ファイル「Ｆｏｏ．ｔｘｔ」）の一意の識別子を使用して処理され、これらの移動を実装するための操作は、それぞれのランポートクロックに従いシリアル化され、それらのそれぞれの位置内でリビジョン番号１１９２によって順序付けられる。これらの移動についての追加及び削除操作をシリアル化するときに、ソースにおける削除操作は、宛先における追加操作前にリスト化され、宛先における追加操作より低いランポートクロックが指定される。
【０３１８】
コミットプロトコル
図１２は、操作をクライアントデバイス１５０に反映するツリーデータ構造６１０、６２０、６３０の例示的な状態を示す。インテント１２０６は、クライアントデバイス１５０における操作の意図された結果を表す。この実施例において、インテント１２０６は、「Ｆｏｏ．ｔｘｔ」をクライアントデバイス１５０に追加するための追加操作を示す。ローカルツリー６３０は、インテント１２０６に基づくノード１２０４を追加するように修正されている。ノード１２０４は、ルートノード１２０２内に「Ｆｏｏ．ｔｘｔ」の追加を描くようにローカルツリー６３０を修正する。前に説明されるように、インテント１２０６がコンテンツ管理システム１１０と同期するときに、クライアントデバイス１５０は、ノード１２０４を含むようにリモートツリー６１０及び同期ツリー６２０を更新するため、クライアントデバイス１５０においてツリーデータ構造６１０、６２０、６３０を同期させることができる。同期するときに、ツリーデータ構造６１０、６２０、６３０は、同期した状態をクライアントデバイス１５０に反映する。
【０３１９】
インテント１２０６をコンテンツ管理システム１１０と同期させるために、クライアントデバイス１５０は、インテント１２０６をコンテンツ管理システム１１０にコミットすることができる。この実施例において、クライアントデバイス１５０は、インテント１２０６をコンテンツ管理システム１１０と同期させるために、「Ｆｏｏ．ｔｘｔ」の追加をコンテンツ管理システム１１０にコミットする。
【０３２０】
図１３Ａは、インテント１２０６をコンテンツ管理システム１１０にコミットするための例示的な方法を示す。ステップ１３０２において、クライアントデバイス１５０上のクライアント同期サービス１５６は、操作（例えば、インテント１２０６からの操作）をクライアントデバイス１５０にコミットするインテントを記録する。クライアント同期サービス１５６は、永続的にディスク又はメモリ上の操作をクライアントデバイス１５０にコミットするインテントを記録し、保留中のコミットを追跡することができる。クライアントデバイス１５０は、イベントが失敗又は成功などの保留中のコミット（複数可）の除去をトリガするまで、ダーティコミット記録を格納し、修正を追跡することができる。
【０３２１】
ステップ１３０４において、クライアント同期サービス１５６は、操作をコンテンツ管理システム１１０（例えば、ファイルジャーナルインタフェース２０２）にコミットする。クライアント同期サービス１５６は、この操作をコミットすることを要求するコンテンツ管理システム１１０にメッセージを送信することができる。このメッセージは、前に説明されるように、コンテンツ管理システム１１０がクライアントデバイス１５０におけるコンテンツアイテムの状態と、サーバファイルジャーナル１４８におけるクライアントデバイス１５０の位置とを決定するために使用することができる、カーソルを含むことができる。このカーソルは、例えば、クライアントデバイス１５０と関連する各ネームスペースについてサーバジャーナルＩＤ（ＳＪＩＤ）を含むことができる。ＳＪＩＤは、各ネームスペースについてサーバファイルジャーナル１４８におけるクライアントデバイス１５０の位置を示すため、クライアントデバイス１５０における各ネームスペースの状態を提供する。
【０３２２】
ステップ１３０６において、クライアント同期サービス１５６は、ステップ１３０４からのコンテンツ管理システム１１０へのコミットが成功したかどうかを判定する。幾つかの事例において、コンテンツ管理システム１１０は、このコミットに応答して、コミットが成功した、又は失敗したかどうかを示す、エラー又は肯定応答をクライアント同期サービス１５６に自動的に送信することができる。幾つかの事例において、クライアント同期サービス１５６は、肯定応答又はエラー通知を要求するコンテンツ管理システム１１０に連絡することができる。例えば、クライアント同期サービス１５６は、コミットが成功した肯定応答を要求するコンテンツ管理システム１１０にメッセージを送信することができる。
【０３２３】
コミットが成功した場合に、コンテンツ管理システム１１０は、クライアント同期サービス１５６に応答し、クライアントデバイス１５０にコミットが成功したことを通知することができる。コミットが成功しなかった場合に、コンテンツ管理システム１１０は、失敗応答によって応答することができる、又はクライアント同期サービス１５６からの要求に応答しないことができる。コミットが失敗したとクライアント同期サービス１５６が判定する場合に、ステップ１３１０において、クライアント同期サービス１５６は、クライアントデバイス１５０からの操作をコミットするインテントをクリアにする。クライアントデバイス１５０における状態がサーバファイルジャーナル１４８における状態と比較して古い場合に、クライアント同期サービス１５６は、クライアントデバイス１５０における状態をサーバファイルジャーナル１４８における状態と同期させる、いずれかの必要な更新を受信する、又は要求することができる。
【０３２４】
コミットが成功したとクライアント同期サービス１５６が判定する場合に、ステップ１３０８において、クライアント同期サービス１５６は、図８に示されるようなノード８０４を含むようにリモートツリー６１０及び同期ツリー６２０を更新する。次いで、ステップ１３１０において、クライアント同期サービス１５６は、クライアントデバイス１５０から操作をコミットするインテントをクリアする。
【０３２５】
ステップ１３０６においてコンテンツ管理システム１１０へのコミットが成功したかどうかを判定することによって、クライアント同期サービス１５６は、クライアント同期サービス１５６が操作をコミットし、そのコンテンツ及びツリーデータ構造（６１０、６２０、６３０）を更新するが、このコミットがコンテンツ管理システム１１０において成功しないシナリオに起因する競合を防ぐことができる。これは、クライアントデバイス１５０とコンテンツ管理システム１１０との間の状態の中に競合を生じる。
【０３２６】
例えば、クライアント同期サービス１５６がステップ１３０４において操作をコミットした後に、クライアントデバイス１５０又はコンテンツ管理システム１１０におけるクラッシュ、ネットワーク条件（例えば、レイテンシ又は輻輳、ネットワーク障害など）、処理条件（例えば、コンテンツ管理システム１１０における長いキュー、コンテンツ管理システム１１０におけるメモリエラーなど）などのような、様々なシナリオは、コミットが実際に正常に処理され、コンテンツ管理システム１１０に適用されるのを妨げる場合がある。ステップ１３０６において、したがって、クライアント同期サービス１５６は、この操作を適用するか、クライアントデバイス１５０にコミットする、格納された、又はキャッシュされたインテントをクリアするかどうかを決定する前に、コミットが成功したか、失敗したかどうかを検証することができる。
【０３２７】
また、コミットが成功した場合にチェックすること、及びコミットが失敗した場合にコミットするインテントをクリアすることにより、クライアントデバイス１５０がセルフオーサリングされた操作を区別し、それ自体がセルフオーサリングされた操作を通じて競合することを回避することが可能である。例えば、クライアントデバイス１５０は、クライアントデバイス１５０によってオーサリングされるいずれかの操作に対してコミットするインテントと、これらの操作がセルフオーサリングされているインディケーションを記録することができる。次いで、クライアントデバイス１５０は、この操作を適用する（例えば、ツリーデータ構造を更新する）前に、コンテンツ管理システム１１０によって、コミットが成功したかどうかを検証することをチェックする。図１３Ｂに関してさらに以下に記述されるように、コンテンツ管理システム１１０は、コミットするインテントが失敗した、又は受信されなかったことをクライアントデバイス１５０に報告する場合に、コミットするこのようなインテントがコンテンツ管理システム１１０によって後に受信されても、その後成功しないであろうことを保証することができる。したがって、クライアントデバイス１５０は、コミットするインテントが失敗したことをクライアントデバイス１５０が示した後にコミットが成功しないであろうことを同様に保証することができ、コンテンツ管理システム１１０から失敗又は成功の肯定応答を受信した後にコミットするインテントをクリアする。
【０３２８】
これは、例えば、クライアントデバイス１５０が失敗した操作をコミットする試みを信じ、コンテンツ管理システム１１０によって後に承認される操作に基づくリビジョンの更新又はインディケーションをコンテンツ管理システム１１０から後に受信するシナリオを妨げることができる。例えば、クライアントデバイス１５０は、コミットをコンテンツ管理システム１１０に送信することができる。このコミットが一時的に失われる、又は遅延する場合に、コンテンツ管理システム１１０及びクライアントデバイス１５０は、コミットが失敗したと信じる可能性がある。コミットが後に再浮上し、クライアントデバイス１５０がコミットするインテントをクリアした、又はその他の方法によりコミットするインテントを失敗したとマーク付けした後に、コンテンツ管理システム１１０がこのコミットを処理して承認する場合に、この操作が決して承認されるべきではなかったとしても、失敗したコミットと関連する操作は、クライアントデバイス１５０へ意図せずに伝播されることができる。クライアントデバイス１５０は、この操作を受信し、この操作が前の失敗したコミットからのそれ自体の操作であることを認識せず、この操作が別のデバイスから生成され、同期したと信じて、この操作を適用する場合がある。この操作を前の失敗したコミットと関連するセルフオーサリングされた操作として区別することができず、クライアントデバイス１５０は、この操作を適用し、関連したコンテンツアイテム（複数可）又はネットワーク（複数可）の状態に競合を生じさせる可能性がある。したがって、クライアントデバイス自体の操作は、クライアントデバイスがそれ自体の操作を失敗した後に、この操作が別のデバイスによって生成され、クライアントデバイスに伝播される新規のリビジョンであるという信念の下で、同一の操作を適用することが原因となる競合をこのクライアントデバイスに生じさせる可能性がある。
【０３２９】
図１３Ｂは、コンテンツ管理システム１１０においてコミットを処理する例示的な方法を示す。ステップ１３２０において、ファイルジャーナルインタフェース２０２は、クライアントデバイス（例えば、クライアントデバイス１５０）からのコミット要求を監視する。ステップ１３２２において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からの操作（例えば、クライアント同期サービス１５６）をコミットする要求を受信する。この要求は、コミットと関連する操作と、クライアントデバイス１５０と関連するカーソルとを識別することができる。例えば、この要求は、図１３Ａに示されるようなインテント１２０６をコミットする、クライアント同期サービス１５６からの要求であることができる。したがって、この要求は、図８に示されるインテント１２０６に対応する追加操作（例えば、Ａｄｄ「Ｆｏｏ．ｔｘｔ」）と、クライアントデバイス１５０におけるカーソルとを識別することができる。クライアントデバイス１５０におけるカーソルは、ファイルジャーナルインタフェース２０２からクライアントデバイス１５０によって受信される最後の、又は直近のカーソルであることができる。
【０３３０】
前に説明されるように、カーソルは、ネームスペースのそれぞれについてのサーバファイルジャーナル１４８におけるリビジョン又は状態と比較して、クライアントデバイス１５０における各ネームスペースの最新のリビジョン又は状態を反映する、クライアントデバイス１５０の位置をサーバファイルジャーナル１４８において識別することができる。例えば、カーソルは、クライアントデバイス１５０において各ネームスペースについてサーバファイルジャーナル識別子（ＳＪＩＤ）を識別することができる。ネームスペースのＳＪＩＤは、クライアントデバイス１５０によって取得されるそのネームスペースについて最新のＳＪＩＤ（例えば、ロウ、リビジョン、又は状態）を示す。したがって、このカーソルは、クライアントデバイス１５０がクライアントデバイス１５０における各ネームスペースについてサーバファイルジャーナル１４８中の最新のリビジョンを受信したかどうかを示すことができる。
【０３３１】
この操作をコミットする要求に応答して、ステップ１３２４において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からのコミットと関連するカーソルをチェックする。ステップ１３２６において、ファイルジャーナルインタフェース２０２は、カーソルが先頭にあるかどうかを判定する。ここで、ファイルジャーナルインタフェース２０２は、カーソル中の各ネームスペースについてカーソルによって識別されるリビジョン（ＳＪＩＤ）がサーバファイルジャーナル１４８上のそのネームスペースについて最新のリビジョンであるかどうかを判定する。
【０３３２】
例えば、カーソルがネームスペース２についてのＳＪＩＤ５０を識別する場合に、ファイルジャーナルインタフェース２０２は、ＳＪＩＤ５０がサーバファイルジャーナル１４８（例えば、ジャーナル３１０）中のネームスペース２について最新のＳＪＩＤ（例えば、最新のロウ又はリビジョン）であるかどうかを判定する。そうである場合に、つぎに、クライアントデバイス１５０からのカーソルは、それがクライアントデバイス１５０における各ネームスペースについてのサーバファイルジャーナル１４８の最後にあることを意味する、先頭にあり、クライアントデバイス１５０がクライアントデバイス１５０における各ネームスペースについてサーバファイルジャーナル１４８中の最新のリビジョン又は状態を取得したことを示す。そうでない場合に、クライアントデバイス１５０からのカーソルは、それがクライアントデバイス１５０における各ネームスペースについてサーバファイルジャーナル１４８の最後にはないことを意味する、先頭にはなく、クライアントデバイス１５０がクライアントデバイス１５０における各ネームスペースについてサーバファイルジャーナル１４８中の最新のリビジョン又は状態を取得していないことを示す。換言すれば、１つ以上のネームスペースと関連するクライアントデバイス１５０におけるコンテンツアイテムは、古い。
【０３３３】
カーソルが先頭にはない場合に、ステップ１３２８において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からのコミットを拒否する。例えば、先頭にはないカーソルに基づき、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からのコミットと関連する操作が古い（例えば、サーバファイルジャーナル１４８において最新のリビジョンを反映していない）コンテンツアイテム（複数可）及び／又はネームスペース（複数可）を修正すると判定することができ、そのコンテンツアイテム（複数可）及び／又はネームスペース（複数可）についてサーバファイルジャーナル１４８におけるリビジョンに関して競合を生じる可能性がある。したがって、ファイルジャーナルインタフェース２０２は、コミットを拒否し、コミットと関連する操作によって生じる競合を防ぐことができる。ファイルジャーナルインタフェース２０２は、コミットが拒否されていることを示す応答をクライアントデバイス１５０に送信することができる。又はイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８中の最新のリビジョン又は状態をクライアントデバイス１５０に送信する、又はクライアントデバイス１５０が更新を実行するように促すことができる。
【０３３４】
カーソルが先頭にある場合に、ステップ１３３０において、ファイルジャーナルインタフェース２０２は、このコミットを許容することができる。幾つかの事例において、ファイルジャーナルインタフェース２０２は、操作がコミットを許容する前に競合を生じないことを検証する別のチェックを実行することができる。例えば、カーソルが先頭にあると判定することに加えて、ファイルジャーナルインタフェース２０２は、コミット（例えば、インテント１２０６）と関連する操作によって反映されるリビジョンをサーバファイルジャーナル１４８におけるリビジョンと比較し、カーソルが先頭にある場合でも操作が競合を生じないことを検証することができる。図示するように、操作がファイルについての削除操作であり、カーソルが先頭にあるとファイルジャーナルインタフェース２０２が判定すると仮定する。コミットを許容する前に、ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８がファイルを特定のネームスペースに追加する前のリビジョンを含むことを検証することができる。サーバファイルジャーナル１４８がファイルをネームスペースに追加するリビジョンを含まないとファイルジャーナルインタフェース２０２が判定する場合に、ファイルジャーナルインタフェース２０２は、削除操作と、追加リビジョンの欠如との間に競合を識別することができる。次いで、ファイルジャーナルインタフェース２０２は、コミットを拒否する、競合を調整する、及び／又はクライアントデバイス１５０に競合を調整するように求めることができる。
【０３３５】
コミットを許容した後に、ステップ１３３２において、ファイルジャーナルインタフェース２０２は、このコミットに基づきサーバファイルジャーナル１４８を更新する。例えば、ファイルジャーナルインタフェース２０２は、コミットと関連する操作を反映るリビジョンをサーバファイルジャーナル１４８に書き込むことができる。ファイルジャーナルインタフェース２０２は、前述されるように、この操作をリビジョンに変換し、この操作と関連するネームスペースについてのリビジョンを書き込むことができる。
【０３３６】
ステップ１３３４において、ファイルジャーナルインタフェース２０２は、それがクライアントデバイス１５０から肯定応答要求を受信したかどうかを判定することができる。例えば、クライアントデバイス１５０は、コミットが失敗したか、成功したかどうかを判定するために、コミットの肯定応答についての要求をファイルジャーナルインタフェース２０２に送信することができる。ステップ１３３６において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０からの肯定応答要求に応答することができる。ファイルジャーナルインタフェース２０２は、コミットが成功したか、失敗したかどうかを含む、コミットのステータスのクライアントデバイス１５０に通知することができる。
【０３３７】
ステップ１３３８において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０と関連するカーソルを移すことができる。例えば、クライアントデバイス１５０からのカーソルがクライアントデバイス１５０におけるネームスペース１についての最新のリビジョンとしてネームスペース１についてのＳＪＩＤ６を識別し、コミットと関連する操作がネームスペース１に対応すると仮定する。ファイルジャーナルインタフェース２０２は、ネームスペース１と関連するカーソルをＳＪＩＤ６からＳＪＩＤ７に移すことができる。ファイルジャーナルインタフェース２０２は、更新されたカーソルをクライアントデバイス１５０に提供することができ、クライアントデバイス１５０は、将来のコミットのために更新されたカーソルを使用することができる。
【０３３８】
ファイルジャーナルインタフェース２０２は、サーバファイルジャーナル１４８を更新した後に、又はクライアントデバイス１５０から肯定応答要求を受信した後に、カーソルを移すことができる。幾つかの事例において、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０から肯定応答要求を受信した後に、肯定応答要求と関連するコミットがファイルジャーナルインタフェース２０２によって許容されなかった場合でも、カーソルを移すことができる。例えば、ファイルジャーナルインタフェース２０２がクライアントデバイス１５０から肯定応答要求を受信する場合に、それは、ファイルジャーナルインタフェース２０２がコミットに関連した要求を決して受信しなかった、又は承認しなかった場合でも、肯定応答要求に基づきカーソルを移すことができる。カーソルを移すことによって、ファイルジャーナルインタフェース２０２は、コミットが許容されていない、又は記録されていないことをクライアントデバイス１５０に示すと、このコミットが後に許容されない、又は記録されないことを保証することができる。
【０３３９】
例えば、クライアントデバイス１５０がファイルジャーナルインタフェース２０２にコミットする要求を送信するときに、幾つかの事例において、この要求は、ネットワーク又はコンピューティング問題（例えば、レイテンシ、輻輳、クラッシュ、クライアント側タスクキャンセルなど）のような、様々な理由のために、一時的に失われる、又は遅延する可能性がある。結果として、ファイルジャーナルインタフェース２０２は、予想より遅くまでコミットする要求を受信しないことができる。例えば、ファイルジャーナルインタフェース２０２は、クライアントデバイス１５０から肯定応答要求を受信し、この肯定応答要求に応答し、後でのみクライアントデバイス１５０からコミットする元の要求を受信することができる。この実施例において、コミットが記録されていなかった、受信されていなかった、又は承認されていなかったインディケーションによって、ファイルジャーナルインタフェース２０２がクライアントデバイス１５０に応答した後に、このコミットを受信し、承認する／記録する場合に、このようなコミットは、コンテンツ管理システム１１０における状態と、クライアントデバイス１５０における状態との間の競合を生じる可能性がある。
【０３４０】
したがって、ファイルジャーナルインタフェース２０２がクライアントデバイス１５０に、コミットが記録されていなかった、又は承認されていなかったということを伝えるときに、このようなコミットがファイルジャーナルインタフェース２０２によって後に受信された場合でも、後でコミットされないことを保証するために、ファイルジャーナルインタフェース２０２は、カーソルを移し、失われた、又は遅延したコミットが再浮上する場合に拒否されることを確保することができる。例えば、ファイルジャーナルインタフェース２０２はコミットが記録されなかった、又は承認されなかったとクライアントデバイス１５０に応答した後に、コミットする要求を受信するときに、ファイルジャーナルインタフェース２０２は、ステップ１３２６に説明されるように、カーソルが先頭にあるかどうかをチェックする。コミットする要求がクライアントデバイス１５０によって最初に送信されたので、ファイルジャーナルインタフェース２０２がカーソルを移したことから、ファイルジャーナルインタフェース２０２は、コミットする要求と関連するカーソルが先頭にはないと判定し、その後、ステップ１３２８に説明されるようにコミットするこの要求を拒否する。その結果、ファイルジャーナルインタフェース２０２は、処理又は伝送中に遅延した、又は失われたコミットに起因する競合又はエラーを防ぐことができる。換言すれば、カーソルが移されるときに、コミットが承認されていなかった、又は受信されていなかった場合に、カーソルを移すことにより、このようなコミットが決して承認されない、又は記録されないことを確保する。
【０３４１】
また、これは、前に説明されるように、セルフオーサリングされた操作からのクライアントデバイス１５０における競合を防ぐ。例えば、クライアントデバイス１５０がクライアントデバイス１５０にコミットするインテントに失敗する場合に、カーソルを移すことにより、失敗したコミットがファイルジャーナルインタフェース２０２によって後に記録されないこと、及びクライアントデバイス１５０に後に伝播されないことを確保する。
【０３４２】
また、カーソルを移すことにより、クライアントデバイス１５０及び／又はファイルジャーナルインタフェース２０２が失敗したコミットを再試行することができる「再度のコミット」のアプローチのような、他のアプローチによって潜在的に生じる可能性がある、様々な修正又はコミットの競合を防ぐことができる。下記は、カーソルを移すことによって防止されている、このような競合又は条件の非限定的な実施例である。
【０３４３】
クライアントデバイス１５０は、「Ｆｏｏ．ｔｘｔ」をブロックリストＡに追加するインテント１２０６を記録する。クライアントデバイス１５０からのコミット要求は、ファイルジャーナルインタフェース２０２にディスパッチされるが、ネットワークにおいて遅延する。加えて、クライアントデバイス１５０は、コミットを送信した後にクラッシュする。次いで、クライアントデバイス１５０は、オンラインに戻り、リカバリモードにおいて、この追加を再コミットしようとする。ファイルジャーナルインタフェース２０２は、「Ｆｏｏ．ｔｘｔ」が既に他の箇所で最新であるため、このコミットを拒否する。クライアントデバイス１５０は、フライト中である、それ自体のコミットが失敗した証拠として拒否されたコミットを解釈し、その結果、クライアントデバイス１５０においてキャッシュ／ログをコミットするインテントをクリアする。次いで、クライアントデバイス１５０は、クライアントデバイス１５０上の「Ｆｏｏ．ｔｘｔ」をブロックリストＢに編集する。「Ｆｏｏ．ｔｘｔ」は、別のユーザ又はデバイスによってリモートに削除される。次いで、クライアントデバイス１５０からのインテント１２０６についての元のコミット要求は、ファイルジャーナルインタフェース２０２に到達し、ファイルジャーナルインタフェース２０２によって許容される。次いで、クライアントデバイス１５０は、ブロックリストＡへの「Ｆｏｏ．ｔｘｔ」の追加を、ブロックリストＢに関して編集された「Ｆｏｏ．ｔｘｔ」と同一のパスにおいてファイルジャーナルインタフェース２０２から取り出す。ここで、クライアントデバイス１５０は、ブロックリストＢに関して編集された「Ｆｏｏ．ｔｘｔ」と、ブロックリストＡに関する「Ｆｏｏ．ｔｘｔ」のそれ自体の以前の追加との間に競合を有する。その結果、クライアントデバイス１５０は、それ自体が意図せずに競合した。
【０３４４】
この例示的なシナリオは、カーソルを移すことによって防止される。例えば、ファイルジャーナルインタフェース２０２がブロックリストＡに関する「Ｆｏｏ．ｔｘｔ」についての追加コミットを後に受信するときに、コミットがクライアントデバイス１５０によって送信されたことからカーソルが移されている場合、ファイルジャーナルインタフェース２０２は、カーソルをチェックし、カーソルが先頭にはないと判定する（例えば、ステップ１３２６）。次いで、ファイルジャーナルインタフェース２０２は、コミットを拒否し、クライアントデバイス１５０がブロックリストＡに関する「Ｆｏｏ．ｔｘｔ」の追加をファイルジャーナルインタフェース２０２から取り出すのを防ぐ。したがって、コミットが失敗したとクライアントデバイス１５０が判定し、キャッシュ／ログをコミットするインテントをクリアすると、このコミットは、決して成功しないことが保証される。その結果、ファイルジャーナルインタフェース２０２及びクライアントデバイス１５０は、前の実施例における「Ｆｏｏ．ｔｘｔ」の編集後に、クライアントデバイス１５０がブロックリストＡに関する「Ｆｏｏ．ｔｘｔ」の追加を取り出さず、同一のパスにおいて、ブロックリストＡに関する「Ｆｏｏ．ｔｘｔ」と、ブロックリストＢに関する「Ｆｏｏ．ｔｘｔ」との間に競合を生じないことを保証することができる。
【０３４５】
シンボリックリンク
図１４は、例示的なシンボリックリンクを示す。シンボリックリンク（「ｓｙｍ  ｌｉｎｋ」）は、別のコンテンツアイテム（例えば、ファイル又はディレクトリ）への参照又はポインタを含むコンテンツアイテム（例えば、ファイル）である。この参照又はポインタは、相対又は絶対パスなどのターゲットコンテンツアイテムへのパスである。シンボリックリンクは、ファイル、フォルダ、又はショートカットとしてクライアントデバイス１５０上に出現することができるが、選択時に、シンボリックリンクは、ターゲットコンテンツアイテムにリダイレクトする。したがって、シンボリックリンクを使用して、シンボリックリンクからターゲットコンテンツアイテムにアクセスすることができる。
【０３４６】
図１４において、シンボリックリンク１４１０は、ターゲット１４２０へのパス１４１５に関するシンボリックリンクを描く。ユーザがシンボリックリンク１４１０上でクリックするときに、ユーザは、ターゲット１４２０にパス１４１５を介してリダイレクトされる。パス１４１５が有効であり、ユーザがターゲット１４２０にアクセスするいかなる問題にも遭遇しない場合に、ユーザは、シンボリックリンク１４１０を介してターゲット１４２０のコンテンツへのアクセスを得る。
【０３４７】
本明細書に図示されるように、パス１４１５は、絶対パス（１４３０）又は相対パス（１４４０）であることができる。絶対パス１４３０は、ターゲット１４２０のフルパスを、シンボリックリンク１４１０の相対位置に関係なく宛先ファイルシステム又は位置上に含み、シンボリックリンク１４１０とターゲット１４２０との間のいかなる相対位置にも関係なく、シンボリックリンク１４１０を介してアクセスされることができる。
【０３４８】
相対パス１４４０は、シンボリックリンク１４１０に関連するパスを含む。例えば、シンボリックリンク１４１０は、この実施例において、「／Ｒｏｏｔ／Ｄｉｒ」に位置し、ターゲット１４２０は、「／Ｒｏｏｔ／Ｄｉｒ／Ａ／ｂ．ｔｘｔ」に位置している。絶対パス１４３０において、シンボリックリンク１４１０は、ターゲット１４２０のフルパス、すなわち、「／Ｒｏｏｔ／Ｄｉｒ／Ａ／ｂ．ｔｘｔ」を指す。相対パス１４４０において、シンボリックリンク１４１０は、シンボリックリンク１４１０が位置している、「／Ｒｏｏｔ／Ｄｉｒ」に関連するターゲット１４２０へのパスである、「．．．／Ａ／ｂ．ｔｘｔ」を代替に指す。
【０３４９】
同期コンテキストにおいて、シンボリックリンクは、様々な課題を提示する。最初に、シンボリックリンクの同期ビヘイビアは、異なるオペレーティングシステム上で異なる場合がある。さらに、このシステムがシンボリックリンクを同期させるがターゲットコンテンツアイテムのコンテンツを格納せず、同期させない場合に、シンボリックリンクのコピーを受信する他のユーザ又はデバイスは、ターゲットにアクセスすることができない可能性がある。したがって、シンボリックリンクは、他のユーザアカウント又はデバイスに適切に同期させない場合があり、他のユーザアカウント又はデバイスに対して無効になる場合がある。したがって、ターゲットにシンボリックリンクによって作成されるリンクは、同期時に壊れる場合がある。これは、ユーザに対する問題をさらに生じる可能性がある。例えば、アプリケーションバンドルなどの、ある特定のコンテンツアイテムは、他のファイル又はフォルダを指すシンボリックリンクであるファイルを含むことが多い場合がある。これらのシンボリックリンクが同期を通じて壊れる場合に、コンテンツアイテム（例えば、アプリケーションバンドル）は、破損する、無効などになる。
【０３５０】
一方、シンボリックリンクを同期させるシステムがターゲットを追跡し、ターゲットのコンテンツを同期させる場合に、これは、他のユーザ又はホストに対しても複数の問題を生じる可能性がある。例えば、幾つかの例において、ターゲットは、他のユーザ又はホストにアクセス可能ではない場合があるため、同期は、一貫性がないものになる場合がある。異なるユーザ及びデバイスは、アクセス、リンク、有効性などの様々な因子に基づきシンボリックリンクについて、異なる同期結果又はビヘイビアで終わる可能性がある。さらに、このようなコンテンツが含まれることをユーザが意図しなかったときに、ターゲットのコンテンツは、ユーザのアカウント又はデバイスに追加されることができ、ユーザアカウント又はデバイスに利用可能なストレージを埋めることもできる。このような同期は、ユーザが他のユーザもしくはデバイスと共有することを意図しなかった、ターゲットコンテンツをユーザのアカウントもしくはデバイスからコピーすることによってセキュリティ上の懸念を引き起こす可能性がある、又は他のユーザもしくはデバイスがユーザのコンテンツ及び／又はデバイスへの認可されていないアクセスを得ることを可能にする場合がある。
【０３５１】
シンボリックリンク中のパスが絶対であるか、相対であるかに依存して、他の一貫性がないことも、他のホスト又はアカウントに起因する無効なリンクに基づき生じる可能性がある。例えば、シンボリックリンクに使用される絶対パスは、別のデバイスからアクセス可能ではない、クライアントデバイスのローカルファイルシステム上で有効な位置を指すことができる。したがって、絶対パスを含むシンボリックリンクが他のデバイスに同期するときに、これらのデバイスは、ターゲットへのアクセスを有さず、シンボリックリンクは、これらのデバイスに無効になる。
【０３５２】
様々な他の問題は、シンボリックリンクを同期させるときに生じる可能性がある。図１５Ａ〜Ｄは、シンボリックリンクを同期させるための様々なシナリオを示し、同期について異なるオプション、ならびに潜在的な利点及び不利な点を説明する。
【０３５３】
図１５Ａは、ターゲット及びシンボリックリンクが同一のネームスペース（例えば、ＮＳＩＤ）に含まれるときに、シンボリックリンクを同期させるための例示的なシナリオ（１５００）のテーブルを示す。このテーブルは、シンボリックリンク中のパス（例えば、１４１５）が相対パス（１４４０）であるか、絶対パス（１４３０）であるかに依存するシンボリックリンク（例えば、１４１０）の同期をハンドリングするためのオプション１５０５を含む。オプション１５０５は、以下にさらに記述される、パスが相対パス（１４４０）であるときの状況、及びパスが絶対パス（１４３０）であるときの状況についての様々な利点及び不利な点を描く。
【０３５４】
オプション１は、シンボリックリンクをシンボリックリンクとして同期させることを含む。これは、シンボリックリンクの同期が幾つかのユーザ又はデバイスに対してシンボリックリンクの無効をレンダリングすることができる場合でさえ、シンボリックリンクをシンボリックリンクとして扱い、パス（１４４０又は１４３０）を追跡することなくシンボリックリンク自体を同期させ、ターゲットを同期させることを指す。
【０３５５】
オプション１において、パス１４１５が相対パス１４４０又は絶対パス１４３０であるときに、シンボリックリンクの同期は、データ整合性（例えば、シンボリックリンクを含む、同期するデータはユーザによって格納されるようなデータを反映する）を確保することができる。また、パス（１４１５）が相対（１４４０）又は絶対（１４３０）のいずれかであるときに、オプション１は、プラットフォーム（例えば、オペレーティングシステム）にわたり一貫性を確保する。
【０３５６】
プラットフォームにわたる一貫性は、異なるプラットフォーム（例えば、オペレーティングシステム）にわたる、クライアントアプリケーション１５２の同期ビヘイビア（例えば、クライアント同期サービス１５６を介して）を指す。例えば、クライアントアプリケーション１５２が異なるオペレーティングシステム上でホストされるときに、コンテンツの操作又はイベントを検出し、同期をトリガするための機能又はタイミングは、異なってもよい。この変化は、ターゲットが存在する箇所に依存することができ、同様に他の因子によって影響される場合がある。例えば、オプション２ならびに図１５Ｃ及び１５Ｄに関して以下にさらに説明されるように、変更を検出し、変更が起こるときに同期をトリガするタイミング又は機能は、変更がターゲットコンテンツアイテム上で起こったかどうか、すなわち、「内部ターゲット」で起こったか、「外部ターゲット」で起こったかに依存するオペレーティングシステム間で異なることができる。
【０３５７】
内部ターゲットは、コンテンツ管理システム１１０との同期のために設定される、又は有効にされる、及び／又はコンテンツ管理システム１１０及び／又はクライアントアプリケーション１５２に管理及び／又は同期のために利用可能である、クライアントデバイス１５０上の領域又は位置（例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど）内に含まれるターゲットを指すことができ、そして外部ターゲットは、このような領域又は位置の外側に含まれるターゲットを指すことができる。例えば、コンテンツ管理システム１１０によって追跡されて同期し、コンテンツ管理システム１１０においてユーザアカウントについてクライアントデバイス１５０によって維持されるいずれかの、又はすべてのコンテンツアイテムを含む、クライアントデバイス１５０上のディレクトリ、ネームスペース又はフォルダは、内部ターゲットであり、このようなディレクトリ、ネームスペース又はフォルダの外側のどんなものでも外部ターゲットである。
【０３５８】
図示するように、クライアントデバイス１５０は、コンテンツ管理システム１１０上でユーザアカウント「Ｌｉｓａ」（図示せず）についてコンテンツアイテムのトップディレクトリとして機能する、ディレクトリ「／Ｈｏｍｅ／」（図示せず）を含むことができる。「／Ｈｏｍｅ／」の内側に格納されるコンテンツアイテムは、コンテンツ管理システム１１０と同期することができ、「／Ｈｏｍｅ／」の外側に存在するコンテンツアイテムは、コンテンツ管理システム１１０と同期しないことがある。したがって、ディレクトリ「／Ｈｏｍｅ／」、及び「／Ｈｏｍｅ／」内のどんなものでも、コンテンツ管理システム１１０によって内部ターゲットとみなされることができる。対照的に、ディレクトリ「／Ｈｏｍｅ／」の外側のどんなものでも、コンテンツ管理システム１１０によって外部ターゲットとみなされることができる。その結果、この実施例において、フォルダ「／Ｈｏｍｅ／Ｆｏｌｄｅｒ  Ａ／」（図示せず）は、内部ターゲットとみなされ、例えば、クライアントデバイス１５０上の「／」又は「／ｂｉｎ／」（図示せず）に、存在するいずれかのコンテンツアイテム（例えば、フォルダ、ファイルなど）は、外部ターゲットとみなされることができる。
【０３５９】
オプション１に記述されるプラットフォームにわたる一貫性の概念に戻り参照して、ターゲットが内部ターゲットであるときに、クライアントアプリケーション１５２は、一般に、内部ターゲットへの変更を検出し、異なるオペレーティングシステムを有するクライアント上で変更が起こる場合に同期をトリガすることができる。したがって、この同期ビヘイビア（すなわち、変更が起こるときにこの変更を検出して同期させる機能）は、プラットフォーム（例えば、オペレーティングシステム）にわたり一貫性がある。しかしながら、以下にさらに記述されるように、同期ビヘイビアは、変更が外部ターゲットで起こるときにプラットフォームによって異なる場合がある。
【０３６０】
図１５Ａに示されるシナリオ１５００に示されるように、オプション１は、しかしながら、シンボリックリンク又はターゲットに対して無効にされる同期を有するホストにわたり一貫性がないという結果をもたらす場合がある。これは、パス（１４１５）が相対（１４４０）又は絶対（１４３０）であるときに適用される。例えば、シンボリックリンクが「Ｆｏｌｄｅｒ  Ａ」（図示せず）を指し、無効にされる（例えば、「Ｆｏｌｄｅｒ  Ａ」の同期を選択的に無効にし、同期操作から「Ｆｏｌｄｅｒ  Ａ」を除外することによって）クライアントデバイス１５０への「Ｆｏｌｄｅｒ  Ａ」の同期をユーザが有する場合に、「Ｆｏｌｄｅｒ  Ａ」がユーザのためにクライアントデバイス１５０から除去され、コンテンツ管理システム１１０に、及び／又は他のクライアントデバイスにリモートにのみ格納されることができるので、クライアントデバイス１５０は、「Ｆｏｌｄｅｒ  Ａ」のローカルコピーを格納しない。その結果、「Ｆｏｌｄｅｒ  Ａ」を指すシンボリックリンクがクライアントデバイス１５０に同期するときに、シンボリックリンクは、それがクライアントデバイス１５０上に存在しないターゲット（すなわち、「Ｆｏｌｄｅｒ  Ａ」）を指すので無効である。
【０３６１】
パスが絶対パス（１４３０）である場合に、オプション１は、絶対パスが無効であるいずれかのホストについてのホストにわたり一貫性がない結果ももたらすことができる。例えば、図１４に示されるように、シンボリックリンク１４１０の絶対パス１４３０は、「／Ｒｏｏｔ／Ｄｉｒ／Ａ／ｂ．ｔｘｔ」においてターゲット１４２０を指す。シンボリックリンク１４１０が絶対パス１４３０（例えば、「／Ｒｏｏｔ／」、「／Ｄｉｒ／」及び／又は「／Ａ／」）中にフォルダ又はディレクトリのうちの１つ以上を含まないクライアントデバイスに同期する場合に、次いで、そのクライアントデバイスにおけるシンボリックリンク１４１０は、無効である。
【０３６２】
オプション２は、ターゲットへのシンボリックリンクを追跡し、ターゲットを同期させることを伴う。したがって、オプション２は、実際のターゲット、及びこのターゲットのコンテンツを同期させる。シンボリックリンク１４１０の実施例において、オプション２は、シンボリックリンク１４１０の代替にターゲット１４２０を同期させることを伴う。
【０３６３】
オプション２において、シンボリックリンクのパスが相対パス（１４４０）、又は絶対パス（１４３０）である場合に、同期オプション２は、シンボリックリンクに依存するコンテンツアイテムを破損させる可能性がある。例えば、アプリケーションバンドルは、他のアイテムを指すシンボリックリンクを含むことが多く、有効であるこれらのシンボリックリンクと、それらのターゲットを適切に指すそれらのパスとに依存する。したがって、オプション２において、ターゲットがシンボリックリンクの代替にそのターゲットに同期するときに、そのシンボリックリンクに依存するアプリケーションバンドルは、破損するようになる可能性がある、及び／又はエラーを発生する場合がある。図示するように、多くの異なるオペレーティングシステム及びアプリケーションは、バンドルを使用し、これらのオペレーティングシステム及びアプリケーションについてのコード及びリソースをカプセル化する。これらのバンドルは、編成のためにディレクトリ及びファイルを使用することができ、シンボリックリンクを含むことができる。オプション２がこのシンボリックリンクの代替にシンボリックリンクのターゲットを同期させるときに、シンボリックリンクは、オペレーティングシステム又はアプリケーションがシンボリックリンクを期待してシンボリックリンクを読み出そうとするときにエラーを発生するターゲットのコピーと置換される。これは、オペレーティングシステム又はアプリケーションによって読み出し不可能な、又はアクセス不可能なシンボリックリンクを介して実装されるコード、リソース、及び／又はコンテンツを順にレンダリングすることができる。
【０３６４】
また、オプション２においてターゲットを同期させることにより、前述されるように、パスが相対又は絶対のいずれかであるときに、大容量ストレージ利用に至る可能性がある。例えば、シンボリックリンクは、ユーザがそのコンテンツをクライアントデバイス上に格納したくはない、又は格納することを意図しない場合があるのに、ターゲットが同期してクライアントデバイス上に格納されることに至らせる場合がある。また、ターゲットの同期は、コンテンツ管理システム１１０においてユーザアカウントについて、より高いストレージ利用に至らせる可能性があり、ユーザアカウントにより高いコストを、又は他のコンテンツアイテムに限られた可用性をもたらす可能性がある。幾つかの事例において、ターゲットの同期は、ストレージ利用における有意な増加につながる可能性があり、そのうえコンテンツアイテムの重複につながる場合がある。例えば、写真アプリケーションなどの、幾つかのメディアアプリケーションは、それらのライブラリにシンボリックリンクを使用し、ライブラリフォルダ構造を修正する、又はより古いライブラリフォルダ構造を新規の互換性のある構造に変換することができる。ライブラリが同期したディレクトリに存在し、コンテンツ管理システム１１０によって同期について有効にされる場合に、オプション２により、ライブラリ中のすべてのシンボリックリンクについてのターゲットをデバイスにわたり同期させ、コピーさせることができる。これは、データの重複をもたらす可能性がある。例えば、ターゲットのコンテンツは、それらの実際の位置において、そしてターゲットのシンボリックリンクの位置において、格納され、同期することができる。オプション２を介して同期するターゲットコンテンツのボリュームが大きい、又はターゲットコンテンツアイテムのサイズが大きい（例えば、写真又はビデオによくあるように）場合に、重複したデータは、クライアントデバイスにわたり、またコンテンツ管理システム１１０におけるユーザアカウント（複数可）上で、ストレージ利用に有意な増加をもたらす可能性がある。
【０３６５】
相対及び絶対パスの両方について、オプション２は、アクセス、ビュー、及び／又はビヘイビアがユーザアカウント及び／又はデバイス間で異なる、同期非対称ももたらす可能性がある。例えば、第一クライアントがターゲット１４２０を指す「／Ｒｏｏｔ／」中のシンボリックリンク１４１０を「／Ｒｏｏｔ／Ｄｉｒ／Ａ／ｂ．ｔｘｔ」に追加し、「／Ｒｏｏｔ／」が第二クライアントに後で同期すると仮定する。シンボリックリンク１４１０がオプション２に従い、すなわち、ターゲット１４２０を追跡してターゲット１４２０（すなわち、「／Ｒｏｏｔ／Ｄｉｒ／Ａ／ｂ．ｔｘｔ」）を同期させることによって、同期する場合に、第二クライアントは、「／Ｒｏｏｔ／Ｄｉｒ／」においてターゲット１４２０から「ｂ．ｔｘｔ」のコピーを受信し、第一クライアントは、「／Ｒｏｏｔ／Ｄｉｒ／」においてシンボリックリンク１４１０を有する。したがって、このような非対称ビヘイビアは、同期が完了した後に第一クライアント及び第二クライアントが異なるコンテンツを含むことがある、同期に一貫性がないことを引き起こす可能性がある。さらに、このような同期非対称は、シンボリックリンクのパスが相対パス（１４４０）又は絶対パス（１４３０）であるときに発生する可能性がある。
【０３６６】
さらに、オプション２において、ターゲットの同期は、潜在的なセキュリティ問題を生じさせる可能性がある。潜在的なセキュリティ問題は、ターゲットのコンテンツが他のユーザアカウント又はデバイスに同期するときに、ターゲットが共有するように意図されていない可能性がある、又は機密データを公開する可能性があるときに結果として生じる可能性がある。次の実施例を考慮する。「Ｆｏｌｄｅｒ  Ａ」（図示せず）中のシンボリックリンクが「／ｅｔｃ／ｐａｓｓｗｏｒｄ」（図示せず）を指し、「Ｆｏｌｄｅｒ  Ａ」がコンテンツ管理システム１１０に後にアップロードされ、他のクライアントデバイスと共有される、及び／又は同期すると仮定する。「Ｆｏｌｄｅｒ  Ａ」がユーザアカウント又はクライアントデバイスと共有される、及び／又は同期するときに、「Ｆｏｌｄｅｒ  Ａ」中のコンテンツは、「Ｆｏｌｄｅｒ  Ａ」中のシンボリックリンクのターゲット「／ｅｔｃ／ｐａｓｓｗｏｒｄ」からのコンテンツを含む。しかしながら、コンテンツアイテム「／ｅｔｃ／ｐａｓｓｗｏｒｄ」は、機密又はセキュリティアイテムである場合がある。したがって、「Ｆｏｌｄｅｒ  Ａ」のコンテンツの部分として「／ｅｔｃ／ｐａｓｓｗｏｒｄ」の意図しない共有又は同期は、セキュリティホールを生じる可能性があり、ユーザのコンピュータからデータを抽出する、又はユーザのデータへの認可されていないアクセスを取得するために利用され得る。
【０３６７】
オプション３において、同期は、シンボリックリンクを単に無視し、シンボリックリンク又はターゲットコンテンツを同期させない。相対及び絶対パスの両方の事例において、このオプションは、プラットフォーム及びホストにわたり、一貫したビヘイビア及びビューを作成することができるが、シンボリックリンクに依存する、又はターゲットコンテンツへのアクセスを必要とするコンテンツアイテムを破損させる場合がある。
【０３６８】
図１５Ｂは、ターゲット及びシンボリックリンクが異なるネームスペース上に含まれるときにシンボリックリンクを同期させる例示的なシナリオ（１５１０）のテーブルを示す。シナリオ１５１０中のオプション１、２、及び３は、相対パス及び絶対パスについてシナリオ１５００と同様の利点及び不利な点を有する。しかしながら、加えて、シナリオ１５１０は、複数のネームスペースにわたるコンテンツによって引き起こされる追加の、潜在的な問題をもたらす。例えば、シンボリックリンクが異なるネームスペース上のターゲットを指す場合に、シンボリックリンクは、異なるネームスペースへのアクセスを有さないユーザ又はデバイスに同期する場合に、無効にすることができ、ターゲットコンテンツは、ユーザ又はデバイスがアクセスできないネームスペース上に存在する場合に、オプション２においてアクセスできない可能性がある。
【０３６９】
図１５Ｃは、シンボリックリンクのターゲットが内部ターゲットであるときに、シンボリックリンクを同期させるための例示的なシナリオ（１５２０）のテーブルを示す。図１５Ａを参照して前述されるように、内部ターゲットは、コンテンツ管理システム１１０との同期のために設定される、又は有効にされる、及び／又は管理及び／又は同期のためにコンテンツ管理システム１１０及び／又はクライアントアプリケーション１５２に利用可能である、クライアントデバイス１５０上の領域又は位置（例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど）内に含まれるターゲットを指すことができる。
【０３７０】
オプション１において、パスが相対パス（１４４０）又は絶対パス（１４３０）である場合に、シンボリックリンクの同期は、プラットフォームにわたるデータ整合性及び一貫性を確保することができるが、これらのホストにおいて無効にされる同期を有するターゲットについてのホストにわたり一貫性がないことを引き起こす可能性があり、複数のネームスペースにわたるシンボリックリンクに対して一貫性がない結果をもたらす可能性がある。パスが絶対パスである場合に、オプション１は、パスがホストにおいて無効である場合にこれらのホストにわたり一貫性がない結果ももたらす可能性がある。
【０３７１】
オプション２において、パスが相対パス（１４４０）又は絶対パス（１４３０）である場合に、ターゲットの同期は、プラットフォームにわたる一貫性に至らせることができるが、同期非対称、複数のネームスペースにわたるシンボリックリンクについて潜在的に一貫性がないこと、ならびにバンドルなどの有効であり、機能的であるシンボリックリンクに依存するコンテンツアイテムの破損をもたらす場合がある。加えて、パスが絶対パスである場合に、オプション２は、前に説明されるように、潜在的なセキュリティ問題を生じる可能性がある。
【０３７２】
オプション３において、パスが相対又は絶対のいずれかであるときに、シンボリックリンクを無視することにより、プラットフォーム及びホストにわたる一貫性をもたらすことができるが、有効であり、機能的であるシンボリックリンクに依存するコンテンツアイテムを破損させる場合がある。
【０３７３】
図１５Ｄは、シンボリックリンクのターゲットが外部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオ（１５３０）のテーブルを示す。図１５Ａを参照して前述されるように、外部ターゲットは、コンテンツ管理システム１１０との同期のために設定される、又は有効にされる、及び／又はコンテンツ管理システム１１０及び／又はクライアントアプリケーション１５２に管理及び／又は同期のために利用可能である、クライアントデバイス１５０上の領域又は位置（例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど）内に含まれないターゲットを指すことができる。
【０３７４】
オプション１において、パスが相対又は絶対のいずれかであるときに、シンボリックリンクを同期させることにより、データ整合性を確保することができるが、ターゲットへのアクセスを有さないユーザアカウント又はホストに対して無効なリンクをもたらす可能性があり、プラットフォームにわたり一貫性がない結果をもたらす可能性がある。
【０３７５】
プラットフォームにわたり一貫性がないことは、異なるオペレーティングシステム上に実装されているクライアントアプリケーション１５２に起因する可能性がある。例えば、ＬＩＮＵＸ、及びＡＰＰＬＥ  ＩＮＣ．によって開発されているＭＡＣＩＮＴＯＳＨオペレーティングシステム（例えば、ｍａｃＯＳ、又はＭＡＣ  ＯＳ  Ｘとも称される）などのＵＮＩＸベースのオペレーティングシステムにおいて、クライアントアプリケーション１５２中のクライアント同期サービス１５６は、外部ターゲットに起こる変更を検出することができ、外部ターゲットが更新されるときに外部ターゲットのコンテンツの同期をトリガすることができる。これは、ターゲットが更新されるときに、ウェブクライアント及び他のクライアントが外部ターゲットの最新のバージョンを有することを意味する。しかしながら、ＭＩＣＲＯＳＯＦＴ  ＣＯＲＰＯＲＡＴＩＯＮによって開発されているＷＩＮＤＯＷＳベースのオペレーティングシステムにおいて、クライアントアプリケーション１５２中のクライアント同期サービス１５６は、外部ターゲットが修正されているときに外部ターゲットへの変更を検出しない場合がある。代替に、クライアント同期サービス１５６は、クライアントアプリケーション１５２又はクライアント同期サービス１５６がホストにおいて再起動されるときに、これらのような変更を検出することができる。したがって、外部ターゲットへの変更の同期は、外部ターゲットが修正されているときに起こらない可能性があるが、後に、クライアントアプリケーション１５２又はクライアント同期サービス１５６がホストにおいて再起動されるときに起こることができる。様々な時点で、これは、幾つかのユーザアカウント又はデバイス上のコンテンツ中に一貫性がない結果をもたらすことができ、シンボリックリンク同期が壊れている、又はサポートされていないと一部のユーザが信じることにつながる可能性がある。
【０３７６】
さらに、同期したシンボリックリンクは、シンボリックリンクが作成されているホスト上でのみ有効であることが保証される。換言すれば、シンボリックリンクは、ターゲットがこれらのホスト中に存在しない可能性がある場合に、一部のホストにおいて無効にすることができる。
【０３７７】
オプション２において、パスが相対又は絶対のいずれかであるときに、ターゲットの同期は、有効であり機能的であるシンボリックリンクに依存するコンテンツアイテムを破損させ、同期非対称を生じ、そしてプラットフォームにわたり一貫性がない結果をもたらす。ターゲットに絶対パスを使用するシンボリックリンクの事例において、ターゲットの同期は、前に説明されるようにセキュリティリスクにもつながる可能性がある。
【０３７８】
オプション３において、シンボリックリンクを無視することにより、絶対パス又は相対パスのいずれかのシナリオにおいて、プラットフォーム及びホストにわたる一貫性をもたらすことができる。しかしながら、絶対パス及び相対パスの両方において、シンボリックリンクを無視することにより、シンボリックリンクに依存するいかなるコンテンツアイテムをも破損させる。
【０３７９】
シナリオ１５００、１５１０、１５２０、１５３０に示されるように、シンボリックリンクを同期させるための様々なオプション（１５０５）があり、これらの様々なオプションは、様々なシナリオに対して異なる利点及び不利な点を有し得る。各事例において、利点及び不利な点は、複数の因子によって影響される。その結果、ルール及び／又は要件は、異なるシナリオにおいてシンボリックリンクの同期をハンドリングするために構成されることができる。幾つかの事例において、これらのルールは、それらが絶対パスを含むか相対パスを含むかどうか、又はどのシナリオが特定の同期シナリオに適用されるかにかかわらず、シンボリックリンクとして常に同期しているシンボリックリンクを要求するように構成されることができる。この要件は、ホスト、プラットフォーム、シナリオなどにわたり一貫性を確保し、シンボリックリンクについて予測可能な結果及びビヘイビアを提供することができる。この同時点で、図１５Ａ〜Ｄに示されるように、このアプローチは、ある特定のシナリオにおいて一貫性がない結果、及びエラーをもたらすことができる。
【０３８０】
幾つかの事例において、これらのルールは、オプション１５０５、シナリオ１５００、１５１０、１５２０、１５３０に基づくシンボリックリンクについて異なる同期ビヘイビア、シンボリックリンク中のパスのタイプ（例えば、絶対パス１４３０又は相対パス１４４０）、及び／又はシナリオ１５００、１５１０、１５２０、１５３０に記述される様々な利点及び不利な点を定義するように作成されることができる。例えば、ルールは、すべてのインスタンスに同期する実際のシンボリックリンクを要求するが、シンボリックリンクの同期がシンボリックリンクを壊す／無効にする場合に、影響される１つ以上のユーザアカウントに対して、ユーザ入力を要求するプロンプトをコンテンツ管理システム１１０が生成することができることを提供し、そしてユーザが同期を許容する、同期を拒否する、シンボリックリンクを修正して同期後にその機能性もしくは有効性を保持することを要求する、又はターゲットへのアクセスを有さないため、シンボリックリンクを使用することができないユーザとターゲットも共有して同期させることを要求することを可能にするように定義されることができる。
【０３８１】
例えば、ターゲットへのアクセスをも有する１セットのユーザアカウント又はデバイスとシンボリックリンクを同期させている場合に、コンテンツ管理システム１１０は、シンボリックリンクの同期がシンボリックリンクを壊さない、又は無効にしないと判定し、シンボリックリンクをこれらのユーザアカウントに単純に同期させることができる。他のユーザアカウント又はデバイスと同期するときに無効にすることができるが、それ以外は他のユーザアカウント又はデバイスがターゲットへのアクセスを有する、絶対パスをシンボリックリンクが有する場合に、コンテンツ管理システム１１０は、シンボリックリンクを作成したユーザアカウントに、シンボリックリンクが他のユーザアカウント又はデバイスに対して機能しないことを通知し、他のユーザアカウント又はデバイスに対してリンクの機能性又は有効性を保持するためにシンボリックリンク中のパスを絶対から相対に変換するかどうかをユーザアカウントに尋ねることができる。ユーザは、同期後にシンボリックリンクの修正がその有効性を保持することを可能にすることができ、コンテンツ管理システム１１０は、シンボリックリンクの同期したコピーを受信するすべてのユーザアカウント又はデバイスに対して有効である、相対パスに絶対パスを変更することができる。この実施例において他のユーザアカウント又はデバイスがターゲットへのアクセスを既に有することから、シンボリックリンクは、各ユーザアカウント又はデバイスに対して適切に機能し、シンボリックリンクからターゲットにアクセスすることを可能にする。
【０３８２】
ユーザアカウント又はデバイスがターゲットの同期を無効にした場合に、シンボリックリンクは、パスが相対パスに修正されている場合でも、そのユーザアカウント又はデバイスに対して無効である。この事例において、コンテンツ管理システム１１０は、ターゲットについての同期がそのユーザアカウント又はデバイスに対して選択的に無効にされているため、シンボリックリンクがそのユーザアカウント又はデバイスに対して機能しないと判定し、このユーザアカウント又はデバイスに対して通知を生成することができる。この通知は、同期がターゲットについて選択的に無効にされている間、シンボリックリンクが機能しないことを示し、ターゲットについての同期設定を修正してターゲットの同期を選択的に有効にするオプションをユーザアカウント又はデバイスに対して提供することができる。ユーザアカウント又はデバイスがターゲットの同期の有効化を許容する場合に、このターゲットは、ユーザアカウント又はデバイスと同期することができ、その後、シンボリックリンクは、適切に機能することができる。
【０３８３】
ユーザアカウント又はデバイスがターゲットへのアクセスを有さない場合に、コンテンツ管理システム１１０は、シンボリックリンクをそのアカウント又はデバイスと同期させるが、このシンボリックリンクを作成したユーザアカウント又はデバイス（又はシンボリックリンク及びターゲットの両方へのアクセスを有するいずれかの他のユーザアカウント）に、ターゲットへのアクセスを有さない特定のユーザアカウント又はデバイスに対してシンボリックリンクが無効であることを示す警告を生成することができる。ユーザアカウント又はデバイスは、シナリオ１５００、１５１０、１５２０、１５３０に記述されているような、ターゲットがユーザアカウント又はデバイスによってアクセス可能ではない位置（例えば、ネームスペース、外部位置など）に置かれているなどの、複数の理由でターゲットへのアクセスを有さない場合がある。幾つかの事例において、警告は、ターゲットへのアクセスを有さないユーザアカウント又はデバイスとターゲットを共有するオプションも提供することができる。例えば、警告は、特定のユーザアカウント又はデバイスがターゲットへのアクセスを有さないため、シンボリックリンクがシンボリックリンクのコピーを受信する特定のユーザアカウント又はデバイスに対して無効であることを示し、このターゲットを特定のユーザアカウント又はデバイスと共有するオプションを提供することができる。警告を受信し、ユーザがターゲットを特定のユーザアカウント又はデバイスと共有することを可能にするパーミッションを有する、そのユーザがターゲットを特定のユーザアカウント又はデバイスと共有することを許容する場合に、コンテンツ管理システム１１０は、シンボリックリンク及びターゲットの両方を特定のユーザアカウント又はデバイスと順に同期させることができる。これは、シンボリックリンクがその特定のユーザアカウント又はデバイスに対して有効であることを順に確保することができる。
【０３８４】
特定のユーザアカウント又はデバイスに対して有効ではない絶対パスをシンボリックリンクが含むため、ターゲットをその特定のユーザアカウント又はデバイスに同期させた後に、シンボリックリンクがその特定のユーザアカウント又はデバイスに対してまだ無効であるとコンテンツ管理システム１１０が判定する場合に、次いで、コンテンツ管理システム１１０は、シンボリックリンク中のパスを絶対パスから、同期したコンテンツアイテムの構造内で機能する相対パスに修正するためのオプションを警告中にさらに含むことができる。
【０３８５】
図１６は、コンピューティングシステム１６００の実施例を示し、このコンピューティングシステムは、クライアントデバイス１５０、コンテンツ管理システム１１０又はそれらのいずれかのコンポーネントを構成する、例えば、いずれかのコンピューティングデバイスであることができ、このシステムのこれらのコンポーネントは、接続１６０５を使用して互いに通信する。接続１６０５は、バスを介する物理的な接続、又はチップセットアーキテクチャなどの、プロセッサ１６１０中に直接接続であることができる。また、接続１６０５は、仮想接続、ネットワーク化された接続、又は論理接続であることができる。
【０３８６】
幾つかの実施形態において、コンピューティングシステム１６００は、本開示に記述される機能が１つのデータセンター、複数のデータセンター、ピアネットワークなどの内に分散されることができる分散システムである。幾つかの実施形態において、記述されたシステムのコンポーネントのうちの１つ以上は、コンポーネントが記述されている機能のうちの幾つか、又はすべてを各実行する、多くのこれらのようなコンポーネントを表す。幾つかの実施形態において、これらのコンポーネントは、物理デバイス又は仮想デバイスであることができる。
【０３８７】
例示的なシステム１６００は、少なくとも１つの処理ユニット（ＣＰＵ又はプロセッサ）１６１０、ならびに読み出し専用メモリ（ＲＯＭ）１６２０及びランダムアクセスメモリ（ＲＡＭ）１６２５などのシステムメモリ１６１５を含む様々なシステムコンポーネントをプロセッサ１６１０に結合する接続１６０５を備える。コンピューティングシステム１６００は、プロセッサ１６１０の部分と、直接に、近接して、又は統合されて、接続される高速メモリ１６１２のキャッシュを含むことができる。
【０３８８】
プロセッサ１６１０は、いずれかの汎用プロセッサ、ならびにストレージデバイス１６３０に格納され、プロセッサ１６１０を制御するように構成されるサービス１６３２、１６３４、及び１６３６などのハードウェアサービス又はソフトウェアサービスだけではなく、ソフトウェア命令が実際のプロセッサ設計中に組み込まれる専用プロセッサをも含むことができる。プロセッサ１６１０は、本質的に、複数のコア又はプロセッサ、１つのバス、メモリコントローラ、キャッシュなどを含む、完全に自己完結型コンピューティングシステムであることができる。マルチコアプロセッサは、対称又は非対称であることができる。
【０３８９】
ユーザインタラクションを可能にするために、コンピューティングシステム１６００は、入力デバイス１６４５を含み、この入力デバイスは、音声用のマイクロフォン、ジェスチャ又はグラフィカル入力用のタッチパネル、キーボード、マウス、モーション入力、音声などのような、いずれかの数の入力メカニズムを表すことができる。また、コンピューティングシステム１６００は、出力デバイス１６３５を含むことができ、この出力デバイスは、当業者に知られている複数の出力メカニズムのうちの１つ以上であることができる。幾つかの例において、マルチモーダルシステムは、コンピューティングシステム１６００と通信する複数のタイプの入力／出力をユーザが提供することを可能にする。コンピューティングシステム１６００は、通信インタフェース１６４０を含むことができ、この通信インタフェースは、ユーザ入力及びシステム出力を一般的に規制し、管理することができる。いずれかの特定のハードウェア配置上の操作に制約がないため、本明細書における基本機能は、それらが開発されているような改善されたハードウェア又はファームウェア配置の代わりに容易に使用されることができる。
【０３９０】
ストレージデバイス１６３０は、不揮発性メモリデバイスであることができ、ハードディスク、又はコンピュータによってアクセス可能であるデータを格納することができる、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタルバーサタイルディスク、カートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、及び／又はこれらのデバイスの幾つかの組み合わせのような、他のタイプのコンピュータ可読媒体であることができる。
【０３９１】
ストレージデバイス１６３０は、ソフトウェアサービス、サーバ、サービスなどを含むことができ、このようなソフトウェアを定義するコードがプロセッサ１６１０によって実行されるときに、そのコードがシステムに機能を実行させる。幾つかの実施形態において、特定の機能を実行するハードウェアサービスは、この機能を実行する、プロセッサ１６１０、接続１６０５、出力デバイス１６３５などのような、必要なハードウェアコンポーネントと関連するコンピュータ可読媒体に格納されるソフトウェアコンポーネントを含むことができる。
【０３９２】
説明の明確さのために、幾つかの例において、本技術は、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせに具体化される方法において、デバイス、デバイスコンポーネント、ステップ又はルーチンを有する機能ブロックを含む個々の機能ブロックを備えるように提示されることができる。
【０３９３】
本明細書に記述されるステップ、操作、機能、又はプロセスのいずれかは、ハードウェア及びソフトウェアサービスの組み合わせ、もしくはサービス単独で、又は他のデバイスと組み合わせて実行される、又は実装されることができる。幾つかの実施形態において、サービスは、クライアントデバイスのメモリ、及び／又はコンテンツ管理システムの１つ以上のサーバに存在するソフトウェアであり、プロセッサがサービスと関連するソフトウェアを実行するときに１つ以上の機能を実行することができる。幾つかの実施形態において、サービスは、特定の機能を実行するプログラム又はプログラムコレクションである。幾つかの実施形態において、サービスは、サーバとみなされることができる。メモリは、非一時的なコンピュータ可読媒体であることができる。
【０３９４】
幾つかの実施形態において、コンピュータ可読ストレージデバイス、媒体、及びメモリは、ビットストリーム及び同様のものを有するケーブル又は無線信号を含むことができる。しかしながら、言及されるときに、非一時的なコンピュータ可読記憶媒体は、エネルギー、搬送信号、電磁波、及び信号自体を明確に除外する。
【０３９５】
上述される実施例による方法は、格納される、又はその他の方法によりコンピュータ可読媒体から利用可能である、コンピュータ実行可能命令を使用して、実装されることができる。これらのような命令は、例えば、汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスに、ある特定の機能、もしくは機能群を実行させる、又はその他の方法により汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスがある特定の機能、もしくは機能群を実行するように設定する、命令及びデータを含むことができる。使用されているコンピュータリソースの部分は、ネットワーク経由でアクセス可能である。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式命令、ファームウェア、又はソースコードであり得る。命令、使用される情報、及び／又は記述された実施例に従う方法中に作成される情報を格納するために使用されることができるコンピュータ可読媒体の実施例は、磁気又は光ディスク、ソリッドステートメモリデバイス、フラッシュメモリ、不揮発性メモリによって提供されるＵＳＢデバイス、ネットワーク化されたストレージデバイスなどを含む。
【０３９６】
これらの開示に従う方法を実装するデバイスは、ハードウェア、ファームウェア及び／又はソフトウェアを含むことができ、様々なフォームファクタのいずれかを取ることができる。これらのようなフォームファクタの典型的な実施例は、サーバ、ラップトップ、スマートフォン、スモールフォームファクタパーソナルコンピュータ、パーソナルデジタルアシスタントなどを含む。また、本明細書に記述される機能性は、周辺機器又はアドインカードに具体化されることができる。また、このような機能性は、さらなる実施例として、異なるチップ間回路基板、又は単一のデバイス中で実行する異なるプロセスに実装されることができる。
【０３９７】
これらの命令、これらのような命令を伝えるための媒体、それらを実行するためのコンピューティングリソース、及びこれらのようなコンピューティングリソースをサポートするための他の構造は、これらの開示に記述される機能を提供するための手段である。
【０３９８】
様々な実施例及び他の情報を使用して、添付の特許請求の範囲内で態様を説明したが、特許請求の範囲の制限は、当業者がこれらの実施例を使用して多種多様な実施態様を導出することができる場合に、これらのような実施例における特定の特徴又は配置に基づき黙示的に伝えられるべきではない。さらに、ある発明の主題が構造的特徴及び／又は方法ステップの実施例に特有の言語で記述されている場合があるが、添付の特許請求の範囲に定義されている本発明の主題がこれらの記述された特徴また行為に必ずしも限定されないことを理解するであろう。例えば、このような機能性は、本明細書において特定されている構成要素以外の構成要素に、異なるように分散される、又は実行されることができる。むしろ、記述された特徴及びステップは、添付の特許請求の範囲内でシステム及び方法の構成要素の実施例として開示されている。
【図１Ａ】
2021509205.tif 000003
【図１Ｂ】
2021509205.tif 000004
【図２Ａ】
2021509205.tif 000005
【図２Ｂ】
2021509205.tif 000006
【図３Ａ】
2021509205.tif 000007
【図３Ｂ】
2021509205.tif 000008
【図４Ａ】
2021509205.tif 000009
【図４Ｂ】
2021509205.tif 000010
【図４Ｃ】
2021509205.tif 000011
【図５Ａ】
2021509205.tif 000012
【図５Ｂ】
2021509205.tif 000013
【図６Ａ】
2021509205.tif 000014
【図６Ｂ】
2021509205.tif 000015
【図６Ｃ】
2021509205.tif 000016
【図６Ｄ】
2021509205.tif 000017
【図７Ａ】
2021509205.tif 000018
【図７Ｂ】
2021509205.tif 000019
【図８Ａ】
2021509205.tif 000020
【図８Ｂ】
2021509205.tif 000021
【図９Ａ】
2021509205.tif 000022
【図９Ｂ】
2021509205.tif 000023
【図９Ｃ】
2021509205.tif 000024
【図９Ｄ】
2021509205.tif 000025
【図１０Ａ】
2021509205.tif 000026
【図１０Ｂ】
2021509205.tif 000027
【図１１Ａ】
2021509205.tif 000028
【図１１Ｂ】
2021509205.tif 000029
【図１１Ｃ】
2021509205.tif 000030
【図１１Ｄ】
2021509205.tif 000031
【図１２】
2021509205.tif 000032
【図１３Ａ】
2021509205.tif 000033
【図１３Ｂ】
2021509205.tif 000034
【図１４】
2021509205.tif 000035
【図１５Ａ】
2021509205.tif 000036
【図１５Ｂ】
2021509205.tif 000037
【図１５Ｃ】
2021509205.tif 000038
【図１５Ｄ】
2021509205.tif 000039
【図１６】
2021509205.tif 000040
【手続補正書】
【提出日】令和2年7月8日(2020.7.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンテンツ管理システムのユーザアカウントに関連付けられたコンテンツアイテムをクライアントデバイスに追加することと、
クライアントアプリケーションによって前記コンテンツ管理システムに、前記ユーザアカウントに関連付けられた前記コンテンツアイテムの一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することであって、前記一意の識別子は、前記コンテンツ管理システムにおける総てのネームスペースにわたりグローバルで一意である、前記送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連づけられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについての新規の一意の識別子を取得することと、
を含む、方法。
【請求項２】
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから除去することと、
前記一意の識別子を前記コンテンツアイテムから除去した後に、前記コンテンツアイテムについての前記新規の一意の識別子を取得することと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記方法は、前記コンテンツアイテムに対応するパスと、前記コンテンツアイテムに対応する名前とのうちの少なくとも１つに以前に関連付けられた第二コンテンツアイテムから、前記コンテンツアイテムが前記一意の識別子を継承するかどうかを判定することを含む、請求項１に記載の方法。
【請求項４】
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
をさらに含む、請求項３に記載の方法。
【請求項５】
前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することに応答して、前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすること、
をさらに含む、請求項４に記載の方法。
【請求項６】
前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすることは、
前記一意の識別子が前記第二コンテンツアイテムに前記第二コンテンツアイテムのそれぞれの一意の識別子として割り当てられていると判定することと、
前記一意の識別子を前記第二コンテンツアイテムから抽出することと、
前記一意の識別子を前記コンテンツアイテムに関連付けることと、
を含む、請求項５に記載の方法。
【請求項７】
前記一意の識別子を前記コンテンツアイテムに拡張属性としてアペンドすることをさらに含む、請求項６に記載の方法。
【請求項８】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記方法は、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムに要求することと、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムから受信することと、
前記クライアントアプリケーションを介して、前記一意の識別子を前記コンテンツアイテムに関連付けることと、
を含む、請求項１に記載の方法。
【請求項９】
前記一意の識別子を前記コンテンツアイテムに関連付けることは、前記一意の識別子を前記コンテンツアイテムに前記コンテンツアイテムの拡張属性として書き込むことを含む、請求項８に記載の方法。
【請求項１０】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記方法は、
前記コンテンツアイテムに関連付けられたパスを識別することと、
第二コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第二コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を割り当てることと、
を含む、請求項１に記載の方法。
【請求項１１】
命令を含む非一時的コンピュータ可読媒体であって、
前記命令は、１つ以上のプロセッサによって実行されるときに、クライアントデバイスに、
コンテンツ管理システムのユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションによって前記コンテンツ管理システムに、前記ユーザアカウントに関連付けられた前記コンテンツアイテムの一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することであって、前記一意の識別子は、前記コンテンツ管理システムにおける総てのコンテンツアイテムにわたりグローバルで一意である、前記送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについて新規の一意の識別子を取得することと、
を行わせる、非一時的コンピュータ可読媒体。
【請求項１２】
前記１つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから除去することと、
前記一意の識別子を前記コンテンツアイテムから除去した後に、前記コンテンツアイテムについて前記新規の一意の識別子を取得することと、
を行わせる命令を格納する、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１３】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記命令は、前記クライアントデバイスに、前記コンテンツアイテムに対応するパスと、前記コンテンツアイテムに対応する名前とのうちの少なくとも１つに以前に関連付けられた第二コンテンツアイテムから、前記コンテンツアイテムが前記一意の識別子を継承するかどうかを判定することを行わせる、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１４】
前記１つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに対応する前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することに応答して、前記一意の識別子を前記第二コンテンツアイテムから前記コンテンツアイテムに再割り当てすることと、
を行わせる命令を格納する、請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１５】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記命令は、前記クライアントデバイスに、
前記コンテンツアイテムに関連付けられたパスを識別することと、
第二コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第二コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を再割り当てすることであって、前記再割り当てすることは、前記一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムに関連付けることを含む、前記再割り当てすることと、
を行わせる、請求項１１に記載の非一時的コンピュータ可読媒体。
【請求項１６】
コンピューティングデバイスであって、
１つ以上のプロセッサと、
命令を格納する少なくとも１つの非一時的コンピュータ可読媒体と、
を備え、
前記命令は、前記１つ以上のプロセッサによって実行されるときに、前記コンピューティングデバイスに、
コンテンツ管理システムのユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションによって前記コンテンツ管理システムに、前記ユーザアカウントに関連付けられた前記コンテンツアイテムの一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することであって、前記一意の識別子は、前記コンテンツ管理システムにおける総てのコンテンツアイテムにわたりグローバルで一意である、前記送信することと、
前記要求に基づき、前記クライアントアプリケーションによって、前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるかどうかを判定することと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であるときに、
前記コンテンツアイテムを表すノードを前記コンピューティングデバイスにおけるローカルツリーに追加することであって、前記ノードは前記一意の識別子を含み、前記ローカルツリーは前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記コンピューティングデバイスにおけるファイルシステム状態を表す、前記追加することと、
前記一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記コンテンツアイテムについて新規の一意の識別子を取得することと、
を行わせる、コンピューティングデバイス。
【請求項１７】
前記１つ以上のプロセッサによって実行されるときに、前記コンピューティングデバイスに、
前記一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないときに、前記一意の識別子を前記コンテンツアイテムから抜き出すことと、
前記一意の識別子を前記コンテンツアイテムから抜き出した後に、前記コンテンツアイテムについて前記新規の一意の識別子を取得すること、
を行わせる命令を格納する、請求項１６に記載のコンピューティングデバイス。
【請求項１８】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記命令は、前記コンピューティングデバイスに、
第二コンテンツアイテムが前記コンピューティングデバイス上で前記コンテンツアイテムに関連付けられたパスに以前に位置していたと判定することと、
前記第二コンテンツアイテムが前記コンテンツアイテムに関連付けられた前記パスに以前に位置していたと判定することに応答して、前記コンテンツアイテムが前記第二コンテンツアイテムに割り当てられたそれぞれの識別子を継承すると判定することであって、前記それぞれの識別子が前記一意の識別子を含む、前記判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムに関連付けられた前記それぞれの識別子を継承すると判定することに応答して、
前記一意の識別子を前記第二コンテンツアイテムから取得することと、
前記一意の識別子を前記コンテンツアイテムの属性として前記コンテンツアイテムに関連付けることと、
を行わせる、請求項１６に記載のコンピューティングデバイス。
【請求項１９】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記命令は、前記コンピューティングデバイスに、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムに要求することと、
前記クライアントアプリケーションを介して、前記コンテンツアイテムについての前記一意の識別子を前記コンテンツ管理システムから受信することと、
前記クライアントアプリケーションを介して、前記一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムにアペンドすることと、
を行わせる、請求項１６に記載のコンピューティングデバイス。
【請求項２０】
前記一意の識別子の一意性を検証する前記要求を送信する前に、前記命令は、前記コンピューティングデバイスに、
前記コンテンツアイテムに関連付けられたパスを識別することと、
前記コンテンツアイテムに関連付けられた前記パスが第二コンテンツアイテムの以前のパスを含むと判定することと、
前記コンテンツアイテムに関連付けられた前記パスが前記第二コンテンツアイテムの前記以前のパスを含むと判定することに応答して、前記コンテンツアイテムが前記コンピューティングデバイス上で、復活している、又は、前記パスに移動している前記第二コンテンツアイテムのバージョンを含むと判定することと、
前記クライアントアプリケーションを介して、前記第二コンテンツアイテムが前記一意の識別子に関連付けられていると判定することと、
前記コンテンツアイテムが前記第二コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが前記一意の識別子を前記第二コンテンツアイテムから継承すると判定することと、
前記第二コンテンツアイテムから前記コンテンツアイテムに前記一意の識別子を割り当てることと、
を行わせる、請求項１６に記載のコンピューティングデバイス。
【国際調査報告】
2021509205.tif 000041
2021509205.tif 000042