(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-28
(45)【発行日】2023-12-06
(54)【発明の名称】コンテンツアイテム同期のための一意の識別子の割り振り及び再割り当て
(51)【国際特許分類】
G06F 16/182 20190101AFI20231129BHJP
【FI】
G06F16/182
(21)【出願番号】P 2020536083
(86)(22)【出願日】2018-12-10
(86)【国際出願番号】 US2018064659
(87)【国際公開番号】W WO2019133228
(87)【国際公開日】2019-07-04
【審査請求日】2020-07-08
【審判番号】
【審判請求日】2022-12-08
(32)【優先日】2018-01-12
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-12-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-12-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509117964
【氏名又は名称】ドロップボックス, インコーポレイテッド
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】ゴールドバーグ, アイザック
(72)【発明者】
【氏名】レイ, ジョン
(72)【発明者】
【氏名】ジャヤカル, サンジャイ
【合議体】
【審判長】林 毅
【審判官】山崎 慎一
【審判官】吉田 美彦
(56)【参考文献】
【文献】米国特許出願公開第2014/0189051(US,A1)
【文献】特表2014-524210(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F16/182
(57)【特許請求の範囲】
【請求項1】
クライアントデバイスによって実行される方法であって、
コンテンツ管理システムにおいてユーザアカウントに関連付けられたコンテンツアイテムをクライアントデバイスに追加することと、
前記クライアントデバイスのクライアントアプリケーションを介して、前記コンテンツアイテムが第2コンテンツアイテムに関連しているかを判定することであって、当該判定することは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応するパスに以前に位置していたかを判定すること、或いは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応する名前を有しているかを判定することを含む、ことと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連している場合、前記第2コンテンツアイテムから継承した第2の一意の識別子を前記コンテンツアイテムに再割り当てすることと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連していない場合、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を有さないことを判定す
ることと、
前記コンテンツ管理システムに、前記コンテンツアイテムの新たな一意の識別子の要求を送信することであって、前記新たな一意の識別子は、前記コンテンツ管理システムによって定義される、ことと、
前記コンテンツ管理システムから、前記コンテンツアイテムの前記新たな一意の識別子を受信することと、
前記クライアントアプリケーションによって、前記コンテンツ管理システムに、前記新たな一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記クライアントアプリケーションによって、前記要求に基づく判定であって、前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意である、又は、前記コンテンツ管理システムにおいて検証可能に一意ではないと特定している前記判定を受信することと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であると特定されている場合に、
前記クライアントアプリケーションによって、前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは、前記新たな一意の識別子を含み、前記ローカルツリーは、前記ユーザアカウントに関連づけられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、ことと、
前記新たな一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないと特定されている場合に、
前記コンテンツアイテムから前記新たな一意の識別子を削除することと、
前記コンテンツアイテムについての第2の新たな一意の識別子を取得することと、
を含む、方法。
【請求項2】
前記コンテンツアイテムが第2コンテンツアイテムに関連することを判定することをさらに含む、請求項1に記載の方法。
【請求項3】
前記コンテンツアイテムに対応する前記パスを識別することと、
前記第2コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第2コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第2コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第2コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが、前記第2コンテンツアイテムから第2の一意の識別子を継承すると判定することと、
を含む、請求項2に記載の方法。
【請求項4】
前記第2コンテンツアイテムからの前記第2の一意の識別子を前記コンテンツアイテムに再割り当てすることは、
前記第2の一意の識別子が、前記第2コンテンツアイテムのそれぞれの一意の識別子として前記第2コンテンツアイテムに割り当てられていると判定することと、
前記第2コンテンツアイテムから前記第2の一意の識別子を抽出することと、
前記第2の一意の識別子を前記コンテンツアイテムに関連付けることと、
を含む、請求項1に記載の方法。
【請求項5】
前記第2の一意の識別子を拡張属性として前記コンテンツアイテムにアペンドすることをさらに含む、請求項4に記載の方法。
【請求項6】
前記新たな一意の識別を受信することは、
前記クライアントアプリケーションを介して、前記新たな一意の識別子を前記コンテンツアイテムに関連付けることをさらに含む、請求項1に記載の方法。
【請求項7】
前記新たな一意の識別子を前記コンテンツアイテムに関連付けることは、前記新たな一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムに書き込むことを含む、請求項6に記載の方法。
【請求項8】
命令を含む非一時的コンピュータ可読媒体であって、
前記命令は、1つ以上のプロセッサによって実行されるときに、クライアントデバイスに、
コンテンツ管理システムにおいてユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションを介して、前記コンテンツアイテムが第2コンテンツアイテムに関連しているかを判定することであって、当該判定することは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応するパスに以前に位置していたかを判定すること、或いは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応する名前を有しているかを判定することを含む、ことと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連している場合、前記第2コンテンツアイテムから継承した第2の一意の識別子を前記コンテンツアイテムに再割り当てすることと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連していない場合、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を有さないことを判定す
ることと、
前記コンテンツ管理システムに、前記コンテンツアイテムの新たな一意の識別子の要求を送信することであって、前記新たな一意の識別子は、前記コンテンツ管理システムによって定義される、ことと、
前記コンテンツ管理システムから、前記コンテンツアイテムの前記新たな一意の識別子を受信することと、
前記クライアントアプリケーションによって、前記コンテンツ管理システムに、前記新たな一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記クライアントアプリケーションによって、前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意である、又は、前記コンテンツ管理システムにおいて検証可能に一意ではないと特定している判定を受信することと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であると特定されている場合に、
前記クライアントアプリケーションによって、前記コンテンツアイテムを表すノードを前記クライアントデバイスにおけるローカルツリーに追加することであって、前記ノードは、前記新たな一意の識別子を含み、前記ローカルツリーは、前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記クライアントデバイスにおけるファイルシステム状態を表す、ことと、
前記新たな一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないと特定されている場合に、
前記コンテンツアイテムから前記新たな一意の識別子を削除することと、
前記コンテンツアイテムについて第2の新たな一意の識別子を取得することと、
を行わせる、非一時的コンピュータ可読媒体。
【請求項9】
前記1つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記コンテンツアイテムが第2コンテンツアイテムに関連することを判定すること、を行わせる命令を
含む、請求項8に記載の非一時的コンピュータ可読媒体。
【請求項10】
前記1つ以上のプロセッサによって実行されるときに、前記クライアントデバイスに、
前記コンテンツアイテムに対応する前記パスを識別することと、
前記第2コンテンツアイテムに関連付けられた以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することと、
前記第2コンテンツアイテムに関連付けられた前記以前のパスが前記コンテンツアイテムに関連付けられた前記パスにマッチングすると判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンテンツアイテムに関連付けられた前記パスに移動している前記第2コンテンツアイテムのバージョンを含むと判定することと、
前記コンテンツアイテムが前記第2コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが、前記第2コンテンツアイテムから第2の一意の識別子を継承すると判定することと、
を
行わせる命令をさらに含み、
前記第2の一意の識別子を再割り当てすることは、前記コンテンツアイテムの拡張属性として前記一意の識別子に関連付けることを含む、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項11】
コンピューティングデバイスであって、
1つ以上のプロセッサと、
命令を格納する少なくとも1つの非一時的コンピュータ可読媒体と、
を備え、
前記命令は、前記1つ以上のプロセッサによって実行されるときに、前記コンピューティングデバイスに、
コンテンツ管理システムおいてユーザアカウントに関連付けられたコンテンツアイテムを格納することと、
クライアントアプリケーションを介して、前記コンテンツアイテムが第2コンテンツアイテムに関連しているかを判定することであって、当該判定することは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応するパスに以前に位置していたかを判定すること、或いは、前記第2コンテンツアイテムが、前記コンテンツアイテムに対応する名前を有しているかを判定することを含む、ことと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連している場合、前記第2コンテンツアイテムから継承した第2の一意の識別子を前記コンテンツアイテムに再割り当てすることと、
前記コンテンツアイテムが前記第2コンテンツアイテムに関連していない場合、前記コンテンツアイテムが前記コンテンツ管理システムからの一意の識別子を有さないことを判定す
ることと、
前記コンテンツ管理システムに、前記コンテンツアイテムの新たな一意の識別子の要求を送信することであって、前記新たな一意の識別子は、前記コンテンツ管理システムによって定義される、ことと、
前記コンテンツ管理システムから、前記コンテンツアイテムの前記新たな一意の識別子を受信することと、
前記クライアントアプリケーションによって、前記コンテンツ管理システムに、前記新たな一意の識別子の一意性を前記コンテンツ管理システムにおいて検証する要求を送信することと、
前記クライアントアプリケーションによって、前記要求に基づく判定であって、前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意である、又は、前記コンテンツ管理システムにおいて検証可能に一意ではないと特定している前記判定を受信することと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意であると特定されている場合に、
前記クライアントアプリケーションによって、前記コンテンツアイテムを表すノードを前記コンピューティングデバイスにおけるローカルツリーに追加することであって、前記ノードは、前記新たな一意の識別子を含み、前記ローカルツリーは、前記ユーザアカウントに関連付けられたコンテンツアイテムについての前記コンピューティングデバイスにおけるファイルシステム状態を表す、ことと、
前記新たな一意の識別子と共に前記コンテンツアイテムを前記コンテンツ管理システムにアップロードすることと、
前記新たな一意の識別子が前記コンテンツ管理システムにおいて検証可能に一意ではないと特定されている場合に、
前記コンテンツアイテムから前記新たな一意の識別子を削除することと、
前記コンテンツアイテムについての第2の新たな一意の識別子を取得することと、
を行わせる、コンピューティングデバイス。
【請求項12】
前記コンテンツアイテムが第2コンテンツアイテムに関連すると判定することに応答して、
前記第2コンテンツアイテムから前記第2の一意の識別子を取得することと、
前記第2の一意の識別子を前記コンテンツアイテムの属性として前記コンテンツアイテムに関連づけることと、
をさらに含む、請求項11に記載のコンピューティングデバイス。
【請求項13】
前記コンテンツアイテムの前記新たな一意の識別子を受信することは、
前記クライアントアプリケーションを介して、前記新たな一意の識別子を前記コンテンツアイテムの拡張属性として前記コンテンツアイテムにアペンドすることをさらに含む、請求項11に記載のコンピューティングデバイス。
【請求項14】
前記コンテンツアイテムに対応する前記パスを識別することと、
前記コンテンツアイテムに関連付けられた前記パスが前記第2コンテンツアイテムの以前のパスを含むと判定することと、
前記コンテンツアイテムに関連付けられた前記パスが前記第2コンテンツアイテムの前記以前のパスを含むと判定することに応答して、前記コンテンツアイテムが、復活している、又は、前記コンピューティングデバイスの前記パスに移動している前記第2コンテンツアイテムのバージョンを含むと判定することと、
前記クライアントアプリケーションを介して、前記第2コンテンツアイテムが第2の一意の識別子に関連付けられていることを判定することと、
前記コンテンツアイテムが前記第2コンテンツアイテムの前記バージョンを含むと判定することに基づき、前記コンテンツアイテムが、前記第2コンテンツアイテムから前記第2の一意の識別子を継承すると判定することと、
をさらに含む、請求項11に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2018年1月12に出願された米国非仮出願第15/870,221号、2017年12月29日に出願された米国非仮出願第15/858,357号、及び2017年12月28日に出願された米国仮出願第62/611,473号に優先権を主張し、これらのすべては、それらの全体が本明細書に参照により明示的に援用される。
【0002】
本技術は、分散ストレージ、コラボレーション及び同期システムに関する。
【背景技術】
【0003】
クラウドストレージシステムにより、ユーザがクラウド上にデータを格納し、このデータにアクセスすることが可能である。幾つかのクラウドストレージシステムにより、コラボレーション方式において、ユーザが、他のユーザとデータを共有し、このデータにアクセスすることが可能である。幾つかの事例において、ユーザは、ユーザのクライアントデバイス上にデータのローカルコピーを格納し、これらのローカルコピーにアクセスすることができる。データのローカルコピーは、ユーザにデータへのより高速なアクセスを提供することができる。加えて、ローカルコピーにより、ユーザがオフラインであるときに、ユーザが、データにアクセスすることを可能にすることができる。また、クラウドストレージシステムにより、ユーザがデータのそれらのローカルコピーをクラウド上のデータと同期させることが可能であり、一貫性を確保することができる。クラウドストレージシステムは、複数のクライアントデバイス及びサーバにわたるデータのコピーを同期させようとすることができるため、データの各コピーは、同一である。しかしながら、複数のデバイスにわたるデータの同期は、非常に困難なタスクである可能性があり、データ及び一貫性の望ましくない損失をもたらすことが多い。
【0004】
本技術の上記に列挙されている利点及び特徴、ならびに他の利点及び特徴は、添付の図面に示される具体的な実施態様への参照によって明らかになるであろう。当業者は、これらの図面が本技術の幾つかの実施例を示すに過ぎず、本技術の範囲をこれらの実施例に限定しないことを理解するであろう。さらに、当業者は、添付の図面の使用を通じて追加の特殊性及び詳細が記述され、説明される通りに、本技術の原理を理解する。
【図面の簡単な説明】
【0005】
【
図1A】コンテンツ管理システム及びクライアントデバイスの実施例を示す。
【
図1B】幾つかの態様によるクライアント同期サービスの実施例を示す。
【
図2A】
図1Aに示されるコンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャの概略図を示す。
【
図2B】
図2Aに示されるコンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャにおいて、コンテンツアイテムのブロックを格納して追跡するための例示的な構成を示す。
【
図3A】コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間のファイルジャーナルインタフェースによって処理される例示的な通信の図を示す。
【
図3B】コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間で通信を変換するための例示的なプロセスの図を示す。
【
図4A】サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。
【
図4B】クライアントデバイスからの操作をサーバファイルジャーナルについてのリビジョンに変換するための例示的な変換及び線形化プロセスの図を示す。
【
図4C】ネームスペース間操作の例示的な線形化を示す。
【
図5A】本技術の幾つかの態様に従いネームスペースビューを作成する例示的な方法を示す。
【
図5B】本技術の幾つかの態様に従い例示的に構築されたネームスペースディレクトリを示す。
【
図6A】様々な態様による、ツリーデータ構造の実施例を示す。
【
図6B】
図6Aに示されるツリーデータ構造への更新の実施例を示す。
【
図6C】クライアントデバイスに作成され、クライアントデバイスとコンテンツ管理システムとの間で同期するコンテンツアイテムに対して一意の識別子を割り振り、再割り当てするための例示的な方法を示す。
【
図6D】コンテンツ管理システムからクライアントデバイスにコンテンツアイテムをダウンロードし、ダウンロードされたコンテンツアイテム及び一意の識別子をクライアントデバイスに記録するための例示的な方法を示す。
【
図7A】ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるための例示的な方法を示す。
【
図7B】ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるときに競合を解消するための例示的な方法を示す。
【
図8A】操作間で依存性及び因果関係を示す操作の図を示す。
【
図8B】イベントのために計算されるランポートクロックに従い順序付けされるネームスペースにわたるイベントの図を示す。
【
図9A】ユーザのために実行される一連のマウント操作によって生成される例示的なマウント状態違反を示す。
【
図9B】ネームスペース間コンテキストにおいてマウント操作及びマウント解除操作のためにランポートクロックを計算する例示的な方法を示す。
【
図9C】
図9Bに示される例示的な方法に基づきマウント操作のために計算される例示的なランポートクロック構成を示す。
【
図9D】ランポートクロックに従いシリアル化される操作の例示的なリスト化を示す。
【
図10A】マウント操作に基づきランポートクロックを更新するための例示的なプロセスを示す。
【
図10B】マウント解除操作に基づきランポートクロックを更新するための例示的なプロセスを示す。
【
図11A】移動操作を追跡するためにサーバファイルジャーナルにおける例示的なテーブルを示す。
【
図11B】ネームスペース間の移動をランポートクロックによって処理するための例示的なシーケンスの図を示す。
【
図11C】移動操作の様々な状態における操作の例示的なフローを定義する例示的なステートマシンを示す。
【
図11D】コンテンツアイテムの一意の識別子に基づき位置にわたり、そして因果関係に基づき線形化される、例示的な移動操作の図を示す。
【
図12】コンテンツアイテム操作に基づきコンテンツアイテムを修正するインテントを反映する、
図6Aに示されるツリーデータ構造への例示的な更新を示す。
【
図13A】コンテンツアイテム操作をサーバファイルジャーナルにコミットするための例示的な方法を示す。
【
図13B】コンテンツアイテム操作をクライアントデバイスからコミットする要求を処理するための例示的な方法を示す。
【
図15A】ターゲット及びシンボリックリンクを同一のネームスペースに含むときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【
図15B】ターゲット及びシンボリックリンクを異なるネームスペース上に含むときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【
図15C】シンボリックリンクのターゲットが内部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【
図15D】シンボリックリンクのターゲットが外部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオのテーブルを示す。
【
図16】本技術の様々な態様を実装するためのシステムの実施例を示す。
【発明を実施するための形態】
【0006】
本技術の様々な実施例は、以下に詳細に考察される。具体的な実施態様を考察するが、これが例示目的のみのために行われていることを理解するであろう。当業者は、本技術の趣旨及び範囲から逸脱することなく他の構成要素及び構成を使用することができることを認識するであろう。
【0007】
クラウドストレージシステムにより、ユーザが複数のデバイスにわたりコンテンツアイテムを格納し、これらのコンテンツアイテムにアクセスすることが可能である。コンテンツアイテムは、ファイル、ドキュメント、メッセージ(例えば、電子メールメッセージ又はテキストメッセージ)、メディアファイル(例えば、写真、ビデオ、及びオーディオファイル)、フォルダ、又はいずれかの他のコンテンツユニットを含むことができるが、これらに限定されない。コンテンツアイテムは、複数のユーザと共有される、編集される、削除される、追加される、リネームされる、又は移動され得る。しかしながら、幾つかのデバイス及びユーザアカウントにわたり共有される、又は格納されるコンテンツアイテムを同期させることにより、不具合が残り、技術的な障害が広まっている。
【0008】
図示するよう、第一マシン(例えば、クライアントデバイス又はサーバ)は、クラウドストレージシステム上でのコンテンツアイテムのユーザの修正方法についての情報を提供する通信を、第二マシンに送信することができる。第一マシン上のコンテンツアイテムに実行されるアクションが第二マシン上のコンテンツアイテムに反映されるように、これらの通信を第二マシンが使用して、コンテンツアイテムを第二マシン上で同期させることができ、第一マシン上のコンテンツアイテムは、第二マシン上のコンテンツアイテムと実質的に同一である。
【0009】
しかしながら、多くの場合、管理するのが困難である可能性がある、様々なマシン間に送信される幾つかの通信がある場合がある。さらに、これらの通信の幾つかを、クライアント又はネットワーク問題などの様々な問題の結果として、順不同に受信する場合がある。これは、コンテンツアイテム間の競合及びエラーを様々なマシンにもたらすことが多い。また、ユーザのアクティビティは、多数のリビジョンを生成する可能性があり、これらのリビジョンは、同期作業をさらに複雑にし、一貫性がないことを悪化させる可能性がある。例えば、ユーザは、多数の修正を様々なコンテンツアイテムに実行する、修正を短期間に取り消す、又は追加の修正を以前に修正されたコンテンツアイテムに迅速に実行する可能性がある。これは、期限切れの修正の原因となり、コンテンツアイテムを競合させる、ユーザからの変更及びリビジョンを順不同に受信する尤度を増加させる。結果として、幾つかの操作は、コンテンツアイテムの現在の状態と互換性がない場合がある。さらに、操作が競合しているかどうかを検出することは、非常に困難である可能性がある。
【0010】
また、同期アクションによる固有のレイテンシがある。例えば、第一マシン上で行われるこれらのアクションを第一マシンが最初に検出し、次に、通信を生成し、ネットワークを介して送信する。以前の通信をまだ処理している可能性がある第二マシンが通信を受信し、通信に詳述されるアクションを第二マシンにおいて行う可能性がある。この例示的なシナリオにおいて、第一マシン、第二マシン、及びネットワークを含む、幾つかの可能なレイテンシポイントがある。レイテンシが増加すると、コンテンツアイテム間の競合の尤度も増加する。これらのような競合した通信を処理すること、及び競合を解消することは、非常に困難であり、計算上コストが高いタスクである。
【0011】
コンテンツアイテムへのアクセスを有する第二マシン又は他のマシン上の同一の、又は異なるユーザが修正をコンテンツアイテムに行うときに、さらに複雑になる。そのうえ、クラウドストレージシステム及びクライアントデバイスなどの複数のシステムにわたり格納されるコンテンツアイテムを一意に識別することは、困難である。コンテンツアイテムをクライアントデバイスに生成するときに、識別子がランダムに生成され、本来であればクライアントデバイスにおいて一意である場合でさえ、クライアントデバイスは、クライアントデバイスによってコンテンツアイテムに割り当てられる識別子が他のシステムに一意であることを保証することができない。加えて、コンテンツアイテムをデバイスにわたり作成し、修正し、移動させ、そして削除する場合に、重複する識別子及びメタデータを1つ以上の位置にもたらすことが多いため、コンテンツアイテムを様々な位置にわたり追跡することが非常に困難である可能性がある。重複する識別子及びメタデータは、コンテンツアイテム間に一貫性がないことを引き起こし、操作を処理して変更をシステムにわたり同期させる機能を制限する可能性がある。
【0012】
追加の技術上の問題は、コンテンツアイテムをローカルに、またリモートに大規模なコラボレーション環境において修正し、システムにわたり生成される様々な操作によって競合状態を引き起こすときに発生する。本明細書に示されるように、これらの問題は、コンテンツアイテムにおいて幅広い問題、及び一貫性がないことを引き起こすため、急速に増加し、複雑になる可能性がある。
【0013】
コンテンツ管理システム
幾つかの実施形態において、開示されている科学技術は、とりわけ、コンテンツアイテム同期機能及びコラボレーション特徴を有するコンテンツ管理システムのコンテキストに展開される。例示的なシステム構成100は、クライアントデバイス150とインタラクトするコンテンツ管理システム110を描く、
図1Aに示される。
【0014】
アカウント
コンテンツ管理システム110は、アカウントと関連するコンテンツアイテムを格納し、コンテンツアイテム(複数可)を取得する、修正する、閲覧する、及び/又は共有するなどの、様々なコンテンツアイテム管理タスクを実行することができる。さらに、コンテンツ管理システム110は、アカウントが複数のクライアントデバイスからコンテンツアイテム(複数可)にアクセスすることを可能にすることができる。
【0015】
コンテンツ管理システム110は、複数のアカウントをサポートする。エンティティ(ユーザ、ユーザグループ、チーム、会社など)は、コンテンツ管理システムによってアカウントを作成することができ、アカウント詳細は、アカウントデータベース140に格納されることができる。アカウントデータベース140は、登録されたエンティティについてのプロファイル情報を格納することができる。幾つかの事例において、登録されたエンティティについてのプロファイル情報は、ユーザ名及び/又は電子メールアドレスを含む。アカウントデータベース140は、アカウントタイプ(例えば、無料のアカウント、又は有料のアカウントの様々なティア)、割り振られるストレージスペース、使用されるストレージスペース、それらの上に常駐する登録されたコンテンツ管理クライアントアプリケーション152を含むクライアントデバイス150、セキュリティ設定、パーソナル構成設定などのような、アカウント管理情報を含むことができる。
【0016】
アカウントデータベース140は、エンティティと関連するアカウントグループを格納することができる。グループは、グループポリシー及び/又はアクセス制御リストに基づくパーミッションを有することができ、これらのグループのメンバーは、これらのパーミッションを継承することができる。例えば、マーケティンググループは、1セットのコンテンツアイテムへのアクセスを有することができ、エンジニアリンググループは、別の1セットのコンテンツアイテムへのアクセスを有することができる。管理者グループは、グループを修正すること、ユーザアカウントを修正することなどができる。
【0017】
コンテンツアイテムストレージ
コンテンツ管理システム110の特徴は、コンテンツストレージ142に格納されることができる、コンテンツアイテムのストレージである。コンテンツアイテムは、ドキュメント、コラボレーションコンテンツアイテム、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、ウェブページ、実行可能ファイル、バイナリファイルなどのような、いずれかのデジタルデータであり得る。また、コンテンツアイテムは、フォルダ、zipファイル、プレイリスト、アルバムなどのような、異なるビヘイビアと共にコンテンツアイテムをグループ化するためのコレクション又は他のメカニズムを含むことができる。コレクションは、フォルダ、又は共通属性によって関連する、又はグループ化される複数のコンテンツアイテムを指すことができる。幾つかの実施形態において、コンテンツストレージ142を他のタイプのストレージ又はデータベースと組み合わせ、特定の機能をハンドリングする。コンテンツストレージ142は、コンテンツアイテムを格納し、これらのコンテンツアイテムについてのメタデータは、メタデータデータベース146に格納されることができる。同様に、コンテンツアイテムをコンテンツストレージ142に格納する位置についてのデータを、コンテンツディレクトリ144に格納することができる。加えて、変更、アクセスなどについてのデータをサーバファイルジャーナル148に格納することができる。コンテンツストレージ142、コンテンツディレクトリ144、サーバファイルジャーナル148、及びメタデータデータベース146のような、様々なストレージ/データベースのそれぞれは、1つより多いこれらのようなストレージ又はデータベースから構成されることができ、多くのデバイス及び位置上に分散されることができる。他の構成も可能である。例えば、コンテンツストレージ142、コンテンツディレクトリ144、サーバファイルジャーナル148、及び/又はメタデータデータベース146からのデータは、1つ又は複数のコンテンツストレージもしくはデータベースに統合される、又は追加のコンテンツストレージもしくはデータベースにさらにセグメント化されることができる。したがって、コンテンツ管理システム110は、
図1Aに示されるものより多い、又は少ないストレージ及び/又はデータベースを含むことができる。
【0018】
幾つかの実施形態において、コンテンツストレージ142は、少なくとも1つのコンテンツストレージサービス116と関連付けられ、少なくとも1つのコンテンツストレージサービスは、ストレージ用のコンテンツアイテムを受信すること、ストレージ用のコンテンツアイテムを準備すること、コンテンツアイテム用のストレージ位置を選択すること、コンテンツアイテムをストレージから取得することなどを含むが、これらに限定されない、コンテンツアイテムのストレージを管理するために、ソフトウェア又は他のプロセッサ実行可能命令を含む。幾つかの実施形態において、コンテンツストレージサービス116は、コンテンツストレージ142におけるストレージのために、コンテンツアイテムをより小さなチャンクに分割することができる。コンテンツアイテムを構成する各チャンクの位置をコンテンツディレクトリ144に記録することができる。コンテンツディレクトリ144は、コンテンツストレージ142に格納される各コンテンツアイテムについてのコンテンツエントリを含むことができる。コンテンツエントリは、コンテンツアイテムを識別する、一意のIDと関連付けられることができる。
【0019】
幾つかの実施形態において、一意のIDは、コンテンツディレクトリ144中のコンテンツアイテムを識別するが、確定的ハッシュ関数から導出されることができる。コンテンツアイテムに対して一意のIDを導出するこの方法は、確定的ハッシュ関数が同一のコンテンツアイテムのすべてのコピーに対して同じ識別子を出力するが、異なるコンテンツアイテムに対して異なる識別子を出力することなどから、コンテンツアイテム重複を認識することを確保することができる。この方法論を使用して、コンテンツストレージサービス116は、各コンテンツアイテムに対して一意のIDを出力することができる。
【0020】
また、コンテンツストレージサービス116は、メタデータデータベース146中のコンテンツアイテムについてのコンテンツパスを指定する、又は記録することができる。コンテンツパスは、コンテンツアイテム及び/又はこのコンテンツアイテムと関連するフォルダ階層の名前を含むことができる。例えば、コンテンツパスは、コンテンツアイテムをクライアントデバイス上のローカルファイルシステムに格納するフォルダ、又はフォルダのパスを含むことができる。コンテンツアイテムをブロック中のコンテンツストレージ142に格納し、ディレクトリ構造のようなツリー下に格納しなくてもよいが、このようなディレクトリ構造は、ユーザにとって快適なナビゲーション構造である。コンテンツストレージサービス116は、ディレクトリ構造の「ルート」ノードが各アカウントについてのネームスペースであることができる、コンテンツアイテムについてのコンテンツパスを定義する、又は記録することができる。ネームスペース内には、アカウント及び/又はコンテンツストレージサービス116のユーザによって定義されるディレクトリ構造があることができる。メタデータデータベース146は、各コンテンツアイテムについてのコンテンツパスをコンテンツエントリの部分として格納することができる。
【0021】
幾つかの実施形態において、ネームスペースは、それらがルートノード内に格納されるかのようにディレクトリ構造にネストされる追加のネームスペースを含むことができる。これは、アカウントが共有されたコレクションへのアクセスを有するときに起こり得る。共有されたコレクションは、それら自体のネームスペースをコンテンツ管理システム110内に割り当てられ得る。幾つかの共有されたコレクションは、実際には共有されたコレクションについてのルートノードであるが、それらは、ディレクトリ構造中のアカウントネームスペースの下位に位置し、アカウント用のフォルダ内のフォルダとして出現することができる。上述されるように、ディレクトリ構造は、ユーザにとって単に快適なナビゲーション構造であるが、コンテンツストレージ142中のコンテンツアイテムのストレージ位置に相関しない。
【0022】
アカウントがコンテンツアイテムを表示するディレクトリ構造は、コンテンツ管理システム110においてストレージ位置に相関しないが、ディレクトリ構造は、クライアントデバイス150によって使用されるファイルシステムに依存するクライアントデバイス150上のストレージ位置に相関することができる。
【0023】
上述されるように、コンテンツディレクトリ144中のコンテンツエントリは、コンテンツアイテムを構成する各チャンクの位置をも含むことができる。より具体的に、コンテンツエントリは、コンテンツアイテムを構成するチャンクのコンテンツストレージ142中の位置を識別するコンテンツポインタを含むことができる。
【0024】
コンテンツパス及びコンテンツポインタに加えて、コンテンツディレクトリ144中のコンテンツエントリは、コンテンツアイテムへのアクセスを有するユーザアカウントを識別するユーザアカウント識別子、及び/又はコンテンツアイテムへのアクセスを有するグループを識別するグループ識別子、及び/又はコンテンツエントリが属するネームスペースをも含むことができる。
【0025】
コンテンツストレージサービス116は、コンテンツアイテム、又はコンテンツアイテムのバージョンを構成する、重複するコンテンツアイテム、又は重複するブロックを識別することによってストレージスペースの所要量を減少させることができる。複数のコピーを格納する代替に、コンテンツストレージ142は、コンテンツアイテムの、又はコンテンツアイテムのブロックの、単一コピーを格納することができ、コンテンツディレクトリ144は、重複を単一コピーにリンクさせる、ポインタ又は他のメカニズムを含むことができる。
【0026】
また、コンテンツストレージサービス116は、コンテンツアイテムの一意のIDと関連して、コンテンツアイテム、コンテンツアイテムタイプ、フォルダ、ファイルパス、及び/又はメタデータデータベース146中の様々なアカウント、コレクション、又はグループへのコンテンツアイテムの関係を記述するメタデータを格納することができる。
【0027】
また、コンテンツストレージサービス116は、サーバファイルジャーナル148中の変更、アクセスなどについてのデータのログを格納することができる。サーバファイルジャーナル148は、タイムスタンプ又はバージョン番号及びいずれかの他の関連データに加えて、コンテンツアイテムの一意のID、及び変更又はアクセスアクションのディスクリプションを含むことができる。また、サーバファイルジャーナル148は、変更又はコンテンツアイテムアクセスによって影響されるブロックへのポインタを含むことができる。コンテンツストレージサービスは、コンテンツアイテムへの変更を追跡するコンテンツアイテムバージョン制御、コンテンツアイテムの異なるバージョン(分岐するバージョンツリーを含む)、及びサーバファイルジャーナル148から取得されることができる変更履歴を使用することによって、操作をアンドゥする機能を提供することができる。
【0028】
コンテンツアイテム同期
コンテンツ管理システム110の別の特徴は、コンテンツアイテムの少なくとも1つのクライアントデバイス150との同期である。クライアントデバイス(複数可)は、異なる形を取り、異なる機能を有することができる。例えば、クライアントデバイス1501は、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むコンピューティングデバイスである。クライアントデバイス1452は、コンピューティングデバイスであり、そこでコンテンツアイテムは、特定のアプリケーションに、又は特定のアプリケーションにより与えられるパーミッションによってのみアクセス可能であり、コンテンツアイテムは、典型的に、特定用途向けスペースか、クラウドかのいずれか一方に格納される。クライアントデバイス1503は、ウェブブラウザを介してコンテンツ管理システム110にアクセスし、またウェブインタフェースを介してコンテンツアイテムにアクセスする、いずれかのクライアントデバイスである。例示的なクライアントデバイス1501、1452、及び1503は、ラップトップ、モバイルデバイス、又はウェブブラウザなどのフォームファクタで描かれ、それらの記述がこれらの例示的なフォームファクタのデバイスに限定されないことを理解するであろう。例えば、クライアント1452などのモバイルデバイスは、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むことができる、又はクライアント1452は、ウェブブラウザを介してコンテンツ管理システム110にアクセスすることができる。このように、フォームファクタは、クライアント150の機能を考慮するときに制限するものとみなされるべきではない。クライアントデバイス150に関して本明細書に記述される1つ以上の機能は、デバイスの特定の機能(ファイルアクセスモデルがこのような機能の1つである)に依存するすべてのクライアントデバイス上で利用可能であってもよいし、利用可能でなくてもよい。
【0029】
多くの実施形態において、クライアントデバイスは、コンテンツ管理システム110のアカウントと関連付けられるが、幾つかの実施形態において、クライアントデバイスは、共有されたリンクを使用してコンテンツにアクセスし得、アカウントを必要としないことがある。
【0030】
上述されるように、幾つかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム110にアクセスすることができる。しかしながら、クライアントデバイスは、クライアントデバイス150上で格納され、実行するクライアントアプリケーション152を使用して、コンテンツ管理システム110にもアクセスすることができる。クライアントアプリケーション152は、クライアント同期サービス156を含むことができる。
【0031】
クライアント同期サービス156は、サーバ同期サービス112と通信し、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムへの変更を同期させることができる。
【0032】
クライアントデバイス150は、クライアント同期サービス156を介してコンテンツをコンテンツ管理システム110と同期させることができる。同期は、プラットフォームに依存しないことができる。すなわち、コンテンツは、様々なタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイスにわたり同期することができる。クライアント同期サービス156は、クライアントデバイス150のファイルシステムの指定の位置におけるコンテンツアイテムへのいかなる変更(新規の、削除された、修正された、コピーされた、又は移動されたコンテンツアイテム)をも同期させることができる。
【0033】
コンテンツアイテムをクライアントデバイス150からコンテンツ管理システム110に同期させることができ、またその逆もできる。クライアントデバイス150からコンテンツ管理システム110への同期である実施形態において、ユーザは、クライアントデバイス150のファイルシステムから直接コンテンツアイテムを操作することができるが、クライアント同期サービス156は、監視されたフォルダ内のファイルへの変更についてディレクトリをクライアントデバイス150上で監視することができる。
【0034】
クライアント同期サービス156が監視するディレクトリ中のコンテンツの書き込み、移動、コピー、又は削除を検出するときに、クライアント同期サービス156は、コンテンツ管理システムサービス116への変更を同期させることができる。幾つかの実施形態において、クライアント同期サービス156は、コンテンツアイテムをブロックに分割すること、コンテンツアイテムをハッシュ化して一意の識別子を生成することなどのような上述される機能を有するコンテンツ管理システムサービス116の幾つかの機能を実行することができる。クライアント同期サービス156は、クライアントストレージインデックス164内でコンテンツをインデックス化し、結果をストレージインデックス164に保存することができる。インデックス化は、各コンテンツアイテムについての、パスと一意のサーバ識別子、及び一意のクライアント識別子を格納することを備えることができる。幾つかの実施形態において、クライアント同期サービス156は、一意のサーバ識別子をサーバ同期サービス112から学習し、一意のクライアント識別子をクライアントデバイス150のオペレーティングシステムから学習する。
【0035】
クライアント同期サービス156は、ストレージインデックス164を使用して、コンテンツ管理システム110上のユーザアカウントと関連するコンテンツとの、クライアントストレージ内のコンテンツの少なくとも一部分の同期を容易にすることができる。例えば、クライアント同期サービス156は、ストレージインデックス164をコンテンツ管理システム110と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム110上のユーザアカウントと関連するコンテンツとの間の差異を検出することができる。次いで、クライアント同期サービス156は、必要に応じてコンテンツをクライアントストレージ上で、アップロードし、ダウンロードし、修正し、そして削除することによって、差異のリコンサイルを試行することができる。コンテンツストレージサービス116は、必要に応じて、コンテンツアイテムについて変更されたブロック、又は新規のブロックを格納し、サーバファイルジャーナル148、メタデータデータベース146、コンテンツディレクトリ144、コンテンツストレージ142、アカウントデータベース140などを更新することができる。
【0036】
コンテンツ管理システム110からクライアントデバイス150に同期させるときに、サーバファイルジャーナル148に記録されるコンテンツアイテムのマウント、修正、追加、削除、移動は、通知サービス117を使用してクライアントデバイス150に送信される通知をトリガすることができる。クライアントデバイス150に変更を通知するときに、クライアントデバイスに知られている最後の同期ポイント以降に、サーバファイルジャーナル148に列挙されている要求を変更する。クライアントデバイス150がコンテンツ管理システム110と同期していないと判定するときに、クライアント同期サービス156は、変更を含むコンテンツアイテムブロックを要求し、変更されたコンテンツアイテムのそのローカルコピーを更新する。
【0037】
幾つかの実施形態において、ストレージインデックス164は、ツリーデータ構造を格納し、そこで1つのツリーは、サーバ同期サービス112に従いディレクトリの最新の表現を反映し、もう1つのツリーは、クライアント同期サービス156に従いディレクトリの最新の表現を反映する。クライアント同期サービスは、データをサーバ同期サービス112から要求することによって、又はクライアントデバイス150上の変更をコンテンツ管理システム110にコミットすることによって、ツリー構造がマッチングすることを確保するように機能することができる。
【0038】
ときとして、クライアントデバイス150は、利用可能なネットワーク接続を有さない場合がある。このシナリオにおいて、クライアント同期サービス156は、ネットワーク接続が利用可能であるときに、コンテンツアイテム変更についてリンクされたコレクションを監視し、後のコンテンツ管理システム110への同期のためにこれらの変更をキューイングすることができる。同様に、ユーザは、コンテンツ管理システム110との同期を手動で、開始する、停止する、一時停止する、又は再開することができる。
【0039】
クライアント同期サービス156は、特定のユーザアカウントと関連するすべてのコンテンツをコンテンツ管理システム110上で同期させることができる。代替的に、クライアント同期サービス156は、特定のユーザアカウントと関連する全コンテンツの一部のコンテンツをコンテンツ管理システム110上で選択的に同期させることができる。一部のコンテンツのみを選択的に同期させることにより、スペースをクライアントデバイス150上に保持し、帯域幅を節約することができる。
【0040】
幾つかの実施形態において、クライアント同期サービス156は、コンテンツのリマインダ部分のためにクライアントストレージに、特定のユーザアカウントと関連するコンテンツの一部を選択的に格納し、プレースホルダコンテンツアイテムを格納する。例えば、クライアント同期サービス156は、プレースホルダコンテンツアイテムを格納することができ、このプレースホルダコンテンツアイテムは、コンテンツ管理システム110上の、そのそれぞれの完全なコンテンツアイテムの同じファイル名、パス、拡張子、メタデータを有するが、完全なコンテンツアイテムのデータを欠く。このプレースホルダコンテンツアイテムは、サイズが数バイト以下であることができるが、それぞれの完全なコンテンツアイテムは、著しくより大きくてもよい。クライアントデバイス150がコンテンツアイテムにアクセスすることを試行した後に、クライアント同期サービス156は、コンテンツアイテムのデータをコンテンツ管理システム110から取得し、完全なコンテンツアイテムを、アクセスするクライアントデバイス150に提供することができる。このアプローチは、有意なスペース、及び帯域幅節約を提供しながら、ユーザのコンテンツへのフルアクセスをコンテンツ管理システム110上に依然として提供することができる。
【0041】
コラボレーション特徴
コンテンツ管理システム110の別の特徴は、ユーザ間のコラボレーションを容易にすることである。コラボレーション特徴は、コンテンツアイテムの共有、コンテンツアイテムについてのコメント、コンテンツアイテム上でのコワーキング、インスタントメッセージング、コンテンツアイテムについての存在及び表示状態情報を提供することなどを備える。
【0042】
共有
コンテンツ管理システム110は、共有サービス128を介して共有コンテンツを管理することができる。コンテンツへのリンクを提供することによって共有するコンテンツは、コンテンツ管理システム110とネットワーク通信しているいずれかのコンピューティングデバイスからアクセス可能なコンテンツアイテムを作成することを含むことができる。しかしながら、幾つかの実施形態において、リンクは、コンテンツ管理システム110及びアクセス制御リスト145によって実施されるアクセス制限と関連付けられることができる。また、共有コンテンツは、共有サービス128を使用してコンテンツにリンクし、コンテンツ管理システム110内のコンテンツを少なくとも1つの追加のユーザアカウント(コンテンツアイテムと関連する元のユーザアカウントに加えて)と共有することを含むことができるので、各ユーザアカウントは、コンテンツアイテムへのアクセスを有する。追加のユーザアカウントは、コンテンツを許容することによってコンテンツへのアクセスを得ることができ、その後、ウェブインタフェースサービス124を介してか、直接にかのいずれか一方で、クライアントデバイス150上でそれらのアカウントと関連するディレクトリ構造内からアクセス可能である。プラットフォームに依存しない方式において、共有を実行することができる。すなわち、様々なタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイス150にわたりコンテンツを共有することができる。また、ユーザアカウントの様々なタイプにわたりコンテンツを共有することができる。
【0043】
コンテンツアイテムをコンテンツ管理システム110内で共有するために、共有サービス128は、1つのユーザアカウント識別子、又は複数のユーザアカウント識別子を、コンテンツアイテムと関連するアクセス制御リストデータベース145中のコンテンツエントリに追加することができるので、コンテンツアイテムへの追加されたユーザアカウントアクセスを付与することができる。また、共有サービス128は、ユーザアカウント識別子をコンテンツエントリから除去し、コンテンツアイテムへのユーザアカウントのアクセスを制限することができる。共有サービス128は、コンテンツアイテム識別子、コンテンツアイテムへのアクセスを与えられるユーザアカウント識別子、及びアクセス制御リストデータベース145におけるアクセスレベルを記録することができる。例えば、幾つかの実施形態において、単一コンテンツエントリと関連するユーザアカウント識別子は、関連したコンテンツアイテムに関するそれぞれのユーザアカウント識別子に対して異なるパーミッションを指定することができる。
【0044】
コンテンツ管理システム110の外部でコンテンツアイテムを共有するために、共有サービス128は、ユニフォームリソースロケータ(URL)などのカスタムネットワークアドレスを生成することができ、このカスタムネットワークアドレスにより、いかなる認証もなく、コンテンツ管理システム110においてコンテンツアイテム又はコレクションにいかなるウェブブラウザもアクセスすることが可能である。これを達成するために、共有サービス128は、コンテンツ識別データを生成されたURLに含むことができ、このコンテンツ識別データを後に使用して、要求されたコンテンツアイテムを適切に識別し、返すことができる。例えば、共有サービス128は、アカウント識別子及びコンテンツパス、又は生成されたURL中でコードを識別するコンテンツアイテムを含むことができる。URLの選択に際し、URLに含まれるコンテンツ識別データをコンテンツ管理システム110に送信することができ、このコンテンツ管理システム110は、受信したコンテンツ識別データを使用して、適切なコンテンツアイテムを識別し、コンテンツアイテムを返すことができる。
【0045】
URLを生成することに加えて、共有サービス128は、コンテンツアイテムへのURLが作成されているアクセス制御リストデータベース145に記録されるように設定されることもできる。幾つかの実施形態において、コンテンツアイテムと関連するコンテンツエントリは、コンテンツアイテムへのURLが作成されているかどうかを示すURLフラグを含むことができる。例えば、URLフラグは、コンテンツアイテムへのURLが作成されていないことを示す、0又は偽に最初に設定されるブール値であり得る。共有サービス128は、コンテンツアイテムへのURLを生成した後に、フラグの値を1又は真に変更することができる。
【0046】
幾つかの実施形態において、共有サービス128は、1セットのパーミッションをコンテンツアイテムについてのURLに関連付けることができる。例えば、ユーザがURLを介してコンテンツアイテムにアクセスすることを試行する場合に、共有サービス128は、コンテンツアイテムに対して制限された1セットのパーミッションを提供することができる。制限されたパーミッションの実施例は、ユーザがコンテンツアイテムをダウンロードすることができない、コンテンツアイテムを保存することができない、コンテンツアイテムをコピーすることができない、コンテンツアイテムを修正することができないなどの制限を有する。幾つかの実施形態において、制限されたパーミッションは、特定のドメインから、すなわち、企業ネットワークドメイン内部から、又は特定のドメインと関連するアカウント、例えば、企業アカウントと関連するアカウント(例えば、@acme.com)によって、アクセスされるコンテンツアイテムだけにパーミッションを与える制限を含む。
【0047】
幾つかの実施形態において、共有サービス128も、生成されたURLを非アクティブ化するように構成されることができる。例えば、各コンテンツエントリも、生成されたURLからの要求に応答してコンテンツを返すべきかどうかを示す、URLアクティブフラグを含むことができる。例えば、URLアクティブフラグが1又は真に設定される場合に、共有サービス128は、生成されたリンクによって要求されるコンテンツアイテムのみを返すことができる。したがって、URLが生成されているコンテンツアイテムへのアクセスは、URLアクティブフラグの値を変更することによって容易に制限され得る。これにより、コンテンツアイテムを移動させる、又は生成されたURLを削除することを必要とせずに、ユーザが共有されたコンテンツアイテムへのアクセスを制限することができる。同様に、共有サービス128は、URLアクティブフラグの値を1又は真に再度変更することによって、URLを再アクティブ化することができる。したがって、ユーザは、新規のURLを生成する必要なく、コンテンツアイテムへのアクセスを容易に復元することができる。
【0048】
幾つかの実施形態において、コンテンツ管理システム110は、コンテンツアイテムをアップロードするためにURLを指定することができる。例えば、ユーザアカウントを有する第一ユーザは、このようなURLを要求し、URLを寄与するユーザに提供することができ、寄与するユーザは、このURLを使用して、コンテンツアイテムを第一ユーザのユーザアカウントにアップロードすることができる。
【0049】
チームサービス
幾つかの実施形態において、コンテンツ管理システム110は、チームサービス130を含む。チームサービス130は、ユーザアカウントの定義されたチームを作成し、管理するための機能性を提供することができる。これらのチームは、サブチーム(例えば、ビジネスユニット、又はプロジェクトチームなど)とともに、企業用に作成されることができ、これらのチーム及びサブチームに、又はこれらのチームに割り当てられるユーザアカウントは、ユーザアカウントのいずれかの定義されたグループ用に作成され得る。これらのチームサービス130は、チーム用の共通の共有スペース、プライベートユーザアカウントフォルダ、及びアクセス制限された共有フォルダを提供することができる。また、チームサービスは、管理者用に管理インタフェースを提供し、コレクション及びコンテンツアイテムをチーム内で管理することができ、このチームと関連付けられるユーザアカウントを管理することができる。
【0050】
認可サービス
幾つかの実施形態において、コンテンツ管理システム110は、認可サービス132を含む。認可サービス132は、ネームスペースにアクセスすることを試行するユーザアカウントがネームスペースにアクセスする適切な権限を有することを確保する。認可サービス132は、ネームスペースにアクセスする要求に従うトークンをクライアントアプリケーション152から受信することができ、ユーザアカウントにパーミッションを与えられている機能を返すことができる。複数のアクセスレベルを有するユーザアカウント(例えば、ユーザ権限及び管理者権限を有するユーザアカウント)について、認可サービス132は、管理者による意図しないアクションを回避するために、明示的な特権昇格をも要求することができる。
【0051】
存在及び表示状態
幾つかの実施形態において、コンテンツ管理システムは、コンテンツアイテムを共有するユーザがどのようにコンテンツアイテムとインタラクトしている、又はインタラクトしていたかについての情報を提供することができる。幾つかの実施形態において、コンテンツ管理システム110は、コンテンツアイテムを共有するユーザがコンテンツアイテムを現在閲覧していることを報告することができる。例えば、クライアントデバイス150がコンテンツアイテムにアクセスしているときに、クライアントコラボレーションサービス160は、通知サービス117に通知することができる。次いで、通知サービス117は、このコンテンツアイテムに関してクライアントデバイス150のユーザの存在する同一コンテンツアイテムへのアクセスを有する他のユーザのすべてのクライアントデバイスに通知することができる。
【0052】
幾つかの実施形態において、コンテンツ管理システム110は、共有されたコンテンツアイテムとのユーザインタラクションの履歴を報告することができる。コラボレーションサービス126は、メタデータデータベース146及びサーバファイルジャーナル148などのデータソースにクエリを行い、ユーザがコンテンツアイテムを保存していること、ユーザがまだコンテンツアイテムを閲覧していることなどを判定し、通知サービス117を使用して、この状態情報を他のユーザに広めることができるので、それらのユーザは、コンテンツアイテムを現在閲覧している、又は現在修正している、又は閲覧していた、又は修正したユーザを知ることができる。
【0053】
コラボレーションサービス126は、コンテンツアイテムがコメント機能をネイティブにサポートしない場合でも、コンテンツと関連するコメントを容易にすることができる。これらのようなコメントをメタデータデータベース146に格納することができる。
【0054】
コラボレーションサービス126は、ユーザに対して通知を発信し、送信することができる。例えば、ユーザは、コメント中に別のユーザについて言及することができ、コラボレーションサービス126は、ユーザがコメント中で言及されている通知をそのユーザに送信することができる。様々な他のコンテンツアイテムイベントは、コンテンツアイテムを削除すること、コンテンツアイテムを共有することなどを含む、通知をトリガすることができる。
【0055】
コラボレーションサービス126は、メッセージングプラットフォームを提供することができ、このメッセージングプラットフォームにより、ユーザは、インスタントメッセージ、音声通話、電子メールなどを送信し、受信することができる。
【0056】
コラボレーションコンテンツアイテム
幾つかの実施形態において、コンテンツ管理サービスは、コラボレーションドキュメントサービス134をも含むことができ、このコラボレーションドキュメントサービス134は、インタラクティブコンテンツアイテムコラボレーションプラットフォームを提供することができ、このインタラクティブコンテンツアイテムコラボレーションプラットフォームにより、ユーザは、コラボレーションコンテンツアイテム、これらのコラボレーションコンテンツアイテム中のコメントを同時に作成し、タスクをコラボレーションコンテンツアイテム内で管理することができる。コラボレーションコンテンツアイテムは、ユーザが作成し、コラボレーションコンテンツアイテムエディタを使用して編集することができ、コラボレーションコンテンツアイテム要素を含むことができるファイルであり得る。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテム識別子、1つ以上のオーサー識別子、コラボレーションコンテンツアイテムテキスト、コラボレーションコンテンツアイテム属性、インタラクション情報、コメント、共有するユーザなどを含むことができる。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテムを検索し、取得することを可能にする、データベースエンティティとして格納されることができる。複数のユーザは、同時に、又は異なる時間に、コラボレーションコンテンツアイテムにアクセスし、これらのコラボレーションコンテンツアイテムを閲覧し、編集し、そしてコラボレーションすることができる。幾つかの実施形態において、これは、2人のユーザがウェブインタフェースを介してコンテンツアイテムにアクセスすることを要求することによって管理されることができ、そしてそこでこれら2人のユーザは、同時にコンテンツアイテムの同じコピー上で操作することができる。
【0057】
コラボレーションコンパニオンインタフェース
幾つかの実施形態において、クライアントコラボレーションサービス160は、クライアントデバイス150上に提示されるコンテンツアイテムに関連する情報を表示する目的のために、ネイティブアプリケーションコンパニオンインタフェースを提供することができる。クライアントデバイス150に格納され、このクライアントデバイス150上で実行されるネイティブアプリケーションがコンテンツアイテムにアクセスする、幾つかの実施形態において、そこでコンテンツアプリケーション152がコンテンツアイテムを管理するように、コンテンツアイテムは、クライアントデバイス150のファイルシステムの指定の位置にあり、ネイティブアプリケーションは、上記のアドレス指定されたコラボレーションデータを表示するいかなるネイティブな方式も提供しない場合がある。これらのような実施形態において、クライアントコラボレーションサービス160は、ユーザがコンテンツアイテムを開いていることを検出することができ、コラボレーションデータなどのコンテンツアイテムについての追加情報をオーバーレイに提供することができる。例えば、追加情報は、コンテンツアイテムに対するコメント、コンテンツアイテムの状態、コンテンツアイテムを以前に閲覧していた、又は現在閲覧している他のユーザのアクティビティを含むことができる。このようなオーバーレイは、別のユーザがコンテンツアイテムを現在編集しているため、変更が失われる可能性があることをユーザに警告することができる。
【0058】
幾つかの実施形態において、パブリック又はプライベートアプリケーションプログラミングインタフェースを使用して、上記に考察される、サービス又はストレージ/データベースのうちの1つ以上にアクセスすることができる。
【0059】
ある特定のソフトウェアアプリケーションは、コンテンツストレージ142にAPIを介してユーザの代わりにアクセスすることができる。例えば、クライアントデバイス150上で実行するアプリケーションなどのソフトウェアパッケージは、ユーザが認証クレデンシャルを提供するときにコンテンツ管理システム110に直接API呼び出しをプログラムに従い行い、コンテンツを読み出す、書き込む、作成する、削除する、共有する、又はその他の方法により操作することができる。
【0060】
ユーザは、ウェブインタフェースサービス124によって生成され、サーブされるウェブインタフェースを介してユーザアカウントに格納されるコンテンツを閲覧する、又は操作することができる。例えば、ユーザは、ウェブブラウザにおいて、コンテンツ管理システム110によって提供されるウェブアドレスにナビゲートすることができる。コンテンツアイテムの新規のバージョンをアップロードするなど、ウェブインタフェースを介して行われるコンテンツストレージ142中のコンテンツへの変更又は更新は、伝播され、ユーザのアカウントと関連する他のクライアントデバイスに返されることができる。例えば、複数のクライアントデバイスは、これらのクライアントデバイス自体のそれぞれのクライアントソフトウェアとともに、単一アカウントと関連付けられることができ、このアカウント中のコンテンツアイテムは、複数のクライアントデバイスのそれぞれの間で同期することができる。
【0061】
クライアントデバイス150は、ユーザの代わりにコンテンツ管理システム110に接続することができる。ユーザは、例えば、クライアントデバイス150がデスクトップ又はラップトップコンピュータ、電話、テレビ、モノのインターネットデバイスなどであるときに、クライアントデバイス150と直接インタラクトすることができる。代替的に、又は追加的に、クライアントデバイス150は、例えば、クライアントデバイス150がサーバであるときに、ユーザがクライアントデバイス150への物理的なアクセスを有することなく、ユーザの代理を務めることができる。
【0062】
クライアントデバイス150の幾つかの特徴は、クライアントデバイス150上にインストールされるアプリケーションによって有効にされる。幾つかの実施形態において、このアプリケーションは、コンテンツ管理システム専用コンポーネントを含むことができる。例えば、コンテンツ管理システム専用コンポーネントは、スタンドアロンアプリケーション152、1つ以上のアプリケーションプラグイン、及び/又はブラウザ拡張であることができる。しかしながら、ユーザも、ウェブブラウザなどの第三者アプリケーションを介してコンテンツ管理システム110とインタラクトすることができ、この第三者アプリケーションは、クライアントデバイス150上にあり、コンテンツ管理システム110と通信するように構成される。様々な実装において、クライアント側アプリケーション152は、ユーザに対してユーザインタフェース(UI)を提示し、コンテンツ管理システム110とインタラクトすることができる。例えば、ユーザは、ファイルシステムと統合されるファイルシステムエクスプローラを介して、又はウェブブラウザアプリケーションを使用して表示されるウェブページを介して、コンテンツ管理システム110とインタラクトすることができる。
【0063】
幾つかの実施形態において、クライアントアプリケーション152は、コンテンツ管理システム110の1つより多いアカウントに対してコンテンツを管理し、同期させるように構成されることができる。これらのような実施形態において、クライアントアプリケーション152は、複数のアカウントにログインしたままで、複数のアカウントに対して通常のサービスを提供することができる。幾つかの実施形態において、各アカウントは、ファイルシステム中のフォルダとして現れることができ、そのフォルダ内のすべてのコンテンツアイテムは、コンテンツ管理システム110と同期することができる。幾つかの実施形態において、クライアントアプリケーション152は、プライマリアカウント又はデフォルトアカウントである複数のアカウントのうちの1つを選ぶセレクタを含むことができる。
【0064】
コンテンツ管理システム110に専用コンポーネントを提示しながら、当業者は、システム100のアーキテクチャ構成が唯一可能な構成であり、より多い、又はより少ないコンポーネントに関する他の構成が可能であることを理解するであろう。さらに、サービスは、別のサービスとともにあると記述される機能性さえも含む、多い、又は少ない機能性を有することができる。さらに、1つの実施形態に関して本明細書に記述される特徴を、別の実施形態に関して記述される特徴と組み合わせることができる。
【0065】
システム100に専用コンポーネントを提示するが、当業者は、システム100のアーキテクチャ構成が唯一可能な構成であり、より多い、又はより少ないコンポーネントに関する他の構成が可能であることを理解するであろう。
【0066】
クライアント同期サービス
図1Bは、幾つかの実施形態による、クライアント同期サービス156の実施例を示す。幾つかの実施形態により、クライアント同期サービス156は、
図1Aに示されるクライアントデバイス150中に実装されることができる。しかしながら、他の実施形態において、クライアント同期サービス156は、別のコンピューティングデバイス上に実装されることができる。クライアント同期サービス156は、クライアント同期サービス156が実行する、コンテンツ管理システムとクライアントデバイスとの間のコンテンツアイテムへの変更を同期させるように構成される。
【0067】
クライアント同期サービス156は、ファイルシステムインタフェース170、サーバインタフェース172、ツリーストレージ174、プランナ176、及びスケジューラ178を含むことができる。追加的な、又は代替的なコンポーネントをも含むことができる。クライアント同期サービス156及びそのコンポーネントの高水準のディスクリプションを
図1Bに関して下記に考察する。しかしながら、クライアント同期サービス156及びそのコンポーネントのさらなる詳細及び実施形態は、全体を通して考察される。
【0068】
ファイルシステムインタフェース170は、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を処理し、ローカルツリーを更新するように構成される。例えば、ファイルシステムインタフェース170は、クライアント同期サービス156と通信して、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を検出することができる。また、
図1Aのクライアントアプリケーション152を介して、これらの変更を行い、検出することができる。ファイルシステムインタフェース170は、クライアントデバイス上のコンテンツアイテムへの変更(新規の、削除された、修正された、コピーされた、リネームされた、又は移動されたコンテンツアイテム)に基づき行われることができる、ローカルツリーへの更新を行うことができる。
【0069】
サーバインタフェース172は、コンテンツ管理システムのリモートストレージにおけるコンテンツアイテムへのリモート変更の処理、及びリモートツリーの更新の際に支援するように設定される。例えば、サーバインタフェース172は、
図1Aのサーバ同期サービス112と通信し、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムへの変更を同期させることができる。コンテンツ管理システム110におけるコンテンツアイテムへの変更(新規の、削除された、修正された、コピーされた、リネームされた、又は移動されたコンテンツアイテム)を検出することができ、これらの変更をコンテンツ管理システム110に反映するために更新をリモートツリーに行うことができる。
【0070】
ツリーストレージ174は、クライアント同期サービス156によって使用されるツリーデータ構造を格納し、維持するように構成される。例えば、ツリーストレージ174は、ローカルツリー、同期ツリー、及びリモートツリーを格納することができる。幾つかの実施形態により、ツリーストレージ200は、レイテンシ及び応答時間を減少させるために、永続メモリ(例えば、ハードディスク又は他のセカンダリストレージデバイス)に、またメインメモリ(例えば、RAM又は他のプライマリストレージデバイス)にツリーデータ構造を格納することができる。例えば、クライアントデバイス又はクライアント同期サービス156の起動時に、ツリーデータ構造を永続メモリから取得し、メインメモリにロードすることができる。ツリーストレージ174は、メインメモリ上でツリーデータ構造にアクセスし、これらのツリーデータ構造を更新し、クライアントデバイス又はクライアント同期サービス156を停止する前に、ツリーストレージ174は、更新されたツリーデータ構造を永続メモリ上に格納することができる。メインメモリはコストが高く、ほとんどのクライアントデバイス上でサイズが制限されることが多いため、メインメモリ上のツリーデータ構造のフットプリントを減少させる追加の技術的な改善を実施する。これらの技術的な解決策を以下にさらに説明する。
【0071】
プランナ176は、コンテンツ管理システムと関連するサーバ状態と、クライアントデバイスと関連するファイルシステム状態との間の差異をツリーデータ構造の状態に基づき検出するように構成される。例えば、プランナ176は、リモートツリーと同期ツリーとの間に差異があるかどうかを判定し得る。リモートツリーと同期ツリーとの間の差異は、コンテンツ管理システムに格納される1つ以上のコンテンツアイテム上にリモートに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。同様に、プランナ176は、ローカルツリーと同期ツリーとの間の差異があるかどうかも判定し得る。ローカルツリーと同期ツリーとの間の差異は、クライアントデバイス上に格納される1つ以上のコンテンツアイテム上にローカルに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。差異を検出した場合、プランナ176は、ツリーデータ構造を同期させる操作シーケンスを生成する。
【0072】
幾つかのシナリオにおいて、リモートツリーと同期ツリーとの間の差異に基づき生成される操作シーケンス、及びローカルツリーと同期ツリーとの間の差異に基づき生成される操作シーケンスは、競合する場合がある。また、プランナ176は、これら2つの操作シーケンスを単一のマージされた操作プランにマージするように構成されることができる。
【0073】
スケジューラ178は、生成された操作シーケンスを行い、これらの操作の実行を管理するように構成される。幾つかの実施形態により、スケジューラ178は、操作シーケンス中の各操作を、操作を実行するために実行される必要がある一連の1つ以上のタスクに変換する。幾つかのシナリオにおいて、幾つかのタスクは、期限切れになる、又はもはや関連性がなくなる場合がある。スケジューラ178は、これらのタスクを識別し、それらをキャンセルするように構成される。
【0074】
ファイルジャーナル及びストレージシステム(Tomahawk及びWaterfall)
図2Aは、システム構成100において、コンテンツ管理システム110とクライアントデバイス150との間でコンテンツを同期させるための例示的なアーキテクチャの概略図を示す。この実施例において、クライアントデバイス150は、コンテンツストレージインタフェース206及びファイルジャーナルインタフェース202を介してそれぞれコンテンツストレージ142及びサーバファイルジャーナル148とインタラクトする。コンテンツストレージインタフェース206は、コンテンツストレージサービス116によって提供される、又は管理されることができ、ファイルジャーナルインタフェース202は、サーバ同期サービス112によって提供される、又は管理されることができる。例えば、コンテンツストレージインタフェース206は、コンテンツストレージサービス116のサブコンポーネント又はサブサービスであり得、ファイルジャーナルインタフェース202は、サーバ同期サービス112のサブコンポーネント又はサブサービスであり得る。
【0075】
コンテンツストレージインタフェース206は、コンテンツ要求又はインタラクションなどの通信をクライアントデバイス150とコンテンツストレージ142との間で管理することができる。コンテンツストレージインタフェース206は、コンテンツストレージ142に、またコンテンツストレージ142からコンテンツをアップロードし、ダウンロードする、クライアントデバイス150からの要求を処理することができる。コンテンツストレージインタフェース206は、コンテンツ要求(例えば、ダウンロード、アップロードなど)をクライアントデバイス150から受信し、アクセス制御リスト145中のパーミッションを検証し、認可サービス132と通信してクライアントデバイス150(及び/又はクライアントデバイス150からの要求)がコンテンツストレージ142に、又はコンテンツストレージ142からコンテンツをアップロードする、又はダウンロードすることを認可されるかどうかを判定し、コンテンツストレージ142とインタラクトしてコンテンツストレージ142中のコンテンツをクライアントデバイス150にダウンロードする、又はアップロードすることができる。クライアントデバイス150からの要求がコンテンツアイテムをダウンロードする要求である場合に、コンテンツストレージインタフェース206は、コンテンツアイテムをコンテンツストレージ142から取得し、コンテンツアイテムをクライアントデバイス150に提供することができる。クライアントデバイス150からの要求がコンテンツアイテムをアップロードする要求である場合に、コンテンツストレージインタフェース206は、コンテンツアイテムをクライアントデバイス150から得て、コンテンツアイテムをストレージ用のコンテンツストレージ142にアップロードすることができる。
【0076】
クライアントデバイス150からのコンテンツ要求を処理するときに、コンテンツストレージインタフェース206は、ストレージインデックス210と通信し、コンテンツストレージ142中の要求されたコンテンツの可用性及び/又はストレージ位置をチェックし、コンテンツストレージ142中でコンテンツアイテムを追跡することができる。ストレージインデックス210は、コンテンツストレージ142上でコンテンツアイテムを識別する、コンテンツストレージ142上のコンテンツアイテムのインデックスを維持することができ、そのうえコンテンツアイテムのそれぞれの位置をコンテンツストレージ142内で識別することができる。したがって、ストレージインデックス210は、コンテンツストレージ142上でコンテンツアイテムを、またコンテンツアイテムのストレージ位置を追跡することができる。ストレージインデックス210は、ファイルなどのすべてのコンテンツアイテム、及び/又はブロック又はチャンクなどのコンテンツアイテムの部分を追跡することができる。幾つかの事例において、コンテンツアイテムは、コンテンツストレージ142に格納され、ストレージインデックス210において追跡されることができるブロック又はチャンクに分割され得る。例えば、コンテンツストレージ142は、コンテンツアイテムのそれぞれのデータ部分を含むデータのブロック又はチャンクとして、コンテンツアイテムを格納することができる。ストレージインデックス210は、コンテンツストレージ142に格納されるコンテンツアイテムのブロック又はチャンクを追跡することができる。下記の
図2Bは、コンテンツアイテムのブロックを格納して追跡するための例示的な構成を示す。
【0077】
ファイルジャーナルインタフェース202は、メタデータ要求、ならびにコンテンツ同期及び操作などの通信を、クライアントデバイス150とサーバファイルジャーナル148との間で管理することができる。例えば、ファイルジャーナルインタフェース202は、操作、構成、及び状態情報を、クライアントデバイス150とサーバファイルジャーナル148との間で変換する、妥当性確認する、認証する、及び/又は処理することができる。ファイルジャーナルインタフェース202は、カーソル内の、もしくは認可サービス132を介してFSAuthトークンからのパーミッションを検証し、クライアントデバイス150によってサーバファイルジャーナル148へ送信される要求を認可する、又はこれらの要求の認可を検証することができる。クライアントデバイス150からの要求又は操作を処理するときに、ファイルジャーナルインタフェース202は、ネームスペースメンバーシップストア208にアクセスして、クライアントデバイス150からの要求又は操作と関連するいずれかのネームスペースについてネームスペース所有権情報を判定し、又は検証し、パーミッション情報をアクセス制御リスト145から取得してクライアントデバイス150からの要求又は操作と関連するコンテンツのパーミッションを検証することができる。
【0078】
ファイルジャーナルインタフェース202中の変換サービス204は、通信のための線形化操作及び変換操作をクライアントデバイス150とサーバファイルジャーナル148との間で実行することができる。例えば、変換サービス204は、クライアントデバイス150からの通信を、サーバファイルジャーナル148中のデータの構造及びフォーマットと一貫性がある異なるフォーマットに、そしてその逆もまた同様に変換することができる。図示するように、幾つかの事例において、クライアントデバイス150は、コンテンツアイテム情報(例えば、状態、変更、バージョンなど)をクライアントデバイス150において操作として処理することができ、サーバファイルジャーナル148は、データベーステーブルなどのデータ構造中のロウによって反映されるコンテンツアイテムリビジョンと同一の情報を処理することができる。クライアントデバイス150とサーバファイルジャーナル148との間のコンテンツアイテム情報の同期を有効にするために、変換サービス204は、クライアントデバイス150からの操作を、サーバファイルジャーナル148に適しているリビジョンに変換することができ、サーバファイルジャーナル148上でデータのロウ中に反映されるリビジョンを、クライアントデバイス150に適している操作に変換することができる。
【0079】
幾つかの事例において、認可サービス132は、クライアントデバイス150が要求されたコンテンツアイテムにアクセスする、このコンテンツアイテムを更新する、ダウンロードする、又はアップロードすることを認可されることを検証する、又は指示するトークンを生成することができる。このトークンは、クライアントデバイス150と関連するデバイス識別子、クライアントデバイス150に認証される、又は認可されるユーザアカウントと関連するアカウント識別子、クライアントデバイス150に認可されたセッションと関連するセッション識別子、ビューコンテキスト、及び識別されたコレクションへのアクセスパーミッションを含むことができる。トークンは、以下により詳細に記述される、カーソルと称される暗号によって署名されたデータオブジェクト中に含まれ得る。コンテンツ管理システム110及び/又は認可サービス132は、トークン(複数可)をクライアントデバイス150に送信することができ、クライアントデバイス150は、以下にさらに記述されるようなサーバファイルジャーナル148へのコンテンツアイテムのリビジョン及び/又は更新を要求するときに、トークンをコンテンツ管理システム110に提供することができる。また、クライアントデバイス150は、トークンをコンテンツストレージインタフェース206に提供し、いずれかのコンテンツ要求(例えば、ダウンロード、アップロードなど)を有効にすることができる。コンテンツストレージインタフェース206は、トークンを使用して、ストレージインデックス210へのクエリを認可し、コンテンツアイテムをコンテンツストレージ142に、又はコンテンツストレージ142からアップロードする、又はダウンロードすることができる。
【0080】
例えば、クライアントデバイス150は、コンテンツストレージ142にコンテンツアイテムをアップロードする要求をコンテンツストレージインタフェース206に送信することができる。この要求は、トークン、及びアップロードされるコンテンツアイテムを含むことができる。コンテンツストレージインタフェース206は、トークンを使用して、コンテンツアイテムがコンテンツストレージ142に既に存在するかどうかをチェックするストレージインデックス210へのクエリを認可し、そしてコンテンツストレージ142へのコンテンツアイテムのアップロードを認可することができる。また、クライアントデバイス150は、トークンをファイルジャーナルインタフェース202に提供し、メタデータをサーバファイルジャーナル148上に格納してコンテンツアイテムのアップロード及びリビジョンを追跡する要求を認可することができる。
【0081】
図2Bは、例示的なブロックストレージ及び同期構成を示す。この実施例において、コンテンツストレージ142は、特定のサイズ(例えば、4MB)までコンテンツアイテム(例えば、ファイル)の不透明チャンクであることができる、データブロックを格納することができる。コンテンツアイテムは、ブロック中に分割されることができ、これらのブロックは、アクセス用にコンテンツストレージ142に格納されることができる。ストレージインデックス210は、コンテンツストレージ142に格納されるブロックと、コンテンツストレージ142に格納されるブロックのそれぞれの位置とを追跡することができる。ファイルジャーナルインタフェース202は、サーバファイルジャーナル148とインタラクトし、コンテンツストレージ142に格納されるコンテンツアイテム及び/又はブロックへのリビジョンを追跡することができる。
【0082】
例えば、コンテンツアイテム220(例えば、MyFile.abc)をブロック220A、220B、220C、220N中に分割することができる。コンテンツストレージインタフェース206は、ブロック220A、220B、220C、220Nを受信して、コンテンツストレージ142におけるストレージのためにブロックデータ222Bをコンテンツストレージ142に送信することができる。ブロックデータ222Bは、コンテンツアイテム220と関連するブロック220A、220B、220C、220Nを含むことができる。
【0083】
ブロック220A、220B、220C、220Nは、コンテンツストレージ142において1つ以上のストレージデバイス又はボリューム上に格納される、及び/又は1つ以上の論理ストレージコンテナ(例えば、バケット)又はデータクラスタ内に集約されることができる。幾つかの事例において、ブロック220A、220B、220C、220Nは、同一位置(例えば、ストレージデバイス、ボリューム、コンテナ、及び/又はクラスタ)上に合わせて格納されることができる。他の事例において、幾つかの、又はすべてのブロック220A、220B、220C、220Nは、2つ以上の異なる位置(例えば、2つ以上の異なるストレージデバイス、ボリューム、コンテナ、及び/又はクラスタ)上に格納されることができる。
【0084】
また、コンテンツストレージインタフェース206は、ブロックメタデータ222Aをストレージインデックス210に格納することができる。ブロックメタデータ222Aは、ブロック220A、220B、220C、220Nを識別することができ、ストレージインデックス210がブロック220A、220B、220C、220Nをコンテンツストレージ142において追跡することを可能にする。ブロックメタデータ222Aは、各ブロック220A、220B、220C、220Nについての識別子を含むことができる。ブロックについての識別子は、ブロックを識別する、ブロックのハッシュなどの名前又はキーであることができる。
【0085】
また、ブロックメタデータ222Aは、ブロック220A、220B、220C、220Nのそれぞれのストレージ位置を示す、ブロック220A、220B、220C、220Nについての位置情報を含むことができる。ブロックの位置情報は、ブロックが格納されているストレージデバイス又はボリューム、及び/又はブロックが含まれている論理ストレージコンテナ又はデータクラスタを識別することができる。この位置情報を使用して、関連したブロックにアクセスする、又はこのブロックを取得することができる。
【0086】
コンテンツストレージインタフェース206は、ブロック220A、220B、220C、220Nをコンテンツストレージ142に格納する前に、又はこれらを格納した後に、ブロックメタデータ222Aをストレージインデックス210に格納することができる。例えば、コンテンツストレージインタフェース206は、ブロック220A、220B、220C、220Nをコンテンツストレージ142に格納した後に、ブロックメタデータ222Aをストレージインデックス210に格納し、ブロック220A、220B、220C、220Nがコンテンツストレージ142に格納されていることを示すことができる。
【0087】
幾つかの事例において、コンテンツストレージインタフェース206は、ブロック220A、220B、220C、220Nをコンテンツストレージ142に格納する前に、ストレージインデックス210にクエリを行い、ブロック220A、220B、220C、220Nがコンテンツストレージ142に格納されているかどうか(又は格納されている位置)を判定することができる。例えば、コンテンツストレージインタフェース206は、ブロックメタデータ222Aに基づきストレージインデックス210にクエリを行い、ブロック220A、220B、220C、220Nがコンテンツストレージ142に格納されているかどうかをチェックすることができる。ストレージインデックス210は、ブロックメタデータ222A中のブロック識別子をストレージインデックス210におけるブロック識別子と比較して、任意のマッチをチェックすることができる。ブロック識別子間のマッチは、関連したブロックがコンテンツストレージ142に格納されていることを示す。
【0088】
前述されるように、サーバファイルジャーナル148は、コンテンツアイテムの追加、編集、移動又はリネーム、削除などを有する、コンテンツアイテムリビジョンを追跡する。その結果、ファイルジャーナルインタフェース202は、リビジョン222Cをサーバファイルジャーナル148に格納し、コンテンツアイテム220及び/又はブロック220A、220B、220C、220Nをコンテンツストレージ142に追加したことを示すことができる。リビジョン222Cは、サーバファイルジャーナル148においてコンテンツアイテムリビジョンのジャーナル内にコンテンツアイテム220のリビジョンを表すことができる。
【0089】
リビジョン222Cは、コンテンツアイテム220、及びコンテンツアイテム220と関連する操作、例えば、追加操作(例えば、アップロード)、編集操作、移動又はリネーム操作、削除操作などを識別することができる。また、リビジョン222Cは、コンテンツアイテム220が格納されているコンテンツ管理システム110中のネームスペースと、リビジョン222Cを格納するためのサーバファイルジャーナル148におけるコンテンツアイテムリビジョンのジャーナル中のロウとを識別することができる。コンテンツアイテムリビジョンのジャーナル内のロウは、コンテンツアイテム220についてのリビジョン222Cと関連するリビジョン番号を表すことができる。
【0090】
ファイルジャーナルインタフェース(Tomahawk)
図3Aは、ファイルジャーナルインタフェース202によってクライアントデバイス150とサーバファイルジャーナル148との間で処理される通信の図を示す。サーバファイルジャーナル148は、ロウ中の値、及びサーバファイルジャーナル148中のフィールドとして、コンテンツアイテム状態及び変更(例えば、リビジョン)を追跡する。例えば、サーバファイルジャーナル148は、コンテンツストレージ142中でコンテンツアイテムへのリビジョンの1つ以上のジャーナルを維持することができる。1つ以上のジャーナルは、各コンテンツアイテムのリビジョンを各ネームスペース上で追跡することができる。サーバファイルジャーナル148上のジャーナル中の値のロウは、コンテンツアイテムをネームスペース中で識別することができ、このコンテンツアイテムの状態をネームスペース中に反映する。ネームスペース中の同一のコンテンツアイテムに対応するジャーナル中の後のロウは、コンテンツアイテムへの後のリビジョンをネームスペース中に反映することができる。したがって、コンテンツアイテムと関連するサーバファイルジャーナル148中のロウは、コンテンツアイテムの現在の状態と、このコンテンツアイテムへのいずれかのリビジョンの作成から現在の状態までとを識別することができる。
【0091】
コンテンツアイテム情報(例えば、状態、変更又はリビジョンなど)をクライアントデバイス150と同期させるために、サーバファイルジャーナル148は、サーバファイルジャーナル148中で追跡される、又は格納される、1つ以上のコンテンツアイテムについてのリビジョンを表すリビジョンデータ304を、ファイルジャーナルインタフェース202へ、又はこのファイルジャーナルインタフェース202から送信する、又は受信することができる。リビジョンデータ304は、例えば、サーバファイルジャーナル148中のロウに対応するコンテンツアイテムリビジョンのログを含むことができる。サーバファイルジャーナル148は、リビジョンデータ304をファイルジャーナルインタフェース204に送信することができ、このファイルジャーナルインタフェース204は、以下にさらに記述されるように、リビジョンデータ304をクライアントデバイス150についての操作データ302に変換することができる。
【0092】
クライアントデバイス150は、クライアントデバイス150においてコンテンツアイテムを更新する、又は修正するコンテンツ操作を実行することができる。コンテンツアイテム情報をサーバファイルジャーナル148と同期させるために、クライアントデバイス150は、操作データ302をファイルジャーナルインタフェース202へ、又はこのファイルジャーナルインタフェース202から送信する、又は受信することができる。クライアントデバイス150は、操作データ302をファイルジャーナルインタフェース202に送信し、コンテンツアイテムへの変更をクライアントデバイス150に報告し、操作データ302をファイルジャーナルインタフェース202から受信してコンテンツアイテムの最新の状態(例えば、リビジョンデータ304)をサーバファイルジャーナル148から得ることができる。
【0093】
例えば、クライアントデバイス150は、コンテンツアイテムAをクライアントデバイス150において編集し、コンテンツアイテムAへの編集を示す編集操作をファイルジャーナルインタフェース202に報告することができる。この編集操作は、ファイルジャーナルインタフェース202と通信して、コンテンツアイテムAへのリビジョンを示す、操作データ302中に含まれ得る。ファイルジャーナルインタフェース202は、編集操作を含む操作データ302を受信して、サーバファイルジャーナル148におけるストレージのためのリビジョンを生成し、このコンテンツアイテムAへの編集を追跡することができる。ファイルジャーナルインタフェース202は、サーバファイルジャーナル148を更新してコンテンツアイテムAの編集された状態を表すリビジョンを格納するために、リビジョンデータ304中の編集操作と関連するリビジョンをサーバファイルジャーナル148に含むことができる。
【0094】
以下にさらに記述されるように、操作データ302は、クライアントデバイス150によってクライアントデバイス150と関連する各ネームスペースについて取得される最新の状態又はリビジョンを識別するカーソルを含むことができる。例えば、カーソルは、クライアントデバイス150によって、このクライアントデバイス150と関連する各ネームスペースについて取得される最新のリビジョンをサーバファイルジャーナル148中で識別することができる。このカーソル中の情報により、クライアントデバイス150からの操作データ302中の操作がこの操作と関連するネームスペース(複数可)について最新の状態又はリビジョンをサーバファイルジャーナル148中で反映するかどうかをファイルジャーナルインタフェース202が判定することが可能である。これは、サーバファイルジャーナル148中の既存のリビジョンと、操作データ302から変換されるリビジョンとの間の競合を生じる可能性がある、より古いリビジョンに対応するクライアントデバイス150からの操作データ302中の操作がサーバファイルジャーナル148に書き込まれていないことをファイルジャーナルインタフェース202が確保することを援助することができる。
【0095】
クライアントデバイス150とサーバファイルジャーナル148との間のコンテンツアイテム情報の同期を可能にするために、ファイルジャーナルインタフェース202は、操作データ302をリビジョンデータ304に、そしてその逆も同様に変換する(例えば、変換サービス204を介して)ことができる。操作データ302をクライアントデバイス150から受信するときに、ファイルジャーナルインタフェース202は、操作データ302を、この操作データ302中の操作から解釈されるコンテンツアイテムリビジョンを含むリビジョンデータ304に変換することができる。リビジョンデータ304をサーバファイルジャーナル148から受信するときに、ファイルジャーナルインタフェース202は、リビジョンデータ304を、リビジョンデータ304中のリビジョンをクライアントデバイス150に実装するための操作を含む操作データ302に変換することができる。リビジョンデータ304は、1つ以上のコンテンツアイテムに起こっていること(すなわち、1つ以上のコンテンツアイテムへのリビジョン)を記述する、データをサーバファイルジャーナル148中に含み、操作データ302は、クライアントデバイス150に実行されている、又は実行されるであろう、1つ以上のコンテンツアイテムを修正する操作を含む。したがって、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148からの1つ以上のコンテンツアイテムへのリビジョンを記述するデータ(例えば、操作データ304)を、クライアントデバイス150に実行されている、又は実行されるであろう1つ以上のコンテンツアイテムをクライアントデバイス150において修正する操作に変換することができる。
【0096】
前述されるように、クライアントデバイス150からの操作データ302をサーバファイルジャーナル148についてのリビジョンデータ304に変換することに加えて、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148からのリビジョンデータ304をクライアントデバイス150についての操作データ302に変換することができる。ファイルジャーナルインタフェース202は、リビジョンデータ304をサーバファイルジャーナル148から取得し、リビジョンデータ304中のリビジョンを、これらのようなリビジョンに従いクライアントデバイス150において1つ以上コンテンツアイテムをリバイスする、クライアントデバイス150における実行のための操作に変換することができる。リビジョンデータ304中のリビジョンから生成されるこれらの操作は、ファイルジャーナルインタフェース202によってクライアントデバイス150に提供される操作データ302に含まれる。操作データ302とリビジョンデータ304との間のこの変換により、クライアントデバイス150及びサーバファイルジャーナル148は、コンテンツアイテム情報を必要に応じて互いに同期させることが可能である。
【0097】
クライアントデバイス150によって提供される操作データ302から生成されるいずれかのリビジョンデータ304をサーバファイルジャーナル148に書き込む前に、ファイルジャーナルインタフェース202は、操作データ302中のカーソルをチェックし、及び/又はサーバファイルジャーナル148にクエリを行い、リビジョンデータ304中のいかなるリビジョンもサーバファイルジャーナル148中で競合を生じないことを確保することができる。例えば、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148にクエリを行い、リビジョンデータ304中のリビジョンと関連するコンテンツアイテムのバージョンがサーバファイルジャーナル148におけるコンテンツアイテムのバージョンと同一であるかどうか、又はリビジョンデータ304中のリビジョンが関係するコンテンツアイテムとして、サーバファイルジャーナル148におけるコンテンツアイテムのバージョンが更新されたバージョンであるか、異なるバージョンであるかどうかをチェックすることができる。リビジョンデータ304が関係するバージョンと、コンテンツアイテムの最新のバージョンが異なるバージョンであることをサーバファイルジャーナル148が示す場合に、これら2つのバージョンは、競合している。
【0098】
ファイルジャーナルインタフェース202は、サーバファイルジャーナル148を更新して、操作データ302から導出されるリビジョンデータ304に含まれる新規のリビジョンを格納することができる。サーバファイルジャーナル148中のリビジョンにクエリを行う、及び/又はこれらのリビジョンを更新するときに、ファイルジャーナルインタフェース202は、ネームスペースメンバーシップストア208にクエリを行い、リビジョンデータ304中のリビジョンが影響するいずれのネームスペースと関連するネームスペース所有権情報を取得することができる。このネームスペース所有権情報は、所有するユーザアカウント(複数可)、又は特定のネームスペースのメンバーであるユーザアカウント(複数可)を示すことができるため、特定のネームスペースにアクセスすることができる。したがって、ファイルジャーナルインタフェース202は、ネームスペース所有権情報を分析し、サーバファイルジャーナル148がネームスペースのメンバーではないユーザアカウントからのネームスペースへのリビジョンを含むように更新されないことを確保することができる。
【0099】
図3Bを参照して、サーバファイルジャーナル148は、ジャーナル310、312を格納し、コンテンツアイテムのリビジョン及び状態を追跡し、識別することができる。この実施例において、ジャーナル310は、ネームスペース識別子(NS_ID)、サーバジャーナル識別子(SJ_ID)、パス、ブロック、前のリビジョン(Prev_Rev)、及びターゲットネームスペース(Target_NS)を有する記録を含む。NS_IDは、ネームスペースをサーバファイルジャーナル148中で一意に識別するために1つ以上の値を含むことができる。SJ_IDは、所与のネームスペース中のロウにマッピングする、単調に増加する値を含み、そのネームスペース内で操作又はリビジョンの順序付けを提供する。パスは、関連したコンテンツアイテムを識別するネームスペース相対パスであることができる。Prev_Revは、このパスと関連するコンテンツアイテムの前の状態に対応するロウのSJ_IDを識別する。Target_NSは、マウントされたネームスペースのマウントポイントについてのターゲットネームスペースのNS_IDを識別する。Target_NSフィールドは、マウントポイントに対応していないロウ(例えば、リビジョン)に設定されない。
【0100】
ジャーナル312は、NS_ID、SJ_ID、クロック(例えば、タイムスタンプ)、ファイル識別子(File_ID)、拡張属性(複数可)(xattr)などを有する記録を含む。xattrは、コンテンツアイテム又は操作と関連するメタデータを格納することができる。
【0101】
幾つかの事例において、ジャーナル310は、関連したコンテンツアイテムのサイズを表すサイズフィールド、コンテンツアイテムがディレクトリであるときを示すように設定されることができるディレクトリフィールド(例えば、Is_Dir)、関連したファイルを一意に識別するファイル識別子、クロック又はタイムスタンプフィールドなどのような他のフィールドを含むことができる。
【0102】
ファイルジャーナルインタフェース202は、前述されるように、操作データ302及びリビジョンデータ304に基づき変換320を実行することができる。変換320を実行するときに、変換サービス204は、サーバファイルジャーナル148におけるストレージのために線形化されたリビジョンを含むリビジョン322に、操作データ302を変換することができる。また、変換サービス204は、リビジョンデータ304を線形化された操作324Aに変換することができ、これらの線形化された操作324Aは、クライアントデバイス150に送信される操作データ302に含まれ、クライアントデバイス150によって適用され、クライアントデバイス150においてコンテンツアイテム情報(例えば、状態、変更など)を更新することができる。また、変換サービス204は、カーソル324Bを生成して、又は更新して、操作データ302中のカーソル324Bをクライアントデバイス150に提供することができる。カーソル324Bは、線形化された操作324Bと関連する各ネームスペース及び/又はコンテンツアイテムに対応するそれぞれのリビジョン又はロウをサーバファイルジャーナル148中で識別する。
【0103】
例えば、カーソル324Bは、そのネームスペース(例えば、SJ_ID)についてサーバファイルジャーナル148中でネームスペース(例えば、NS_ID)及びロウを識別することができ、そのネームスペースについてサーバファイルジャーナル148中で最新のリビジョンを示す。カーソル324B中のネームスペース及びロウは、線形化された操作324A中の操作と関連付けられることができる。カーソル324Bは、線形化された操作324Aがクライアントデバイス150に適用された後に、及び/又は適用される前に、サーバファイルジャーナル148中のネームスペースのリビジョン又は状態を示す、特定のネームスペースについてのサーバファイルジャーナル148中のリビジョンのログ上の特定の位置を識別することができる。したがって、カーソル324Bは、線形化された操作324Aの前又は後に、サーバファイルジャーナル148中のネームスペース及び/又はコンテンツアイテムの状態を示すことができ、リビジョン競合を回避すること、ならびに線形化された操作324Aが適用される前に、及び適用された後に、リビジョンの順序を追跡することを援助することができる。
【0104】
図4Aは、サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。この実施例において、サーバファイルジャーナル148中のジャーナル310は、サーバファイルジャーナル148によって追跡されるリビジョン322を有するロウ402を含む。ジャーナル310中のリビジョン322は、ネームスペース100及び101(すなわち、NS_ID100及び101)と関連付けられる。幾つかの事例において、サーバファイルジャーナル148は、それぞれのネームスペースに固有なリビジョンを追跡するネームスペース固有ジャーナルを格納することができる。ネームスペース固有ジャーナル中のこれらのロウ(例えば、402)は、そのネームスペースに固有なデータを含み、各ロウは、そのネームスペースに固有なリビジョンを反映する。
【0105】
ジャーナル310中の各ロウ(402)は、そのロウと関連するネームスペースを一意に識別するネームスペース識別子フィールド(NS_ID)、所与のネームスペース中のロウにマッピングする単調に増加する値を含み、そのネームスペース内で操作又はリビジョンの順序付けを提供するサーバジャーナル識別子フィールド(SJ_ID)を含む。また、ジャーナル310は、コンテンツアイテムのネームスペース相対パスを識別するためのパスフィールド(Path)、コンテンツアイテムと関連するブロック又はブロックリストを識別するためのブロックフィールド(Block)、コンテンツアイテムの前の状態又はリビジョンを表すジャーナル310中のロウ(すなわち、SJ_ID)を識別するための前のリビジョンフィールド(Prev_Rev)、及びマウントされたネームスペースのマウントポイントについてのターゲットネームスペースを識別する(ロウがマウントに対応する場合)ためのターゲットネームスペースフィールド(Target_NS)を含む。マウントポイントに対応しないロウ(例えば、リビジョン)に対してTarget_NSフィールドについてのデータはない。
【0106】
ジャーナル310中の最初のロウ402は、ブロック「h1」に対応し、前のリビジョン(Prev_Rev)又はターゲットネームスペース(Target_NS)を含まない、ネームスペース「100」(NS_ID100)中の「File1」(パスフィールド値File1)について最初のリビジョン(SJ_ID1)を識別する。ロウが前のリビジョン又はターゲットネームスペースを含まないことから、ロウによって表されるリビジョンは、ブロック「h1」と関連する「File1」のネームスペース「100」における追加に対応する。SJ_ID「4」を含むジャーナル310中のロウは、このロウがネームスペース「100」上の「File1」に対応するジャーナル310中の最後のロウ又はSJ_IDであることから、ネームスペース「100」上の「File1」についてジャーナル310中の最後のリビジョンを表す。SJ_ID「4」を含むこのロウは、ネームスペース「100」上の「File1」がSJ_ID「1」に加えられた後に編集され、この編集がブロック「h4」に対応することを示す。
【0107】
修正404は、リビジョン322を表す修正の実施例を描く。この実施例において、修正404のそれぞれは、ジャーナル310中の対応するロウ(402)からのコンテンツリビジョンを示す。各修正は、ジャーナル310中のSJID及びNSIDに対応し、ジャーナル310中のこれらの対応するSJID及びNSIDと関連するファイルに対応する。この実施例において、修正404と関連するコンテンツは、ジャーナル310中のブロック(例えば、「h1」、「h2」、「h3」、「h4」)の例示的なコンテンツ値を表す。修正404におけるこれらのコンテンツ値を例示目的のために提供し、各リビジョンと関連するコンテンツへの例示的な修正を描く。
【0108】
例えば、修正404における第一修正は、ジャーナル310中のSJID「1」及びNSID「100」を表し、加えられているネームスペース「100」中の「File1」を描く。コンテンツ「aaa」は、NSID「100」のSJID「1」において「File1」についての「h1」の値を表す。また、修正404は、「aa2」(例えば、「h4」)に修正されているネームスペース「100」中の「File1」と関連するコンテンツ「aaa」(例えば、「h1」)を説明する、ジャーナル310中のSJID「4」及びNSID「100」を表す、ネームスペース「100」中の「File1」の編集を描く。
【0109】
変換320において、ジャーナル310中のロウ402からのリビジョン322を、線形化された操作324Aに変換する。線形化された操作324Aは、ジャーナル310中のリビジョン322から生成され、線形化後の修正404を表す。線形化された操作324Aによって示されるように、線形化された操作324A中の操作は、複数のリビジョン(322)及び/又は修正(404)、又は単一のリビジョン(322)及び/又は修正(404)に基づくことができる。
【0110】
例えば、修正404は、ジャーナル310中のSJID「1」及びNSID「100」に対応する、「File1」をネームスペース「100」に加えるリビジョンと、ジャーナル310中のSJID「4」及びNSID「100」に対応する、ネームスペース「100」中の「File1」を編集するリビジョンとを描く。追加リビジョンは、「File1」及びNSID「100」と関連するコンテンツ値「aaa」(例えば、「h1」)、ならびに「File1」及びNSID「100」についてのいずれかの前のリビジョンの欠如から推測されることができる。換言すれば、コンテンツ「aaa」は、コンテンツ(例えば、「h1」)が加えられたか、編集されたかのいずれかであったことを示し、「File1」及びNSID「100」についての前のリビジョンの欠如は、コンテンツ「aaa」が編集されているコンテンツとは対照的に追加されているコンテンツ(例えば、「h1」)を表すことを示唆する。編集リビジョンは、「File1」及びNSID「100」と関連するコンテンツ値「aa2」(例えば、「h4」)と、「File1」及びNSID「100」と関連する前のリビジョン(SJID「1」及びNSID「100」)とから推測されることができる。換言すれば、「File1」及びNSID「100」と関連する、コンテンツ「aaa」から「aa2」への変更は、コンテンツ「aa2」が編集を表すことを示唆する。
【0111】
線形化された操作324Aにおいて、NSID「100」についてのSJID「1」及びSJID「4」に対応する追加及び編集修正(404)を、「aaa」(例えば、「h1」)から「aa2」(例えば、「h4」)に「File1」と関連するコンテンツ値を編集する単一の線形化された操作(編集操作)に変換することができる。「File1」のコンテンツ(例えば、「h1」)を「aa2」(例えば、「h4」)に編集する、単一の線形化された操作は、コンテンツ「aaa」(例えば、「h1」)と関連する「File1」をネームスペース「100」に追加する修正と、ネームスペース「100」中の「File1」と関連するコンテンツ「aaa」(例えば、「h1」)を「aa2」(例えば、「h4」)に編集する修正とを反映する。その結果、この線形化された操作は、2つの修正404、及びリビジョン322中の2つの対応するリビジョンに基づく。
【0112】
ジャーナル310中のSJID「2」及びNSID「100」に対応する修正404における修正は、コンテンツ「bbb」(例えば、「h2」)と関連する「File2」をネームスペース「100」に追加するリビジョンを表す。この修正は、ネームスペース「100」上で「File2」に対応するジャーナル310からのリビジョン322のみを表す。その結果、線形化された操作324Aは、コンテンツ「bbb」(例えば、「h2」)と関連する「File2」をネームスペース「100」に追加し、単一の修正404(ネームスペース「100」上での「File2」の追加)、及びリビジョン322に基づく、ネームスペース「100」上での「File2」についての単一の操作を含む。
【0113】
また、この実施例において、修正404は、ジャーナル310中のSJID「3」及びNSID「100」に対応する、コンテンツ「ccc」(例えば、「h3」)と関連する「File3」をネームスペース「100」に追加する修正と、ジャーナル310中のSJID「5」及びNSID「100」に対応する、ネームスペース「100」からの「File3」の削除(「-1」として表される)とのために含む。したがって、リビジョン322は、ネームスペース「100」上の「File3」と関連する2つの修正404を含む。「File3」及びネームスペース「100」と関連するジャーナル310中の最後のリビジョンがジャーナル310中のSJID「5」及びNSID「100」を表す削除修正に対応することから、リビジョン322からの「File3」及びネームスペース「100」と関連する追加及び削除修正404は、ネームスペース「100」から「File3」を削除する単一の操作に線形化されることができる。その結果、線形化された操作324Aは、「File3」をネームスペース「100」から削除する単一の操作である、「File3」及びネームスペース「100」についての単一の操作を備える。
【0114】
ジャーナル310において、NSID「100」についてのSJID「6」及び「7」、ならびにNSID「101」についてのSJID「1」は、ネームスペース「100」に加えられて、その後、ネームスペース「100」からネームスペース「101」に移動する「Dir」を表す。例えば、SJID「6」及びNSID「100」は、「Dir」及びネームスペース「100」を識別し、「Dir」がSJID「6」においてネームスペース「100」に追加されたことを示す前のリビジョンを含まない。SJID「7」は、ブロックフィールド(「-」)、前のリビジョンフィールド(SJID「6」)、及びターゲットネームスペースフィールド(「101」)によって反映される場合、ネームスペース「100」からネームスペース「101」に移動する「Dir」を識別する。次いで、NSID「101」についてのSJID「1」は、「Dir」及びネームスペース「101」についての前のロウ又はリビジョンの欠如によって示される場合、ネームスペース「101」に追加される「Dir」を識別する。NSID「100」中のSJID「6」及び「7」、ならびにNSID「8」中のSJID「1」における追加及び移動リビジョンは、SJID「6」及びNSID「100」に対応するネームスペース「100」への「Dir」の追加、SJID「7」及びNSID「100」に対応するネームスペース「100」からの「Dir」の削除、ならびにSJID「1」及びNSID「101」に対応するネームスペース「101」への「Dir」の追加という、3つの修正404によって描かれる。
【0115】
ジャーナル310中のNSID「100」のSJID「6」及び「7」にそれぞれ対応する、「Dir」及びネームスペース「100」の追加及び削除修正404は、「Dir」及びネームスペース「100」に対応するジャーナル310中の最後のリビジョンがSJID「7」及びNSID「100」におけるネームスペース「100」からの「Dir」の削除であることから、「Dir」をネームスペース「100」から削除する単一の操作に線形化される。ジャーナル310中のSJID「1」及びNSID「101」に対応する、ネームスペース「101」への「Dir」の追加は、「Dir」及びネームスペース「101」に対応する修正404及びリビジョン322のみである。その結果、「Dir」及びネームスペース「101」についての単一のマウント操作として、線形化された操作324Aに追加を提供する。したがって、NSID「100」中のSJID「6」及び「7」、ならびにNSID「101」中のSJID「1」に対応するリビジョン322からの3つの修正404(すなわち、ネームスペース「100」上での「Dir」の追加及び削除、ならびにネームスペース「101」上での「Dir」の追加)は、ネームスペース「100」中の「Dir」についての削除操作、及びネームスペース「101」中の「Dir」についてのマウント操作という、線形化された操作324A中の2つの操作に線形化される。
【0116】
上記に示されるように、線形化された操作324Aは、「File1」及びネームスペース「100」についての編集操作、「File2」及びネームスペース「100」についての追加操作、ネームスペース「100」中の「File3」の削除操作、ネームスペース「100」中の「Dir」についての削除操作、ならびに「Dir」をネームスペース「101」に追加するためのマウント操作を備える。線形化された操作324A中のこれらの操作は、リビジョン322から生成され、ジャーナル310中の各コンテンツアイテムの最新の状態を反映する。ファイルジャーナルインタフェース202は、線形化された操作324Aを生成し、線形化された操作324Aをクライアントデバイス150に送信して、クライアントデバイス150がリビジョン322からの最新の状態をジャーナル310中に含むことを確保することができる。
【0117】
線形化された操作324Aをクライアントデバイス150に提供するときに、ファイルジャーナルインタフェース202は、クライアントデバイス150への線形化された操作324Aに加えてカーソル324Bを含むことができる。カーソル324Bは、ジャーナル310中の各ネームスペース(NSID)について最後のリビジョン(SJID)を識別することができる。幾つかの実施形態において、カーソル324Bは、ユーザIDを有するFSAuthトークン、及びカーソルに提供されるNS_IDへの最後に観測されたアクセスパーミッションをも含むことができる。各ネームスペースについての最後のリビジョンは、各ネームスペースに対してクライアントデバイス150に送信された最新のリビジョンに対応するジャーナル310中の位置を示すことができる。
【0118】
幾つかの事例において、カーソル324Bは、線形化された操作324A中の各操作をジャーナル310中のネームスペース(NSID)及びロウ(SJID)にマッピングすることができる。操作と関連するネームスペース及びロウは、この操作に対応するジャーナル310中の位置を示すことができる。換言すれば、操作と関連するネームスペース及びロウは、ジャーナル310中にその操作によって表されるリビジョン番号を示すことができる。カーソル324B中のネームスペース及びロウは、線形化された操作324Aと関連する各ネームスペース及びコンテンツアイテムについてジャーナル310中で最新の状態に対応する。クライアントデバイス150からの変更(例えば、操作データ302を介して)を1つ以上のネームスペース及び/又はコンテンツアイテムに適用することを試みるときに、カーソル324Bをクライアントデバイス150用のツールとしてクライアントデバイス150に提供し、1つ以上のネームスペース及び/又はコンテンツアイテムについてクライアントデバイス150によって取得される最新の状態又はリビジョンを、ファイルジャーナルインタフェース202に対して識別することができる。ファイルジャーナルインタフェース202がカーソル324Bをクライアントデバイス150から受信するときに、それは、カーソル324Bを使用して、ジャーナル310においてクライアントデバイス150の位置(例えば、クライアントデバイス150によって取得されるジャーナル310からの最新のリビジョン)を識別し、クライアントデバイス150からの操作によって引き起こされる競合を検出する、又は回避することができる。
【0119】
例えば、ファイルジャーナルインタフェース202が「File1」をネームスペース「100」中で修正する操作をクライアントデバイス150から受信する場合に、ファイルジャーナルインタフェース202は、それが操作に加えてクライアントデバイス150から受信する、カーソル324Bを使用して、ジャーナル310がネームスペース「100」中の「File1」に対して、クライアントデバイス150からカーソル324B中で識別されるリビジョンよりも、新しいいずれかのリビジョンを含むかどうかをチェックすることができる。カーソル324B中のリビジョンがジャーナル310中で直近のリビジョンである場合に、ファイルジャーナルインタフェース202は、ネームスペース「100」中の「File1」についてジャーナル310中の新規のリビジョン(例えば、NSID「100」中のSJID「8」)として編集操作をコミットすることができる。
【0120】
代替に、カーソル324B中のリビジョンがネームスペース「100」中の「File1」に対してジャーナル310中の直近のリビジョンではない場合に、ファイルジャーナルインタフェース202は、クライアントデバイス150からの編集操作がネームスペース「100」中の「File1」に対して、ジャーナル310中で直近のバージョンに基づいていないと判定することができる。例えば、カーソル324Bがジャーナル310中でSJID「4」及びNSID「100」を識別し、ジャーナル310がネームスペース「100」中の「File1」に対して、SJID「12」及びNSID「100」におけるリビジョンを含むとファイルジャーナルインタフェース202が判定する場合に、ファイルジャーナルインタフェース202は、クライアントデバイス150からの編集操作がネームスペース「100」上の「File1」のより古いバージョン(例えば、SJID「4」及びNSID「100」)に関係があると判定することができ、この編集操作は、その後修正されたファイルを編集する場合に競合を生じる可能性がある。ファイルジャーナルインタフェース202は、この編集操作によって生じるこの競合を検出して編集操作を拒否し、この競合を調整することを試みる、又は最新のリビジョンをクライアントデバイス150に提供してクライアントデバイス150が競合を調整することを可能にすることができる。
【0121】
ファイルジャーナルインタフェース202は、線形化された操作をクライアントデバイス150に送信するたびに、各ネームスペース及び/又はコンテンツアイテムについてのそれぞれの位置をジャーナル310中で識別する、本明細書に記述されるようなカーソルを含むことができる。同様に、いつでもクライアントデバイス150は、操作をファイルジャーナルインタフェース202に送信し、ファイルジャーナルインタフェース202がクライアントデバイス150における状態をジャーナル310における状態にマッピングするために使用することができる、その最新のカーソルを含むことができる。
【0122】
この実施例におけるジャーナル310は、複数のネームスペースを備えるジャーナルを描く。前述されるように、幾つかの実施例において、サーバファイルジャーナル148は、ネームスペース固有のジャーナルを維持することができる。カーソル324Bは、各ネームスペースについてSJID及びNSIDを含み、各ネームスペースについての最新のリビジョンを示すことができる。カーソル324Bに基づき、ファイルジャーナルインタフェース200は、複数のジャーナルが維持されている実施形態において、本明細書にさらに説明されるように、複数のジャーナルにクエリを行う、及び/又はリビジョンを複数のジャーナルから取得することができる。
【0123】
図4Bは、クライアントデバイス150からの操作データ302をサーバファイルジャーナル148においてジャーナル310についてのリビジョン322に変換する、線形化410のための例示的なプロセスの図を示す。クライアントデバイス150は、操作データ302をファイルジャーナルインタフェース202に提供することができる。この実施例における操作データ302は、コンテンツアイテムの編集、追加、リネーム、移動、マウント、又は削除操作などの、操作412をクライアントデバイス150に含む。幾つかの事例において、操作412は、同一のコンテンツアイテムに対して複数の操作を含むことができる。例えば、操作412は、ネームスペース「100」上の「File4」を編集する操作、ネームスペース「100」からの「File4」を削除する操作を備えることができる。
【0124】
また、操作データ302は、ファイルジャーナルインタフェース202からクライアントデバイス150によって以前に受信されたカーソル324Bを含む。カーソル324Bは、ジャーナル310において1つ以上のネームスペース及び/又はコンテンツアイテムについての状態(例えば、NSID及びSJID)又は最新のリビジョンを識別することができる。クライアントデバイス150は、カーソル324Bを操作412についての基準ポイントとしてファイルジャーナルインタフェース202に提供することができる。この実施例において、カーソル324Bは、SJID「9」によって表されている、ネームスペース「100」についての最新の状態を提供する。
【0125】
幾つかの事例において、カーソルは、コンテンツ管理システム110によって暗号により署名され、カーソルが改ざんされていないことをファイルジャーナルインタフェース202が判定することを可能にする。さらに、クライアントデバイス150がネームスペースについて直近のリビジョンをサーバファイルジャーナル148から受信したときに、クライアントデバイス150がリビジョンをサーバファイルジャーナル148にコミットすることから、ファイルジャーナルインタフェース202は、NS_IDに対して最後に観測されたアクセスパーミッションがまだ有効であるため、クライアントデバイス150がネームスペースへのアクセスを有することを許容することができる。
【0126】
ファイルジャーナルインタフェース202は、操作412及びカーソル324Bを受信して線形化410を実行し、クライアントデバイス150からの操作412を線形化してジャーナル310についてのリビジョン322に変換することができる。操作412に基づき、ファイルジャーナルインタフェース202は、操作のログ414を生成することができる。ログ414は、ジャーナル310中のそれぞれのネームスペース(複数可)にマッピングされる操作412からの操作リストを含むことができる。幾つかの事例において、ログ414は、以前に説明されるような操作412から生成される線形化された操作(324A)を備えることができる。
【0127】
ファイルジャーナルインタフェース202は、ジャーナル310を更新してログ414に操作を反映する前に、カーソル324Bを使用して、その操作412がジャーナル310に最新の状態又はリビジョンを反映することを検証することができる。カーソル324Bがジャーナル310においてログ414と関連するネームスペース及び/又はコンテンツアイテムに対して最新の状態又はリビジョンを反映することをファイルジャーナルインタフェース202が確認する場合に、ファイルジャーナルインタフェース202は、ログ414に基づきリビジョン322をジャーナル310に追加することができる。リビジョン322は、ログ414中の操作と関連する各コンテンツアイテム及び/又はネームスペースの最新の状態又はリビジョンを含むことができる。
【0128】
ログ414における操作は、「File5」についての追加及び編集操作を備える。その結果、リビジョン322は、ファイルジャーナルインタフェース202がジャーナル310に「File5」の最新状態(すなわち、線形化方式において追加及び編集操作を「File5」に適用した後の状態)として書き込むことができる、「File5」の編集を備える。また、ログ414におけるこれらの操作は、「Dir2」についての追加操作、ならびにネームスペース「100」上での「File4」についての編集及び削除操作を備える。したがって、リビジョン322は、「Dir2」をネームスペース「100」に追加する操作、ならびに「File4」をネームスペース「100」から削除する操作を、それぞれ「Dir2」及び「File4」の最新の状態として有することができる。
【0129】
図4Bにおいて、ジャーナル310中に描かれるリビジョン(322)は、操作412と関連する各コンテンツアイテム(「File4」、「File5」、「Dir2」)の最新の状態を反映する。しかしながら、幾つかの事例において、ファイルジャーナルインタフェース202がログ414に起因する各ネームスペース及び/又はコンテンツアイテムの最新の状態のリビジョンだけではなく、最新の状態又はリビジョンまでに導出するいずれかの前の状態又はリビジョンをも反映するため、ログ414によって表されるあらゆるリビジョンをジャーナル310に書き込むことができることに留意するべきである。例えば、ファイルジャーナルインタフェース202は、操作412からの最新の状態を反映する「File4」の編集のみを書き込むこととは対照的に、ジャーナル310に「File4」の編集についてのリビジョン、及び「File4」の削除についての後のリビジョンを書き込み、ジャーナル310に操作412からの「File4」のリビジョンのフルシーケンスを示すことができる。
【0130】
ファイルジャーナルインタフェース202は、ログ414中の操作をリビジョン322に変換し、ジャーナル310を更新してリビジョン322を含むことができる。ファイルジャーナルインタフェース202は、ジャーナル310中のそれぞれのロウにおいて、リビジョン322をジャーナル310に書き込むことができる。ファイルジャーナルインタフェース202は、リビジョン322をジャーナル310中の次の利用可能なロウ(例えば、SJID)に追加することができる。幾つかの事例において、ファイルジャーナルインタフェース202は、線形化410及び/又はそれぞれのタイムスタンプ又はクロックに基づき決定されることができる相対的な順序に基づきリビジョン322を追加することができる。
【0131】
図4Bに示されるように、ネームスペース「100」中の「File4」の削除操作は、ネームスペース「100」についてのロウ「11」又はSJID「11」に含まれる。ジャーナル310のSJID「11」中のリビジョンは、ブロックフィールド中のマイナス記号によって反映される場合、ネームスペース「100」中の「File4」が削除されていることを示し、ネームスペース「100」中の「File4」についてのジャーナル310において、SJID「9」を前のリビジョンとして識別する。「Dir2」の追加、及び「File5」の編集は、ロウ又はSJID12及び14にそれぞれ含まれる。
【0132】
図4B中のジャーナル310は、ログ414及びカーソル324Bに基づくリビジョン322を含み、ログ414中で修正される各コンテンツアイテムの状態を反映するように更新されている。ジャーナル310中の各ロウにおけるパスフィールドは、関連したネームスペース(例えば、ネームスペース「100」)内でコンテンツアイテムを識別する。ロウのパスフィールドは、ログ414中の対応する操作からのファイル及びネームスペースに基づく。ジャーナル310中のブロックフィールドは、コンテンツアイテムを表す。幾つかの事例において、ブロックフィールドは、それぞれのコンテンツアイテム又はデータブロックのハッシュを含むことができる。コンテンツアイテムが削除されている、及び/又はディレクトリ、フォルダ、マウントなどである場合に、ブロックフィールドは、空であり得る。
【0133】
ジャーナル310がログ414に基づくリビジョン322、及びカーソル324Bを含むように更新するときに、変換サービス204は、ジャーナル310のパスフィールド中に含む、各コンテンツアイテムのパスを識別することができる。幾つかの事例において、変換サービス204は、コンテンツアイテムの識別子(例えば、ファイルID)をコンテンツアイテムのパス(例えば、/directory/filename)に変換することができる。例えば、クライアントデバイス150は、コンテンツアイテムについてのそれぞれのパスを追跡する、又は計算することなく、識別子を使用して、コンテンツアイテム(例えば、操作データ302中のコンテンツアイテム)を識別することができる。ジャーナル310は、コンテンツアイテムのパスを代替に使用して、コンテンツアイテムを識別することができる。変換サービス204は、クライアントデバイス150からのコンテンツアイテムの識別子を使用してジャーナル310についてのコンテンツアイテムのパスを計算し、コンテンツアイテムについて計算されるパスを使用してジャーナル310を更新することができる。また、変換サービス204は、逆変換を実行してコンテンツアイテムのパスに基づきコンテンツアイテムの識別子を取得し、クライアントデバイス150と通信するコンテンツアイテムを参照するときにコンテンツアイテムの識別子を使用することができる。
【0134】
例えば、変換サービス204は、ジャーナル310中のパス、ジャーナル310中のNSID、及び/又はジャーナル310中のディレクトリフィールド(又はサーバファイルジャーナル148中の他の箇所)を使用して、コンテンツアイテムを識別し、そのコンテンツアイテムの識別子(例えば、ファイルID)を取得することができる。ファイルジャーナルインタフェース202がそのコンテンツアイテムに関係がある更新又は情報をクライアントデバイス150に送信する場合に、ファイルジャーナルインタフェース202は、クライアントデバイス150がコンテンツアイテムのパスを含む、又は含まないコンテンツアイテムを識別するために使用することができる、コンテンツアイテムの識別子をクライアントデバイス150に提供することができる。
【0135】
前述されるように、操作412からのリビジョン322をジャーナル310に書き込む前に、ファイルジャーナルインタフェース202は、カーソル324Bが操作412と関連する各ネームスペース及び/又はコンテンツアイテムについてジャーナル310中の最新の状態又はリビジョンを反映するかどうかをチェックすることができる。幾つかの事例において、カーソル324Bがジャーナル310中の最新の状態又はリビジョンを反映することを確認した後に、ファイルジャーナルインタフェース202は、操作412から生成されるリビジョンがジャーナル310中の既存のリビジョンと競合しないことを確保する第二チェックも実行することができる。例えば、ジャーナル310においてネームスペース「100」中のSJID「5」が「File5」の削除操作を表す場合に、クライアントデバイス150からのファイルジャーナルインタフェース202によって受信される操作412から発行されるSJID「14」中に描かれる「File5」の編集リビジョン322は、「File5」がSJID「5」において削除された場合でも、「File5」を編集することを試みることによって競合を生じる。したがって、ファイルジャーナルインタフェース202は、この実施例において編集操作及びリビジョンを拒否し、編集操作が無効であることをクライアントデバイス150に通信することができる。ファイルジャーナルインタフェース202は、カーソル324Bを更新し、更新されたカーソルをクライアントデバイス150に提供し、必要に応じて「File5」(及びいずれかの他のコンテンツアイテム)についてジャーナル310中の最新の状態又はリビジョンのクライアントデバイス150に通知することができる。
【0136】
図4Cは、ネームスペース間操作の例示的な線形化の図を示す。ネームスペース間線形化、及びシャード間又はネームスペース間のリスト化は、クロック順序付けを介して実行されることができる。テーブル454A、452B(合わせて「452」)は、線形化のためのネームスペース間操作のバッチを示す。テーブル454A、452Bは、テーブル454A、452B中の記録用のネームスペースを識別するためのネームスペース(NSID)フィールドであるカラム456A、458Aと、カラム456A、458A中のそれぞれのネームスペース用のテーブル452A、452B中のロウ又はSJIDを識別するためのSJIDフィールドであるカラム456B、458Bと、各SJIDと関連する操作を識別するための操作フィールドであるカラム456C、458Cと、カラム456C、458C中の操作と関連するタイムスタンプを識別するためのクロックフィールドであるカラム456D、458Dとをそれぞれ含む。
【0137】
この実施例において、テーブル452Aは、NSID「1」についてのSJID「100」及び「101」を描く。SJID「100」は、タイムスタンプ「1000」において「foo.txt」をネームスペース「1」に追加する操作と関連付けられ、そしてSJID「101」は、タイムスタンプ「1001」においてネームスペース「2」をマウントする操作と関連付けられる。テーブル452Bは、NSID「2」についてのSJID「1」及び「2」を描く。SJID「1」は、タイムスタンプ「500」において「bar.txt」をネームスペース「2」に追加する操作と関連付けられ、そしてSJID「2」は、タイムスタンプ「1002」において「bar.txt」を編集する操作と関連付けられる。
【0138】
リニアライザ(例えば、変換サービス204)は、テーブル452中の操作のバッチを取得し、カーソル(464)によって操作(462)の単一のストリームを発行することができる。リニアライザは、テーブル452中に少なくとも1つの操作を含むすべてのネームスペースを識別し、それぞれタイムスタンプ、NSID、SJIDに基づきすべてのネームスペースについての操作を線形化することができる。この実施例において、テーブル452中の操作のバッチは、テーブル454に示される操作のストリームに線形化する。
【0139】
テーブル454は、各操作のネームスペースを識別するためのNSIDフィールドを含むNSIDカラム460、テーブル454中の操作を識別するための操作フィールドを含む操作カラム462、及び各操作についてのカーソル状態を識別するためのカーソルフィールドを含むカーソルカラム464を含む。テーブル454中のロウ454Aは、テーブル452A中のネームスペース「1」のSJID「100」からの追加操作を備える。ロウ454Aについてのカーソルカラム464中のカーソル状態は、追加操作がテーブル452Aに示されるネームスペース「1」中のSJID「100」に対応することを示す、ネームスペース「1」及びSJID「100」である。テーブル454中のロウ454Bは、NSIDカラム460又は操作カラム462中に値を含まないが、この実施例において、ネームスペース「2」についてSJID「0」を追加する、ネームスペース間のカーソル状態を含む、カーソルカラム464中のカーソル状態を更新する。
【0140】
テーブル454中のロウ454Cは、テーブル452Aに示されるネームスペース「2」中のSJID「1」からの追加操作を含む。ロウ454Cについてのカーソルカラム464中のカーソル状態は、ロウ454C中の追加操作と関連するネームスペース「1」及び「2」についてそれぞれSJID「100」及び「1」を含む。示されるように、カーソル状態は、カーソルがネームスペース「1」中のSJID「100」、及びネームスペース「2」中のSJID「1」にあることを示す。換言すれば、ネームスペース「1」中のロウ又はSJIDは、追加操作がネームスペース「1」の状態に影響しない場合に増加しないが、ネームスペース「2」中のロウ又はSJIDは、追加操作がネームスペース「2」中のリビジョンを表し、ネームスペース「2」の状態に影響する場合に1つ増加した。したがって、ロウ454C中のカーソル状態は、ネームスペース「2」中のSJID「1」における追加操作後に、ネームスペース「1」及びネームスペース「2」についてそれぞれのSJIDを追跡する。
【0141】
テーブル454中のロウ454Dは、SJID「101」におけるマウント操作、及びテーブル452Aにおけるネームスペース「1」を含む。マウント操作は、ネームスペース「2」をネームスペース「1」にマウントする。マウント操作は、ネームスペース「1」中のSJIDを「100」から「101」に増加させるが、ネームスペース「2」中のSJIDを増加させない。その結果、ロウ454Dについてのカーソルカラム464中のカーソル状態は、ネームスペース「1」についてSJID「101」を含み、ネームスペース「2」についてSJID「1」を維持する。このカーソル状態は、ネームスペース「1」及び「2」における状態及び/又は順序を反映する。
【0142】
テーブル454中のロウ454Eは、マウント及び編集操作のそれぞれのタイムスタンプに従い、ネームスペース「1」中のSJID「101」におけるマウント操作後である、テーブル452A中のSJID「2」及びネームスペース「2」における編集操作を含む。ロウ454Eのカーソルカラム464中のカーソル状態は、SJID「101」におけるネームスペース「1」についてのカーソル状態を維持するが、SJID「2」へのネームスペース「2」についてのカーソル状態を増加させる。
【0143】
テーブル454中に示されるように、操作462は、ネームスペース「1」及び「2」にわたる因果関係及びタイムスタンプに基づき線形化される操作のストリームとしてリスト化される。操作462をテーブル454中で線形化してネームスペース間の因果関係及び連鎖を反映すると、操作462をサーバファイルジャーナル148中のリビジョン(例えば、ジャーナル310中のリビジョン322)に変換し、サーバファイルジャーナル148に書き込むことができる。
【0144】
例えば、サーバファイルジャーナル148中のネームスペース「1」についてのジャーナルは、「foo.txt」をネームスペース「1」に追加する追加操作を表すSJID「100」におけるリビジョン、及びネームスペース「2」をネームスペース「1」上にマウントするマウント操作を表すSJID「101」におけるリビジョンを含むように更新されることができる。さらに、サーバファイルジャーナル148中のネームスペース「2」についてのジャーナルは、「bar.txt」をネームスペース「2」に追加する追加操作を表すSJID「1」におけるリビジョン、及びネームスペース「2」上の「bar.txt」を編集する編集操作を表すSJID「2」におけるリビジョンを含むように更新されることができる。
【0145】
ネームスペースビュー及びスナップショット
図5Aは、コンテンツ管理システム110によって最新のネームスペースビューを構築するための例示的なプロセスを示す。最初にコンテンツ管理システム110は、ネームスペースビューを作成するために最も効率的なメカニズムを決定する(502)ことができる。
【0146】
第一の方法は、サーバファイルジャーナル中の任意のポイントを選択して、そのポイントからネームスペースについて読み出すこと、そして時間内にそのポイントにおいてネームスペース中のすべてのパスを識別することである。上述されるように、サーバファイルジャーナル148は、コンテンツアイテムへのリビジョンを記述するロウのコレクションである。これらのロウは、ネームスペース識別子及びサーバファイルジャーナル識別子によって編成される。ネームスペース識別子及びサーバファイルジャーナル識別子(ns_id、sj_id)の組み合わせは、サーバファイルジャーナル148中の特定のロウ、及び識別されるネームスペース内の特定のリビジョンに対応する。コンテンツ管理システム110は、サーバファイルジャーナル148中の最近のロウのときに、又はこの最近のロウの前に、特定のネームスペースIDについてサーバファイルジャーナル148から読み出す(504)ことができる。サーバファイルジャーナル148中のこれらのリビジョンは、最新のタグによってフィルタリングされることができ、いずれかの特定のパスへの最後のリビジョンである場合にサーバファイルジャーナル148中のロウを識別する。その結果、適用される最新のタグを含む所定のネームスペースについてのサーバファイルジャーナル148のすべてのロウを読み出すことにより、所定のネームスペースについてのすべてのファイルパスを識別する、リビジョンのリストをもたらす。これらのファイルパスをサーバファイルジャーナル148のエントリから抽出し(508)、これらのファイルパスを使用してネームスペースビューのディレクトリ構造を構築する(510)ことができる。
【0147】
第二の方法は、コンテンツストレージ142中のネームスペースの要約されたスナップショットを時間内に最近のポイントに格納する、コンテンツストレージサービス116によって提供されるスナップショットサービスから読み出すことである。このスナップショットサービスは、以下により詳細に記述されるが、前置きとして、スナップショットサービスは、時間内に最近のポイントに対して、ネームスペースの要約されたビュー(その中にすべてのコンテンツアイテムを含む)を格納する。大きなネームスペースは、複数のディスク経由でシャード化される必要がある場合があり、シャード名は、そのシャード上に格納される各ファイルパスを識別するハッシュを含むことができる。シャード名にパス情報を格納する利点は、シャードがファイルパスを抽出するために開かれる必要がないことであり、使用者は、スナップショットサービスの使用時に、ファイルパス情報を使用して使用者が探しているシャード(複数可)のみを開くことができることである。各スナップショットは、特定のサーバファイルジャーナルID(ns_is、sj_id)における特定のネームスペースについて最新のものである。
【0148】
図5Aに戻り、ネームスペースについてのファイルパスをスナップショットサービスから抽出する(506)ことができ、これらからのファイルパスを使用して、ネームスペースビューのディレクトリ構造を構築する(510)。
【0149】
コンテンツ管理システム110は、最も効率的なメカニズムである可能性が高いメカニズムをヒューリスティックに判定する(502)ことができる。ネームスペースがあまりアクティブではないため、いずれかの所与のコンテンツアイテムについてサーバファイルジャーナル148中のリビジョンのロウが多すぎない場合に、コンテンツ管理システムは、サーバファイルジャーナル方法が好ましいと決定することができる。ただし、ネームスペースが非常にアクティブである場合に、又はある他の因子によって、スナップショットサービスから読み出すのがより効率的であるとコンテンツ管理システム110に判定させる場合に、その方法を使用することができる。
【0150】
両方のメカニズムは、抽出されたファイルパスを使用して、過去の特定の時点についてのネームスペースビューのディレクトリ構造を構築する(510)ことをもたらす。サーバファイルジャーナル方法において、コンテンツ管理システムは、所与のサーバファイルジャーナルIDのときに、又はこのIDの前に、エントリをサーバファイルジャーナル148から読み出し、スナップショット方法において、これらのパスは、所与のサーバファイルジャーナルIDの時点で最新であったスナップショットから抽出された。その結果、コンテンツ管理システム110は、上述されるようにサーバファイルジャーナルエントリ又はスナップショットサービスからパスが抽出されたときに使用されたサーバファイルジャーナルIDの後であるサーバファイルジャーナル148中のロウに格納されるリビジョンを処理する(512)ことによって、ネームスペースビューをより最新の状態にすることができる。
【0151】
上述されるようなことから、ここでネームスペースビューを要求するユーザアカウントについてビューがフィルタリングされる必要がある特定のネームスペースの現在のビューをサーバが含むので、所与のユーザアカウントは、ネームスペース中のすべてのコンテンツアイテムを閲覧することが不可能である場合がある。コンテンツ管理システムは、原理を使用するネームスペース中のユーザアカウントについてのアクセスが上記の
図4に関して記述すると判定する(514)ことができ、ユーザアカウントについてのアクセスパーミッションに従い構築されたネームスペースビューをフィルタリングする(516)ことができる。コンテンツ管理システム110は、フィルタリングされたネームスペースビューを2つのクライアントデバイス150に送信して、リモートツリーを構築する(518)ことができる。
【0152】
クライアントデバイス150は、そのローカルツリーを更新し、リモートツリーにマッチングさせる(520)ことができる。そのローカルツリーを更新するときに、新規のディレクトリを作成することは、比較的に容易なタスクであるが、コンテンツアイテムを格納することは、大量のデータをダウンロードすることを必要とする場合がある。幸いなことに、クライアントデバイス上に既に格納されている、いずれかのコンテンツアイテムは、ダウンロードされる必要がない。クライアントデバイス150は、削除されたコンテンツアイテムについてのブロック、及びこれらのコンテンツアイテムについてのコメントを含む、クライアントデバイス150上のブロックキャッシュからのものを使用してコンテンツアイテムを再作成することができる。これらの既にダウンロードされたブロックを使用することは、ブロックをダウンロードすることよりもより効率的である。しかしながら、ブロックキャッシュ中にみいだされない、いかなるブロックもサーバからダウンロードされる(524)必要がある。
【0153】
図5Aに示されるプロセスは、編成ディレクトリ532にマウントされる各ネームスペースについて繰り返されることができる。
【0154】
図5Bは、共有ディレクトリ532のユーザ(ユーザ1)のビュー(530)を構築するために使用される例示的な情報を示す。いずれかのネームスペースについて、
図5Aに関して記述されるネームスペースビュービルダープロセスは、ユーザ1のアクセス権に従いフィルタリングされるネームスペースについて抽出されたパスをもたらすことができる。ビュー530は、ユーザ1のユーザアカウントフォルダ534についてのネームスペース中のパスを示す。これを使用して、ネームスペースについてのディレクトリツリーを決定することができ、このプロセスを各ネームスペースに対して繰り返すことがきる。各ネームスペースは、マウントテーブルからの情報に基づき編成ディレクトリ内に位置し得る。
【0155】
ユーザ1についてのビュー530は、ユーザ1の視点からコンテンツ管理システム110上にネームスペース及び共有フォルダのビューを提供する。図示されるように、ビュー530は、コンテンツ管理システム110上で他のユーザアカウントに可視である、ユーザ1についてのユーザアカウントフォルダ534、及び共有フォルダ540を含む。
【0156】
コンテンツ管理システム110は、アクセスなし(ユーザアカウントはフォルダにアクセスする、又はこのフォルダを見ることができない)、ビュー名のみ(ユーザアカウントがフォルダの存在を閲覧することを可能にする)、トラバーサル(ユーザアカウントがフォルダの存在を閲覧することを可能にしてフォルダを開くが、ユーザアカウントが所定のフォルダ(複数可)もしくはコンテンツアイテム(複数可)以外の、いずれかのフォルダ(複数可)、又はフォルダを含むコンテンツアイテム(複数可)を閲覧することを不可能にする)、読み出しアクセス(閲覧すること、及び開くことができるが、いかなるコンテンツアイテムも変更する、又はフォルダに書き込むことができない)、書き込みアクセス(フォルダ又はコンテンツアイテムを修正することができる)などを含む、様々なアクセスレベルを提供することができる。幾つかの事例において、これらのアクセスレベルをコンテンツアイテム管理システム110が使用して、フォルダ(ユーザ1のこれらのような)をクライアントデバイス150と同期させないと判定することができる。これらのような事例において、ユーザ1についてのクライアントデバイス150は、他のユーザアカウントフォルダの存在に気づかない可能性がある。
【0157】
したがって、これらのアクセスレベルは、ユーザ1が見る、アクセスする、ナビゲートする、修正することなどができる、フォルダを含むコンテンツアイテムを判定することができる。例えば、ビュー530において、共有フォルダ540は、機密共有フォルダ542を含む。機密共有フォルダ542は、機密共有フォルダ542へのアクセスを有さないディレクトリ532のメンバーがみることができる機密フォルダであるが、機密共有フォルダ542へのアクセスを有さないディレクトリ532のこれらのようなメンバーは、機密共有フォルダ542中のコンテンツアイテムをみることができない場合がある。
【0158】
幾つかの例において、一箇所に合わせて保存される完全なネームスペースを含むことが有益であることができる。例えば、ネームスペースが新規のアカウントと共有されているとき、新規のクライアントデバイスがユーザアカウントに追加されるとき、又は編成ディレクトリに移行するときなどの、すべてのネームスペースが構築される必要があるときの例において、サーバファイルジャーナル148から各リビジョンを読み出し、またコンテンツストレージサービス116を使用してコンテンツストレージ142からコンテンツアイテムを構成するブロックを抽出する代替に、一箇所からすべてのネームスペースをダウンロードすることがより効率的であることができる。
【0159】
その結果、コンテンツストレージサービス116は、ある時点で、又はより具体的に、そのネームスペースについてのサーバジャーナル識別子(SJID)の時点で、ネームスペースビューを格納するスナップショットサービスを含むことができる。ネームスペースビューは、そのネームスペース(NSID)においてネームスペースのコンテンツの圧縮されたスナップショットである。このスナップショットは、ネームスペースのコンテンツを含み、ユーザアカウントのパーミッション、又は隠しファイルなどについてフィルタリングされない場合がある。ネームスペースのスナップショットは、大きく、ページに分割される必要がある場合がある。各ページは、ネームスペース内のパスの表現(例えば、ネームスペースを構成する1サブセットのパス)を含むことができる。
【0160】
各ページが圧縮されることから、コンテンツ管理システム110上でページを開くことは、そこで大容量のメモリを潜在的に利用する可能性があるため、回避されることが好ましい場合がある。その結果、幾つかの事例において、各パス、及びこのパスのプレフィックスは、ハッシュ化されることができ、これらのハッシュは、スナップショットページの名前に格納されることができる。したがって、そのパスを見つけるためにスナップショットのページを開くことなく、パスのハッシュを検索することが可能である。また、この最適化は、パス名をスナップショットページから抽出してネームスペースについてディレクトリツリーを再構築する場合に逆に機能する。
【0161】
ディレクトリツリーを再構築するために、これらのパスをトポロジー的にソートすることができる(parent_prefix_hash→path_hash)。依存関係のないパスの初期セットは、ネームスペースのルートの子であり、フルパス(例えば、「/foo/bar/baz」)は、このパスのセットから再構築されることができる(例えば、「/foo」、「/foo」→「/foo/bar」、「/foo/bar」→「/foo/bar/baz」)。このセットに沿って各パス状態は、そのパスの最後のコンポーネント、例えば、「foo」、「bar」、「baz」を含む。
【0162】
上述されるように、ネームスペースのスナップショットは、ユーザアカウントアクセスパーミッションについてフィルタリングされていない。代替に、ディレクトリツリーをネームスペースから構築した後に、ディレクトリツリー中のこれらのパスは、ユーザアカウントアクセスパーミッションに従いフィルタリングされることができる。ユーザアカウントアクセスパーミッションをコンテンツ管理システム110から取得することができる。ユーザアカウントがアクセスを有する各パスは、例えば、以下のように、フィルタのセットを表すことが、許可されるように指定されることができる。
ALLOW_ONLY(ハッシュ1、ハッシュ2、ハッシュ3、...)
ALLOW_MOUNT(ハッシュ4、ハッシュ5、...)
【0163】
各フィルタは、フルパスハッシュを含むことができる。フィルタが指定される場合、コンテンツストレージサービスは、フルトポロジカルソートを行わずに実行時にフィルタでパスを除くことができる。これにより、スナップショットの単一ページ中のデータのみをみて、フィルタをそのページに適用することを可能にする。
【0164】
ツリーデータ構造
図6Aは、様々な実施形態による、ツリーデータ構造の実施例を示す。ツリーデータ構造は、クライアントデバイスに格納され、クライアント同期サービス156などのクライアント同期サービスによって管理されることができる。
図6Aにおいて、リモートツリー610、同期ツリー620、及びローカルツリー630を含む、ツリーデータ構造を示す。
【0165】
リモートツリー610は、クライアントデバイスから遠隔に格納される(例えば、コンテンツ管理システムのサーバ上の)サーバ状態又はコンテンツアイテムの状態を表す。ローカルツリー630は、クライアントデバイス上でローカルに格納される、ファイルシステム状態、又は対応するコンテンツアイテムの状態を表す。同期ツリー620は、ローカルツリー及びリモートツリーについてのマージベースを表す。マージベースは、ローカルツリー及びリモートツリーの共通祖先、又はローカルツリーとリモートツリーとの間で最後に既知の同期した状態であると考えられることができる。
【0166】
各ツリーデータ構造(例えば、リモートツリー610、同期ツリー620、又はローカルツリー630)は、1つ以上のノードを含むことができる。各ノードは、1つ以上の子ノードを含むことができ、親子関係は、エッジによって表される。例えば、リモートツリー610は、ノード602及び604を含む。ノード602は、ノード604の親であり、ノード604は、ノード602の子である。この親子関係は、エッジ606によって表される。ルートノード602などのルートノードは、親ノードを含まない。ノード604などの葉ノードは、子ノードを含まない。
【0167】
ツリーデータ構造中の各ノードは、コンテンツアイテム(例えば、ファイル、ドキュメント、フォルダなど)を表すことができる。例えば、ルートノード602は、コンテンツ管理システムと関連するルートフォルダを表すことができ、ノード604は、そのルートフォルダに位置しているファイル(例えば、「Foo.txt」と称されるテキストファイル)を表すことができる。ツリーデータ構造中の各ノードは、例えば、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)、コンテンツアイテムについてのファイル名、コンテンツアイテムについてのファイル識別子、及びコンテンツアイテムについてのメタデータなどのデータを含むことができる。
【0168】
上述されるように、クライアント同期サービスは、3つのツリー(例えば、リモートツリー610、同期ツリー620、及びローカルツリー630)がすべて同一であるときに、クライアントデバイスのサーバ状態及びファイルシステム状態が同期していると判定することができる。換言すれば、ツリーは、それらのツリー構造、及びそれらが表現する関係が同一であり、またそれらのノードに含まれるデータが同様に同一であるときに同期している。一方、3つのツリーが同一ではない場合に、これらのツリーは、同期していない。
図3に示される例示的なシナリオにおいて、リモートツリー610、同期ツリー620、及びローカルツリー630は、同一であり、同期している場合が示されているため、結果として、サーバ状態及びファイルシステム状態は、同期している。
【0169】
ツリーデータ構造を使用する変更の追跡
図6Bは、様々な実施形態による、ツリーデータ構造の実施例を示す。この実施例は、
図6Aに示されるシナリオなど、前に同期した状態の後のシナリオを示し、ツリーがもはや同期していないようにコンテンツアイテムを修正する、追加のアクションをツリーに表されるコンテンツアイテム上で実行する。同期ツリー620は、前の既知の同期した状態の表現を維持し、クライアント同期サービスによって、サーバ状態とファイルシステム状態との間の差異を識別するだけではなく、コンテンツ管理システム及び/又はクライアントデバイスについての操作を生成して実行し、サーバ状態及びファイルシステム状態が同期するように収束させるために使用されることができる。
【0170】
例えば、ユーザ(クライアントデバイスと関連するユーザと同一のユーザ、又はコンテンツアイテムへのアクセスを有する異なるユーザ)は、コンテンツ管理システムによって格納される「foo.txt」コンテンツアイテムへの修正をすることができる。このコンテンツアイテムは、リモートツリー610中のノード604によって表される。リモートツリー610に示される修正は、foo.txtコンテンツアイテムの除去(例えば、コンテンツ管理システムによって管理されるスペースからのコンテンツアイテムの除去)又は削除である。これらの修正は、例えば、別のクライアントデバイス上で実行されることができ、これらの修正は、コンテンツ管理システムによって格納されるコンテンツアイテム、又はウェブブラウザを介してコンテンツ管理システムによって格納されるコンテンツアイテムに同期した。
【0171】
コンテンツ管理システム上で変更を行うときに、コンテンツ管理システムは、行われる変更を指定する修正データを生成し、この修正データをクライアントデバイス上のクライアント同期サービスに送信する。クライアント同期サービスは、修正データに基づきコンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーを更新する。例えば、リモートツリー610において、foo.txtコンテンツアイテムを表すノード604が削除された場合を示す。
【0172】
クライアント同期サービスは、リモートツリー610と同期ツリー620との間の差異を識別することができ、結果として、コンテンツ管理システムにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態が同期しているようにそれらサーバ状態及びファイルシステム状態を収束させるように構成される、クライアントデバイス上に格納されるコンテンツアイテムについての操作シーケンスをさらに生成して、実行することができる。
【0173】
追加的に、又は代替的に、ユーザ(コンテンツ管理システムにおける修正と関連するユーザと同一のユーザ、又はコンテンツアイテムへのアクセスを有する異なるユーザ)は、コンテンツ管理システムと関連付けられるクライアントデバイス上にローカルに格納されるコンテンツアイテムへの修正を行うことができる。例えば、ユーザは、フォルダ「/bar」を「/root」フォルダに追加し、「Hi.doc」ドキュメントを「/bar」フォルダに追加することができる。
【0174】
変更をクライアントデバイス上で行うときに、クライアントデバイス(例えば、クライアント同期サービス156又はクライアントアプリケーション152)は、行われる変更を指定する修正データを生成し、修正データをクライアントデバイス上のクライアント同期サービスに渡す。クライアント同期サービスは、修正データに基づきクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態を表すローカルツリーを更新する。例えば、ローカルツリー630において、ノード612及びノード614が追加される場合を示す。ノード612及びノード614は、それぞれ「/bar」フォルダ及び「Hi.doc」ドキュメントを表す。
【0175】
クライアント同期サービスは、ローカルツリー630と同期ツリー620との間の差異を識別し、結果として、クライアントデバイスにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態が同期しているようにそれらサーバ状態及びファイルシステム状態を収束させるように構成されるコンテンツ管理システムによって格納されるコンテンツアイテムについての操作シーケンスをさらに生成することができる。この操作シーケンスを実行のためにコンテンツ管理システムに送信することができる。
【0176】
図6Bに示されるように、クライアントデバイス上に格納されるコンテンツアイテム、及びコンテンツ管理システムによって格納されるコンテンツアイテムへの修正は、実質的に同時に、又は特定の期間内に起こる可能性がある。これらの修正をツリーデータ構造に反映し、クライアント同期サービスによって使用して、クライアントデバイスについての、またコンテンツ管理システムについての操作シーケンスを並列して生成することができる。他のシナリオにおいて、しかしながら、修正は、同じ期間内に必ずしも起こらない場合があり、操作シーケンスは、必要に応じた方式において生成されることができる。さらに、
図6Bがコンテンツアイテムを追加するための、またコンテンツアイテムを削除するためのシナリオを示すが、コンテンツアイテムを編集する、リネームする、コピーする、又は移動させるなどの他のタイプの修正をもサポートする。
【0177】
様々な実施形態に従い、2つのツリーデータ構造間の差異を識別すること、そして操作を生成することは、両方のツリーデータ構造中の各ノードをチェックすること、そしてアクションがこのノード上で実行されているかどうかを判定することを伴うことがある。これらのアクションは、例えば、ノードの追加、ノードの削除、ノードの編集、又はノードの移動を含むことができる。次いで、これらのアクションを使用して、サーバ状態及びファイルシステム状態を収束させるように構成される操作シーケンスを生成することができる。
【0178】
例えば、2つのツリーデータ構造が同期ツリー及びリモートツリーである場合に、クライアント同期サービスは、例えば、同期ツリー中のすべてのノードのファイル識別子を要求することによって、同期ツリー中の各ノードを識別することができる。同期ツリー中の各ノード、又はこのノードについてのファイル識別子のために、クライアント同期サービスは、ノード又はファイル識別子もリモートツリー中にあるかどうかを判定することができる。リモートツリー中に見つからない同期ツリー中のノード又はファイル識別子は、ノードがリモートツリーによって表されるサーバ状態から削除されていることを示すことができる。その結果、クライアント同期サービスは、削除アクションがリモートツリー上に発生したと判定することができる。ノード、又はこのノードについてのファイル識別子がリモートツリー中に見つかる場合に、クライアント同期サービスは、リモートツリー中のノードが編集されているか、移動しているかをチェックすることができる。
【0179】
リモートツリー中のノードが同期ツリー中のノードに関して編集されているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについてのメタデータを、リモートツリー中の対応するノード(例えば、同一のファイル識別子を有するノード)についてのメタデータと比較することができる。メタデータは、ノードによって表されるコンテンツアイテムが編集されているかどうかを判定するために使用され得る情報を含むことができる。例えば、メタデータは、コンテンツアイテム中のデータに基づき生成される1つ以上のハッシュ値、又はそれらの一部を含むことができる。メタデータは、追加的に、又は代替的に、コンテンツアイテムについての、サイズ値、最後に修正された値、又は他の値を含むことができる。クライアント同期サービス中のノードについてのメタデータを、リモートツリー中のノードについてのメタデータと比較することができる。メタデータがマッチングしない場合、コンテンツアイテムの編集は、リモートツリーによって表されるサーバ状態において編集されている。その結果、クライアント同期サービスは、編集アクションがリモートツリー上のノードに発生していると判定することができる。メタデータがマッチングする場合に、編集は発生しなかった可能性がある。
【0180】
リモートツリー中のノードが移動しているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについての位置を、リモートツリー中の対応するノード(例えば、同一のファイル識別子を含むノード)についての位置と比較することができる。この位置は、例えば、ノードが位置しているパス、ファイル名、及び/又はノードの親のファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)を含むことができる。これらの位置がマッチングする場合に、移動は、起こらなかった可能性がある。一方、これらの位置がマッチングしない場合に、コンテンツアイテムの移動は、リモートツリーによって表されるサーバ状態に起こった可能性がある。その結果、クライアント同期サービスは、移動アクションがリモートツリー上のノードに対して発生したと判定することができる。
【0181】
ノードをリモートツリーに追加したかどうかを判定するために、クライアント同期サービスは、同期ツリー中に見つからない、リモートツリー中のいずれかのノード又はファイル識別子を識別することができる。ノード又はファイル識別子がリモートツリー中に見つかり、同期ツリー中に見つからない場合に、クライアント同期サービスは、このノードの追加アクションがサーバ状態を表すリモートツリー上に発生したと判定することができる。
【0182】
上記の実施例が同期ツリー及びリモートツリーに関して記述されているが、他の実施形態において、同様のプロセスは、同期ツリーとローカルツリーとの間の差異を識別し、ファイルシステム状態を表すローカルツリー上に発生したアクションを判定するために、同期ツリー及びローカルツリーに関して発生することができる。
【0183】
ファイルID割り振り及び再割り当て
図6Cは、クライアントデバイス150において作成され、クライアントデバイス150とコンテンツ管理システム110との間で同期する、コンテンツアイテムに対して一意の識別子を割り振り、再割り当てするための例示的な方法を示す。本明細書に記述される、特定の順序で、ある特定のステップ及び操作を備える、これらの方法及びプロセスを示すことができるが、同様の、もしくは代替の順序で、又は並列して実行される、追加の、少数の、又は代替のステップ及び操作は、特に明示されない限り、様々な実施形態の範囲内にある。この方法は、例えばクライアントデバイス150上のクライアント同期サービス156などの、システムによって実装されることができる。
【0184】
ステップ640において、クライアントデバイス150は、コンテンツアイテムを作成する。ステップ642において、クライアントアプリケーション152(例えば、クライアント同期サービス156を介して)は、ステップ640において作成されるコンテンツアイテムに基づきコンテンツアイテムイベントを検出する。
【0185】
ステップ644において、クライアントアプリケーション152は、コンテンツアイテムがコンテンツ管理システム110からの一意の識別子(例えば、ファイルID)を含むかどうかを判定する。この一意の識別子は、コンテンツ管理システム110に割り当てられる、及び/又は格納される、グローバルに一意の識別子を指すことができる。コンテンツ管理システム110は、コンテンツ管理システム110上に格納されるコンテンツアイテムに対して一意の識別子を割り当て、コンテンツ管理システム110において各コンテンツアイテムを、またクライアントデバイス(例えば、クライアントデバイス150)上でいずれかのそれぞれの同期したコピーを、一意に識別することができる。幾つかの事例において、一意の識別子は、一意の識別子に割り当てられるコンテンツアイテムに対応するコンテンツ管理システム110上で、特定のネームスペース(複数可)と関連付けられることができる。しかしながら、他の事例において、一意の識別子は、ネームスペースに依存しない、又はネームスペースから独立していることができる。
【0186】
さらに、コンテンツ管理システム110によって割り当てられる一意の識別子は、コンテンツ管理システム110によって作成され、クライアントデバイスにおいてオペレーティングシステムによって生成されるローカルファイルシステム識別子又はローカル識別子のような、クライアントデバイスに格納される、及び/又は生成される特定のコンテンツアイテムについてクライアントデバイスによって生成されるいかなるローカルコンテンツ識別子とも異なることができる。
【0187】
コンテンツアイテムがコンテンツ管理システム110からの一意の識別子を既に含むとクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、下記のステップ650に進む。コンテンツアイテムがコンテンツ管理システム110からの一意の識別子を含まないとクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、ステップ646に進み、そのクライアントアプリケーションは、コンテンツアイテムが別のコンテンツアイテムからの一意の識別子を継承するかどうかを判定する。幾つかの事例において、コンテンツアイテムが一意の識別子を継承するかどうかを判定する、このプロセスは、「パス親化」を指し、コンテンツアイテムのパスを別のコンテンツアイテムのパスと比較することを伴う。
【0188】
例えば、ステップ640においてパス「/Root/Directory1/」についてコンテンツアイテム「A」を作成し、「123」の一意の識別子を含む前のコンテンツアイテムが「/Root/Directory1/」に以前に、又は最近に格納されたとクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、新規のコンテンツアイテム、コンテンツアイテム「A」が「123」の一意の識別子を含む前のコンテンツアイテムのバージョンもしくはコピーであると、又は「/Root/Directory1/」から移動したと判定することができ、コンテンツアイテム「A」は、「Root/Directory1」に再追加される、又はこの「Root/Directory1」に移動して戻るコンテンツアイテムを表すため、前のコンテンツアイテムの一意の識別子「123」を継承する。
【0189】
幾つかの事例において、クライアントアプリケーション152は、クライアントアプリケーション152がコンテンツアイテムの前のバージョン又はコピーであるとみなす、別のコンテンツアイテムからの一意の識別子をコンテンツアイテムが継承すると判定する。例えば、クライアントデバイス上で特定の位置(例えば、パス)中に格納されるコンテンツアイテムを編集する、又は修正するときに、幾つかのアプリケーション又はオペレーティングシステムは、コンテンツアイテムをクライアントデバイス上の一時的な位置に移動させることができ、次に、編集された、又は修正されたコンテンツアイテムをコンテンツアイテムの特定の位置に追加し直すことができる。したがって、コンテンツアイテムが作成されたが一意の識別子を含んでいないことをクライアントアプリケーション152が検出し、作成されたコンテンツアイテムと同一のパス及び/又は名前を以前に含んだ別のコンテンツアイテムを識別するときにもまた、クライアントアプリケーション152は、他のコンテンツアイテムが移動したと判定することができ、新規のコンテンツアイテムと同一のコンテンツアイテムに関連する、又はこの同一のコンテンツアイテムを表す。したがって、クライアントアプリケーション152は、新規のコンテンツアイテムが他のコンテンツアイテムの一意の識別子を継承すると判定することができる。
【0190】
幾つかの実施例において、クライアントアプリケーション152は、コンテンツアイテムが関連した、同等の、相互のバージョンであるとみなされるなどのいずれかの理由により、コンテンツアイテムのメタデータを、クライアントデバイス150上の他のコンテンツアイテムのメタデータと比較し、コンテンツアイテムが別のコンテンツアイテムの一意の識別子を継承するかどうかを判定することができる。コンテンツアイテムを比較するために使用されるメタデータは、例えば、それぞれのコンテンツアイテムのパス、ファイル名、ディレクトリ識別子、ディレクトリ名、ネームスペース識別子(NSID)、ジャーナル識別子(SJID)、リビジョン識別子などを含むことができる。2つのコンテンツアイテムの幾つかの、又はすべてのメタデータのマッチは、新規に作成されたコンテンツアイテムが他のコンテンツアイテムの一意の識別子を割り当てられる判定をトリガすることができる。例えば、ステップ640において作成されるコンテンツアイテム「A」がクライアントデバイス150においてコンテンツアイテム「B」と同一のパス、ファイル名、ディレクトリ識別子、NSID、及び/又はSJIDを含む場合に、クライアントアプリケーション152は、コンテンツアイテム「B」の現在の、一意の識別子をコンテンツアイテム「A」に割り当てることができる。
【0191】
ステップ646においてコンテンツアイテムが別のコンテンツアイテムの一意の識別子を継承するとクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、以下にさらに記述されるステップ650に進む。ステップ646においてコンテンツアイテムがクライアントデバイス150上で別のコンテンツアイテムから一意の識別子を継承しない(例えば、それが同一のパス、ファイル名、及び/又はメタデータのいずれかの他の部分と関連するコンテンツアイテムを見つけられないため)とクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、それがコンテンツ管理システム110からコンテンツアイテムについて一意の識別子を取得するステップ648に進む。
【0192】
ステップ648において、クライアントアプリケーション152は、コンテンツ管理システム110からコンテンツアイテムについて一意の識別子を要求し、コンテンツ管理システム110によってコンテンツアイテムに割り当てられる一意の識別子を受信することができる。一意の識別子は、前に説明されるような、コンテンツ管理システム110にわたり一意であることができる。したがって、一意の識別子を使用して、コンテンツアイテムをコンテンツ管理システム110及びクライアントデバイス150において一意に識別することができる。
【0193】
ステップ650において、コンテンツアイテムが一意の識別子を含むときに、クライアントアプリケーション152は、コンテンツアイテムについての一意の識別子を記録する。例えば、クライアントアプリケーション152は、一意の識別子をコンテンツアイテムについてのメタデータとして書き込むことができる。幾つかの事例において、クライアントアプリケーション152は、拡張属性(xattr)などの属性として、一意の識別子をコンテンツアイテムにアペンドする、又は一意の識別子をコンテンツアイテムに割り当てる。
【0194】
ステップ652において、クライアントアプリケーション152は、コンテンツアイテム用に記録される一意の識別子がコンテンツ管理システム110において一意であることを検証する。前述されるように、コンテンツ管理システム110は、識別子がコンテンツ管理システム110において各コンテンツアイテムを一意に識別することを可能にするために、コンテンツアイテムに割り当てられる識別子がコンテンツ管理システム110において一意であることを要求する場合がある。コンテンツ管理システム110は、一意の識別子を使用して、コンテンツアイテムを追跡し、管理し、同期させ、修正し、認識することができる。ステップ652において、この一意性属性をクライアントアプリケーション152が検証して、同一の識別子を1つより多いコンテンツアイテムに割り当てた結果として、識別子を意図せずに重複させること、又は競合もしくはエラーを生じることを防ぐことができる。
【0195】
一意の識別子の一意性を検証するために、クライアントアプリケーション152は、コンテンツアイテムと関連する一意の識別子のコンテンツ管理システム110に通知し、一意の識別子がコンテンツ管理システム110において実際に一意であるという、コンテンツ管理システム110からの検証又は肯定応答を要求することができる。クライアントアプリケーション152からコンテンツ管理システム110への検証又は肯定応答についての要求は、一意の識別子を識別することができ、コンテンツ管理システム110が一意性を検証することを援助することができる、いずれかの他の情報を含むことができる。例えば、幾つかの事例において、クライアントアプリケーション152からコンテンツ管理システム110への検証又は肯定応答についての要求は、コンテンツアイテムと関連するブロック又はブロックリスト、コンテンツアイテムの少なくとも一部のハッシュ、及び/又はコンテンツアイテムと関連する、パス、ディレクトリ識別子、ファイル名などのメタデータも含むことができる。
【0196】
コンテンツ管理システム110は、クライアントアプリケーション152から要求を受信し、コンテンツ管理システム110において一意の識別子を検索することができる。例えば、コンテンツ管理システム110は、一意の識別子を含むいずれかの記録についてサーバファイルジャーナル148にクエリを行うことができる。コンテンツ管理システム110が別のコンテンツアイテムに割り当てられる、及び/又はサーバファイルジャーナル148上の記録に含まれるマッチングする識別子を識別する場合に、コンテンツ管理システム110は、一意の識別子が一意ではない(少なくとも、それがこのコンテンツアイテム、及びコンテンツ管理システム110上のいずれかの他のコンテンツアイテムに関係がある場合に)と判定することができる。コンテンツ管理システム110は、一意の識別子が一意ではない、又は一意性テストに失敗したことをクライアントアプリケーション152に通知することができる。幾つかの事例において、コンテンツ管理システム110は、識別子が割り当てられている他のコンテンツアイテム(複数可)、及びこれらのコンテンツアイテムについてのいずれかの情報又はメタデータを識別することができる。
【0197】
コンテンツ管理システム110が別のコンテンツアイテムに割り当てられる、又はサーバファイルジャーナル148上の記録に含まれる、マッチングする識別子を識別しない場合に、コンテンツ管理システム110は、一意の識別子が実際に一意であることを肯定応答する、又は検証することができる。幾つかの事例において、コンテンツ管理システム110は、クライアントアプリケーション152に一意の識別子の一意性を肯定応答する前に、追加の検索又は検証を実行することができる。例えば、コンテンツ管理システム110は、コンテンツアイテムと関連するパス、ファイル名などのメタデータについてサーバファイルジャーナル148中の記録を検索することができる。
【0198】
ステップ654において、一意の識別子がコンテンツ管理システム110にわたり一意ではない(すなわち、一意性検証が失敗する)とクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、この識別子を含み、重複識別子を引き起こすコンテンツアイテムのうちの1つから識別子を取り除くことができる。例えば、クライアントアプリケーション152は、このコンテンツアイテムからの、又は同一の識別子を含むと判定される他のコンテンツアイテムからの識別子を除去する、又は割り当て解除することができる。幾つかの事例において、クライアントアプリケーション152は、そのコンテンツアイテムからの識別子を取り除くために、同一の識別子を含むコンテンツアイテムのうちの1つから識別子を含む属性(例えば、xattr)、メタデータ、又はタグを削除することができる。
【0199】
クライアントアプリケーション152が同一の識別子を含むコンテンツアイテムのうちの1つからこの識別子を取り除くと、クライアントアプリケーション152は、ステップ644に戻り、この識別子を取り除かれたコンテンツアイテムを処理する。ステップ644において、クライアントアプリケーション152は、識別子なしでコンテンツアイテムを処理し、ステップ644、646、648、650、652を通して続行し、このようなコンテンツアイテムについての一意の識別子を取得することができる。ステップ644、646、648、650、652からの論理及びヒューリスティックにより、クライアントアプリケーション152がコンテンツアイテムについて一意の識別子を取得して検証し、重複識別子を回避することが可能である。
【0200】
幾つかの事例において、ステップ644、646、648、650、652を使用して、位置から移動した、又は削除されたコンテンツアイテムを復活させることもできる。例えば、コンテンツアイテムがクライアントデバイス150に再追加される、又は移動する必要がある場合に、クライアントアプリケーション152は、ステップ644、646、648、650、652を実行して、コンテンツアイテムについて一意の識別子を取得し、このコンテンツアイテムをコンテンツアイテムについての特定のパスに格納することができる。前に説明されるように、幾つかの実施例において、パス及び/又はコンテンツアイテム識別子は、コンテンツアイテムのパス又はファイル名と前に関連したコンテンツアイテムを分析することによって決定されることができる。
【0201】
ステップ656において、一意の識別子がコンテンツ管理システム110にわたり一意である(すなわち、一意性検証が成功する)とクライアントアプリケーション152が判定する場合に、クライアントアプリケーション152は、コンテンツアイテムをローカルツリー630に報告することができる。ここで、クライアントアプリケーション152は、コンテンツアイテムを表すノードをローカルツリー630に追加することができる。コンテンツアイテムについてのローカルツリー630中のこのノードは、一意の識別子に基づきコンテンツアイテムを識別することができ、コンテンツアイテムと関連する、パス、ディレクトリ識別子、ファイル名、タイムスタンプ、サイズ、ハッシュなどのような他のメタデータを含むことができる。
【0202】
ステップ658において、クライアントアプリケーション152は、コンテンツアイテムについての一意の識別子を含むコンテンツアイテムをコンテンツ管理システム110にアップロードすることができる。コンテンツアイテムをアップロードするときに、クライアントアプリケーション152は、コンテンツ管理システム110へのコンテンツアイテムを識別するために、一意の識別子を提供することができる。クライアントアプリケーション152は、コンテンツアイテム、一意の識別子、及びパス、ディレクトリ識別子、ファイル名、ネームスペース識別子、タイムスタンプなどのようないずれかの他のメタデータの実際のデータ又はブロック(例えば、220A、220B、220C、220N)をコンテンツ管理システム110に提供することができる。
【0203】
幾つかの事例において、クライアントアプリケーション152は、コンテンツストレージ142上のストレージのために、コンテンツアイテム(例えば、220)及び/又はこのコンテンツアイテムのブロック(例えば、220A、220B、220C、220N)をコンテンツストレージインタフェース206にアップロードし、サーバファイルジャーナル148においてクライアントデバイス150の位置を示すカーソル(例えば、324B)と、コンテンツアイテムをクライアントデバイス150に追加する追加操作を識別する1つ以上の操作(例えば、412)とを含む操作データ(例えば、302)をファイルジャーナルインタフェース202に送信することができる。ファイルジャーナルインタフェース202は、前に説明されるように、クライアントアプリケーション152からのカーソル及び1つ以上の操作を使用して、コンテンツアイテムがクライアントデバイス150に追加されたことを示すリビジョンをサーバファイルジャーナル148に(例えば、リビジョン322をジャーナル310に)追加することができる。前に説明されるように、ファイルジャーナルインタフェース202は、クライアントデバイス150からのカーソルが、それがサーバファイルジャーナル148において最新のリビジョン又は状態を反映することを意味する、「先頭」にあることを検証し、1つ以上の操作をサーバファイルジャーナル148についてのリビジョンに変換することができる。さらに、コンテンツストレージインタフェース206は、コンテンツアイテム(例えば、220)及び/又はブロック(例えば、220A、220B、220C、220N)を受信し、コンテンツアイテム(例えば、220)及び/又はブロック(例えば、220A、220B、220C、220N)をコンテンツストレージ142にアップロードし、そしてコンテンツアイテム(例えば、220)及び/又はブロック(例えば、220A、220B、220C、220N)をストレージインデックス210において記録する、又はインデックス付けすることができる。
【0204】
コンテンツアイテムをアップロードするときに、クライアントアプリケーション152は、
図13Aを参照して以下にさらに記述されるように、コンテンツアイテムの追加をコンテンツ管理システム110にコミットする。操作(例えば、クライアントデバイス150におけるコンテンツアイテムの追加)をコミットすることにより、クライアントアプリケーション152がコンテンツアイテムの追加を追跡するリビジョンをコンテンツ管理システム110(例えば、サーバファイルジャーナル148)に報告する、又は記録することが可能である。コンテンツアイテムをアップロードする間に、及び/又は追加操作をコンテンツ管理システム110にコミットする間に、クライアントアプリケーション152は、クラッシュセーフティプロシージャを実装して、エラーを防ぎ、アップロード及び/又はコミットがいずれかの時点で成功しない、又は失敗するイベントにおけるリカバリを有効にすることができる。幾つかの事例において、クライアントアプリケーション152は、クライアントデバイス150上に操作(例えば、コンテンツアイテムの追加及び/又はアップロード)をコミットするインテントを永続的に記録し、コミットが成功する(例えば、コンテンツ管理システム110にコミットされる、又は記録される)か、失敗するかのいずれかまでコミットの追跡を続けることができる。コミットが成功する、又は失敗すると、クライアントアプリケーション152は、
図13Aにさらに記述されるように、記録されるコミットへのインテントをクリアし、コンフュージョン又はエラーを回避することができる。
【0205】
追加されるコンテンツアイテムについてのノードを含むようにローカルツリー630を更新すること、及びコンテンツアイテムをコンテンツ管理システム110にアップロードすることにクライアントアプリケーション152が成功する場合に、クライアントアプリケーション152は、ツリーデータ構造610、620、630(すなわち、リモートツリー、同期ツリー、及びローカルツリー)を同期させ、コンテンツアイテムについてのリモート及びローカルメタデータをクライアントデバイス150に確保することができ、コンテンツ管理システム110は、同期し、一貫性があり、エラーがない。この同期は、本明細書に記述されるように増分同期及び/又は競合ハンドリングプロシージャを伴い、リモートツリー610、同期ツリー620、及びローカルツリー610を同期させることができる。
【0206】
図6Dは、コンテンツ管理システム110からダウンロードされるコンテンツアイテムをクライアントデバイス150に追加し、このダウンロードされたコンテンツアイテム及び一意の識別子を記録するための例示的な方法を示す。ステップ670において、クライアントアプリケーション152は、コンテンツアイテムをコンテンツ管理システム110からダウンロードする。このコンテンツアイテムは、別のユーザアカウント、クライアントデバイスによって、又はウェブインタフェース(例えば、124)を介して、コンテンツ管理システム110に追加され、クライアントデバイス150に同期する、コンテンツアイテムであり得る。
【0207】
ダウンロードされるコンテンツアイテムは、コンテンツ管理システム110によってコンテンツアイテムに割り当てられる一意の識別子を含むことができる。幾つかの事例において、クライアントアプリケーション152は、ダウンロードのために、コンテンツアイテムをクライアントデバイス150に追加する操作を受信することができる。例えば、クライアントアプリケーション152は、ファイル名、パス、一意の識別子などを識別する追加操作を受信することができる。図示するように、クライアントアプリケーション152は、操作「Add(/Directory/file.jpg:321)」を受信することができ、そこで「Add」は、操作を識別し、「file.jpg」は、ファイル名を識別し、「/Directory/」は、ファイルが常駐するディレクトリを識別し、「/Directory/file.jpg」は、フルパス及び/又はファイル名を識別し、そして「321」は、ファイルの一意の識別子を識別する。
【0208】
ステップ672において、クライアントアプリケーション152は、クライアントデバイス150における使用のために、コンテンツアイテムの一意の識別子を記録して、コンテンツアイテムを識別する。例えば、クライアントアプリケーション152は、一意の識別子をコンテンツアイテムの属性(例えば、xattr)として書き込む、一意の識別子をコンテンツアイテムにアペンドする、コンテンツアイテムを一意の識別子によってタグ付けする、及び/又は一意の識別子をコンテンツアイテムについてのメタデータ記録又はファイルに書き込む(例えば、com.application.fileID)ことができる。
【0209】
ステップ674において、クライアントアプリケーション152は、コンテンツアイテムをクライアントデバイス150上のコンテンツアイテムについての宛先に格納することができる。この宛先は、コンテンツアイテムについて定義されるパスであり得る。例えば、宛先は、クライアントデバイス150上のネームスペース内に特定のディレクトリを含むことができる。
【0210】
クライアントアプリケーション152は、コンテンツアイテムについてのデータ及び/又は様々なタイプの情報をクライアントデバイス150上に格納することができる。例えば、クライアントアプリケーション152は、コンテンツアイテムのコンテンツ又はデータ、修正日、特定用途向けメタデータなどを格納することができる。
【0211】
ステップ676において、クライアントアプリケーション152は、コンテンツアイテムをローカルツリー630、同期ツリー620、及び/又はリモートツリー610に報告することができる。例えば、クライアントアプリケーション152は、コンテンツアイテムをリモートツリー610に報告することができ、コンテンツアイテムについてのノードをリモートツリー610上に追加する。次いで、クライアントアプリケーション152は、リモートツリー610に追加されるコンテンツアイテムについてのノードに基づき、ローカルツリー630、同期ツリー620、及びリモートツリー610を同期させることができる。
【0212】
ツリーデータ構造を使用する同期
図7Aは、本発明の技術の様々な実施形態による、ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるための例示的な方法を示す。本明細書に記述される、これらの方法及びプロセスが特定の順序における、ある特定のステップ及び操作によって示されることができるが、同様な順序もしくは代替の順序において、又は並列して実行される追加の、より少数の、又は代替のステップ及び操作は、特に明示されない限り様々な実施形態の範囲内にある。この方法は、例えば、クライアントデバイス150上のクライアント同期サービス156のような、システムによって実装されることができる。
【0213】
このシステムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーと、クライアントデバイス上に格納される対応するコンテンツアイテムについてのファイルシステム状態を表すローカルツリーと、サーバ状態及びファイルシステム状態の間の既知の同期した状態を表す同期ツリーとの間の差異を識別するように設定される。これらの差異に基づき、生成されることができる操作シーケンスは、実行される場合に、3つのツリーデータ構造が同一である同期した状態に向けてサーバ状態及びファイルシステム状態を収束させるように構成される。
【0214】
例えば、操作702において、システムは、コンテンツ管理システムによって、又はクライアントデバイス上に、格納されるコンテンツアイテムについての修正データを受信することができる。操作704において、この修正データを使用して、リモートツリー又はローカルツリーを更新することができる。
【0215】
修正データは、コンテンツ管理サービスと関連する1つ以上のコンテンツアイテムに行われる変更を指定する。その結果、修正データをコンテンツ管理システムから、又はクライアントデバイスから(例えば、クライアントアプリケーション152から)受信することができる。コンテンツ管理システムから受信する修正データは、サーバ修正データと称されることができる。サーバ修正データは、コンテンツ管理システムによって1つ以上のコンテンツアイテムに行われる変更を指定し、操作704において、リモートツリーを更新するために使用され得る。クライアントデバイスから受信する修正データは、クライアント修正データと称されることができる。クライアント修正データは、クライアントデバイス上で1つ以上のコンテンツアイテムに行われる変更を指定し、操作704においてローカルツリーを更新するために使用されることができる。
【0216】
操作706において、システムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態、及びクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態が同期しているかどうかを判定することができる。ローカルツリー及びリモートツリーがファイルシステム状態及びサーバ状態を表し、コンテンツ管理システム及びクライアントデバイスに発生する変更を追跡して、継続的に更新されているため、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、ローカルツリー及び/又はリモートツリーを同期ツリーと比較して、ツリー間の差異を見つけることによって行われ得る。ツリー間の差異を見つける、このプロセスは、ときとしてツリーの「差分を取る」と称される。
【0217】
幾つかの実施形態及びシナリオによる、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、リモートツリーと同期ツリーとの間の差異を識別すること、及び/又はローカルツリーと同期ツリーとの間の差異を識別することのうちの1つ以上を含むことができる。リモートツリーと同期ツリーとの間の差異は、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更の発生を示すことができる。同様に、ローカルツリーと同期ツリーとの間の差異は、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更の発生を示すことができる。
【0218】
ツリー間に差異がない場合に、サーバ状態及びファイルシステム状態は、同期し、同期アクションは、必要とされない。その結果、この方法は、操作702に戻り、新規の修正データを待機することができる。一方で、これらの差異が検出される場合に、システムは、操作708においてサーバ状態及びファイルシステム状態を収束させるように構成される操作シーケンスを生成することができる。
【0219】
生成される操作シーケンスは、検出される1つ以上の差異に依存する。例えば、2つのツリー間の差異が追加されたコンテンツアイテムである場合に、生成された操作シーケンスは、追加されたコンテンツアイテムを取得して、それを追加することを含むことができる。2つのツリー間の差異がコンテンツアイテムの削除である場合に、生成された操作シーケンスは、コンテンツアイテムを削除することを含むことができる。また、操作シーケンスは、ツリー制約が維持されていることを確保する複数のチェックを含むことができる。以下にさらに記述されるように、操作シーケンスは、サーバ状態、ファイルシステム状態、又は実行を保留している他の操作の現在の状態によって競合する場合がある。その結果、システムは、続行する前にこれらの競合をも解消することができる。
【0220】
上述されるように、リモートツリーと同期ツリーとの間に差異がある場合に、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更を発生している場合がある。その結果、このシナリオにおいて、システムは、クライアントデバイス上に格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作シーケンスを生成することができ、このクライアント操作シーケンスは、操作710において、実行のためにクライアントデバイスに提供され得る。
【0221】
一方、ローカルツリーと同期ツリーとの間の差異がある場合に、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更が発生している可能性がある。その結果、このシナリオにおいて、システムは、コンテンツ管理システムによって格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作シーケンスを生成することができ、このサーバ操作シーケンスは、操作710において、実行のためにコンテンツ管理システムに提供されることができる。幾つかの事例において、両方の事例は、真であることができ、クライアント操作シーケンス及びサーバ操作シーケンスは、操作710において生成され、それらの意図された受取人に提供され得る。
【0222】
操作シーケンス(複数可)が意図された受取人(複数可)に提供されると、方法は、操作702に戻り、新規の修正データを待機することができる。これらの操作シーケンス(複数可)は、サーバ状態及びファイルシステム状態の収束に向けて1つ以上のステップを提供する、又はサーバ状態及びファイルシステム状態を同期させるために必要とされるすべてのステップを提供することができる。例えば、コンテンツ管理システムは、サーバ操作シーケンスを受信し、このサーバ操作シーケンスをコンテンツ管理システムによって格納されるコンテンツアイテム上で実行することができる。サーバ操作シーケンスのこの実行は、変更をコンテンツ管理システムによって格納されるコンテンツアイテムに引き起こし、これらの変更をサーバ修正データ中で検出し、指定し、システムに返送する。次いで、このシステムは、リモートツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。
【0223】
クライアントデバイスは、クライアント操作シーケンスを受信し、このクライアント操作シーケンスをクライアントデバイス上に格納されるコンテンツアイテム上で実行することができる。クライアント操作シーケンスのこの実行は、変更をクライアントデバイス上に格納されるコンテンツアイテムに引き起こし、これらの変更をクライアント修正データ中で検出し、指定し、システムに渡す。次いで、このシステムは、ローカルツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。方法700のこれらの操作は、サーバ状態及びファイルシステム状態が同期するまで継続することができる。
【0224】
方法700の操作は、クライアント側及びサーバ側(例えば、ローカルツリー及びリモートツリー、ファイルシステム状態及びサーバ状態、クライアント操作シーケンス及びサーバ操作シーケンス、クライアント修正データ及びサーバ修正データ)に関して記述されている。様々な実施形態において、これら2つの側と関連する操作は、並列して、順次に、他の側から切り離されて、又は組み合わせて、発生し得る。
【0225】
競合ハンドリング
図7Aに関して上述されるように、同期ツリーとリモートツリーとの間の差異を識別し、使用してサーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作シーケンスを生成する。しかしながら、幾つかの事例において、クライアント操作シーケンスは、ローカルツリーの現在の状態と競合する場合がある。同様に、同期ツリーとローカルツリーとの間の差異を識別し、使用してサーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作シーケンスを生成する。しかしながら、サーバ操作シーケンスは、リモートツリーの現在の状態と競合する。追加的に、又は代替的に、クライアント操作シーケンス及びサーバ操作シーケンスは、互いに競合する場合がある。その結果、本発明の技術の様々な実施形態は、これらの競合を解消することによってさらなる技術的な改善を提供する。
【0226】
例えば、クライアント同期サービスは、ルールと競合する操作シーケンス(例えば、クライアント操作シーケンス又はサーバ操作シーケンス)中の操作を識別することができる。競合を識別するために使用される各ルールは、競合の解消とも関連付けられることができる。クライアント同期サービスは、実行のための操作シーケンスを提供する前に、競合についての解消に基づき操作シーケンスを更新する、又は競合についての解消と関連する操作を実行することによって競合の解消を実行することができる。
【0227】
図7Bは、本発明の技術の様々な実施形態による、ツリーデータ構造を使用して、サーバ状態及びファイルシステム状態を同期させるときに競合を解消するための例示的な方法を示す。ある特定のステップ及び操作を有する、本明細書に記述されるこれらの方法及びプロセスは、特定の順序で示されることができるが、同様の順序もしくは代替の順序で、又は並列して、実行される追加の、より少数の、又は代替のステップ及び操作は、特に明示されない限り、様々な実施形態の範囲内にある。この方法600は、例えばクライアント同期サービス156などのシステムによって実装され、クライアントデバイス上で実行される。
【0228】
システムは、操作720において、サーバ状態及びファイルシステム状態を収束させるように設定される操作シーケンスを受信することができる。操作シーケンスは、例えば、
図7Aの方法700に関して生成され、記述されるクライアント操作シーケンス又はサーバ操作シーケンスであることができる。
【0229】
操作720において、システムは、1セットのルールに基づき操作シーケンス中で1つ以上の違反を識別する。この1セットのルールは、クライアント同期サービス156によって格納され、解消される必要がある複数の制約、不変式、又は競合を指定することができる。この1セットのルールは、ツリーデータ構造に適用され、同期ビヘイビアの制御を援助する。また、この1セットのルールの中の各ルールは、そのルールの違反への解消に関連付けられる、又はその他の方法によりリンクされることができる。例えば、この解消は、操作シーケンス中の1つ以上の操作の変更、1つ以上の操作の除去、1つ以上の操作の追加、サーバ状態もしくはファイル状態への1つ以上の追加アクション、又はアクションの組み合わせを備えることができる。
【0230】
操作シーケンス中の各操作について、システムは、1セットのルールのうちのいずれかのルールに違反しているかどうかを判定することができる。ルールに違反している場合に、システムは、違反の解消を識別し、操作722において、解消を実行する。この解消は、操作シーケンス中の1つ以上の操作を修正するようなアクション、1つ以上の操作を除去する、もしくは追加するアクション、又はサーバ状態もしくはファイル状態上の追加アクションを備えることができる。
【0231】
解消アクションが実行されると、システムは、操作724において解消及び操作シーケンスに基づき、解消された、又はリベースされた操作シーケンスを生成し、操作728において解消された操作シーケンスを実行のために適切なエンティティに提供することができる。例えば、操作シーケンスがクライアント操作シーケンスである場合に、解消された操作シーケンスは、クライアントデバイスに提供されることができる。操作シーケンスがサーバ操作シーケンスである場合に、解消された操作シーケンスは、コンテンツ管理サービスに提供されることができる。加えて、方法は、並列して、又は様々な異なる順序で、シーケンス中のクライアント操作シーケンス及びサーバ操作シーケンス上で実行されることができる。
【0232】
幾つかの実施形態に従い、各操作タイプは、同一の、又は異なる1セットのルールと関連付けられることができる。例えば、操作タイプは、例えば、コンテンツアイテムを追加すること、コンテンツアイテムを削除すること、コンテンツアイテムを編集すること、コンテンツアイテムを移動させること、コンテンツアイテムをリネームすることなどを含むことができる。操作シーケンスは、上記の操作タイプのうちの1つに各属する操作からなることができる。各操作タイプは、特定の1セットのルールと関連付けられることができる。
【0233】
例示的な目的のために、「Add」操作タイプについての1セットのルールは、コンテンツアイテムについてのファイル識別子がツリー中で一意でなければならない(例えば、1つのツリー中の2つのノードが同一のファイル識別子を含むことができない)ようなルールを有することができ、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)は、対向するツリーデータ構造中に存在しなければならず、コンテンツアイテムについてのDirFileID及びファイル名の組み合わせは、対向するツリー中に使用されない。
【0234】
対向するツリーは、本明細書に使用される場合、対向するエンティティの状態を表すツリーデータ構造を指す。例えば、クライアントデバイス上で動作するように構成されるクライアント操作シーケンス、及びクライアントデバイス上でのファイルシステムへの結果として生じる変更をローカルツリーに反映する。その結果、クライアント操作シーケンスについて対向するツリーは、リモートツリーである。同様に、サーバ操作シーケンスは、コンテンツ管理システムに送信され、実行されるように構成され、サーバ状態への結果として生じる変更は、リモートツリーに反映される。その結果、サーバ操作シーケンスについて対向するツリーは、ローカルツリーである。
【0235】
ランポートクロック
図8Aは、様々な操作(802)間の依存性及び因果関係を示す操作802の図を示す。操作802は、追加操作、削除操作、編集操作、移動操作、マウント操作及びマウント解除操作を含む。各操作は、インテント又は機能を有する。追加操作は、追加インテント(802A)を含み、削除操作は、削除インテント(802B)を含み、編集操作は、編集インテント(802C)を含み、移動操作は、移動インテント(802D)を含み、マウント操作は、マウントインテント(802E)を含み、そしてマウント解除操作は、マウント解除インテント(802F)を含む。操作802は、依存性又は因果関係を有することができ、それらのそれぞれのインテント(802A~F)を達成するために1つ以上のアトミック操作を伴うことができる。
【0236】
例えば、追加操作は、アトミック操作であり、追加インテント802Aを実行するために追加804Aを単に伴う。削除操作は、コンテンツアイテムについての追加操作後にコンテンツアイテムに対して削除操作を実行することを意味する、追加804Aに依存する削除804Bを伴う。編集操作は、コンテンツアイテムについて追加操作後にコンテンツアイテムに対して編集操作を実行することを意味する、追加804Aに同様に依存する編集804Cを伴う。
【0237】
移動操作は、移動操作についての移動インテント802Dを達成するように実行されるアトミック操作である、削除804B及び追加804Aを伴う。マウント操作は、マウントインテント802Eを実行するためにマウント804Eを伴うことができる。しかしながら、幾つかの事例において、マウント操作は、マウントインテント802Eを実行するためにマウント解除804F及びマウント804Eを伴うことができる。例えば、ネームスペース間コンテキストにおいて、ネームスペース中のマウント操作は、マウント解除(804F)及びマウント(804E)を伴うことができる。幾つかの事例において、コンテンツ管理システム110は、
図8Bを参照して以下にさらに記述されるように、2つのマウントが2つのパスを同一のネームスペースに作成する場合に、これら2つのマウントが実行されることを禁止するルールを含むことができる。この事例において、同一のネームスペースの第二のマウントは、そのネームスペースのマウント解除をトリガして、第二のマウントがそのユーザについての同一のネームスペースへの複数のパスにつながらないことを確保することができる。したがって、この実施例において、2つのマウント操作のうちの少なくとも1つは、マウント解除804F及びマウント804Eを伴う。マウント解除804Fは、マウント操作の依存性である。
【0238】
マウント解除操作は、マウント解除インテント802Fを実行するためにマウント804E及びマウント解除804Fを伴う。換言すれば、コンテンツアイテムに対してマウント解除インテント802Fを実行するために、コンテンツアイテムは、マウント(804E)を介して最初にマウントされている。次いで、コンテンツアイテムは、マウント解除(804F)を介してマウント解除されることができる。
【0239】
操作802についてのランポートクロックを計算するときに、インテント(802A~F)、及び操作802のためのアトミック操作、依存性、因果関係などを使用することができる。ランポートクロックを使用して、1つ以上のネームスペースにおいてイベントの順序付け及び因果関係を判定し、イベントの状態が1つ以上のルールに違反しないことを確保することができる。ランポートクロックを使用して、操作802が適切に同期する、線形化される、シリアル化されることなどを確保し、1つ以上のデバイスにおいて競合を回避することができる。
【0240】
図8Bは、イベントのために計算されるランポートクロックを含むネームスペースにわたるイベントの図を示す。この実施例において、様々な操作は、ネームスペースNSID1、NSID2、及びNSID3にわたり実行されている。各ネームスペースは、ネームスペース内の操作の順序付けを決定するために、そのネームスペースにおけるすべての操作に対してSJIDを維持する。しかしながら、ネームスペースのSJIDは、ネームスペースにわたる操作の順序付け及び因果関係を識別しない。その結果、ランポートクロックをネームスペースNSID1、2、3中の操作について計算し、因果関係を判定し、操作のネームスペース間順序付けを取得する。
【0241】
NSID1において、操作810は、SJID1及びクロック1を含む。NSID2において、操作816は、SJID1及びクロック1を含む。NSID3において、操作820は、SJID1及びクロック1を含む。操作810、816、820は、複数のネームスペースにまたがり、因果関係を含まない。その結果、操作810、816、820は、互いのクロックに影響しない。
【0242】
ネームスペース内の操作の順序付けは、ネームスペースにおいてSJIDに基づき決定されることができる。同一のネームスペース内の操作についてのクロックは、1つ単にインクリメントされることができる。したがって、NSID1中のSJID2において、操作812についてのクロックは、2にインクリメントされる。
【0243】
NSID1中の操作812は、File1からNSID2への移動である。その結果操作812は、File1のNSID2における追加である、操作818をNSID2にトリガする。NSID2における操作818が異なるネームスペースからの別な操作、すなわち、NSID1からの操作812に因果関係によって依存していることから、操作818についてのクロックは、NSID1におけるクロック、及びNSID2におけるクロックに基づき計算される。このアルゴリズムは、TargetNS_clockt1=max(Source_NSclock,TargetNS_clockt0)+1として表現されることができる。したがって、この実施例において、NSID2における操作818についてのクロックは、3(例えば、max(2,1)+1)である。その結果、NSID2における操作818は、SJID2及びクロック3を含む。
【0244】
同様に、NSIDにおける操作816は、NSID2からNSID1へのFile2の移動である。したがって、操作816は、File2をNSID1に追加するための、NSID1における操作822をトリガする。操作822についてのクロックは、クロックアルゴリズムに基づき計算され、3に等しい。したがって、操作822は、NSID1におけるSJID3、及びクロック3を含む。
【0245】
NSID3における操作824は、同一のネームスペースにおける操作、すなわち、NSID3における操作820に因果関係によって依存している。したがって、操作824についてのクロックは、NSID3における操作820のクロックをインクリメントすることによって計算され得る。この実施例において、したがって、操作824についてのクロックは、2である。NSID3における操作824は、SJID2及びクロック2を含む。操作824がDirをNSID1に移動させるための移動操作であることから、操作824は、DirをNSID1に追加する、NSID1における操作826をトリガする。
【0246】
操作826が操作824によって異なるネームスペース(NSID3)にトリガされることから、操作826についてのクロックは、NSID1におけるクロック、及び操作824についてのクロックに基づき計算される。その結果、操作826についてのクロックは、4に設定される(例えば、max(2,3)+1)。したがって、操作826は、NSID1におけるSJID4、及びクロック4を含む。
【0247】
NSID1における操作828は、File3をNSID1に追加し、ネームスペース間操作ではない。その結果、操作828についてのクロックは、NSID1においてクロックをインクリメントすることによって計算される。したがって、操作828についてのクロックは、8に設定される。
【0248】
操作830は、NSID1内で操作828にも因果関係によって依存している。したがって、操作830についてのクロックは、NSID1において操作828のクロックをインクリメントすることによって、6に設定される。操作830は、NSID1におけるSJID6、及びクロック6を含む。
【0249】
操作830は、File3をNSID3に移動させる移動操作である。したがって、操作830は、NSID3に操作832をトリガする。操作832が異なるネームスペースからの操作に基づくことから、そのクロックは、NSID3におけるクロック、及び操作830のクロックに基づくクロックアルゴリズムを使用して計算される。この事例において、操作832についてのクロックは、7に設定される。したがって、操作832は、NSID3におけるSJID3、及びクロック7を含む。
【0250】
操作834、836は、ネームスペース間操作ではなく、NSID3における操作830に因果関係によって関連がある。したがって、操作834、836についてのクロックは、操作832のクロックをインクリメントすることによって計算されることができる。この実施例において、操作834、836についてのクロックは、それぞれ8及び9に設定される。
【0251】
図9Aは、ユーザに対して実行される一連のマウント操作によって生成される例示的なマウント状態違反900を示す。マウント状態違反は、ユーザ1が複数のパス(例えば、/a/c/及び/b/)を同一のネームスペース(例えば、NSID2)にマウントするのを禁止するマウント操作について定義される不変式に基づく。
【0252】
この実施例において、マウント操作908、910、912は、ステップ902、904、906において実行される。ステップ902において、ユーザ1は、ネームスペース1(NSID1)をパス/aにマウントするマウント操作908を実行する。したがって、この時点で、ユーザ1は、パス/aを介するNSID1へのマウントを有する。
【0253】
ステップ904において、次いで、ユーザ1は、ネームスペース2(NSID2)をパス/cにマウントするマウント操作910を実行する。したがって、この時点で、ユーザ1は、パス/aを介するNSID1へのマウント、及びパス/a/cを介するNSID2へのマウントを有する。
【0254】
ステップ906において、次いで、ユーザ1は、ネームスペース2(NSID2)をパス/bにマウントするマウント操作912を実行する。この時点で、ユーザ1は、パス/aを介するNSID1へのマウント、パス/a/cを介するNSID2へのマウント、及びパス/bを介するNSID2へのマウントを有する。したがって、ユーザ1は、NSID2への2つのパス、すなわち、/a/c及び/bを含む。これは、複数のパスが同一のネームスペースを指すのを防ぐ不変式に違反するため、マウント状態違反900をもたらす。この不変式に違反することを回避するために、NSID2をパス/bにマウントし、NSID2への第二のパスを確立する操作912は、NSID2へのパスのうちの1つを中断するマウント解除操作に依存することができる。例えば、操作912は、NSID2をパス/a/cにおいてマウント解除するためのマウント解除操作に依存することができる。このマウント解除操作を操作912の前に実行し、マウント状態違反900を回避する。これは、ステップ906における操作912によって生じるマウント状態違反900を解消し、ユーザ1にNSID2への1つのパス、すなわち、NSID2へのパス/bを残す。
【0255】
ランポートクロック及び依存性を活用して、マウント解除操作が操作912の前に実行されることを確保することができる。操作902、904、906が依存するいずれかのマウント解除と同様に操作902、904、906上でランポートクロックを適切に設定することにより、マウント及びマウント解除操作は、マウント状態違反900を防ぐ方式で、シリアル化され、実行されることができる。一方、ランポートクロックを不適切に設定することにより、マウント状態違反900だけではなく、他の違反も、もたらす可能性がある。
【0256】
図8Bに前に示されるように、同一のネームスペース中のイベントについてのランポートクロックは、ネームスペース中のそれぞれ新規の操作のクロックをインクリメントすることによって計算されることができる。しかしながら、複数のネームスペースのコンテキストにおいて、マウント及びマウント解除を有する操作が複数のネームスペースにわたり生成される場合に、ランポートクロックの計算は、さらに困難になる可能性がある。さらに、同一のネームスペースを指す2つのパスを禁止するマウント操作についての不変式を考慮するときに、マウント及びマウント解除操作のランポートクロックを計算するための追加のルールは、マウント及びマウント解除操作についてのこのような不変式に関するコンプライアンスを確保するために必要である場合がある。ランポートクロックを、適切に計算される場合に使用して、これらのような不変式を強制し、マウント状態違反900を防ぐことができる。適切に計算されない場合に、ランポートクロックは、その他の方法によりマウント状態違反900などの違反につながる可能性がある。
【0257】
図9Bは、ネームスペース間コンテキスト中のマウント及びマウント解除操作のためにランポートクロックを計算するための方法を示す。この方法は、ランポートクロックを使用して、マウント操作が同一のネームスペースへの複数のパス(例えば、マウント状態違反900)につながらないことを提供する不変式の違反を防ぐことを可能にする方式で、ランポートクロックを計算する。ランポートクロックは、クライアントデバイス150が同一のネームスペースへの複数のパスを含むようにコンテンツ管理システム110中のネームスペースの一貫したカット又は状態が至らせないことを確保するような方式で、マウント及びマウント解除操作が線形化される、シリアル化される、及び/又は実行されることができるように計算される。例えば、方法は、
図9Aに示される操作908、910、912についてのランポートクロックを計算し、NSID2がパス/a/c/に既にマウントされているにもかかわらず、NSID2をパス/bにマウントするステップ906において、操作912の結果としてネームスペース2に2つのパスが作成されることを防ぐことによって、マウント状態違反900を回避することができる。
【0258】
例示的な方法に従い、ステップ920において、コンテンツ管理システム110は、ネームスペース(例えば、NSID2)を特定のパス(例えば、/b)にマウントするマウント操作(例えば、操作912)を検出する。ステップ922において、コンテンツ管理システム110は、マウント操作が同一のネームスペース(例えば、NSID2)に2つのパスを作成すると判定する。この状況は、
図9Aのステップ906に示される。前述されるように、この状況は、ネームスペースへの複数のパスを禁止する不変式に違反し、マウント状態違反900をもたらす。その結果、この例示的な方法のステップ924、926、928は、下記のように、この状況(例えば、マウント状態違反900)が発生するのを防ぐために実装されることができる。
【0259】
ステップ924において、コンテンツ管理システム110は、マウント操作に対する依存性を識別する。例えば、コンテンツ管理システム110は、マウント操作に対する依存性を識別するマウント依存性計算を実行することができる。これらの依存性は、マウント操作前に発生するマウント操作に対して発生しなければならない操作を伴う。
【0260】
例えば、マウント操作が同一のネームスペースへの2つのパスを禁止する不変式に違反する場合に、マウント操作は、不変式がマウント操作によって違反されるのを防ぐために、同一のネームスペースを指す2つのパスのうちの1つをマウント解除するマウント解除操作に依存する。
図9A中のステップ906からの実施例に基づき図示するように、NSID2をパス/bにマウントするマウント操作912は、NSID2をパス/a/c/においてマウント解除するマウント解除操作に依存することができる。別の実施例として、マウント操作は、マウントについての依存性を生成することができる、ソースのマウント解除、及び宛先のマウントのような、複数のアトミック操作を伴うことができる。
【0261】
ステップ926において、コンテンツ管理システム110は、マウント操作の依存性において、いずれかのマウント解除操作を識別する。これらのようなマウント解除操作は、マウント操作についての依存性をマウント解除される。例えば、コンテンツ管理システム110は、マウント操作912についての依存性において、マウント解除操作を識別することができる。マウント解除操作は、NSID2をパス/a/c/においてマウント解除する操作であることができる。このマウント解除操作は、マウント操作912の依存性である。
【0262】
ステップ928において、コンテンツ管理システム110は、依存性においてすべてのマウント解除操作より高いランポートクロックの値をマウント操作に割り当てる。コンテンツ管理システム110は、マウント操作のクロック値を増加させて、それがその依存性においてすべてのマウント解除操作のクロック値を上回ることを確保するか、マウント操作に対してより高いクロック値を生成する必要に応じて、その依存性においてマウント操作のうちの1つ以上のクロック値を減少させるかのいずれかであることができる。また、コンテンツ管理システム110は、このようなマウント解除操作が依存するそれぞれのマウント操作より高いクロック値を各マウント解除操作が有することを確保することができる。
【0263】
図9Bからの実施例を参照して、コンテンツ管理システム110は、NSID2をパス/a/c/からマウント解除するためのマウント解除操作より高いクロック値をマウント操作912に割り当てることができる。また、コンテンツ管理システム110は、NSID2をパス/a/c/からマウント解除するためのマウント解除操作のクロック値より低いように、NSID2をパス/a/c/にマウントするマウント操作910のクロック値を設定することができる。ランポートクロックのこの計算及び構成は、NSID2についてのマウント解除操作がNSID2をパス/a/c/にマウントするマウント操作910と、NSID2をパス/b/にマウントするマウント操作912との間に実行される/処理されることを確保することができる。結果として、操作908、910、912の状態は、同一のネームスペース(NSID2)を指す複数のパスに決して至らせず、マウント状態違反900は、防がれる。
【0264】
図9Cは、
図9Bに示される方法に基づき、マウント操作908、910、912について計算される例示的なランポートクロック構成930を示す。この実施例において、ランポートクロック構成930は、ユーザ1についてNSID1をパス/aにマウントするマウント操作908、ユーザ1についてNSID2を/a/c/にマウントするマウント操作910、ユーザ1についてNSID2を/b/にマウントするマウント操作912を描く。また、ランポートクロック構成930は、NSID2を/a/c/からマウント解除するマウント解除操作914を備える。同一のネームスペースへの複数のパスを禁止する不変式と一貫して、マウント操作912は、マウント解除操作914に依存する。その結果、マウント解除操作914は、マウント操作912の依存性である。したがって、コンテンツ管理システム110は、
図9Bのステップ926に前述されているように、マウント解除操作914をマウント操作912の依存性におけるマウント解除操作として識別することができる。
【0265】
ランポートクロック構成930は、操作908、910、912、914に対して計算され、割り当てられる、ランポートクロック932、934、936を含む。ランポートクロック932、934、936を計算し、マウント操作912の前にマウント解除操作914がリスト化されることを確保することによって、マウント状態違反900を防ぐ。例えば、マウント操作912がマウント解除操作914に依存するため、マウント操作912は、マウント解除操作914より高いクロック値を割り当てられる。この実施例において、マウント解除操作914は、「1」のクロック値を有するランポートクロック934を含み、マウント操作912は、「2」のクロック値を有するランポートクロック936を含む。したがって、マウント操作912は、マウント解除操作914後に順序付けされる。さらに、マウント解除操作914がマウント操作910に依存することから、マウント操作910についてのランポートクロック932は、マウント解除操作914についてのランポートクロック934より低く設定される。図示されるように、ランポートクロック932は、「0」の値を含む。
【0266】
幾つかの事例において、コンテンツ管理システム110は、マウント操作912についてのクロック値より下にマウント解除操作914についてのクロック値を減少させることによって、そしてマウント解除操作914についてのクロック値より下にマウント操作910についてのクロック値を減少させることによって、ランポートクロック932、934、936を設定することができる。換言すれば、コンテンツ管理システム110は、マウント操作910及びマウント解除操作914のクロック値を上回るようにマウント操作912のクロック値をインクリメントすることによって、ランポートクロック932、934、936を設定することができる。
【0267】
ランポートクロック932、934、936は、操作908、910、912、914を適切にシリアル化し、マウント状態違反900及びいかなる他のマウント/マウント解除の不変式をも防ぐことを確保することができる。
図9Dは、ランポートクロック932、934、936に従いシリアル化される操作908、910、912、914の例示的なリスト化940を示す。
【0268】
リスト化940は、操作908、910、912、914、及びカーソル状態942、944、946、948を含む。リスト化940は、マウント操作908についてNSID1及びSJID1を識別するカーソル状態942に相関する、NSID1におけるマウント操作908を最初に含む。つぎに、リスト化940は、ランポートクロック932において「0」のクロック値を有するマウント操作910を含む。マウント操作910に対応するカーソル状態944は、NSID1においてSJID1、及びNSID2においてSJID0を含む。
【0269】
つぎに、リスト化940は、ランポートクロック934において「1」のクロック値を有するマウント解除操作914を含むため、マウント操作910の後に順序付けされる。マウント解除操作914に対応するカーソル状態946は、NSID1においてSJID1、及びNSID2においてSJID1を含む。したがって、カーソル状態946は、カーソル状態944の後にNSID2においてSJIDをインクリメントした。
【0270】
最終的に、リスト化940は、ランポートクロック936において「2」のクロック値を有するマウント操作912を含むため、マウント解除操作914及びマウント操作910の後に順序付けされる。マウント操作912に対応するカーソル状態948は、NSID1においてSJID1、及びNSID2においてSJID2を含む。したがって、カーソル状態948は、カーソル状態946の後に、NSID2においてSJIDをインクリメントした。
【0271】
リスト化940に基づき、マウント操作908、910を最初に実行し、NSID1を/aに、そしてNSID2を/a/c/にマウントする。NSID2を/bにマウントするためのマウント操作912を実行する前に、マウント解除操作914を実行して、NSID2を/a/cからマウント解除する。NSID2がマウント解除されると、マウント操作912を実行して、NSID2を/bにマウントする。結果として生じる状態は、NSID2への単一のパス、及びNSID1への単一のパス、すなわち、それぞれ/b及び/aを含む。
【0272】
マウント又はネームスペースは、異なるパス及びタイムスタンプを有する複数のコンテンツアイテムを含むことができる。結果として、マウント操作が発生するときに、マウント操作は、1つのマウント内に他の複数のマウントを含む、このマウント中の複数のコンテンツアイテムに影響する場合がある。マウント中のコンテンツアイテム又はランポートクロックへの不適切な更新は、有意な競合の、また一貫性がないことの原因となる可能性がある。その結果、マウントが適切なランポートクロック、及びマウント内に任意のコンテンツを含むことを確保する、マウント操作に基づきランポートクロックを更新することができる。マウント内の各サブアイテムについてのランポートクロックの個々の計算は、マウント及びサブアイテム数が増加すると特に、計算的なコストが高い場合がある。マウントを実行するときにランポートクロック計算のパフォーマンスを向上させ、計算的な負担を減少させるために、ランポートクロックの計算は、マウント及び/又はコンテンツアイテム間の関係に基づき伝播され得る。
【0273】
図10Aは、マウント操作に基づきランポートクロックを更新するための例示的なプロセスを示す。この実施例において、ユーザ1、ユーザ2、及びユーザ3は、マウントされたネームスペース1002間の相互関係に基づきツリー構造1000に描かれるネームスペース1002をマウントした。例えば、NSID3は、NSID2内にマウントされ、NSID2は、NSID1内にマウントされる。その結果、NSID1、2、及び3は、ツリー構造1000のブランチとして描かれている。同様にNSID4は、NSID1内にマウントされるため、ツリー構造1000内で別のブランチとして描かれている。
【0274】
さらに、マウントされたネームスペース1002は、それぞれの対応するマウントについて計算されるランポートクロック1004を含む。この実施例において、NSID3は、「3」のクロック値を有し、NSID2は、「2」のクロック値を有し、NSID1は、「1」のクロック値を有し、そしてNSID4は、「4」のクロック値を有する。
【0275】
マウント操作1010は、ネームスペース1006(NSID5)をNSID4にマウントするためのマウント操作を表す。NSID5がマウント操作1010に従いマウントされるときに、ランポートクロック1008は、NSID5について計算される。ランポートクロック1008についての新規のクロック値は、新規のマウント(1006)、及びこの新規のマウント(1006)からツリー(1000)までのすべてのマウント1002の最大クロック値を決定し、決定された最大クロック値をインクリメントすることによって計算される。この実施例において、ランポートクロック1008についてのクロック値は、NSID5、4、及び1の最大のクロック値をインクリメントすることによって計算される。ツリー1000に基づき、NSID5についてのマウント操作1010は、「5」のクロック値をもたらす。NSID4は、「4」のクロック値を有し、NSID1は、「1」のクロック値を有する。したがって、NSID5、4、及び1の最大クロック値は、NSID5に対応する、「5」である。次いで、「5」の最大クロック値は、「6」にインクリメントされ、クロック値「6」は、ランポートクロック1008のクロック値として割り当てられる。
【0276】
次いで、前に計算されるようにランポートクロック1008のクロック値は、新規のマウント(1006)からツリー(1000)までのすべてのランポートクロック1004に伝播される。したがって、ツリー1000中のNSID5の親であるNSID4及びNSID1のクロック値をランポートクロック1008に従い「6」に設定する更新1012を生成する。結果として、NSID1、NSID4、及びNSID5について格納されるランポートクロックの値は、マウント操作1010に応答して計算されるランポートクロック1008に基づき「6」である。したがって、ツリー1000により、新規のマウントがツリー1000内に作成されるときに必要に応じて、ランポートクロック1004を迅速に更新することが可能である。
【0277】
また、ツリー1000を使用して、マウント解除のランポートクロックをインクリメントしてクロック値をマウント解除からツリーまでのランポートクロックに伝播することによって、マウント解除操作についてのクロック値を計算することができる。例えば、
図10Bを参照して、NSID5(1006)をマウント解除するためのマウント解除操作1022を生成するときに、ランポートクロック1024は、NSID5、NSID4、及びNSID1に対してランポートクロック1008、1004の最大クロック値に基づき計算される。計算される最大クロック値は、インクリメントされ、NSID5、NSID4、及びNSID1を含む、NSID5からツリー(1000)までの各マウントについてのランポートクロックのクロック値として設定される。更新1026は、ランポートクロック1024について計算されるクロック値を、NSID4及びNSID1と関連するランポートクロック1004に伝播することができる。
【0278】
図11Aは、移動操作を追跡するためのサーバファイルジャーナル148中の例示的なテーブルを示す。テーブル1102は、操作についてのジャーナル記録を含む。幾つかの実施例において、テーブル1102は、操作、これらの操作についてのクロック(例えば、タイムスタンプ)、これらの操作と関連するネームスペース(NSID)、これらのネームスペースと関連するジャーナル識別子(SJID)などを格納することができる。例示的な操作は、追加操作、削除操作、マウント操作、マウント解除操作、移動操作などを含むことができる。また、これらの操作は、制御操作を含むことができる。例えば、移動は、移動の各ステージにインテントを定義する様々な移動制御操作と関連付けられることができる。例示的な制御操作は、アウトゴーイング移動操作、インカミング移動操作、終了操作などを含むが、限定されない。幾つかの事例において、テーブル1102は、操作識別子をも含むことができる。例えば、テーブル1102は、特定の移動操作を識別する移動識別子(Move_ID)を含むことができる。
【0279】
テーブル1104A、1104Bは、進行中の移動についてのインテントを定義する記録をホストすることができる。例えば、テーブル1104Aは、宛先ネームスペース上で進行中の移動についてのインテントを反映するインカミング移動記録を格納することができ、テーブル1104Bは、ソースネームスペース上で進行中の移動についてのインテントを反映するアウトゴーイング移動記録を格納することができる。
【0280】
テーブル1104Aにおいて、インカミング移動記録は、例えば、移動操作について移動識別子(Move_ID)、この操作のインディケーション、ソースネームスペース識別子(Source NSID)、宛先ネームスペース識別子(Destination NSID)、宛先パスのハッシュ、宛先パス、移動操作の状態、開始クロック(例えば、開始タイムスタンプ)、終了クロック(例えば、終了タイムスタンプ)などを含むことができる。この状態は、移動が進行中であるか、中止されているか、終了しているかどうかを示すことができる。したがって、この状態は、移動が処理されているか、完了したか、中止しているかどうかを識別することができる。
【0281】
テーブル1104Bにおいて、アウトゴーイング移動記録は、例えば、移動操作についての移動識別子(Move_ID)、この操作のインディケーション、ソースネームスペース識別子(Source NSID)、宛先ネームスペース識別子(Destination NSID)、ソースパスのハッシュ、ソースパス、移動操作の状態、クロック(例えば、タイムスタンプ)、カーソル(例えば、移動識別子及び操作状態)などを含むことができる。前述されるように、状態は、移動が進行中であるか、中止されているか、終了しているかどうかを示すことができる。
【0282】
これらの操作が検出される場合に、ファイルジャーナルインタフェース202は、エントリ又は記録をテーブル1102、1104A、1104Bに書き込み、操作及び状態を追跡する、これらの操作をシリアル化する、又はこれらの操作をクライアントデバイス150に同期させることができる。
【0283】
図11Bは、ランポートクロックによってネームスペース間移動を処理するための例示的なシーケンスの図を示す。この実施例において、プロセスは、NSID1(ネームスペース1)からNSID2(ネームスペース2)へのネームスペース間移動を描く。移動についての様々な操作は、移動が両方のネームスペースにおいて完了するまでNSID1及びNSID2について処理され、シリアル化され、クライアントデバイス150に発行されることができる。
【0284】
コンテンツ管理システム110は、サーバファイルジャーナル148におけるNSID1についての追加操作1106を最初に記録する。追加操作1106は、「/A/Dir/」、「/A/Dir/foo.txt」、及び「/A/Dir/bar.txt」をNSID1に追加する。ここで、「Dir」は、ディレクトリ「A」内のサブディレクトリであり、ファイル「foo.txt」及び「bar.txt」は、サブディレクトリ「Dir」内に追加される。
【0285】
次いで、コンテンツ管理システム110は、追加操作1106についてのランポートクロック1120をインクリメントし、追加操作1106についてインクリメントされたランポートクロックを記録する。
【0286】
追加操作1106の後に、コンテンツ管理システム110は、NSID1からNSID2へのディレクトリ「/A/」の移動を検出する。次いで、コンテンツ管理システム110は、テーブル1102においてNSID1についてのアウトゴーイング移動操作1108を記録する。この事例において、NSID1は、NSID1におけるディレクトリ「/A/」の移動操作についてのソースネームスペースである。アウトゴーイング移動操作1108を処理するときに、コンテンツ管理システム110は、移動識別子1112を、NSID1からNSID2への「/A/」の移動に割り当てる。さらに、コンテンツ管理システム110は、アウトゴーイング移動を含むテーブル1104Bにおけるアウトゴーイング移動と関連する情報を記録することができる。例えば、コンテンツ管理システム110は、移動識別子1112を記録し、NSID1をソースネームスペースとして識別し、NSID2が宛先ネームスペースであることを示し、NSID1においてソースパスを識別し、移動の状態(例えば、進行中)を示し、アウトゴーイング移動操作1108に基づくカーソルを定義し、アウトゴーイング移動操作1108についてのランポートクロック1120を格納することができる。
【0287】
アウトゴーイング移動操作1108についてのランポートクロック1120を記録するときに、コンテンツ管理システム110は、アウトゴーイング移動操作1108に基づきランポートクロック1120の値をインクリメントし、このインクリメントされたランポートクロック値を記録する。
【0288】
次いで、コンテンツ管理システム110は、テーブル1102にNSID2についてのインカミング移動操作1110を記録する。インカミング移動操作1110は、NSID2におけるディレクトリ「/A/」のインカミング移動に対応する。また、コンテンツ管理システム110は、インカミング移動を含む、インカミング移動操作1110についてのインカミング移動記録をテーブル1104Aに格納することができる。インカミング移動操作1110を移動識別子1112と関連付け、又はこの移動識別子1112とともに記録し、NSID2におけるインカミング移動操作1110をNSID1におけるアウトゴーイング移動操作1108と関連する移動に相関することができる。コンテンツ管理システム110は、移動識別子1112、ソースネームスペース(NSID1)、宛先ネームスペース(NSID2)、NSID1におけるソースパス、移動の状態(例えば、進行中)、開始クロック、及び終了クロックをテーブル1104Aに記録することができる。開始クロックは、ランポートクロック1120の現在の値であることができ、終了クロックは、ランポートクロック1120のインクリメントされた値であることができる。
【0289】
次いで、コンテンツ管理システム110は、「/A/Dir/」、「/A/Dir/foo.txt」、及び「/A/Dir/bar.txt」をNSID1から削除する、削除操作1114をNSID1において処理する。コンテンツ管理システム110は、削除操作1114を移動識別子1112と関連付け、削除操作1114がアウトゴーイング移動操作1108と関連するNSID1からNSID2へのディレクトリ「/A/」の移動に対応することを示し、削除操作1114を移動と無関係のいずれかの他の削除操作と区別する。幾つかの事例において、コンテンツ管理システム110は、拡張属性(xattr)などの、移動識別子1112を削除に相関する属性によって削除(例えば、「/A/Dir/」、「/A/Dir/foo.txt」、及び「/A/Dir/bar.txt」)をタグ付けする。
【0290】
次いで、コンテンツ管理システム110は、NSID1において削除操作1114についてのランポートクロック1120をインクリメントし、このインクリメントされたクロック値を記録する。
【0291】
コンテンツ管理システム110は、「/A/Dir/」、「/A/Dir/foo.txt」、及び「/A/Dir/bar.txt」をNSID2に追加する、追加操作1116をNSID2において後で処理する。コンテンツ管理システム110は、追加操作1116を移動識別子1112に相関し、追加操作1116がインカミング移動操作1110と関連する移動に相当することを示し、これらの追加を移動に無関係ないずれかの他の追加と区別する。前に説明されるように、コンテンツ管理システム110は、移動識別子1112を識別する属性(例えば、xattr)によってこれらの追加を同様にタグ付けすることができる。
【0292】
次いで、コンテンツ管理システム110は、ランポートクロック1120をインクリメントし、追加操作1116についてインクリメントされたクロックをNSID2に記録する(例えば、テーブル1102)。
【0293】
次いで、コンテンツ管理システム110は、テーブル1102にNSID1についての終了操作1118Aを記録する。コンテンツ管理システム110は、終了操作1118Aと移動識別子1112を記録し、NSID1において終了操作1118Aを識別し、終了操作をアウトゴーイング移動操作1108からの移動と相関する。また、コンテンツ管理システム110は、ランポートクロック1120をインクリメントし、終了操作1118AについてインクリメントされたクロックをNSID1に記録する。終了操作1118A後に、アウトゴーイング移動操作1108と関連する移動は、NSID1において完了し、クリアされることができる。コンテンツ管理システム110は、アウトゴーイング移動についての記録を含む、終了した状態をテーブル1104Bに書き込むことができる。
【0294】
次いで、コンテンツ管理システム110は、テーブル1102にNSID2についての終了操作1118Bを記録し、NSID2における移動を完了する。コンテンツ管理システム110は、終了操作1118Bを移動識別子1112と関連付け、終了操作1118Bを識別し、それをNSID2におけるインカミング移動操作1110と関連する移動に相関する。また、コンテンツ管理システム110は、ランポートクロック1120をインクリメントし、終了操作1118Bについてインクリメントされたクロック値をNSID2に記録する。この時点で、移動操作は、NSID2において完了し、コンテンツ管理システム110は、インカミング移動記録を含む、終了した状態をテーブル1104Aに書き込むことができる。
【0295】
この実施例に図示されるように、移動を処理するときに、コンテンツ管理システム110は、NSID2における追加操作1116の前に、NSID1における削除操作1114を処理することができる。この順序付け又はシーケンスにより、クライアントデバイス150がそれらのランポートクロック順序に従い削除及び追加操作(1114、1116)をリスト化して処理し、移動が同一のコンテンツアイテム又はコンテンツアイテム識別子(例えば、File ID)の2つのインスタンスを含むクライアントデバイス150をもたらすシナリオを回避することが可能である。例えば、この順序付け又はシーケンスは、クライアントデバイス150が追加操作1116を処理し、「/A」をNSID2に追加し、「/A/」がNSID1にもあり、NSID1から除去されていない状態を防ぐ。このようなシーケンスは、クライアントデバイス150において「/A/」の2つのインスタンスをもたらし、両方のインスタンスは、同一のコンテンツアイテムのパス及びIDに対応することができる。
【0296】
このようなシナリオを防ぐために、移動中の削除操作(1114)は、本明細書に記述されるように、ランポート依存性に基づく移動についての追加操作前にシリアル化されることができる。ランポートクロック(1120)が各プロセスにおいてインクリメントされることから、これらの追加は、削除に因果関係によって依存し、削除後にリスト化されて、処理される。
【0297】
幾つかの事例において、インカミング移動操作も、アウトゴーイング移動操作前にシリアル化される。この方式、インカミング移動は、それらの対応するアウトゴーイング移動前に記録され、処理される。したがって、クライアントデバイス150は、アウトゴーイング移動(1108)の前にインカミング移動(1110)を検出する場合に、削除を処理するまで移動についての追加を検出しない保証を伴って、本明細書に記述されるような移動を処理し続けることができる。
【0298】
さらに、クライアントデバイス150が前のインカミング移動なしでアウトゴーイング移動をコンテンツ管理システム110から受信するときに、クライアントデバイス150は、アウトゴーイング移動を削除として処理することができる。例えば、クライアントデバイス150がNSID1へのアクセスを有するが、NSID2へのアクセスを有さない場合に、インカミング移動操作1110を示すことなく、アウトゴーイング移動操作1108をリスト化することができる。クライアントデバイス150がNSID2へのアクセスを有さないことから、それは、削除操作1114を処理し、削除後に完了することができる。図示するように、クライアントデバイス150(又はクライアントデバイス150におけるユーザ)がNSID2へのアクセスを有さない場合に、クライアントデバイス150は、NSID1においてディレクトリ「/A/」のアウトゴーイング移動を検出することができるが、移動についてNSID2と関連するビュー又はプロセス操作1110、1116、1118Bへのアクセスを有さない場合がある。クライアントデバイス150の観点から、移動は、削除として出現することができる。
【0299】
したがって、本明細書において、シリアル化及びランポートクロック計算は、移動中に操作の適切な順序付け及び処理を確保し、クライアントデバイス150がアクセスを有さないソースネームスペース(例えば、NSID1)又は宛先ネームスペース(例えば、NSID2)と関連する移動などの、クライアントデバイス150が遭遇する可能性がある様々なシナリオにおいてエラー及び競合を防ぐことができる。適切なシリアル化及びランポートクロック依存性は、移動中に生成される変更に起因する問題及び競合をも防ぐ。移動中に遭遇する可能性がある、非限定的な実施例のシナリオは、移動中のソース及び/又は宛先ネームスペースのマウント又はマウント解除、移動中のソース及び/又は宛先ネームスペースの再マウント、移動中の追加又は削除操作、移動中のクラッシュなどを含む。
【0300】
移動中に遭遇する可能性がある様々なシナリオに対処するために、ステートマシンは、各移動状態において異なるシナリオについてのタスク及び操作のフローを定義することができる。
図11Cは、移動の様々な状態における操作フローを定義する例示的な移動ステートマシン(1130)を示す。移動ステートマシン1130は、テーブル1102、1104A、1104B中のすべての移動識別子について処理されることができる。移動ステートマシン1130は、ネームスペース間移動中に検出されるマウント又はマウント解除、及びこの移動中のいずれかの他の操作又はアクセス条件を含む、移動中に遭遇する可能性がある様々なシナリオ又は条件に対処する。
【0301】
図示されるように、移動ステートマシン1130は、アウトゴーイング移動操作1108が検出されるときに開始状態1150に入る。したがって、アウトゴーイング移動操作1108は、移動ステートマシン1130をトリガし、開始状態1150に入り、移動を処理し始める。操作ストリームを処理するときに、移動ステートマシン1130がアウトゴーイング移動(1108)以外の操作を検出する場合に、移動ステートマシン1130は、1140を中止し、開始状態1150に移行しない。例えば、移動ステートマシン1130が追加操作(例えば、1116)、削除操作(例えば、1114)、終了操作(例えば、1118A、1118B)、マウント解除ソース操作、又はマウント解除宛先操作を検出する場合に、移動ステートマシン1130は、移動を開始する開始状態1150に入ることなく、1140を中止する。
【0302】
アウトゴーイング移動操作1108が検出されると、移動ステートマシン1130は、開始状態1150に移行し、移動を処理する。開始状態1150において、インカミング移動操作1110が検出されるときに、この移動は、クライアントデバイス150に発行され、移動ステートマシン1130は、発行された状態1160に移行する。
【0303】
インカミング移動操作1110は、テーブル1102に記録され、テーブル1104Aにおいてx-1のランポートクロック値と関連付けられることができる。アウトゴーイング移動操作1108は、テーブル1102に記録され、テーブル1104Bにおいてxのランポートクロック値と関連付けられることができる。この方式、インカミング移動操作1110は、前述されるように、アウトゴーイング移動操作1108の前にシリアル化される。
【0304】
移動が発行された(例えば、発行された状態1160)後に、この移動は、終了又はマウント解除1134に設定され、移動ステートマシン1130は、終了状態1190に到達する。終了した状態又は操作は、移動について処理される、又は記録されることができ、終了した状態又は操作は、移動と関連する移動識別子(例えば、1112)と相関されることができる。
【0305】
移動が同一ネームスペース(例えば、非同期)内にある場合に、ネームスペース中のソースは、終了1134、又はマウント解除に設定されることができる。移動がネームスペース(例えば、NSID1からNSID2)にわたる場合に、移動は、ソースネームスペース(例えば、NSID1)及び/又は宛先ネームスペース(例えば、NSID2)において終了1134に設定されることができる。幾つかの事例において、終了した操作は、移動の移動識別子(例えば、1112)に相関され、ソースネームスペース及び/又は宛先ネームスペースについて記録される。
【0306】
移動が発行された(例えば、発行された状態1160)後に、追加操作1114又は削除操作1116が検出される場合に、移動ステートマシン1130は、追加及び削除(1114、1116)を無視し、終了状態1190に進む。したがって、移動ステートマシン1130は、発行された状態1160と終了状態1190との間に検出される追加操作1114及び削除操作1116をスキップする。
【0307】
ネームスペース間移動(例えば、NSID1からNSID2)において、移動が発行された(例えば、発行された状態1160)後であるが、移動が終了状態1190に到達する前に、マウント解除ソース操作1136Aが検出される場合に、移動ステートマシン1130は、マウント解除ソース状態1170に移行する。マウント解除ソース状態1170において、移動ステートマシン1130は、検出される、いかなる追加操作1116も無視する。移動ステートマシン1130は、宛先ネームスペース(例えば、NSID2)を終了又はマウント解除1118Bに設定し、終了状態1190に進む。宛先ネームスペースを終了又はマウント解除1118Bに設定することは、終了又はマウント解除操作を移動識別子によって処理すること、及び/又は移動識別子について終了又はマウント解除状態を記録することを伴うことができる。
【0308】
マウント解除ソース状態1170において、再マウントシナリオ1132が検出される場合に、移動ステートマシン1130は、ソースネームスペース(例えば、NSID1)についてのアウトゴーイング移動(例えば、1108)を処理し、ソースネームスペース(例えば、NSID1)についての削除操作(例えば、1114)を処理し、又は発行し、宛先ネームスペース(例えば、NSID2)について検出される、いかなる追加操作1116も無視する。マウント解除ソース状態1170から、移動ステートマシン1170は、ソースネームスペースが終了する、又はマウント解除されるときに進行し、宛先ネームスペースを終了又はマウント解除1118Bに設定し、終了状態1190に到達する。
【0309】
再マウントシナリオ1132は、マウント解除ソース操作1136A後に、終了状態1190前のいずれかの時点で、ソースネームスペース(NSID1)を再マウントすることを含むことができる。幾つかの事例において、マウント解除ソース操作1136A及び再マウントシナリオ1132は、終了状態1190前に1回より多く発生する可能性がある。例えば、ユーザは、ソースネームスペースをマウント解除し、移動中にソースネームスペースを複数回、再マウントすることができる。ソースネームスペースがマウント解除され、再マウントされる各回に、移動ステートマシン1130は、ソースネームスペースが終了し、又はマウント解除され、移動ステートマシン1130が終了状態1190に進むまで、再マウントシナリオ1132をマウント解除ソース状態1170において処理する。したがって、幾つかの事例において、移動ステートマシン1130は、ソース及び宛先ネームスペースが終了し、終了状態1190に到達するまで、再マウントシナリオ1132を通してマウント解除ソース状態1170にループすることができる。
【0310】
移動が発行された(例えば、発行された状態1160)後に、マウント解除宛先操作1136Bが検出される場合に、移動ステートマシン1130は、マウント解除宛先状態1180に移行する。マウント解除宛先状態1180において、移動ステートマシン1130は、ソースネームスペース(例えば、NSID1)が終了、又はマウント解除1118Aであると判定し、終了状態1190に進む。ソースネームスペースは、終了した、又はマウント解除された状態に設定されることができ、終了した、又はマウント解除された記録又は操作は、この移動の移動識別子に相関されることができる。
【0311】
再マウントシナリオ1132がマウント解除宛先状態1180において検出される場合に、移動ステートマシン1130は、宛先ネームスペース(例えば、NSID2)上でインカミング移動(例えば、1110)を処理し、宛先ネームスペース(例えば、NSID2)において追加操作1116を処理し、検出される削除操作1114を無視する。移動ステートマシン1130は、宛先ネームスペースの終了又はマウント解除時に、マウント解除宛先状態1180から進む。マウント解除宛先状態1180後に、移動ステートマシン1130は、ソースネームスペースが終了する、又はマウント解除される(1118A)ときに、終了状態1190に進む。
【0312】
マウント解除宛先操作1136Bの後に、再マウントシナリオ1132は、マウント解除宛先操作1136Bの後で、終了状態1190の前の、いずれかの時点で宛先ネームスペース(NSID2)を再マウントすることを含むことができる。幾つかの事例において、マウント解除宛先操作1136B及び再マウントシナリオ1132は、終了状態1190の前に1回より多く発生し、終了状態1190に進むまで、再マウントシナリオ1132を通してマウント解除宛先状態1180に移動ステートマシン1130をループさせることができる。
【0313】
図11Dは、コンテンツアイテムの一意の識別子に基づき位置にわたり、因果関係に基づき線形化される、例示的な移動操作の図を示す。この実施例において、移動操作1197A~Bは、操作1195A、1195Bに基づき位置1、位置2、及び位置3にわたり実行される。位置1、2、3は、例えば、異なるネームスペース、又は共有されたフォルダを表すことができる。リビジョン番号1192は、位置1、2、3内の操作1197A~Bの順序付けを表す。
【0314】
位置1における追加操作1195Aにおいて、一意の識別子「123」を含むファイル「Foo.txt」を位置1に追加する。追加操作1195Aは、位置1中にリビジョン番号1、及びランポートクロック1を割り当てられる。移動操作1197Aを生成して、一意の識別子「123」を含むファイル「Foo.txt」を位置1から位置2に移動させるときに、削除操作1195Bは、位置1において最初に処理され、位置1中のリビジョン番号2がランポートクロック2によって指定される。次いで、追加操作1195Aを位置2において処理し、一意の識別子「123」を含むファイル「Foo.txt」を位置2に追加する。位置2における追加操作1195Aは、位置2におけるリビジョン番号1、及びランポートクロック3を取得する。図示されるように、ファイル(「Foo.txt」)は、位置1から位置2に移動するときに、その一意の識別子「123」を保持する。したがって、一意の識別子「123」は、いかなる位置でもファイルを一意に識別する。
【0315】
移動操作1197Aを処理するときに、位置1における削除操作1195B、及び位置2における追加操作1195Aは、ソース(すなわち、位置1)からのファイルの削除が宛先(すなわち、位置2)へのファイルの追加の前に起こるようにシリアル化される。このシリアル化は、削除及び追加操作を因果関係によって関連させ、宛先上の追加操作(すなわち、位置2における追加操作1195A)に、ソース上の削除操作(すなわち、クロック2に関する位置1における削除操作1195B)より高いランポートクロック(クロック3)を割り当てることによって保証されることができる。
【0316】
移動操作1197Bは、位置2から位置3への、一意の識別子「123」を含むファイル「Foo.txt」の移動をトリガする。移動操作1197Bは、一意の識別子「123」を含むファイル「Foo.txt」を位置2から削除する、位置2における削除操作1195Bと、一意の識別子「123」を含むファイル「Foo.txt」を位置3に追加する、位置3における追加操作1195Aとを伴う。再度、ファイル「Foo.txt」は、移動の前後に、その一意の識別子「123」を保持する。位置2における削除操作1195Bは、位置2におけるリビジョン番号2、及びランポートクロック4を割り当てられるため、必然的にランポートクロック3を含む、位置2における追加操作1195A後となる。位置3における追加操作1195Aは、位置3におけるリビジョン番号1、及びランポートクロック5を割り当てられる。
【0317】
図示されるように、移動操作1197A~Bは、移動しているコンテンツアイテム(すなわち、ファイル「Foo.txt」)の一意の識別子を使用して処理され、これらの移動を実装するための操作は、それぞれのランポートクロックに従いシリアル化され、それらのそれぞれの位置内でリビジョン番号1192によって順序付けられる。これらの移動についての追加及び削除操作をシリアル化するときに、ソースにおける削除操作は、宛先における追加操作前にリスト化され、宛先における追加操作より低いランポートクロックが指定される。
【0318】
コミットプロトコル
図12は、操作をクライアントデバイス150に反映するツリーデータ構造610、620、630の例示的な状態を示す。インテント1206は、クライアントデバイス150における操作の意図された結果を表す。この実施例において、インテント1206は、「Foo.txt」をクライアントデバイス150に追加するための追加操作を示す。ローカルツリー630は、インテント1206に基づくノード1204を追加するように修正されている。ノード1204は、ルートノード1202内に「Foo.txt」の追加を描くようにローカルツリー630を修正する。前に説明されるように、インテント1206がコンテンツ管理システム110と同期するときに、クライアントデバイス150は、ノード1204を含むようにリモートツリー610及び同期ツリー620を更新するため、クライアントデバイス150においてツリーデータ構造610、620、630を同期させることができる。同期するときに、ツリーデータ構造610、620、630は、同期した状態をクライアントデバイス150に反映する。
【0319】
インテント1206をコンテンツ管理システム110と同期させるために、クライアントデバイス150は、インテント1206をコンテンツ管理システム110にコミットすることができる。この実施例において、クライアントデバイス150は、インテント1206をコンテンツ管理システム110と同期させるために、「Foo.txt」の追加をコンテンツ管理システム110にコミットする。
【0320】
図13Aは、インテント1206をコンテンツ管理システム110にコミットするための例示的な方法を示す。ステップ1302において、クライアントデバイス150上のクライアント同期サービス156は、操作(例えば、インテント1206からの操作)をクライアントデバイス150にコミットするインテントを記録する。クライアント同期サービス156は、永続的にディスク又はメモリ上の操作をクライアントデバイス150にコミットするインテントを記録し、保留中のコミットを追跡することができる。クライアントデバイス150は、イベントが失敗又は成功などの保留中のコミット(複数可)の除去をトリガするまで、ダーティコミット記録を格納し、修正を追跡することができる。
【0321】
ステップ1304において、クライアント同期サービス156は、操作をコンテンツ管理システム110(例えば、ファイルジャーナルインタフェース202)にコミットする。クライアント同期サービス156は、この操作をコミットすることを要求するコンテンツ管理システム110にメッセージを送信することができる。このメッセージは、前に説明されるように、コンテンツ管理システム110がクライアントデバイス150におけるコンテンツアイテムの状態と、サーバファイルジャーナル148におけるクライアントデバイス150の位置とを決定するために使用することができる、カーソルを含むことができる。このカーソルは、例えば、クライアントデバイス150と関連する各ネームスペースについてサーバジャーナルID(SJID)を含むことができる。SJIDは、各ネームスペースについてサーバファイルジャーナル148におけるクライアントデバイス150の位置を示すため、クライアントデバイス150における各ネームスペースの状態を提供する。
【0322】
ステップ1306において、クライアント同期サービス156は、ステップ1304からのコンテンツ管理システム110へのコミットが成功したかどうかを判定する。幾つかの事例において、コンテンツ管理システム110は、このコミットに応答して、コミットが成功した、又は失敗したかどうかを示す、エラー又は肯定応答をクライアント同期サービス156に自動的に送信することができる。幾つかの事例において、クライアント同期サービス156は、肯定応答又はエラー通知を要求するコンテンツ管理システム110に連絡することができる。例えば、クライアント同期サービス156は、コミットが成功した肯定応答を要求するコンテンツ管理システム110にメッセージを送信することができる。
【0323】
コミットが成功した場合に、コンテンツ管理システム110は、クライアント同期サービス156に応答し、クライアントデバイス150にコミットが成功したことを通知することができる。コミットが成功しなかった場合に、コンテンツ管理システム110は、失敗応答によって応答することができる、又はクライアント同期サービス156からの要求に応答しないことができる。コミットが失敗したとクライアント同期サービス156が判定する場合に、ステップ1310において、クライアント同期サービス156は、クライアントデバイス150からの操作をコミットするインテントをクリアにする。クライアントデバイス150における状態がサーバファイルジャーナル148における状態と比較して古い場合に、クライアント同期サービス156は、クライアントデバイス150における状態をサーバファイルジャーナル148における状態と同期させる、いずれかの必要な更新を受信する、又は要求することができる。
【0324】
コミットが成功したとクライアント同期サービス156が判定する場合に、ステップ1308において、クライアント同期サービス156は、
図8に示されるようなノード804を含むようにリモートツリー610及び同期ツリー620を更新する。次いで、ステップ1310において、クライアント同期サービス156は、クライアントデバイス150から操作をコミットするインテントをクリアする。
【0325】
ステップ1306においてコンテンツ管理システム110へのコミットが成功したかどうかを判定することによって、クライアント同期サービス156は、クライアント同期サービス156が操作をコミットし、そのコンテンツ及びツリーデータ構造(610、620、630)を更新するが、このコミットがコンテンツ管理システム110において成功しないシナリオに起因する競合を防ぐことができる。これは、クライアントデバイス150とコンテンツ管理システム110との間の状態の中に競合を生じる。
【0326】
例えば、クライアント同期サービス156がステップ1304において操作をコミットした後に、クライアントデバイス150又はコンテンツ管理システム110におけるクラッシュ、ネットワーク条件(例えば、レイテンシ又は輻輳、ネットワーク障害など)、処理条件(例えば、コンテンツ管理システム110における長いキュー、コンテンツ管理システム110におけるメモリエラーなど)などのような、様々なシナリオは、コミットが実際に正常に処理され、コンテンツ管理システム110に適用されるのを妨げる場合がある。ステップ1306において、したがって、クライアント同期サービス156は、この操作を適用するか、クライアントデバイス150にコミットする、格納された、又はキャッシュされたインテントをクリアするかどうかを決定する前に、コミットが成功したか、失敗したかどうかを検証することができる。
【0327】
また、コミットが成功した場合にチェックすること、及びコミットが失敗した場合にコミットするインテントをクリアすることにより、クライアントデバイス150がセルフオーサリングされた操作を区別し、それ自体がセルフオーサリングされた操作を通じて競合することを回避することが可能である。例えば、クライアントデバイス150は、クライアントデバイス150によってオーサリングされるいずれかの操作に対してコミットするインテントと、これらの操作がセルフオーサリングされているインディケーションを記録することができる。次いで、クライアントデバイス150は、この操作を適用する(例えば、ツリーデータ構造を更新する)前に、コンテンツ管理システム110によって、コミットが成功したかどうかを検証することをチェックする。
図13Bに関してさらに以下に記述されるように、コンテンツ管理システム110は、コミットするインテントが失敗した、又は受信されなかったことをクライアントデバイス150に報告する場合に、コミットするこのようなインテントがコンテンツ管理システム110によって後に受信されても、その後成功しないであろうことを保証することができる。したがって、クライアントデバイス150は、コミットするインテントが失敗したことをクライアントデバイス150が示した後にコミットが成功しないであろうことを同様に保証することができ、コンテンツ管理システム110から失敗又は成功の肯定応答を受信した後にコミットするインテントをクリアする。
【0328】
これは、例えば、クライアントデバイス150が失敗した操作をコミットする試みを信じ、コンテンツ管理システム110によって後に承認される操作に基づくリビジョンの更新又はインディケーションをコンテンツ管理システム110から後に受信するシナリオを妨げることができる。例えば、クライアントデバイス150は、コミットをコンテンツ管理システム110に送信することができる。このコミットが一時的に失われる、又は遅延する場合に、コンテンツ管理システム110及びクライアントデバイス150は、コミットが失敗したと信じる可能性がある。コミットが後に再浮上し、クライアントデバイス150がコミットするインテントをクリアした、又はその他の方法によりコミットするインテントを失敗したとマーク付けした後に、コンテンツ管理システム110がこのコミットを処理して承認する場合に、この操作が決して承認されるべきではなかったとしても、失敗したコミットと関連する操作は、クライアントデバイス150へ意図せずに伝播されることができる。クライアントデバイス150は、この操作を受信し、この操作が前の失敗したコミットからのそれ自体の操作であることを認識せず、この操作が別のデバイスから生成され、同期したと信じて、この操作を適用する場合がある。この操作を前の失敗したコミットと関連するセルフオーサリングされた操作として区別することができず、クライアントデバイス150は、この操作を適用し、関連したコンテンツアイテム(複数可)又はネットワーク(複数可)の状態に競合を生じさせる可能性がある。したがって、クライアントデバイス自体の操作は、クライアントデバイスがそれ自体の操作を失敗した後に、この操作が別のデバイスによって生成され、クライアントデバイスに伝播される新規のリビジョンであるという信念の下で、同一の操作を適用することが原因となる競合をこのクライアントデバイスに生じさせる可能性がある。
【0329】
図13Bは、コンテンツ管理システム110においてコミットを処理する例示的な方法を示す。ステップ1320において、ファイルジャーナルインタフェース202は、クライアントデバイス(例えば、クライアントデバイス150)からのコミット要求を監視する。ステップ1322において、ファイルジャーナルインタフェース202は、クライアントデバイス150からの操作(例えば、クライアント同期サービス156)をコミットする要求を受信する。この要求は、コミットと関連する操作と、クライアントデバイス150と関連するカーソルとを識別することができる。例えば、この要求は、
図13Aに示されるようなインテント1206をコミットする、クライアント同期サービス156からの要求であることができる。したがって、この要求は、
図8に示されるインテント1206に対応する追加操作(例えば、Add「Foo.txt」)と、クライアントデバイス150におけるカーソルとを識別することができる。クライアントデバイス150におけるカーソルは、ファイルジャーナルインタフェース202からクライアントデバイス150によって受信される最後の、又は直近のカーソルであることができる。
【0330】
前に説明されるように、カーソルは、ネームスペースのそれぞれについてのサーバファイルジャーナル148におけるリビジョン又は状態と比較して、クライアントデバイス150における各ネームスペースの最新のリビジョン又は状態を反映する、クライアントデバイス150の位置をサーバファイルジャーナル148において識別することができる。例えば、カーソルは、クライアントデバイス150において各ネームスペースについてサーバファイルジャーナル識別子(SJID)を識別することができる。ネームスペースのSJIDは、クライアントデバイス150によって取得されるそのネームスペースについて最新のSJID(例えば、ロウ、リビジョン、又は状態)を示す。したがって、このカーソルは、クライアントデバイス150がクライアントデバイス150における各ネームスペースについてサーバファイルジャーナル148中の最新のリビジョンを受信したかどうかを示すことができる。
【0331】
この操作をコミットする要求に応答して、ステップ1324において、ファイルジャーナルインタフェース202は、クライアントデバイス150からのコミットと関連するカーソルをチェックする。ステップ1326において、ファイルジャーナルインタフェース202は、カーソルが先頭にあるかどうかを判定する。ここで、ファイルジャーナルインタフェース202は、カーソル中の各ネームスペースについてカーソルによって識別されるリビジョン(SJID)がサーバファイルジャーナル148上のそのネームスペースについて最新のリビジョンであるかどうかを判定する。
【0332】
例えば、カーソルがネームスペース2についてのSJID50を識別する場合に、ファイルジャーナルインタフェース202は、SJID50がサーバファイルジャーナル148(例えば、ジャーナル310)中のネームスペース2について最新のSJID(例えば、最新のロウ又はリビジョン)であるかどうかを判定する。そうである場合に、つぎに、クライアントデバイス150からのカーソルは、それがクライアントデバイス150における各ネームスペースについてのサーバファイルジャーナル148の最後にあることを意味する、先頭にあり、クライアントデバイス150がクライアントデバイス150における各ネームスペースについてサーバファイルジャーナル148中の最新のリビジョン又は状態を取得したことを示す。そうでない場合に、クライアントデバイス150からのカーソルは、それがクライアントデバイス150における各ネームスペースについてサーバファイルジャーナル148の最後にはないことを意味する、先頭にはなく、クライアントデバイス150がクライアントデバイス150における各ネームスペースについてサーバファイルジャーナル148中の最新のリビジョン又は状態を取得していないことを示す。換言すれば、1つ以上のネームスペースと関連するクライアントデバイス150におけるコンテンツアイテムは、古い。
【0333】
カーソルが先頭にはない場合に、ステップ1328において、ファイルジャーナルインタフェース202は、クライアントデバイス150からのコミットを拒否する。例えば、先頭にはないカーソルに基づき、ファイルジャーナルインタフェース202は、クライアントデバイス150からのコミットと関連する操作が古い(例えば、サーバファイルジャーナル148において最新のリビジョンを反映していない)コンテンツアイテム(複数可)及び/又はネームスペース(複数可)を修正すると判定することができ、そのコンテンツアイテム(複数可)及び/又はネームスペース(複数可)についてサーバファイルジャーナル148におけるリビジョンに関して競合を生じる可能性がある。したがって、ファイルジャーナルインタフェース202は、コミットを拒否し、コミットと関連する操作によって生じる競合を防ぐことができる。ファイルジャーナルインタフェース202は、コミットが拒否されていることを示す応答をクライアントデバイス150に送信することができる。又はイルジャーナルインタフェース202は、サーバファイルジャーナル148中の最新のリビジョン又は状態をクライアントデバイス150に送信する、又はクライアントデバイス150が更新を実行するように促すことができる。
【0334】
カーソルが先頭にある場合に、ステップ1330において、ファイルジャーナルインタフェース202は、このコミットを許容することができる。幾つかの事例において、ファイルジャーナルインタフェース202は、操作がコミットを許容する前に競合を生じないことを検証する別のチェックを実行することができる。例えば、カーソルが先頭にあると判定することに加えて、ファイルジャーナルインタフェース202は、コミット(例えば、インテント1206)と関連する操作によって反映されるリビジョンをサーバファイルジャーナル148におけるリビジョンと比較し、カーソルが先頭にある場合でも操作が競合を生じないことを検証することができる。図示するように、操作がファイルについての削除操作であり、カーソルが先頭にあるとファイルジャーナルインタフェース202が判定すると仮定する。コミットを許容する前に、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148がファイルを特定のネームスペースに追加する前のリビジョンを含むことを検証することができる。サーバファイルジャーナル148がファイルをネームスペースに追加するリビジョンを含まないとファイルジャーナルインタフェース202が判定する場合に、ファイルジャーナルインタフェース202は、削除操作と、追加リビジョンの欠如との間に競合を識別することができる。次いで、ファイルジャーナルインタフェース202は、コミットを拒否する、競合を調整する、及び/又はクライアントデバイス150に競合を調整するように求めることができる。
【0335】
コミットを許容した後に、ステップ1332において、ファイルジャーナルインタフェース202は、このコミットに基づきサーバファイルジャーナル148を更新する。例えば、ファイルジャーナルインタフェース202は、コミットと関連する操作を反映るリビジョンをサーバファイルジャーナル148に書き込むことができる。ファイルジャーナルインタフェース202は、前述されるように、この操作をリビジョンに変換し、この操作と関連するネームスペースについてのリビジョンを書き込むことができる。
【0336】
ステップ1334において、ファイルジャーナルインタフェース202は、それがクライアントデバイス150から肯定応答要求を受信したかどうかを判定することができる。例えば、クライアントデバイス150は、コミットが失敗したか、成功したかどうかを判定するために、コミットの肯定応答についての要求をファイルジャーナルインタフェース202に送信することができる。ステップ1336において、ファイルジャーナルインタフェース202は、クライアントデバイス150からの肯定応答要求に応答することができる。ファイルジャーナルインタフェース202は、コミットが成功したか、失敗したかどうかを含む、コミットのステータスのクライアントデバイス150に通知することができる。
【0337】
ステップ1338において、ファイルジャーナルインタフェース202は、クライアントデバイス150と関連するカーソルを移すことができる。例えば、クライアントデバイス150からのカーソルがクライアントデバイス150におけるネームスペース1についての最新のリビジョンとしてネームスペース1についてのSJID6を識別し、コミットと関連する操作がネームスペース1に対応すると仮定する。ファイルジャーナルインタフェース202は、ネームスペース1と関連するカーソルをSJID6からSJID7に移すことができる。ファイルジャーナルインタフェース202は、更新されたカーソルをクライアントデバイス150に提供することができ、クライアントデバイス150は、将来のコミットのために更新されたカーソルを使用することができる。
【0338】
ファイルジャーナルインタフェース202は、サーバファイルジャーナル148を更新した後に、又はクライアントデバイス150から肯定応答要求を受信した後に、カーソルを移すことができる。幾つかの事例において、ファイルジャーナルインタフェース202は、クライアントデバイス150から肯定応答要求を受信した後に、肯定応答要求と関連するコミットがファイルジャーナルインタフェース202によって許容されなかった場合でも、カーソルを移すことができる。例えば、ファイルジャーナルインタフェース202がクライアントデバイス150から肯定応答要求を受信する場合に、それは、ファイルジャーナルインタフェース202がコミットに関連した要求を決して受信しなかった、又は承認しなかった場合でも、肯定応答要求に基づきカーソルを移すことができる。カーソルを移すことによって、ファイルジャーナルインタフェース202は、コミットが許容されていない、又は記録されていないことをクライアントデバイス150に示すと、このコミットが後に許容されない、又は記録されないことを保証することができる。
【0339】
例えば、クライアントデバイス150がファイルジャーナルインタフェース202にコミットする要求を送信するときに、幾つかの事例において、この要求は、ネットワーク又はコンピューティング問題(例えば、レイテンシ、輻輳、クラッシュ、クライアント側タスクキャンセルなど)のような、様々な理由のために、一時的に失われる、又は遅延する可能性がある。結果として、ファイルジャーナルインタフェース202は、予想より遅くまでコミットする要求を受信しないことができる。例えば、ファイルジャーナルインタフェース202は、クライアントデバイス150から肯定応答要求を受信し、この肯定応答要求に応答し、後でのみクライアントデバイス150からコミットする元の要求を受信することができる。この実施例において、コミットが記録されていなかった、受信されていなかった、又は承認されていなかったインディケーションによって、ファイルジャーナルインタフェース202がクライアントデバイス150に応答した後に、このコミットを受信し、承認する/記録する場合に、このようなコミットは、コンテンツ管理システム110における状態と、クライアントデバイス150における状態との間の競合を生じる可能性がある。
【0340】
したがって、ファイルジャーナルインタフェース202がクライアントデバイス150に、コミットが記録されていなかった、又は承認されていなかったということを伝えるときに、このようなコミットがファイルジャーナルインタフェース202によって後に受信された場合でも、後でコミットされないことを保証するために、ファイルジャーナルインタフェース202は、カーソルを移し、失われた、又は遅延したコミットが再浮上する場合に拒否されることを確保することができる。例えば、ファイルジャーナルインタフェース202はコミットが記録されなかった、又は承認されなかったとクライアントデバイス150に応答した後に、コミットする要求を受信するときに、ファイルジャーナルインタフェース202は、ステップ1326に説明されるように、カーソルが先頭にあるかどうかをチェックする。コミットする要求がクライアントデバイス150によって最初に送信されたので、ファイルジャーナルインタフェース202がカーソルを移したことから、ファイルジャーナルインタフェース202は、コミットする要求と関連するカーソルが先頭にはないと判定し、その後、ステップ1328に説明されるようにコミットするこの要求を拒否する。その結果、ファイルジャーナルインタフェース202は、処理又は伝送中に遅延した、又は失われたコミットに起因する競合又はエラーを防ぐことができる。換言すれば、カーソルが移されるときに、コミットが承認されていなかった、又は受信されていなかった場合に、カーソルを移すことにより、このようなコミットが決して承認されない、又は記録されないことを確保する。
【0341】
また、これは、前に説明されるように、セルフオーサリングされた操作からのクライアントデバイス150における競合を防ぐ。例えば、クライアントデバイス150がクライアントデバイス150にコミットするインテントに失敗する場合に、カーソルを移すことにより、失敗したコミットがファイルジャーナルインタフェース202によって後に記録されないこと、及びクライアントデバイス150に後に伝播されないことを確保する。
【0342】
また、カーソルを移すことにより、クライアントデバイス150及び/又はファイルジャーナルインタフェース202が失敗したコミットを再試行することができる「再度のコミット」のアプローチのような、他のアプローチによって潜在的に生じる可能性がある、様々な修正又はコミットの競合を防ぐことができる。下記は、カーソルを移すことによって防止されている、このような競合又は条件の非限定的な実施例である。
【0343】
クライアントデバイス150は、「Foo.txt」をブロックリストAに追加するインテント1206を記録する。クライアントデバイス150からのコミット要求は、ファイルジャーナルインタフェース202にディスパッチされるが、ネットワークにおいて遅延する。加えて、クライアントデバイス150は、コミットを送信した後にクラッシュする。次いで、クライアントデバイス150は、オンラインに戻り、リカバリモードにおいて、この追加を再コミットしようとする。ファイルジャーナルインタフェース202は、「Foo.txt」が既に他の箇所で最新であるため、このコミットを拒否する。クライアントデバイス150は、フライト中である、それ自体のコミットが失敗した証拠として拒否されたコミットを解釈し、その結果、クライアントデバイス150においてキャッシュ/ログをコミットするインテントをクリアする。次いで、クライアントデバイス150は、クライアントデバイス150上の「Foo.txt」をブロックリストBに編集する。「Foo.txt」は、別のユーザ又はデバイスによってリモートに削除される。次いで、クライアントデバイス150からのインテント1206についての元のコミット要求は、ファイルジャーナルインタフェース202に到達し、ファイルジャーナルインタフェース202によって許容される。次いで、クライアントデバイス150は、ブロックリストAへの「Foo.txt」の追加を、ブロックリストBに関して編集された「Foo.txt」と同一のパスにおいてファイルジャーナルインタフェース202から取り出す。ここで、クライアントデバイス150は、ブロックリストBに関して編集された「Foo.txt」と、ブロックリストAに関する「Foo.txt」のそれ自体の以前の追加との間に競合を有する。その結果、クライアントデバイス150は、それ自体が意図せずに競合した。
【0344】
この例示的なシナリオは、カーソルを移すことによって防止される。例えば、ファイルジャーナルインタフェース202がブロックリストAに関する「Foo.txt」についての追加コミットを後に受信するときに、コミットがクライアントデバイス150によって送信されたことからカーソルが移されている場合、ファイルジャーナルインタフェース202は、カーソルをチェックし、カーソルが先頭にはないと判定する(例えば、ステップ1326)。次いで、ファイルジャーナルインタフェース202は、コミットを拒否し、クライアントデバイス150がブロックリストAに関する「Foo.txt」の追加をファイルジャーナルインタフェース202から取り出すのを防ぐ。したがって、コミットが失敗したとクライアントデバイス150が判定し、キャッシュ/ログをコミットするインテントをクリアすると、このコミットは、決して成功しないことが保証される。その結果、ファイルジャーナルインタフェース202及びクライアントデバイス150は、前の実施例における「Foo.txt」の編集後に、クライアントデバイス150がブロックリストAに関する「Foo.txt」の追加を取り出さず、同一のパスにおいて、ブロックリストAに関する「Foo.txt」と、ブロックリストBに関する「Foo.txt」との間に競合を生じないことを保証することができる。
【0345】
シンボリックリンク
図14は、例示的なシンボリックリンクを示す。シンボリックリンク(「sym link」)は、別のコンテンツアイテム(例えば、ファイル又はディレクトリ)への参照又はポインタを含むコンテンツアイテム(例えば、ファイル)である。この参照又はポインタは、相対又は絶対パスなどのターゲットコンテンツアイテムへのパスである。シンボリックリンクは、ファイル、フォルダ、又はショートカットとしてクライアントデバイス150上に出現することができるが、選択時に、シンボリックリンクは、ターゲットコンテンツアイテムにリダイレクトする。したがって、シンボリックリンクを使用して、シンボリックリンクからターゲットコンテンツアイテムにアクセスすることができる。
【0346】
図14において、シンボリックリンク1410は、ターゲット1420へのパス1415に関するシンボリックリンクを描く。ユーザがシンボリックリンク1410上でクリックするときに、ユーザは、ターゲット1420にパス1415を介してリダイレクトされる。パス1415が有効であり、ユーザがターゲット1420にアクセスするいかなる問題にも遭遇しない場合に、ユーザは、シンボリックリンク1410を介してターゲット1420のコンテンツへのアクセスを得る。
【0347】
本明細書に図示されるように、パス1415は、絶対パス(1430)又は相対パス(1440)であることができる。絶対パス1430は、ターゲット1420のフルパスを、シンボリックリンク1410の相対位置に関係なく宛先ファイルシステム又は位置上に含み、シンボリックリンク1410とターゲット1420との間のいかなる相対位置にも関係なく、シンボリックリンク1410を介してアクセスされることができる。
【0348】
相対パス1440は、シンボリックリンク1410に関連するパスを含む。例えば、シンボリックリンク1410は、この実施例において、「/Root/Dir」に位置し、ターゲット1420は、「/Root/Dir/A/b.txt」に位置している。絶対パス1430において、シンボリックリンク1410は、ターゲット1420のフルパス、すなわち、「/Root/Dir/A/b.txt」を指す。相対パス1440において、シンボリックリンク1410は、シンボリックリンク1410が位置している、「/Root/Dir」に関連するターゲット1420へのパスである、「.../A/b.txt」を代替に指す。
【0349】
同期コンテキストにおいて、シンボリックリンクは、様々な課題を提示する。最初に、シンボリックリンクの同期ビヘイビアは、異なるオペレーティングシステム上で異なる場合がある。さらに、このシステムがシンボリックリンクを同期させるがターゲットコンテンツアイテムのコンテンツを格納せず、同期させない場合に、シンボリックリンクのコピーを受信する他のユーザ又はデバイスは、ターゲットにアクセスすることができない可能性がある。したがって、シンボリックリンクは、他のユーザアカウント又はデバイスに適切に同期させない場合があり、他のユーザアカウント又はデバイスに対して無効になる場合がある。したがって、ターゲットにシンボリックリンクによって作成されるリンクは、同期時に壊れる場合がある。これは、ユーザに対する問題をさらに生じる可能性がある。例えば、アプリケーションバンドルなどの、ある特定のコンテンツアイテムは、他のファイル又はフォルダを指すシンボリックリンクであるファイルを含むことが多い場合がある。これらのシンボリックリンクが同期を通じて壊れる場合に、コンテンツアイテム(例えば、アプリケーションバンドル)は、破損する、無効などになる。
【0350】
一方、シンボリックリンクを同期させるシステムがターゲットを追跡し、ターゲットのコンテンツを同期させる場合に、これは、他のユーザ又はホストに対しても複数の問題を生じる可能性がある。例えば、幾つかの例において、ターゲットは、他のユーザ又はホストにアクセス可能ではない場合があるため、同期は、一貫性がないものになる場合がある。異なるユーザ及びデバイスは、アクセス、リンク、有効性などの様々な因子に基づきシンボリックリンクについて、異なる同期結果又はビヘイビアで終わる可能性がある。さらに、このようなコンテンツが含まれることをユーザが意図しなかったときに、ターゲットのコンテンツは、ユーザのアカウント又はデバイスに追加されることができ、ユーザアカウント又はデバイスに利用可能なストレージを埋めることもできる。このような同期は、ユーザが他のユーザもしくはデバイスと共有することを意図しなかった、ターゲットコンテンツをユーザのアカウントもしくはデバイスからコピーすることによってセキュリティ上の懸念を引き起こす可能性がある、又は他のユーザもしくはデバイスがユーザのコンテンツ及び/又はデバイスへの認可されていないアクセスを得ることを可能にする場合がある。
【0351】
シンボリックリンク中のパスが絶対であるか、相対であるかに依存して、他の一貫性がないことも、他のホスト又はアカウントに起因する無効なリンクに基づき生じる可能性がある。例えば、シンボリックリンクに使用される絶対パスは、別のデバイスからアクセス可能ではない、クライアントデバイスのローカルファイルシステム上で有効な位置を指すことができる。したがって、絶対パスを含むシンボリックリンクが他のデバイスに同期するときに、これらのデバイスは、ターゲットへのアクセスを有さず、シンボリックリンクは、これらのデバイスに無効になる。
【0352】
様々な他の問題は、シンボリックリンクを同期させるときに生じる可能性がある。
図15A~Dは、シンボリックリンクを同期させるための様々なシナリオを示し、同期について異なるオプション、ならびに潜在的な利点及び不利な点を説明する。
【0353】
図15Aは、ターゲット及びシンボリックリンクが同一のネームスペース(例えば、NSID)に含まれるときに、シンボリックリンクを同期させるための例示的なシナリオ(1500)のテーブルを示す。このテーブルは、シンボリックリンク中のパス(例えば、1415)が相対パス(1440)であるか、絶対パス(1430)であるかに依存するシンボリックリンク(例えば、1410)の同期をハンドリングするためのオプション1505を含む。オプション1505は、以下にさらに記述される、パスが相対パス(1440)であるときの状況、及びパスが絶対パス(1430)であるときの状況についての様々な利点及び不利な点を描く。
【0354】
オプション1は、シンボリックリンクをシンボリックリンクとして同期させることを含む。これは、シンボリックリンクの同期が幾つかのユーザ又はデバイスに対してシンボリックリンクの無効をレンダリングすることができる場合でさえ、シンボリックリンクをシンボリックリンクとして扱い、パス(1440又は1430)を追跡することなくシンボリックリンク自体を同期させ、ターゲットを同期させることを指す。
【0355】
オプション1において、パス1415が相対パス1440又は絶対パス1430であるときに、シンボリックリンクの同期は、データ整合性(例えば、シンボリックリンクを含む、同期するデータはユーザによって格納されるようなデータを反映する)を確保することができる。また、パス(1415)が相対(1440)又は絶対(1430)のいずれかであるときに、オプション1は、プラットフォーム(例えば、オペレーティングシステム)にわたり一貫性を確保する。
【0356】
プラットフォームにわたる一貫性は、異なるプラットフォーム(例えば、オペレーティングシステム)にわたる、クライアントアプリケーション152の同期ビヘイビア(例えば、クライアント同期サービス156を介して)を指す。例えば、クライアントアプリケーション152が異なるオペレーティングシステム上でホストされるときに、コンテンツの操作又はイベントを検出し、同期をトリガするための機能又はタイミングは、異なってもよい。この変化は、ターゲットが存在する箇所に依存することができ、同様に他の因子によって影響される場合がある。例えば、オプション2ならびに
図15C及び15Dに関して以下にさらに説明されるように、変更を検出し、変更が起こるときに同期をトリガするタイミング又は機能は、変更がターゲットコンテンツアイテム上で起こったかどうか、すなわち、「内部ターゲット」で起こったか、「外部ターゲット」で起こったかに依存するオペレーティングシステム間で異なることができる。
【0357】
内部ターゲットは、コンテンツ管理システム110との同期のために設定される、又は有効にされる、及び/又はコンテンツ管理システム110及び/又はクライアントアプリケーション152に管理及び/又は同期のために利用可能である、クライアントデバイス150上の領域又は位置(例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど)内に含まれるターゲットを指すことができ、そして外部ターゲットは、このような領域又は位置の外側に含まれるターゲットを指すことができる。例えば、コンテンツ管理システム110によって追跡されて同期し、コンテンツ管理システム110においてユーザアカウントについてクライアントデバイス150によって維持されるいずれかの、又はすべてのコンテンツアイテムを含む、クライアントデバイス150上のディレクトリ、ネームスペース又はフォルダは、内部ターゲットであり、このようなディレクトリ、ネームスペース又はフォルダの外側のどんなものでも外部ターゲットである。
【0358】
図示するように、クライアントデバイス150は、コンテンツ管理システム110上でユーザアカウント「Lisa」(図示せず)についてコンテンツアイテムのトップディレクトリとして機能する、ディレクトリ「/Home/」(図示せず)を含むことができる。「/Home/」の内側に格納されるコンテンツアイテムは、コンテンツ管理システム110と同期することができ、「/Home/」の外側に存在するコンテンツアイテムは、コンテンツ管理システム110と同期しないことがある。したがって、ディレクトリ「/Home/」、及び「/Home/」内のどんなものでも、コンテンツ管理システム110によって内部ターゲットとみなされることができる。対照的に、ディレクトリ「/Home/」の外側のどんなものでも、コンテンツ管理システム110によって外部ターゲットとみなされることができる。その結果、この実施例において、フォルダ「/Home/Folder A/」(図示せず)は、内部ターゲットとみなされ、例えば、クライアントデバイス150上の「/」又は「/bin/」(図示せず)に、存在するいずれかのコンテンツアイテム(例えば、フォルダ、ファイルなど)は、外部ターゲットとみなされることができる。
【0359】
オプション1に記述されるプラットフォームにわたる一貫性の概念に戻り参照して、ターゲットが内部ターゲットであるときに、クライアントアプリケーション152は、一般に、内部ターゲットへの変更を検出し、異なるオペレーティングシステムを有するクライアント上で変更が起こる場合に同期をトリガすることができる。したがって、この同期ビヘイビア(すなわち、変更が起こるときにこの変更を検出して同期させる機能)は、プラットフォーム(例えば、オペレーティングシステム)にわたり一貫性がある。しかしながら、以下にさらに記述されるように、同期ビヘイビアは、変更が外部ターゲットで起こるときにプラットフォームによって異なる場合がある。
【0360】
図15Aに示されるシナリオ1500に示されるように、オプション1は、しかしながら、シンボリックリンク又はターゲットに対して無効にされる同期を有するホストにわたり一貫性がないという結果をもたらす場合がある。これは、パス(1415)が相対(1440)又は絶対(1430)であるときに適用される。例えば、シンボリックリンクが「Folder A」(図示せず)を指し、無効にされる(例えば、「Folder A」の同期を選択的に無効にし、同期操作から「Folder A」を除外することによって)クライアントデバイス150への「Folder A」の同期をユーザが有する場合に、「Folder A」がユーザのためにクライアントデバイス150から除去され、コンテンツ管理システム110に、及び/又は他のクライアントデバイスにリモートにのみ格納されることができるので、クライアントデバイス150は、「Folder A」のローカルコピーを格納しない。その結果、「Folder A」を指すシンボリックリンクがクライアントデバイス150に同期するときに、シンボリックリンクは、それがクライアントデバイス150上に存在しないターゲット(すなわち、「Folder A」)を指すので無効である。
【0361】
パスが絶対パス(1430)である場合に、オプション1は、絶対パスが無効であるいずれかのホストについてのホストにわたり一貫性がない結果ももたらすことができる。例えば、
図14に示されるように、シンボリックリンク1410の絶対パス1430は、「/Root/Dir/A/b.txt」においてターゲット1420を指す。シンボリックリンク1410が絶対パス1430(例えば、「/Root/」、「/Dir/」及び/又は「/A/」)中にフォルダ又はディレクトリのうちの1つ以上を含まないクライアントデバイスに同期する場合に、次いで、そのクライアントデバイスにおけるシンボリックリンク1410は、無効である。
【0362】
オプション2は、ターゲットへのシンボリックリンクを追跡し、ターゲットを同期させることを伴う。したがって、オプション2は、実際のターゲット、及びこのターゲットのコンテンツを同期させる。シンボリックリンク1410の実施例において、オプション2は、シンボリックリンク1410の代替にターゲット1420を同期させることを伴う。
【0363】
オプション2において、シンボリックリンクのパスが相対パス(1440)、又は絶対パス(1430)である場合に、同期オプション2は、シンボリックリンクに依存するコンテンツアイテムを破損させる可能性がある。例えば、アプリケーションバンドルは、他のアイテムを指すシンボリックリンクを含むことが多く、有効であるこれらのシンボリックリンクと、それらのターゲットを適切に指すそれらのパスとに依存する。したがって、オプション2において、ターゲットがシンボリックリンクの代替にそのターゲットに同期するときに、そのシンボリックリンクに依存するアプリケーションバンドルは、破損するようになる可能性がある、及び/又はエラーを発生する場合がある。図示するように、多くの異なるオペレーティングシステム及びアプリケーションは、バンドルを使用し、これらのオペレーティングシステム及びアプリケーションについてのコード及びリソースをカプセル化する。これらのバンドルは、編成のためにディレクトリ及びファイルを使用することができ、シンボリックリンクを含むことができる。オプション2がこのシンボリックリンクの代替にシンボリックリンクのターゲットを同期させるときに、シンボリックリンクは、オペレーティングシステム又はアプリケーションがシンボリックリンクを期待してシンボリックリンクを読み出そうとするときにエラーを発生するターゲットのコピーと置換される。これは、オペレーティングシステム又はアプリケーションによって読み出し不可能な、又はアクセス不可能なシンボリックリンクを介して実装されるコード、リソース、及び/又はコンテンツを順にレンダリングすることができる。
【0364】
また、オプション2においてターゲットを同期させることにより、前述されるように、パスが相対又は絶対のいずれかであるときに、大容量ストレージ利用に至る可能性がある。例えば、シンボリックリンクは、ユーザがそのコンテンツをクライアントデバイス上に格納したくはない、又は格納することを意図しない場合があるのに、ターゲットが同期してクライアントデバイス上に格納されることに至らせる場合がある。また、ターゲットの同期は、コンテンツ管理システム110においてユーザアカウントについて、より高いストレージ利用に至らせる可能性があり、ユーザアカウントにより高いコストを、又は他のコンテンツアイテムに限られた可用性をもたらす可能性がある。幾つかの事例において、ターゲットの同期は、ストレージ利用における有意な増加につながる可能性があり、そのうえコンテンツアイテムの重複につながる場合がある。例えば、写真アプリケーションなどの、幾つかのメディアアプリケーションは、それらのライブラリにシンボリックリンクを使用し、ライブラリフォルダ構造を修正する、又はより古いライブラリフォルダ構造を新規の互換性のある構造に変換することができる。ライブラリが同期したディレクトリに存在し、コンテンツ管理システム110によって同期について有効にされる場合に、オプション2により、ライブラリ中のすべてのシンボリックリンクについてのターゲットをデバイスにわたり同期させ、コピーさせることができる。これは、データの重複をもたらす可能性がある。例えば、ターゲットのコンテンツは、それらの実際の位置において、そしてターゲットのシンボリックリンクの位置において、格納され、同期することができる。オプション2を介して同期するターゲットコンテンツのボリュームが大きい、又はターゲットコンテンツアイテムのサイズが大きい(例えば、写真又はビデオによくあるように)場合に、重複したデータは、クライアントデバイスにわたり、またコンテンツ管理システム110におけるユーザアカウント(複数可)上で、ストレージ利用に有意な増加をもたらす可能性がある。
【0365】
相対及び絶対パスの両方について、オプション2は、アクセス、ビュー、及び/又はビヘイビアがユーザアカウント及び/又はデバイス間で異なる、同期非対称ももたらす可能性がある。例えば、第一クライアントがターゲット1420を指す「/Root/」中のシンボリックリンク1410を「/Root/Dir/A/b.txt」に追加し、「/Root/」が第二クライアントに後で同期すると仮定する。シンボリックリンク1410がオプション2に従い、すなわち、ターゲット1420を追跡してターゲット1420(すなわち、「/Root/Dir/A/b.txt」)を同期させることによって、同期する場合に、第二クライアントは、「/Root/Dir/」においてターゲット1420から「b.txt」のコピーを受信し、第一クライアントは、「/Root/Dir/」においてシンボリックリンク1410を有する。したがって、このような非対称ビヘイビアは、同期が完了した後に第一クライアント及び第二クライアントが異なるコンテンツを含むことがある、同期に一貫性がないことを引き起こす可能性がある。さらに、このような同期非対称は、シンボリックリンクのパスが相対パス(1440)又は絶対パス(1430)であるときに発生する可能性がある。
【0366】
さらに、オプション2において、ターゲットの同期は、潜在的なセキュリティ問題を生じさせる可能性がある。潜在的なセキュリティ問題は、ターゲットのコンテンツが他のユーザアカウント又はデバイスに同期するときに、ターゲットが共有するように意図されていない可能性がある、又は機密データを公開する可能性があるときに結果として生じる可能性がある。次の実施例を考慮する。「Folder A」(図示せず)中のシンボリックリンクが「/etc/password」(図示せず)を指し、「Folder A」がコンテンツ管理システム110に後にアップロードされ、他のクライアントデバイスと共有される、及び/又は同期すると仮定する。「Folder A」がユーザアカウント又はクライアントデバイスと共有される、及び/又は同期するときに、「Folder A」中のコンテンツは、「Folder A」中のシンボリックリンクのターゲット「/etc/password」からのコンテンツを含む。しかしながら、コンテンツアイテム「/etc/password」は、機密又はセキュリティアイテムである場合がある。したがって、「Folder A」のコンテンツの部分として「/etc/password」の意図しない共有又は同期は、セキュリティホールを生じる可能性があり、ユーザのコンピュータからデータを抽出する、又はユーザのデータへの認可されていないアクセスを取得するために利用され得る。
【0367】
オプション3において、同期は、シンボリックリンクを単に無視し、シンボリックリンク又はターゲットコンテンツを同期させない。相対及び絶対パスの両方の事例において、このオプションは、プラットフォーム及びホストにわたり、一貫したビヘイビア及びビューを作成することができるが、シンボリックリンクに依存する、又はターゲットコンテンツへのアクセスを必要とするコンテンツアイテムを破損させる場合がある。
【0368】
図15Bは、ターゲット及びシンボリックリンクが異なるネームスペース上に含まれるときにシンボリックリンクを同期させる例示的なシナリオ(1510)のテーブルを示す。シナリオ1510中のオプション1、2、及び3は、相対パス及び絶対パスについてシナリオ1500と同様の利点及び不利な点を有する。しかしながら、加えて、シナリオ1510は、複数のネームスペースにわたるコンテンツによって引き起こされる追加の、潜在的な問題をもたらす。例えば、シンボリックリンクが異なるネームスペース上のターゲットを指す場合に、シンボリックリンクは、異なるネームスペースへのアクセスを有さないユーザ又はデバイスに同期する場合に、無効にすることができ、ターゲットコンテンツは、ユーザ又はデバイスがアクセスできないネームスペース上に存在する場合に、オプション2においてアクセスできない可能性がある。
【0369】
図15Cは、シンボリックリンクのターゲットが内部ターゲットであるときに、シンボリックリンクを同期させるための例示的なシナリオ(1520)のテーブルを示す。
図15Aを参照して前述されるように、内部ターゲットは、コンテンツ管理システム110との同期のために設定される、又は有効にされる、及び/又は管理及び/又は同期のためにコンテンツ管理システム110及び/又はクライアントアプリケーション152に利用可能である、クライアントデバイス150上の領域又は位置(例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど)内に含まれるターゲットを指すことができる。
【0370】
オプション1において、パスが相対パス(1440)又は絶対パス(1430)である場合に、シンボリックリンクの同期は、プラットフォームにわたるデータ整合性及び一貫性を確保することができるが、これらのホストにおいて無効にされる同期を有するターゲットについてのホストにわたり一貫性がないことを引き起こす可能性があり、複数のネームスペースにわたるシンボリックリンクに対して一貫性がない結果をもたらす可能性がある。パスが絶対パスである場合に、オプション1は、パスがホストにおいて無効である場合にこれらのホストにわたり一貫性がない結果ももたらす可能性がある。
【0371】
オプション2において、パスが相対パス(1440)又は絶対パス(1430)である場合に、ターゲットの同期は、プラットフォームにわたる一貫性に至らせることができるが、同期非対称、複数のネームスペースにわたるシンボリックリンクについて潜在的に一貫性がないこと、ならびにバンドルなどの有効であり、機能的であるシンボリックリンクに依存するコンテンツアイテムの破損をもたらす場合がある。加えて、パスが絶対パスである場合に、オプション2は、前に説明されるように、潜在的なセキュリティ問題を生じる可能性がある。
【0372】
オプション3において、パスが相対又は絶対のいずれかであるときに、シンボリックリンクを無視することにより、プラットフォーム及びホストにわたる一貫性をもたらすことができるが、有効であり、機能的であるシンボリックリンクに依存するコンテンツアイテムを破損させる場合がある。
【0373】
図15Dは、シンボリックリンクのターゲットが外部ターゲットであるときにシンボリックリンクを同期させるための例示的なシナリオ(1530)のテーブルを示す。
図15Aを参照して前述されるように、外部ターゲットは、コンテンツ管理システム110との同期のために設定される、又は有効にされる、及び/又はコンテンツ管理システム110及び/又はクライアントアプリケーション152に管理及び/又は同期のために利用可能である、クライアントデバイス150上の領域又は位置(例えば、ディレクトリ、フォルダ、ボリューム、パーティション、ディスクなど)内に含まれないターゲットを指すことができる。
【0374】
オプション1において、パスが相対又は絶対のいずれかであるときに、シンボリックリンクを同期させることにより、データ整合性を確保することができるが、ターゲットへのアクセスを有さないユーザアカウント又はホストに対して無効なリンクをもたらす可能性があり、プラットフォームにわたり一貫性がない結果をもたらす可能性がある。
【0375】
プラットフォームにわたり一貫性がないことは、異なるオペレーティングシステム上に実装されているクライアントアプリケーション152に起因する可能性がある。例えば、LINUX、及びAPPLE INC.によって開発されているMACINTOSHオペレーティングシステム(例えば、macOS、又はMAC OS Xとも称される)などのUNIXベースのオペレーティングシステムにおいて、クライアントアプリケーション152中のクライアント同期サービス156は、外部ターゲットに起こる変更を検出することができ、外部ターゲットが更新されるときに外部ターゲットのコンテンツの同期をトリガすることができる。これは、ターゲットが更新されるときに、ウェブクライアント及び他のクライアントが外部ターゲットの最新のバージョンを有することを意味する。しかしながら、MICROSOFT CORPORATIONによって開発されているWINDOWSベースのオペレーティングシステムにおいて、クライアントアプリケーション152中のクライアント同期サービス156は、外部ターゲットが修正されているときに外部ターゲットへの変更を検出しない場合がある。代替に、クライアント同期サービス156は、クライアントアプリケーション152又はクライアント同期サービス156がホストにおいて再起動されるときに、これらのような変更を検出することができる。したがって、外部ターゲットへの変更の同期は、外部ターゲットが修正されているときに起こらない可能性があるが、後に、クライアントアプリケーション152又はクライアント同期サービス156がホストにおいて再起動されるときに起こることができる。様々な時点で、これは、幾つかのユーザアカウント又はデバイス上のコンテンツ中に一貫性がない結果をもたらすことができ、シンボリックリンク同期が壊れている、又はサポートされていないと一部のユーザが信じることにつながる可能性がある。
【0376】
さらに、同期したシンボリックリンクは、シンボリックリンクが作成されているホスト上でのみ有効であることが保証される。換言すれば、シンボリックリンクは、ターゲットがこれらのホスト中に存在しない可能性がある場合に、一部のホストにおいて無効にすることができる。
【0377】
オプション2において、パスが相対又は絶対のいずれかであるときに、ターゲットの同期は、有効であり機能的であるシンボリックリンクに依存するコンテンツアイテムを破損させ、同期非対称を生じ、そしてプラットフォームにわたり一貫性がない結果をもたらす。ターゲットに絶対パスを使用するシンボリックリンクの事例において、ターゲットの同期は、前に説明されるようにセキュリティリスクにもつながる可能性がある。
【0378】
オプション3において、シンボリックリンクを無視することにより、絶対パス又は相対パスのいずれかのシナリオにおいて、プラットフォーム及びホストにわたる一貫性をもたらすことができる。しかしながら、絶対パス及び相対パスの両方において、シンボリックリンクを無視することにより、シンボリックリンクに依存するいかなるコンテンツアイテムをも破損させる。
【0379】
シナリオ1500、1510、1520、1530に示されるように、シンボリックリンクを同期させるための様々なオプション(1505)があり、これらの様々なオプションは、様々なシナリオに対して異なる利点及び不利な点を有し得る。各事例において、利点及び不利な点は、複数の因子によって影響される。その結果、ルール及び/又は要件は、異なるシナリオにおいてシンボリックリンクの同期をハンドリングするために構成されることができる。幾つかの事例において、これらのルールは、それらが絶対パスを含むか相対パスを含むかどうか、又はどのシナリオが特定の同期シナリオに適用されるかにかかわらず、シンボリックリンクとして常に同期しているシンボリックリンクを要求するように構成されることができる。この要件は、ホスト、プラットフォーム、シナリオなどにわたり一貫性を確保し、シンボリックリンクについて予測可能な結果及びビヘイビアを提供することができる。この同時点で、
図15A~Dに示されるように、このアプローチは、ある特定のシナリオにおいて一貫性がない結果、及びエラーをもたらすことができる。
【0380】
幾つかの事例において、これらのルールは、オプション1505、シナリオ1500、1510、1520、1530に基づくシンボリックリンクについて異なる同期ビヘイビア、シンボリックリンク中のパスのタイプ(例えば、絶対パス1430又は相対パス1440)、及び/又はシナリオ1500、1510、1520、1530に記述される様々な利点及び不利な点を定義するように作成されることができる。例えば、ルールは、すべてのインスタンスに同期する実際のシンボリックリンクを要求するが、シンボリックリンクの同期がシンボリックリンクを壊す/無効にする場合に、影響される1つ以上のユーザアカウントに対して、ユーザ入力を要求するプロンプトをコンテンツ管理システム110が生成することができることを提供し、そしてユーザが同期を許容する、同期を拒否する、シンボリックリンクを修正して同期後にその機能性もしくは有効性を保持することを要求する、又はターゲットへのアクセスを有さないため、シンボリックリンクを使用することができないユーザとターゲットも共有して同期させることを要求することを可能にするように定義されることができる。
【0381】
例えば、ターゲットへのアクセスをも有する1セットのユーザアカウント又はデバイスとシンボリックリンクを同期させている場合に、コンテンツ管理システム110は、シンボリックリンクの同期がシンボリックリンクを壊さない、又は無効にしないと判定し、シンボリックリンクをこれらのユーザアカウントに単純に同期させることができる。他のユーザアカウント又はデバイスと同期するときに無効にすることができるが、それ以外は他のユーザアカウント又はデバイスがターゲットへのアクセスを有する、絶対パスをシンボリックリンクが有する場合に、コンテンツ管理システム110は、シンボリックリンクを作成したユーザアカウントに、シンボリックリンクが他のユーザアカウント又はデバイスに対して機能しないことを通知し、他のユーザアカウント又はデバイスに対してリンクの機能性又は有効性を保持するためにシンボリックリンク中のパスを絶対から相対に変換するかどうかをユーザアカウントに尋ねることができる。ユーザは、同期後にシンボリックリンクの修正がその有効性を保持することを可能にすることができ、コンテンツ管理システム110は、シンボリックリンクの同期したコピーを受信するすべてのユーザアカウント又はデバイスに対して有効である、相対パスに絶対パスを変更することができる。この実施例において他のユーザアカウント又はデバイスがターゲットへのアクセスを既に有することから、シンボリックリンクは、各ユーザアカウント又はデバイスに対して適切に機能し、シンボリックリンクからターゲットにアクセスすることを可能にする。
【0382】
ユーザアカウント又はデバイスがターゲットの同期を無効にした場合に、シンボリックリンクは、パスが相対パスに修正されている場合でも、そのユーザアカウント又はデバイスに対して無効である。この事例において、コンテンツ管理システム110は、ターゲットについての同期がそのユーザアカウント又はデバイスに対して選択的に無効にされているため、シンボリックリンクがそのユーザアカウント又はデバイスに対して機能しないと判定し、このユーザアカウント又はデバイスに対して通知を生成することができる。この通知は、同期がターゲットについて選択的に無効にされている間、シンボリックリンクが機能しないことを示し、ターゲットについての同期設定を修正してターゲットの同期を選択的に有効にするオプションをユーザアカウント又はデバイスに対して提供することができる。ユーザアカウント又はデバイスがターゲットの同期の有効化を許容する場合に、このターゲットは、ユーザアカウント又はデバイスと同期することができ、その後、シンボリックリンクは、適切に機能することができる。
【0383】
ユーザアカウント又はデバイスがターゲットへのアクセスを有さない場合に、コンテンツ管理システム110は、シンボリックリンクをそのアカウント又はデバイスと同期させるが、このシンボリックリンクを作成したユーザアカウント又はデバイス(又はシンボリックリンク及びターゲットの両方へのアクセスを有するいずれかの他のユーザアカウント)に、ターゲットへのアクセスを有さない特定のユーザアカウント又はデバイスに対してシンボリックリンクが無効であることを示す警告を生成することができる。ユーザアカウント又はデバイスは、シナリオ1500、1510、1520、1530に記述されているような、ターゲットがユーザアカウント又はデバイスによってアクセス可能ではない位置(例えば、ネームスペース、外部位置など)に置かれているなどの、複数の理由でターゲットへのアクセスを有さない場合がある。幾つかの事例において、警告は、ターゲットへのアクセスを有さないユーザアカウント又はデバイスとターゲットを共有するオプションも提供することができる。例えば、警告は、特定のユーザアカウント又はデバイスがターゲットへのアクセスを有さないため、シンボリックリンクがシンボリックリンクのコピーを受信する特定のユーザアカウント又はデバイスに対して無効であることを示し、このターゲットを特定のユーザアカウント又はデバイスと共有するオプションを提供することができる。警告を受信し、ユーザがターゲットを特定のユーザアカウント又はデバイスと共有することを可能にするパーミッションを有する、そのユーザがターゲットを特定のユーザアカウント又はデバイスと共有することを許容する場合に、コンテンツ管理システム110は、シンボリックリンク及びターゲットの両方を特定のユーザアカウント又はデバイスと順に同期させることができる。これは、シンボリックリンクがその特定のユーザアカウント又はデバイスに対して有効であることを順に確保することができる。
【0384】
特定のユーザアカウント又はデバイスに対して有効ではない絶対パスをシンボリックリンクが含むため、ターゲットをその特定のユーザアカウント又はデバイスに同期させた後に、シンボリックリンクがその特定のユーザアカウント又はデバイスに対してまだ無効であるとコンテンツ管理システム110が判定する場合に、次いで、コンテンツ管理システム110は、シンボリックリンク中のパスを絶対パスから、同期したコンテンツアイテムの構造内で機能する相対パスに修正するためのオプションを警告中にさらに含むことができる。
【0385】
図16は、コンピューティングシステム1600の実施例を示し、このコンピューティングシステムは、クライアントデバイス150、コンテンツ管理システム110又はそれらのいずれかのコンポーネントを構成する、例えば、いずれかのコンピューティングデバイスであることができ、このシステムのこれらのコンポーネントは、接続1605を使用して互いに通信する。接続1605は、バスを介する物理的な接続、又はチップセットアーキテクチャなどの、プロセッサ1610中に直接接続であることができる。また、接続1605は、仮想接続、ネットワーク化された接続、又は論理接続であることができる。
【0386】
幾つかの実施形態において、コンピューティングシステム1600は、本開示に記述される機能が1つのデータセンター、複数のデータセンター、ピアネットワークなどの内に分散されることができる分散システムである。幾つかの実施形態において、記述されたシステムのコンポーネントのうちの1つ以上は、コンポーネントが記述されている機能のうちの幾つか、又はすべてを各実行する、多くのこれらのようなコンポーネントを表す。幾つかの実施形態において、これらのコンポーネントは、物理デバイス又は仮想デバイスであることができる。
【0387】
例示的なシステム1600は、少なくとも1つの処理ユニット(CPU又はプロセッサ)1610、ならびに読み出し専用メモリ(ROM)1620及びランダムアクセスメモリ(RAM)1625などのシステムメモリ1615を含む様々なシステムコンポーネントをプロセッサ1610に結合する接続1605を備える。コンピューティングシステム1600は、プロセッサ1610の部分と、直接に、近接して、又は統合されて、接続される高速メモリ1612のキャッシュを含むことができる。
【0388】
プロセッサ1610は、いずれかの汎用プロセッサ、ならびにストレージデバイス1630に格納され、プロセッサ1610を制御するように構成されるサービス1632、1634、及び1636などのハードウェアサービス又はソフトウェアサービスだけではなく、ソフトウェア命令が実際のプロセッサ設計中に組み込まれる専用プロセッサをも含むことができる。プロセッサ1610は、本質的に、複数のコア又はプロセッサ、1つのバス、メモリコントローラ、キャッシュなどを含む、完全に自己完結型コンピューティングシステムであることができる。マルチコアプロセッサは、対称又は非対称であることができる。
【0389】
ユーザインタラクションを可能にするために、コンピューティングシステム1600は、入力デバイス1645を含み、この入力デバイスは、音声用のマイクロフォン、ジェスチャ又はグラフィカル入力用のタッチパネル、キーボード、マウス、モーション入力、音声などのような、いずれかの数の入力メカニズムを表すことができる。また、コンピューティングシステム1600は、出力デバイス1635を含むことができ、この出力デバイスは、当業者に知られている複数の出力メカニズムのうちの1つ以上であることができる。幾つかの例において、マルチモーダルシステムは、コンピューティングシステム1600と通信する複数のタイプの入力/出力をユーザが提供することを可能にする。コンピューティングシステム1600は、通信インタフェース1640を含むことができ、この通信インタフェースは、ユーザ入力及びシステム出力を一般的に規制し、管理することができる。いずれかの特定のハードウェア配置上の操作に制約がないため、本明細書における基本機能は、それらが開発されているような改善されたハードウェア又はファームウェア配置の代わりに容易に使用されることができる。
【0390】
ストレージデバイス1630は、不揮発性メモリデバイスであることができ、ハードディスク、又はコンピュータによってアクセス可能であるデータを格納することができる、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタルバーサタイルディスク、カートリッジ、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、及び/又はこれらのデバイスの幾つかの組み合わせのような、他のタイプのコンピュータ可読媒体であることができる。
【0391】
ストレージデバイス1630は、ソフトウェアサービス、サーバ、サービスなどを含むことができ、このようなソフトウェアを定義するコードがプロセッサ1610によって実行されるときに、そのコードがシステムに機能を実行させる。幾つかの実施形態において、特定の機能を実行するハードウェアサービスは、この機能を実行する、プロセッサ1610、接続1605、出力デバイス1635などのような、必要なハードウェアコンポーネントと関連するコンピュータ可読媒体に格納されるソフトウェアコンポーネントを含むことができる。
【0392】
説明の明確さのために、幾つかの例において、本技術は、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせに具体化される方法において、デバイス、デバイスコンポーネント、ステップ又はルーチンを有する機能ブロックを含む個々の機能ブロックを備えるように提示されることができる。
【0393】
本明細書に記述されるステップ、操作、機能、又はプロセスのいずれかは、ハードウェア及びソフトウェアサービスの組み合わせ、もしくはサービス単独で、又は他のデバイスと組み合わせて実行される、又は実装されることができる。幾つかの実施形態において、サービスは、クライアントデバイスのメモリ、及び/又はコンテンツ管理システムの1つ以上のサーバに存在するソフトウェアであり、プロセッサがサービスと関連するソフトウェアを実行するときに1つ以上の機能を実行することができる。幾つかの実施形態において、サービスは、特定の機能を実行するプログラム又はプログラムコレクションである。幾つかの実施形態において、サービスは、サーバとみなされることができる。メモリは、非一時的なコンピュータ可読媒体であることができる。
【0394】
幾つかの実施形態において、コンピュータ可読ストレージデバイス、媒体、及びメモリは、ビットストリーム及び同様のものを有するケーブル又は無線信号を含むことができる。しかしながら、言及されるときに、非一時的なコンピュータ可読記憶媒体は、エネルギー、搬送信号、電磁波、及び信号自体を明確に除外する。
【0395】
上述される実施例による方法は、格納される、又はその他の方法によりコンピュータ可読媒体から利用可能である、コンピュータ実行可能命令を使用して、実装されることができる。これらのような命令は、例えば、汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスに、ある特定の機能、もしくは機能群を実行させる、又はその他の方法により汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスがある特定の機能、もしくは機能群を実行するように設定する、命令及びデータを含むことができる。使用されているコンピュータリソースの部分は、ネットワーク経由でアクセス可能である。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式命令、ファームウェア、又はソースコードであり得る。命令、使用される情報、及び/又は記述された実施例に従う方法中に作成される情報を格納するために使用されることができるコンピュータ可読媒体の実施例は、磁気又は光ディスク、ソリッドステートメモリデバイス、フラッシュメモリ、不揮発性メモリによって提供されるUSBデバイス、ネットワーク化されたストレージデバイスなどを含む。
【0396】
これらの開示に従う方法を実装するデバイスは、ハードウェア、ファームウェア及び/又はソフトウェアを含むことができ、様々なフォームファクタのいずれかを取ることができる。これらのようなフォームファクタの典型的な実施例は、サーバ、ラップトップ、スマートフォン、スモールフォームファクタパーソナルコンピュータ、パーソナルデジタルアシスタントなどを含む。また、本明細書に記述される機能性は、周辺機器又はアドインカードに具体化されることができる。また、このような機能性は、さらなる実施例として、異なるチップ間回路基板、又は単一のデバイス中で実行する異なるプロセスに実装されることができる。
【0397】
これらの命令、これらのような命令を伝えるための媒体、それらを実行するためのコンピューティングリソース、及びこれらのようなコンピューティングリソースをサポートするための他の構造は、これらの開示に記述される機能を提供するための手段である。
【0398】
様々な実施例及び他の情報を使用して、添付の特許請求の範囲内で態様を説明したが、特許請求の範囲の制限は、当業者がこれらの実施例を使用して多種多様な実施態様を導出することができる場合に、これらのような実施例における特定の特徴又は配置に基づき黙示的に伝えられるべきではない。さらに、ある発明の主題が構造的特徴及び/又は方法ステップの実施例に特有の言語で記述されている場合があるが、添付の特許請求の範囲に定義されている本発明の主題がこれらの記述された特徴また行為に必ずしも限定されないことを理解するであろう。例えば、このような機能性は、本明細書において特定されている構成要素以外の構成要素に、異なるように分散される、又は実行されることができる。むしろ、記述された特徴及びステップは、添付の特許請求の範囲内でシステム及び方法の構成要素の実施例として開示されている。