(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-18
(45)【発行日】2022-05-26
(54)【発明の名称】クライアント同期サービスのためのリモートツリーの更新
(51)【国際特許分類】
G06F 16/178 20190101AFI20220519BHJP
【FI】
G06F16/178
(21)【出願番号】P 2020529761
(86)(22)【出願日】2018-12-10
(86)【国際出願番号】 US2018064670
(87)【国際公開番号】W WO2019133229
(87)【国際公開日】2019-07-04
【審査請求日】2020-06-17
(32)【優先日】2018-01-05
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-12-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-01-05
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】509117964
【氏名又は名称】ドロップボックス, インコーポレイテッド
(74)【代理人】
【識別番号】110003281
【氏名又は名称】特許業務法人大塚国際特許事務所
(74)【代理人】
【識別番号】100076428
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100177390
【氏名又は名称】大出 純哉
(72)【発明者】
【氏名】イン, ロバート
(72)【発明者】
【氏名】コオラパティ, ニプン
(72)【発明者】
【氏名】グプタ, ガウタム
【審査官】松尾 真人
(56)【参考文献】
【文献】特開2016-181250(JP,A)
【文献】特表2008-541263(JP,A)
【文献】特表2017-529625(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
それぞれのステップがクライアントデバイスにより
実行される、コンピュータで実施される方法であって、
前記コンピュータで実施される方法は、
コンテンツ管理システムから操作データを受信することであって、前記操作データは操作ログを含む、前記受信することと、
前記コンテンツ管理システム上に格納されるコンテンツアイテムの状態を示すリモートツリーを前記操作ログと比較して、前記リモートツリー
を最新にするために適用される前記操作ログのサブセットを決定することと、
前記操作ログの前記サブセットを実行することと、
前記操作ログ
のサブセットの実行に基づき、
前記リモートツリーを更新することと、
前記リモートツリーと同期ツリーとの間の差異に基づき、前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態とが同期していないと判定することであって、前記同期ツリーが、前記リモートツリーに関連付けられた状態とローカルツリーに関連付けられた状態との間の差異を表し、前記ローカルツリーが、前記クライアントデバイス上に格納されるコンテンツアイテムについての状態を示す、前記判定することと、
前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態との間の前記差異に基づき、前記リモートツリーに関連付けられた状態及び前記ローカルツリーに関連付けられた状態を収束させるように設定される操作セットを生成することと、
前記操作セットの実行を管理することと、
を備える、コンピュータで実施される方法。
【請求項2】
カーソルを前記コンテンツ管理システムに送信することをさらに備え、前記カーソルは
、前記操作ログ中の最後に受信したエントリ識別子であ
り、前記操作ログのどの部分を前記クライアントデバイスへ送信するかを判定するために用いられる、請求項1に記載のコンピュータで実施される方法。
【請求項3】
前記操作データは、複数のネームスペースにわたり線形化された
複数の操作を備え
、前記複数の線形化された操作は正しいシーケンスに順序付けされている、請求項1に記載のコンピュータで実施される方法。
【請求項4】
前記操作データは、ネームスペースについてのリビジョンデータを備える、請求項1に記載のコンピュータで実施される方法。
【請求項5】
前記リモートツリー及び前記同期ツリーは、クライアントデバイスに格納される、請求項
1に記載のコンピュータで実施される方法。
【請求項6】
前記コンテンツ管理システムから、リモートツリー中に表される既存のネームスペース内にターゲットネームスペースをマウントするためのマウント通知を受信することと、
前記コンテンツ管理システムから、前記ターゲットネームスペースについての操作ログの
第1の部分を受信することと、
前記操作ログの前記
第1の部分に基づき前記ターゲットネームスペースについてのサブツリーを構築することと、
前記ターゲットネームスペースについての前記サブツリーを前記リモートツリーのマウント位置にマウントすることと、
をさらに備える、請求項1に記載のコンピュータで実施される方法。
【請求項7】
前記操作ログの前記
第1の部分は、前記コンテンツ管理システムによって検出されるマウント操作についてのカーソル
において、第1のデータに対する前記操作ログの開始によって
区切られ、前記カーソルは前記操作ログにおける最後に受信したエントリの識別子であり、前記操作ログのどの部分を前記クライアントデバイスに送信するかを判定するために用いられる、請求項
6に記載のコンピュータで実施される方法。
【請求項8】
前記ターゲットネームスペースについての前記サブツリーは、前記操作ログの前記
第1の部分を処理して前記サブツリーを構築した後にマウントされる、請求項
6に記載のコンピュータで実施される方法。
【請求項9】
前記コンテンツ管理システムから、前記ターゲットネームスペースについてのマウント操作を受信することであって、前記マウント操作は既存のネームスペースと関連付けられ、前記既存のネームスペース中で前記マウント位置を指定する、前記受信すること、
をさらに備え、
前記ターゲットネームスペースは前記マウント操作に応答して前記マウント位置にマウントされる、
請求項
6に記載のコンピュータで実施される方法。
【請求項10】
命令を含むコンピュータプログラムであって、
前記命令は、コンピューティングシステムによって実行されるときに、前記コンピューティングシステムに、
コンテンツ管理システムから操作データを受信することであって、前記操作データは操作ログを含む、前記受信することと、
前記コンテンツ管理システム上に格納されるコンテンツアイテムの状態を示すリモートツリーを前記操作ログと比較して、前記リモートツリー
を最新にするために適用される前記操作ログのサブセットを決定することと、
前記操作ログの前記サブセットを実行することと、
前記操作ログ
のサブセットの実行に基づき、
前記リモートツリーを更新することと、
前記リモートツリーと同期ツリーとの間の差異に基づき、前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態とが同期していないと判定することであって、前記同期ツリーが、前記リモートツリーに関連付けられた状態とローカルツリーに関連付けられた状態との間の差異を表し、前記ローカルツリーが、前記コンピューティングシステム上に格納されるコンテンツアイテムについての状態を示す、前記判定することと、
前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態との間の前記差異に基づき、前記リモートツリーに関連付けられた状態及び前記ローカルツリーに関連付けられた状態を収束させるように設定される操作セットを生成することと、
前記操作セットの実行を管理することと、
を行わせる、コンピュータプログラム。
【請求項11】
前記命令は、前記コンピューティングシステムに、カーソルを前記コンテンツ管理システムに送信することをさらに行わせ、前記カーソルは
、前記操作ロ
グ中の最後に受信したエントリ識別子であ
り、前記操作ログのどの部分を前記コンピューティングシステムへ送信するかを判定するために用いられる、請求項
10に記載のコンピュータプログラム。
【請求項12】
前記操作データは、複数のネームスペースにわたり線形化された
複数の操作を備え
、前記複数の線形化された操作は正しいシーケンスに順序付けされている、請求項
10に記載のコンピュータプログラム。
【請求項13】
前記操作データは、ネームスペースについてのリビジョンを備える、請求項
10に記載のコンピュータプログラム。
【請求項14】
システムであって、
少なくとも1つのプロセッサと、
命令を格納するコンピュータ可読媒体であって、前記命令が前記少なくとも1つのプロセッサによって実行されるときに、前記少なくとも1つのプロセッサに、
コンテンツ管理システムから操作データを受信することであって、前記操作データは操作ログを含む、前記受信することと、
前記コンテンツ管理システム上に格納されるコンテンツアイテムの状態を示すリモートツリーを前記操作ログと比較して、前記リモートツリー
を最新にするために適用される前記操作ログのサブセットを決定することと、
前記操作ログの前記サブセットを実行することと、
前記操作ログ
のサブセットの実行に基づき、
前記リモートツリーを更新することと、
前記リモートツリーと同期ツリーとの間の差異に基づき、前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態とが同期していないと判定することであって、前記同期ツリーが、前記リモートツリーに関連付けられた状態とローカルツリーに関連付けられた状態との間の差異を表し、前記ローカルツリーが、前記システム上に格納されるコンテンツアイテムについての状態を示す、前記判定することと、
前記リモートツリーに関連付けられた状態と前記同期ツリーに関連付けられた状態との間の前記差異に基づき、前記リモートツリーに関連付けられた状態及び前記ローカルツリーに関連付けられた状態を収束させるように設定される操作セットを生成することと、
前記操作セットの実行を管理することと、
を行わせる、コンピュータ可読媒体、
を備える、システム。
【請求項15】
前記命令は、前記少なくとも1つのプロセッサに、カーソルを前記コンテンツ管理システムに送信することをさらに行わせ、
前記カーソルは、前記操作ログ中の最後に受信したエントリ識別子であり、前記操作ログのどの部分を前記システムへ送信するかを判定するために用いられる、請求項
14に記載のシステム。
【請求項16】
前記操作データは、複数のネームスペースにわたり線形化された
複数の操作を備え
、前記複数の線形化された操作は正しいシーケンスに順序付けされている、請求項
14に記載のシステム。
【請求項17】
前記操作データは、ネームスペースについてのリビジョンデータを備える、請求項
14に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本出願は、2018年1月5に出願された米国非仮出願第15/863,751号、2018年1月5日に出願された米国非仮出願第15/863,748号、及び2017年12月28日に出願された米国仮出願第62/611,473号に優先権を主張し、これらのすべては、その全体が本明細書に参照により明示的に援用される。
【0002】
コンテンツ管理システムは、ユーザがネットワークを使用して複数のデバイスにわたりコンテンツアイテムにアクセスし、これらを管理することを可能にする。いくつかのコンテンツ管理システムは、ユーザがコンテンツアイテムを共有することを可能にし、これらのコンテンツアイテムを使用してコラボレーションする際にユーザを支援する追加の特徴を提供することができる。コンテンツ管理システムは、コンテンツアイテムをサーバ上に一般的に格納し、ユーザがネットワーク経由でこれらのコンテンツアイテムにアクセスすることを可能にする。また、いくつかのコンテンツ管理システムは、より自然なインタフェース中のコンテンツアイテム(例えば、ネイティブアプリケーション、またはクライアントデバイスのファイルシステム内の)へのより高速なアクセスをユーザに提供するために、ローカルコピーをクライアントデバイス上に格納することを可能にする。加えて、これにより、ユーザがオフラインであるときに、ユーザがコンテンツアイテムへのアクセスを有することが可能である。コンテンツ管理システムは、複数のクライアントデバイス、及びサーバにわたりコンテンツアイテムのコピーを同期させることを試行するため、各コピーは、同一である。しかしながら、コンテンツアイテムの同期は、困難であり、複数の技術的な障害と関連している。
【0003】
本技術の上記に列挙されている利点及び特徴、ならびに他の利点及び特徴は、添付の図面に示される具体的な実施態様によって明らかになるであろう。これらの図面は実施例を示すに過ぎず、本技術の範囲をこれらの実施例に限定しないことを当業者は理解するであろう。さらに、当業者は、添付の図面の使用を通じて追加の特殊性及び詳細が記述され、説明される通りに、本技術の原理を理解する。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、コンテンツ管理システム及びクライアントデバイスの実施例を示す。
【
図2】いくつかの実施形態による、クライアント同期サービスの実施例を示す。
【
図3】さまざまな実施形態による、ツリーデータ構造の実施例を示す。
【
図4】さまざまな実施形態による、ツリーデータ構造の実施例を示す。
【
図5】本技術のさまざまな実施形態による、ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させる例示的な方法を示す。
【
図6】本技術のさまざまな実施形態による、ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させるときに競合を解消する例示的な方法を示す。
【
図7】さまざまな実施形態による、追加操作についてのルール違反を図示するツリーデータ構造の実施例を示す。
【
図8】本技術のさまざまな実施形態による、サーバ状態及びファイルシステム状態をインクリメンタルに収束させる例示的な方法を示す。
【
図9】さまざまな実施形態による、ツリーデータ構造の実施例を示す。
【
図11】本技術のさまざまな実施形態による、2つの操作プランの例示的なベン図表現を示す。
【
図12】本技術のさまざまな実施形態による、操作プランにおける変更を管理する例示的な方法を示す。
【
図13】本技術のさまざまな実施形態による、例示的なシナリオを示す。
【
図14】本技術のさまざまな実施形態による、ローカルツリーを更新する例示的な方法を示す。
【
図15】本技術のさまざまな実施形態による、移動またはリネーム操作に応答してローカルツリーを更新する例示的な方法を示す。
【
図16】さまざまな実施形態による、ツリーデータ構造の実施例を示す。
【
図17】さまざまな実施形態による、ネームスペースをマウントする概念図を示す。
【
図18】本技術のさまざま実施形態による、リモートツリーにネームスペースをマウントする例示的な方法を示す。
【
図19A】本技術のさまざま実施形態による、コンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャの概略図を示す。
【
図19B】本技術のさまざまな実施形態による、コンテンツ管理システムとクライアントデバイスとの間でコンテンツを同期させる例示的なアーキテクチャにおいて、コンテンツアイテムのブロックを格納して追跡するための例示的なコンフィグレーションを示す。
【
図19C】本技術のさまざまな実施形態による、コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間でファイルジャーナルインタフェースによって処理される例示的な通信の図を示す。
【
図19D】本技術のさまざまな実施形態による、コンテンツ管理システム上でクライアントデバイスとサーバファイルジャーナルとの間で通信を変換するための例示的なプロセスの図を示す。
【
図20A】本技術のさまざまな実施形態による、サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。
【
図20B】本技術のさまざまな実施形態による、クライアントデバイスからの操作をサーバファイルジャーナルについてのリビジョンに変換するための例示的な変換及び線形化プロセスの図を示す。
【
図20C】コンテンツ管理システム上のサーバファイルジャーナルからのリビジョンをクライアントデバイスについての操作に変換する例示的な方法を示す。
【
図21】本技術のさまざまな実施形態による、ネームスペース間操作の例示的な線形化を示す。
【
図22】本技術のさまざまな実施形態による、イベントのために計算されるランポートクロックによって順序付けされるネームスペースにわたるイベントの図を示す。
【
図23】本技術のある特定の態様を実装するためのシステムの実施例を示す。
【発明を実施するための形態】
【0005】
本技術のさまざまな実施例は、以下に詳細に考察される。具体的な実施態様を考察するが、これが例示目的のみのために行われていることを理解するであろう。当業者は、本技術の趣旨及び範囲から逸脱することなく他の構成要素及び構成を使用することができることを認識するであろう。
【0006】
コンピューティング及びネットワーキング技術におけるさまざまな進歩により、コンテンツ管理システムが複数のデバイスにわたるコンテンツアイテムへのアクセスをユーザに提供することが可能である。これらのコンテンツアイテムは、ファイル、ドキュメント、メッセージ(例えば、電子メールメッセージまたはテキストメッセージ)、メディアファイル(例えば、写真、ビデオ、及びオーディオファイル)、複数のファイルを有するフォルダ、またはいずれかの他のコンテンツユニットを含むことができるが、これらに限定されない。コンテンツアイテムは、複数のユーザと共有される、編集される、削除される、追加される、リネームされる、または移動し得る。しかしながら、いくつかのコンピューティングデバイス(例えば、サーバ及びクライアントデバイス)にわたり、そしていくつかのユーザアカウントにわたり、これらのコンテンツアイテムを同期させることにより、不具合が残り、技術的な障害が広まっている。
【0007】
技術的な障害の一部を図示するよう、第一マシン(例えば、クライアントデバイスまたはサーバ)は、ユーザがコンテンツ管理システムによって管理されるコンテンツアイテムを修正した方法についての情報を提供する通信を、第二マシンに送信することができる。第一マシン上のコンテンツアイテムに実行されるアクションが第二マシンのコンテンツアイテムに反映され、第一マシン上のコンテンツアイテムが第二マシン上のコンテンツアイテムと実質的に同一であるように、これらの通信を第二マシンが使用して、コンテンツアイテムを第二マシン上で同期させることができる。
【0008】
しかしながら、送信されるいくつかの通信があり得、これらの通信を送信するために使用される1つ以上のネットワーク、第一もしくは第二マシンの技術的な操作、またはいくつかの他の理由によって使用される、さまざまなネットワークルーティングプロトコルの結果として、これらの通信を順不同に受信する場合がある。さらに、ユーザは、多数の修正を多数のコンテンツアイテムに実行して、以前の修正を短時間に取り消す、または追加の修正を以前に修正されたコンテンツアイテム、もしくはコンテンツアイテムのセットに迅速に実行する場合がある。これは、これらの通信が順不同に受信される、ある特定の通信が古い、または第二マシンが最新ではないコンテンツアイテム上で操作を実行する尤度を増加させる。結果として、多くの操作は、コンテンツアイテムの現在の状態と互換性がない場合がある。実際に、いくつかの操作が他の操作と、またはコンテンツアイテムの現在の状態と競合しているかどうかを検出することさえ困難である可能性がある。
【0009】
加えて、同期アクションに関して固有のレイテンシがある。例えば、第一マシン上で行われるこれらのアクションを第一マシンが最初に検出し、通信を生成した後に、ネットワークを介して送信する。以前の通信をまだ処理している可能性がある第二マシンが通信を受信して、処理し、通信に詳述されるアクションを第二マシンにおいて行う可能性がある。この例示的なシナリオにおいて、第一マシン、第二マシン、及びネットワークの限られたコンピューティングリソース(例えば、帯域幅、メモリ、処理時間、処理サイクルなど)によってレイテンシがもたらされる、いくつかのポイントがある。レイテンシが増加すると、通信が何らかの理由でコンテンツアイテムの現在の状態と競合する尤度も増加する。さらに、これらの競合した通信を処理して、そのうえ競合を解消することにより、処理時間、メモリ、エネルギー、または帯域幅などのコンピューティングリソースを不必要に消費し、さらにレイテンシを増加させる。
【0010】
事態をさらに複雑にするように、第二マシン、及び/またはコンテンツアイテムへのアクセスを有する追加のマシン上の同一の、または異なるユーザも、コンテンツアイテムへの修正を実行している場合がある。結果として、上記の問題が増幅する可能性があり、ローカルアクションがリモートアクションと競合するかどうか、及び/またはローカルアクションが最新のコンテンツアイテム上で動作しているかどうかについて、さらなる技術的な問題が発生する。
【0011】
開示された技術は、上記の、及び他の技術的な問題への技術的な解決策を提供するコンテンツ管理システム対するクライアント同期サービスについての当該技術における必要性に対処する。クライアント同期サービスは、クライアントデバイス上で動作し、コンテンツ管理システムのサーバ上のコンテンツアイテムと、クライアントデバイス上の対応するコンテンツアイテムとの間の同期ミスマッチを識別するように設定されることができる。各同期ミスマッチについて、クライアント同期サービスは、コンテンツアイテムを同期させ、これらの操作を開始するために必要とされる操作を識別することができる。
【0012】
クライアント同期サービスは、サーバ上でのコンテンツアイテムのステータス、クライアントデバイス上でのコンテンツアイテムのステータス、及び1セットのツリーデータ構造(「ツリー」)を使用するそれらの同期状態を追跡することができる。いくつかの実施形態により、3つのツリーの1セットを使用することができる。これらの3つのツリーは、サーバ状態を表すリモートツリー、クライアントデバイス上でのファイルシステム状態を表すローカルツリー、ならびにこれらのローカルツリー及びリモートツリーについてマージベースを表す同期ツリーを含むことができる。マージベースは、ローカルツリー及びリモートツリーの共通祖先、またはローカルツリーとリモートツリーとの間の最後の既知の同期状態と考えられることができる。その結果、クライアント同期サービスは、3つのツリー(例えば、リモートツリー、同期ツリー、及びローカルツリー)すべてが同一であるときに、サーバ状態及びクライアントデバイス状態が同期すると判定することができる。
【0013】
コンテンツアイテムのサーバ状態、またはコンテンツアイテムのクライアントデバイスファイルシステム状態(「ファイルシステム状態」)への修正を検出するときに、クライアント同期サービスは、適切なツリーを更新し、サーバ状態及びファイルシステム状態がツリーの3つの組に基づき同期しているかどうかを判定する。これらのツリーのうちの1つへの更新に基づき、サーバ状態及びファイルシステム状態は、同期するようになる、同期しないようになる、またはさらに同期しないようになる場合がある。サーバ状態及びファイルシステム状態が同期していない場合に、クライアント同期サービスは、サーバ状態及びファイルシステム状態を収束させ、サーバ状態及びファイルシステム状態が同期した状態にさらに近くなるために必要とされる最初の少なくとも1つの操作セットを識別することができる。
【0014】
サーバ状態及びファイルシステム状態を監視するためにツリーデータ構造のセットに依存することによって、コンピューティング技術に根付いている代替物及び/または解決策をさまざまな技術的な問題に提供する。例えば、クライアント同期サービスは、サーバ状態及びファイル状態を追跡し、これら2つの状態のマージベースの表現を格納することができる。結果として、本技術のさまざまな実施形態は、ユーザがリモートにコンテンツアイテムを修正している方法を特定する複数の通信を受信することと関連する技術的な問題、ならびにこれらの修正がローカルに実装されるのはどの順序か、修正が他の修正と競合するか、古いかどうか、及びリモート修正がユーザによってローカルに実行されるローカル修正と競合するかどうかを判定する技術的な問題を回避する。関連するさまざまなアクター(例えば、サーバ及びクライアントデバイス)の状態を追跡することができないという、そしてこれらの状態が同期しているかどうかを迅速に判定することができないという、これらの問題の多くは、他の解決策から発生する。代替に、これらの他の解決策は、サーバ状態及びファイルシステム状態が同期しているかどうかのコンテキストなしで、ローカルにコンテンツアイテムを修正する方法についての命令を受信することに依存している。
【0015】
さらに、サーバ状態及びファイルシステム状態が連続して監視されていることから、それらが同期しているかどうかを判定することは、プロシージャの複雑さ、ならびに計算時間及びリソースの点からさらにより効率的である。以下にさらに詳細に説明されているように、クライアント同期サービスは、さらに決定論的な方式におけるサーバ状態及びファイルシステム状態のインクリメンタルな、また系統的な同期を可能にする。結果として、コンテンツ管理システムの特徴のスケーリング及びテストも、さらに効率的になる。
【0016】
コンテンツ管理システム
いくつかの実施形態において、開示されている科学技術は、とりわけ、コンテンツアイテム同期機能及びコラボレーション特徴を有するコンテンツ管理システムのコンテキストに展開される。例示的なシステムコンフィグレーション100は、クライアントデバイス150とインタラクトするコンテンツ管理システム110を描く、
図1Aに示される。
【0017】
アカウント
コンテンツ管理システム110は、アカウントと関連するコンテンツアイテムを格納し、コンテンツアイテム(複数可)を取得する、修正する、閲覧する、及び/または共有するなどの、さまざまなコンテンツアイテム管理タスクを実行することができる。さらに、コンテンツ管理システム110は、アカウントが複数のクライアントデバイスからコンテンツアイテム(複数可)にアクセスすることを可能にすることができる。
【0018】
コンテンツ管理システム110は、複数のアカウントをサポートする。エンティティ(ユーザ、ユーザグループ、チーム、会社など)は、コンテンツ管理システムによってアカウントを作成することができ、アカウント詳細は、アカウントデータベース140に格納されることができる。アカウントデータベース140は、登録されたエンティティについてのプロファイル情報を格納することができる。いくつかの事例において、登録されたエンティティについてのプロファイル情報は、ユーザ名及び/または電子メールアドレスを含む。アカウントデータベース140は、アカウントタイプ(例えば、無料のアカウント、または有料のアカウントのさまざまなティア)、割り振られるストレージスペース、使用されるストレージスペース、それらの上に常駐する登録されたコンテンツ管理クライアントアプリケーション152を含むクライアントデバイス150、セキュリティ設定、パーソナルコンフィグレーション設定などのような、アカウント管理情報を含むことができる。
【0019】
アカウントデータベース140は、エンティティと関連するアカウントグループを格納することができる。グループは、グループポリシー及び/またはアクセス制御リストに基づくパーミッションを有することができ、これらのグループのメンバーは、これらのパーミッションを継承することができる。例えば、マーケティンググループは、1セットのコンテンツアイテムへのアクセスを有することができ、エンジニアリンググループは、別の1セットのコンテンツアイテムへのアクセスを有することができる。管理者グループは、グループを修正すること、ユーザアカウントを修正することなどができる。
【0020】
コンテンツアイテムストレージ
コンテンツ管理システム110の特徴は、コンテンツストレージ142に格納されることができる、コンテンツアイテムのストレージである。コンテンツアイテムは、ドキュメント、コラボレーションコンテンツアイテム、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、ウェブページ、実行可能ファイル、バイナリファイルなどのような、いずれかのデジタルデータであり得る。また、コンテンツアイテムは、フォルダ、zipファイル、プレイリスト、アルバムなどのような、異なるビヘイビアと共にコンテンツアイテムをグループ化するためのコレクションまたは他のメカニズムを含むことができる。コレクションは、フォルダ、または共通属性によって関連する、またはグループ化される複数のコンテンツアイテムを指すことができる。いくつかの実施形態において、コンテンツストレージ142を他のタイプのストレージまたはデータベースと組み合わせ、特定の機能をハンドリングする。コンテンツストレージ142は、コンテンツアイテムを格納し、これらのコンテンツアイテムについてのメタデータは、メタデータデータベース146に格納されることができる。同様に、コンテンツアイテムをコンテンツストレージ142に格納する位置についてのデータを、コンテンツディレクトリ144に格納することができる。加えて、変更、アクセスなどについてのデータをサーバファイルジャーナル148に格納することができる。コンテンツストレージ142、コンテンツディレクトリ144、サーバファイルジャーナル148、及びメタデータデータベース146のような、さまざまなストレージ/データベースのそれぞれは、1つより多いこれらのようなストレージまたはデータベースから構成されることができ、多くのデバイス及び位置上に分散されることができる。他のコンフィグレーションも可能である。例えば、コンテンツストレージ142、コンテンツディレクトリ144、サーバファイルジャーナル148、及び/またはメタデータデータベース146からのデータは、1つまたは複数のコンテンツストレージもしくはデータベースに統合される、または追加のコンテンツストレージもしくはデータベースにさらにセグメント化されることができる。したがって、コンテンツ管理システム110は、
図1に示されるものより多い、または少ないストレージ及び/またはデータベースを含むことができる。
【0021】
いくつかの実施形態において、コンテンツストレージ142は、少なくとも1つのコンテンツストレージサービス116と関連付けられ、少なくとも1つのコンテンツストレージサービスは、ストレージ用のコンテンツアイテムを受信すること、ストレージ用のコンテンツアイテムを準備すること、コンテンツアイテム用のストレージ位置を選択すること、コンテンツアイテムをストレージから取得することなどを含むが、これらに限定されない、コンテンツアイテムのストレージを管理するために、ソフトウェアまたは他のプロセッサ実行可能命令を含む。いくつかの実施形態において、コンテンツストレージサービス116は、コンテンツストレージ142におけるストレージのために、コンテンツアイテムをより小さなチャンクに分割することができる。コンテンツアイテムを構成する各チャンクの位置をコンテンツディレクトリ144に記録することができる。コンテンツディレクトリ144は、コンテンツストレージ142に格納される各コンテンツアイテムについてのコンテンツエントリを含むことができる。コンテンツエントリは、コンテンツアイテムを識別する、一意のIDと関連付けられることができる。
【0022】
いくつかの実施形態において、一意のIDは、コンテンツディレクトリ144中のコンテンツアイテムを識別するが、確定的ハッシュ関数から導出されることができる。コンテンツアイテムに対して一意のIDを導出するこの方法は、確定的ハッシュ関数が同一のコンテンツアイテムのすべてのコピーに対して同じ識別子を出力するが、異なるコンテンツアイテムに対して異なる識別子を出力することなどから、コンテンツアイテム重複を認識することを確保することができる。この方法論を使用して、コンテンツストレージサービス116は、各コンテンツアイテムに対して一意のIDを出力することができる。
【0023】
また、コンテンツストレージサービス116は、メタデータデータベース146中のコンテンツアイテムについてのコンテンツパスを指定する、または記録することができる。コンテンツパスは、コンテンツアイテム及び/またはこのコンテンツアイテムと関連するフォルダ階層の名前を含むことができる。例えば、コンテンツパスは、コンテンツアイテムをクライアントデバイス上のローカルファイルシステムに格納するフォルダ、またはフォルダのパスを含むことができる。コンテンツアイテムをブロック中のコンテンツストレージ142に格納し、ディレクトリ構造のようなツリー下に格納しなくてもよいが、このようなディレクトリ構造は、ユーザにとって快適なナビゲーション構造である。コンテンツストレージサービス116は、ディレクトリ構造の「ルート」ノードが各アカウントについてのネームスペースであることができる、コンテンツアイテムについてのコンテンツパスを定義する、または記録することができる。ネームスペース内には、アカウント及び/またはコンテンツストレージサービス116のユーザによって定義されるディレクトリ構造があることができる。メタデータデータベース146は、各コンテンツアイテムについてのコンテンツパスをコンテンツエントリの部分として格納することができる。
【0024】
いくつかの実施形態において、ネームスペースは、それらがルートノード内に格納されるかのようにディレクトリ構造にネストされる追加のネームスペースを含むことができる。これは、アカウントが共有されたコレクションへのアクセスを有するときに起こり得る。共有されたコレクションは、それら自体のネームスペースをコンテンツ管理システム110内に割り当てられ得る。いくつかの共有されたコレクションは、実際には共有されたコレクションについてのルートノードであるが、それらは、ディレクトリ構造中のアカウントネームスペースの下位に位置し、アカウント用のフォルダ内のフォルダとして出現することができる。上述されるように、ディレクトリ構造は、ユーザにとって単に快適なナビゲーション構造であるが、コンテンツストレージ142中のコンテンツアイテムのストレージ位置に相関しない。
【0025】
アカウントがコンテンツアイテムを表示するディレクトリ構造は、コンテンツ管理システム110においてストレージ位置に相関しないが、ディレクトリ構造は、クライアントデバイス150によって使用されるファイルシステムに依存するクライアントデバイス150上のストレージ位置に相関することができる。
【0026】
上述されるように、コンテンツディレクトリ144中のコンテンツエントリは、コンテンツアイテムを構成する各チャンクの位置をも含むことができる。より具体的に、コンテンツエントリは、コンテンツアイテムを構成するチャンクのコンテンツストレージ142中の位置を識別するコンテンツポインタを含むことができる。
【0027】
コンテンツパス及びコンテンツポインタに加えて、コンテンツディレクトリ144中のコンテンツエントリは、コンテンツアイテムへのアクセスを有するユーザアカウントを識別するユーザアカウント識別子、及び/またはコンテンツアイテムへのアクセスを有するグループを識別するグループ識別子、及び/またはコンテンツエントリが属するネームスペースをも含むことができる。
【0028】
コンテンツストレージサービス116は、コンテンツアイテム、またはコンテンツアイテムのバージョンを構成する、重複するコンテンツアイテム、または重複するブロックを識別することによってストレージスペースの所要量を減少させることができる。複数のコピーを格納する代替に、コンテンツストレージ142は、コンテンツアイテムの、またはコンテンツアイテムのブロックの、単一コピーを格納することができ、コンテンツディレクトリ144は、重複を単一コピーにリンクさせる、ポインタまたは他のメカニズムを含むことができる。
【0029】
また、コンテンツストレージサービス116は、コンテンツアイテムの一意のIDと関連して、コンテンツアイテム、コンテンツアイテムタイプ、フォルダ、ファイルパス、及び/またはメタデータデータベース146中のさまざまなアカウント、コレクション、またはグループへのコンテンツアイテムの関係を記述するメタデータを格納することができる。
【0030】
また、コンテンツストレージサービス116は、サーバファイルジャーナル148中の変更、アクセスなどについてのデータのログを格納することができる。サーバファイルジャーナル148は、タイムスタンプまたはバージョン番号及びいずれかの他の関連データに加えて、コンテンツアイテムの一意のID、及び変更またはアクセスアクションのディスクリプションを含むことができる。また、サーバファイルジャーナル148は、変更またはコンテンツアイテムアクセスによって影響されるブロックへのポインタを含むことができる。コンテンツストレージサービスは、コンテンツアイテムへの変更を追跡するコンテンツアイテムバージョン制御、コンテンツアイテムの異なるバージョン(分岐するバージョンツリーを含む)、及びサーバファイルジャーナル148から取得されることができる変更履歴を使用することによって、操作をアンドゥする機能を提供することができる。
【0031】
コンテンツアイテム同期
コンテンツ管理システム110の別の特徴は、コンテンツアイテムの少なくとも1つのクライアントデバイス150との同期である。クライアントデバイス(複数可)は、異なる形を取り、異なる機能を有することができる。例えば、クライアントデバイス1501は、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むコンピューティングデバイスである。クライアントデバイス1502は、コンピューティングデバイスであり、そこでコンテンツアイテムは、特定のアプリケーションに、または特定のアプリケーションにより与えられるパーミッションによってのみアクセス可能であり、コンテンツアイテムは、典型的に、特定用途向けスペースか、クラウドかのいずれか一方に格納される。クライアントデバイス1503は、ウェブブラウザを介してコンテンツ管理システム110にアクセスし、またウェブインタフェースを介してコンテンツアイテムにアクセスする、いずれかのクライアントデバイスである。例示的なクライアントデバイス1501、1502、及び1503は、ラップトップ、モバイルデバイス、またはウェブブラウザなどのフォームファクタで描かれ、それらの記述がこれらの例示的なフォームファクタのデバイスに限定されないことを理解するであろう。例えば、クライアント1502などのモバイルデバイスは、複数のアプリケーションによってアクセス可能な、それらの上に常駐するローカルファイルシステムを含むことができる、またはクライアント1502は、ウェブブラウザを介してコンテンツ管理システム110にアクセスすることができる。このように、フォームファクタは、クライアント150の機能を考慮するときに制限するものとみなされるべきではない。クライアントデバイス150に関して本明細書に記述される1つ以上の機能は、デバイスの特定の機能(ファイルアクセスモデルがこのような機能の1つである)に依存するすべてのクライアントデバイス上で利用可能であってもよいし、利用可能でなくてもよい。
【0032】
多くの実施形態において、クライアントデバイスは、コンテンツ管理システム110のアカウントと関連付けられるが、いくつかの実施形態において、クライアントデバイスは、共有されたリンクを使用してコンテンツにアクセスし得、アカウントを必要としないことがある。
【0033】
上述されるように、いくつかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム110にアクセスすることができる。しかしながら、クライアントデバイスは、クライアントデバイス150上で格納され、実行するクライアントアプリケーション152を使用して、コンテンツ管理システム110にもアクセスすることができる。クライアントアプリケーション152は、クライアント同期サービス156を含むことができる。
【0034】
クライアント同期サービス156は、サーバ同期サービス112と通信し、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムへの変更を同期させることができる。
【0035】
クライアントデバイス150は、クライアント同期サービス156を介してコンテンツをコンテンツ管理システム110と同期させることができる。同期は、プラットフォームに依存しないことができる。すなわち、コンテンツは、さまざまなタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイスにわたり同期することができる。クライアント同期サービス156は、クライアントデバイス150のファイルシステムの指定の位置におけるコンテンツアイテムへのいかなる変更(新規の、削除された、修正された、コピーされた、または移動されたコンテンツアイテム)をも同期させることができる。
【0036】
コンテンツアイテムをクライアントデバイス150からコンテンツ管理システム110に同期させることができ、またその逆もできる。クライアントデバイス150からコンテンツ管理システム110への同期である実施形態において、ユーザは、クライアントデバイス150のファイルシステムから直接コンテンツアイテムを操作することができるが、クライアント同期サービス156は、監視されたフォルダ内のファイルへの変更についてディレクトリをクライアントデバイス150上で監視することができる。
【0037】
クライアント同期サービス156が監視するディレクトリ中のコンテンツの書き込み、移動、コピー、または削除を検出するときに、クライアント同期サービス156は、コンテンツ管理システムサービス116への変更を同期させることができる。いくつかの実施形態において、クライアント同期サービス156は、コンテンツアイテムをブロックに分割すること、コンテンツアイテムをハッシュ化して一意の識別子を生成することなどのような上述される機能を有するコンテンツ管理システムサービス116のいくつかの機能を実行することができる。クライアント同期サービス156は、クライアントストレージインデックス164内でコンテンツをインデックス化し、結果をストレージインデックス164に保存することができる。インデックス化は、各コンテンツアイテムについての、パスと一意のサーバ識別子、及び一意のクライアント識別子を格納することを備えることができる。いくつかの実施形態において、クライアント同期サービス156は、一意のサーバ識別子をサーバ同期サービス112から学習し、一意のクライアント識別子をクライアントデバイス150のオペレーティングシステムから学習する。
【0038】
クライアント同期サービス156は、ストレージインデックス164を使用して、コンテンツ管理システム110上のユーザアカウントと関連するコンテンツとの、クライアントストレージ内のコンテンツの少なくとも一部分の同期を容易にすることができる。例えば、クライアント同期サービス156は、ストレージインデックス164をコンテンツ管理システム110と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム110上のユーザアカウントと関連するコンテンツとの間の差異を検出することができる。次いで、クライアント同期サービス156は、必要に応じてコンテンツをクライアントストレージ上で、アップロードし、ダウンロードし、修正し、そして削除することによって、差異のリコンサイルを試行することができる。コンテンツストレージサービス116は、必要に応じて、コンテンツアイテムについて変更されたブロック、または新規のブロックを格納し、サーバファイルジャーナル148、メタデータデータベース146、コンテンツディレクトリ144、コンテンツストレージ142、アカウントデータベース140などを更新することができる。
【0039】
コンテンツ管理システム110からクライアントデバイス150に同期させるときに、サーバファイルジャーナル148に記録されるコンテンツアイテムのマウント、修正、追加、削除、移動は、通知サービス117を使用してクライアントデバイス150に送信される通知をトリガすることができる。クライアントデバイス150に変更を通知するときに、クライアントデバイスに知られている最後の同期ポイント以降に、サーバファイルジャーナル148に列挙されている要求を変更する。クライアントデバイス150がコンテンツ管理システム110と同期していないと判定するときに、クライアント同期サービス156は、変更を含むコンテンツアイテムブロックを要求し、変更されたコンテンツアイテムのそのローカルコピーを更新する。
【0040】
いくつかの実施形態において、ストレージインデックス164は、ツリーデータ構造を格納し、そこで1つのツリーは、サーバ同期サービス112に従いディレクトリの最新の表現を反映し、もう1つのツリーは、クライアント同期サービス156に従いディレクトリの最新の表現を反映する。クライアント同期サービスは、データをサーバ同期サービス112から要求することによって、またはクライアントデバイス150上の変更をコンテンツ管理システム110にコミットすることによって、ツリー構造がマッチングすることを確保するように機能することができる。
【0041】
ときとして、クライアントデバイス150は、利用可能なネットワーク接続を有さない場合がある。このシナリオにおいて、クライアント同期サービス156は、ネットワーク接続が利用可能であるときに、コンテンツアイテム変更についてリンクされたコレクションを監視し、後のコンテンツ管理システム110への同期のためにこれらの変更をキューイングすることができる。同様に、ユーザは、コンテンツ管理システム110との同期を手動で、開始する、停止する、一時停止する、または再開することができる。
【0042】
クライアント同期サービス156は、特定のユーザアカウントと関連するすべてのコンテンツをコンテンツ管理システム110上で同期させることができる。代替的に、クライアント同期サービス156は、特定のユーザアカウントと関連する全コンテンツの一部のコンテンツをコンテンツ管理システム110上で選択的に同期させることができる。一部のコンテンツのみを選択的に同期させることにより、スペースをクライアントデバイス150上に保持し、帯域幅を節約することができる。
【0043】
いくつかの実施形態において、クライアント同期サービス156は、コンテンツのリマインダ部分のためにクライアントストレージに、特定のユーザアカウントと関連するコンテンツの一部を選択的に格納し、プレースホルダコンテンツアイテムを格納する。例えば、クライアント同期サービス156は、プレースホルダコンテンツアイテムを格納することができ、このプレースホルダコンテンツアイテムは、コンテンツ管理システム110上の、そのそれぞれの完全なコンテンツアイテムの同じファイル名、パス、拡張子、メタデータを有するが、完全なコンテンツアイテムのデータを欠く。このプレースホルダコンテンツアイテムは、サイズが数バイト以下であることができるが、それぞれの完全なコンテンツアイテムは、著しくより大きくてもよい。クライアントデバイス150がコンテンツアイテムにアクセスすることを試行した後に、クライアント同期サービス156は、コンテンツアイテムのデータをコンテンツ管理システム110から取得し、完全なコンテンツアイテムを、アクセスするクライアントデバイス150に提供することができる。このアプローチは、有意なスペース、及び帯域幅節約を提供しながら、ユーザのコンテンツへのフルアクセスをコンテンツ管理システム110上に依然として提供することができる。
【0044】
コラボレーション特徴
コンテンツ管理システム110の別の特徴は、ユーザ間のコラボレーションを容易にすることである。コラボレーション特徴は、コンテンツアイテムの共有、コンテンツアイテムについてのコメント、コンテンツアイテム上でのコワーキング、インスタントメッセージング、コンテンツアイテムについての存在及び表示状態情報を提供することなどを備える。
【0045】
共有
コンテンツ管理システム110は、共有サービス128を介して共有コンテンツを管理することができる。コンテンツへのリンクを提供することによって共有するコンテンツは、コンテンツ管理システム110とネットワーク通信しているいずれかのコンピューティングデバイスからアクセス可能なコンテンツアイテムを作成することを含むことができる。しかしながら、いくつかの実施形態において、リンクは、コンテンツ管理システム110及びアクセス制御リスト145によって実施されるアクセス制限と関連付けられることができる。また、共有コンテンツは、共有サービス128を使用してコンテンツにリンクし、コンテンツ管理システム110内のコンテンツを少なくとも1つの追加のユーザアカウント(コンテンツアイテムと関連する元のユーザアカウントに加えて)と共有することを含むことができるので、各ユーザアカウントは、コンテンツアイテムへのアクセスを有する。追加のユーザアカウントは、コンテンツを許容することによってコンテンツへのアクセスを得ることができ、その後、ウェブインタフェースサービス124を介してか、直接にかのいずれか一方で、クライアントデバイス150上でそれらのアカウントと関連するディレクトリ構造内からアクセス可能である。プラットフォームに依存しない方式において、共有を実行することができる。すなわち、さまざまなタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイス150にわたりコンテンツを共有することができる。また、ユーザアカウントのさまざまなタイプにわたりコンテンツを共有することができる。
【0046】
コンテンツアイテムをコンテンツ管理システム110内で共有するために、共有サービス128は、1つのユーザアカウント識別子、または複数のユーザアカウント識別子を、コンテンツアイテムと関連するアクセス制御リストデータベース145中のコンテンツエントリに追加することができるので、コンテンツアイテムへの追加されたユーザアカウントアクセスを付与することができる。また、共有サービス128は、ユーザアカウント識別子をコンテンツエントリから除去し、コンテンツアイテムへのユーザアカウントのアクセスを制限することができる。共有サービス128は、コンテンツアイテム識別子、コンテンツアイテムへのアクセスを与えられるユーザアカウント識別子、及びアクセス制御リストデータベース145におけるアクセスレベルを記録することができる。例えば、いくつかの実施形態において、単一コンテンツエントリと関連するユーザアカウント識別子は、関連したコンテンツアイテムに関するそれぞれのユーザアカウント識別子に対して異なるパーミッションを指定することができる。
【0047】
コンテンツ管理システム110の外部でコンテンツアイテムを共有するために、共有サービス128は、ユニフォームリソースロケータ(URL)などのカスタムネットワークアドレスを生成することができ、このカスタムネットワークアドレスにより、いかなる認証もなく、コンテンツ管理システム110においてコンテンツアイテムまたはコレクションにいかなるウェブブラウザもアクセスすることが可能である。これを達成するために、共有サービス128は、コンテンツ識別データを生成されたURLに含むことができ、このコンテンツ識別データを後に使用して、要求されたコンテンツアイテムを適切に識別し、返すことができる。例えば、共有サービス128は、アカウント識別子及びコンテンツパス、または生成されたURL中でコードを識別するコンテンツアイテムを含むことができる。URLの選択に際し、URLに含まれるコンテンツ識別データをコンテンツ管理システム110に送信することができ、このコンテンツ管理システム110は、受信したコンテンツ識別データを使用して、適切なコンテンツアイテムを識別し、コンテンツアイテムを返すことができる。
【0048】
URLを生成することに加えて、共有サービス128は、コンテンツアイテムへのURLが作成されているアクセス制御リストデータベース145に記録されるように設定されることもできる。いくつかの実施形態において、コンテンツアイテムと関連するコンテンツエントリは、コンテンツアイテムへのURLが作成されているかどうかを示すURLフラグを含むことができる。例えば、URLフラグは、コンテンツアイテムへのURLが作成されていないことを示す、0または偽に最初に設定されるブール値であり得る。共有サービス128は、コンテンツアイテムへのURLを生成した後に、フラグの値を1または真に変更することができる。
【0049】
いくつかの実施形態において、共有サービス128は、1セットのパーミッションをコンテンツアイテムについてのURLに関連付けることができる。例えば、ユーザがURLを介してコンテンツアイテムにアクセスすることを試行する場合に、共有サービス128は、コンテンツアイテムに対して制限された1セットのパーミッションを提供することができる。制限されたパーミッションの実施例は、ユーザがコンテンツアイテムをダウンロードすることができない、コンテンツアイテムを保存することができない、コンテンツアイテムをコピーすることができない、コンテンツアイテムを修正することができないなどの制限を有する。いくつかの実施形態において、制限されたパーミッションは、特定のドメインから、すなわち、企業ネットワークドメイン内部から、または特定のドメインと関連するアカウント、例えば、企業アカウントと関連するアカウント(例えば、@acme.com)によって、アクセスされるコンテンツアイテムだけにパーミッションを与える制限を含む。
【0050】
いくつかの実施形態において、共有サービス128も、生成されたURLを非アクティブ化するように構成されることができる。例えば、各コンテンツエントリも、生成されたURLからの要求に応答してコンテンツを返すべきかどうかを示す、URLアクティブフラグを含むことができる。例えば、URLアクティブフラグが1または真に設定される場合に、共有サービス128は、生成されたリンクによって要求されるコンテンツアイテムのみを返すことができる。したがって、URLが生成されているコンテンツアイテムへのアクセスは、URLアクティブフラグの値を変更することによって容易に制限され得る。これにより、コンテンツアイテムを移動させる、または生成されたURLを削除することを必要とせずに、ユーザが共有されたコンテンツアイテムへのアクセスを制限することができる。同様に、共有サービス128は、URLアクティブフラグの値を1または真に再度変更することによって、URLを再アクティブ化することができる。したがって、ユーザは、新規のURLを生成する必要なく、コンテンツアイテムへのアクセスを容易に復元することができる。
【0051】
いくつかの実施形態において、コンテンツ管理システム110は、コンテンツアイテムをアップロードするためにURLを指定することができる。例えば、ユーザアカウントを有する第一ユーザは、このようなURLを要求し、URLを寄与するユーザに提供することができ、寄与するユーザは、このURLを使用して、コンテンツアイテムを第一ユーザのユーザアカウントにアップロードすることができる。
【0052】
チームサービス
いくつかの実施形態において、コンテンツ管理システム110は、チームサービス130を含む。チームサービス130は、ユーザアカウントの定義されたチームを作成し、管理するための機能性を提供することができる。これらのチームは、サブチーム(例えば、ビジネスユニット、またはプロジェクトチームなど)とともに、企業用に作成されることができ、これらのチーム及びサブチームに、またはこれらのチームに割り当てられるユーザアカウントは、ユーザアカウントのいずれかの定義されたグループ用に作成され得る。これらのチームサービス130は、チーム用の共通の共有スペース、プライベートユーザアカウントフォルダ、及びアクセス制限された共有フォルダを提供することができる。また、チームのサービスは、管理者用に管理インタフェースを提供し、コレクション及びコンテンツアイテムをチーム内で管理することができ、このチームと関連付けられるユーザアカウントを管理することができる。
【0053】
認可サービス
いくつかの実施形態において、コンテンツ管理システム110は、認可サービス132を含む。認可サービス132は、ネームスペースにアクセスすることを試行するユーザアカウントがネームスペースにアクセスする適切な権限を有することを確保する。認可サービス132は、ネームスペースにアクセスする要求に従うトークンをクライアントアプリケーション152から受信することができ、ユーザアカウントにパーミッションを与えられている機能を返すことができる。複数のアクセスレベルを有するユーザアカウント(例えば、ユーザ権限及び管理者権限を有するユーザアカウント)について、認可サービス132は、管理者による意図しないアクションを回避するために、明示的な特権昇格をも要求することができる。
【0054】
存在及び表示状態
いくつかの実施形態において、コンテンツ管理システムは、コンテンツアイテムを共有するユーザがどのようにコンテンツアイテムとインタラクトしている、またはインタラクトしていたかについての情報を提供することができる。いくつかの実施形態において、コンテンツ管理システム110は、コンテンツアイテムを共有するユーザがコンテンツアイテムを現在閲覧していることを報告することができる。例えば、クライアントデバイス150がコンテンツアイテムにアクセスしているときに、クライアントコラボレーションサービス160は、通知サービス117に通知することができる。次いで、通知サービス117は、このコンテンツアイテムに関してクライアントデバイス150のユーザの存在する同一コンテンツアイテムへのアクセスを有する他のユーザのすべてのクライアントデバイスに通知することができる。
【0055】
いくつかの実施形態において、コンテンツ管理システム110は、共有されたコンテンツアイテムとのユーザインタラクションの履歴を報告することができる。コラボレーションサービス126は、メタデータデータベース146及びサーバファイルジャーナル148などのデータソースにクエリを行い、ユーザがコンテンツアイテムを保存していること、ユーザがまだコンテンツアイテムを閲覧していることなどを判定し、通知サービス117を使用して、この状態情報を他のユーザに広めることができるので、それらのユーザは、コンテンツアイテムを現在閲覧している、または現在修正している、または閲覧していた、または修正したユーザを知ることができる。
【0056】
コラボレーションサービス126は、コンテンツアイテムがコメント機能をネイティブにサポートしない場合でも、コンテンツと関連するコメントを容易にすることができる。これらのようなコメントをメタデータデータベース146に格納することができる。
【0057】
コラボレーションサービス126は、ユーザに対して通知を発信し、送信することができる。例えば、ユーザは、コメント中に別のユーザについて言及することができ、コラボレーションサービス126は、ユーザがコメント中で言及されている通知をそのユーザに送信することができる。さまざまな他のコンテンツアイテムイベントは、コンテンツアイテムを削除すること、コンテンツアイテムを共有することなどを含む、通知をトリガすることができる。
【0058】
コラボレーションサービス126は、メッセージングプラットフォームを提供することができ、このメッセージングプラットフォームにより、ユーザは、インスタントメッセージ、音声通話、電子メールなどを送信し、受信することができる。
【0059】
コラボレーションコンテンツアイテム
いくつかの実施形態において、コンテンツ管理サービスは、コラボレーションドキュメントサービス134をも含むことができ、このコラボレーションドキュメントサービス134は、インタラクティブコンテンツアイテムコラボレーションプラットフォームを提供することができ、このインタラクティブコンテンツアイテムコラボレーションプラットフォームにより、ユーザは、コラボレーションコンテンツアイテム、これらのコラボレーションコンテンツアイテム中のコメントを同時に作成し、タスクをコラボレーションコンテンツアイテム内で管理することができる。コラボレーションコンテンツアイテムは、ユーザが作成し、コラボレーションコンテンツアイテムエディタを使用して編集することができ、コラボレーションコンテンツアイテム要素を含むことができるファイルであり得る。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテム識別子、1つ以上のオーサー識別子、コラボレーションコンテンツアイテムテキスト、コラボレーションコンテンツアイテム属性、インタラクション情報、コメント、共有するユーザなどを含むことができる。コラボレーションコンテンツアイテム要素は、コラボレーションコンテンツアイテムを検索し、取得することを可能にする、データベースエンティティとして格納されることができる。複数のユーザは、同時に、または異なる時間に、コラボレーションコンテンツアイテムにアクセスし、これらのコラボレーションコンテンツアイテムを閲覧し、編集し、そしてコラボレーションすることができる。いくつかの実施形態において、これは、2人のユーザがウェブインタフェースを介してコンテンツアイテムにアクセスすることを要求することによって管理されることができ、そしてそこでこれら2人のユーザは、同時にコンテンツアイテムの同じコピー上で操作することができる。
【0060】
コラボレーションコンパニオンインタフェース
いくつかの実施形態において、クライアントコラボレーションサービス160は、クライアントデバイス150上に提示されるコンテンツアイテムに関連する情報を表示する目的のために、ネイティブアプリケーションコンパニオンインタフェースを提供することができる。クライアントデバイス150に格納され、このクライアントデバイス150上で実行されるネイティブアプリケーションがコンテンツアイテムにアクセスする、いくつかの実施形態において、そこでコンテンツアプリケーション152がコンテンツアイテムを管理するように、コンテンツアイテムは、クライアントデバイス150のファイルシステムの指定の位置にあり、ネイティブアプリケーションは、上記のアドレス指定されたコラボレーションデータを表示するいかなるネイティブな方式も提供しない場合がある。これらのような実施形態において、クライアントコラボレーションサービス160は、ユーザがコンテンツアイテムを開いていることを検出することができ、コラボレーションデータなどのコンテンツアイテムについての追加情報をオーバーレイに提供することができる。例えば、追加情報は、コンテンツアイテムに対するコメント、コンテンツアイテムの状態、コンテンツアイテムを以前に閲覧していた、または現在閲覧している他のユーザのアクティビティを含むことができる。このようなオーバーレイは、別のユーザがコンテンツアイテムを現在編集しているため、変更が失われる可能性があることをユーザに警告することができる。
【0061】
いくつかの実施形態において、パブリックまたはプライベートアプリケーションプログラミングインタフェースを使用して、上記に考察される、サービスまたはストレージ/データベースのうちの1つ以上にアクセスすることができる。
【0062】
ある特定のソフトウェアアプリケーションは、コンテンツストレージ142にAPIを介してユーザの代わりにアクセスすることができる。例えば、クライアントデバイス150上で実行するアプリケーションなどのソフトウェアパッケージは、ユーザが認証クレデンシャルを提供するときにコンテンツ管理システム110に直接API呼び出しをプログラムに従い行い、コンテンツを読み出す、書き込む、作成する、削除する、共有する、またはその他の方法により操作することができる。
【0063】
ユーザは、ウェブインタフェースサービス124によって生成され、サーブされるウェブインタフェースを介してユーザアカウントに格納されるコンテンツを閲覧する、または操作することができる。例えば、ユーザは、ウェブブラウザにおいて、コンテンツ管理システム110によって提供されるウェブアドレスにナビゲートすることができる。コンテンツアイテムの新規のバージョンをアップロードするなど、ウェブインタフェースを介して行われるコンテンツストレージ142中のコンテンツへの変更または更新は、伝播され、ユーザのアカウントと関連する他のクライアントデバイスに返されることができる。例えば、複数のクライアントデバイスは、これらのクライアントデバイス自体のそれぞれのクライアントソフトウェアとともに、単一アカウントと関連付けられることができ、このアカウント中のコンテンツアイテムは、複数のクライアントデバイスのそれぞれの間で同期することができる。
【0064】
クライアントデバイス150は、ユーザの代わりにコンテンツ管理システム110に接続することができる。ユーザは、例えば、クライアントデバイス150がデスクトップまたはラップトップコンピュータ、電話、テレビ、モノのインターネットデバイスなどであるときに、クライアントデバイス150と直接インタラクトすることができる。代替的に、または追加的に、クライアントデバイス150は、例えば、クライアントデバイス150がサーバであるときに、ユーザがクライアントデバイス150への物理的なアクセスを有することなく、ユーザの代理を務めることができる。
【0065】
クライアントデバイス150のいくつかの特徴は、クライアントデバイス150上にインストールされるアプリケーションによって有効にされる。いくつかの実施形態において、このアプリケーションは、コンテンツ管理システム専用コンポーネントを含むことができる。例えば、コンテンツ管理システム専用コンポーネントは、スタンドアロンアプリケーション152、1つ以上のアプリケーションプラグイン、及び/またはブラウザ拡張であることができる。しかしながら、ユーザも、ウェブブラウザなどの第三者アプリケーションを介してコンテンツ管理システム110とインタラクトすることができ、この第三者アプリケーションは、クライアントデバイス150上にあり、コンテンツ管理システム110と通信するように構成される。さまざまな実装において、クライアント側アプリケーション152は、ユーザに対してユーザインタフェース(UI)を提示し、コンテンツ管理システム110とインタラクトすることができる。例えば、ユーザは、ファイルシステムと統合されるファイルシステムエクスプローラを介して、またはウェブブラウザアプリケーションを使用して表示されるウェブページを介して、コンテンツ管理システム110とインタラクトすることができる。
【0066】
いくつかの実施形態において、クライアントアプリケーション152は、コンテンツ管理システム110の1つより多いアカウントに対してコンテンツを管理し、同期させるように構成されることができる。これらのような実施形態において、クライアントアプリケーション152は、複数のアカウントにログインしたままで、複数のアカウントに対して通常のサービスを提供することができる。いくつかの実施形態において、各アカウントは、ファイルシステム中のフォルダとして現れることができ、そのフォルダ内のすべてのコンテンツアイテムは、コンテンツ管理システム110と同期することができる。いくつかの実施形態において、クライアントアプリケーション152は、プライマリアカウントまたはデフォルトアカウントである複数のアカウントのうちの1つを選ぶセレクタを含むことができる。
【0067】
コンテンツ管理システム110に専用コンポーネントを提示しながら、当業者は、システム100のアーキテクチャコンフィグレーションが唯一可能なコンフィグレーションであり、より多い、またはより少ないコンポーネントに関する他のコンフィグレーションが可能であることを理解するであろう。さらに、サービスは、別のサービスとともにあると記述される機能性さえも含む、多い、または少ない機能性を有することができる。さらに、1つの実施形態に関して本明細書に記述される特徴を、別の実施形態に関して記述される特徴と組み合わせることができる。
【0068】
システム100に専用コンポーネントを提示するが、当業者は、システム100のアーキテクチャコンフィグレーションが唯一可能なコンフィグレーションであり、より多い、またはより少ないコンポーネントに関する他のコンフィグレーションが可能であることを理解するであろう。
【0069】
クライアント同期サービス
図2は、いくつかの実施形態による、クライアント同期サービス156の実施例を示す。いくつかの実施形態により、クライアント同期サービス156は、
図1のクライアントデバイス中に実装されることができる。しかしながら、他の実施形態において、クライアント同期サービス156は、別のコンピューティングデバイス上に実装されることができる。クライアント同期サービス156は、クライアント同期サービス156が実行する、コンテンツ管理システムとクライアントデバイスとの間のコンテンツアイテムへの変更を同期させるように構成される。
【0070】
クライアント同期サービス156は、ファイルシステムインタフェース205、サーバインタフェース210、ツリーストレージ220、プランナ225、及びスケジューラ230を含むことができる。追加的な、または代替的なコンポーネントをも含むことができる。クライアント同期サービス156及びそのコンポーネントの高水準のディスクリプションを
図2に関して下記に考察する。しかしながら、クライアント同期サービス156及びそのコンポーネントのさらなる詳細及び実施形態は、全体を通して考察される。
【0071】
ファイルシステムインタフェース205は、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を処理し、ローカルツリーを更新するように構成される。例えば、ファイルシステムインタフェース205は、
図1のクライアント同期サービス156と通信して、クライアントデバイスのローカルファイルシステム上でコンテンツアイテムへの変更を検出することができる。また、
図1のクライアントアプリケーション152を介して、これらの変更を行い、検出することができる。ファイルシステムインタフェース205は、クライアントデバイス上のコンテンツアイテムへの変更(新規の、削除された、修正された、コピーされた、リネームされた、または移動されたコンテンツアイテム)に基づき行われることができる、ローカルツリーへの更新を行うことができる。
【0072】
サーバインタフェース210は、コンテンツ管理システムのリモートストレージにおけるコンテンツアイテムへのリモート変更の処理、及びリモートツリーの更新の際に支援するように設定される。例えば、サーバインタフェース210は、
図1のサーバ同期サービス112と通信し、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムへの変更を同期させることができる。コンテンツ管理システム110におけるコンテンツアイテムへの変更(新規の、削除された、修正された、コピーされた、リネームされた、または移動されたコンテンツアイテム)を検出することができ、これらの変更をコンテンツ管理システム110に反映するために更新をリモートツリーに行うことができる。
【0073】
ツリーストレージ220は、クライアント同期サービス156によって使用されるツリーデータ構造を格納し、維持するように構成される。例えば、ツリーストレージ220は、ローカルツリー、同期ツリー、及びリモートツリーを格納することができる。いくつかの実施形態により、ツリーストレージ200は、レイテンシ及び応答時間を減少させるために、永続メモリ(例えば、ハードディスクまたは他のセカンダリストレージデバイス)に、またメインメモリ(例えば、RAMまたは他のプライマリストレージデバイス)にツリーデータ構造を格納することができる。例えば、クライアントデバイスまたはクライアント同期サービス156の起動時に、ツリーデータ構造を永続メモリから取得し、メインメモリにロードすることができる。ツリーストレージ220は、メインメモリ上でツリーデータ構造にアクセスし、これらのツリーデータ構造を更新し、クライアントデバイスまたはクライアント同期サービス156を停止する前に、ツリーストレージ220は、更新されたツリーデータ構造を永続メモリ上に格納することができる。メインメモリはコストが高く、ほとんどのクライアントデバイス上でサイズが制限されることが多いため、メインメモリ上のツリーデータ構造のフットプリントを減少させる追加の技術的な改善を実施する。これらの技術的な解決策を以下にさらに説明する。
【0074】
プランナ225は、コンテンツ管理システムと関連するサーバ状態と、クライアントデバイスと関連するファイルシステム状態との間の差異をツリーデータ構造の状態に基づき検出するように構成される。例えば、プランナ225は、リモートツリーと同期ツリーとの間に差異があるかどうかを判定し得る。リモートツリーと同期ツリーとの間の差異は、コンテンツ管理システムに格納される1つ以上のコンテンツアイテム上にリモートに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。同様に、プランナ225は、ローカルツリーと同期ツリーとの間の差異があるかどうかも判定し得る。ローカルツリーと同期ツリーとの間の差異は、クライアントデバイス上に格納される1つ以上のコンテンツアイテム上にローカルに実行されるアクションにより、サーバ状態及びファイルシステム状態を同期させなくしたことを示す。差異を検出した場合、プランナ225は、ツリーデータ構造を同期させる操作セットを生成する。
【0075】
いくつかのシナリオにおいて、リモートツリーと同期ツリーとの間の差異に基づき生成される操作セット、及びローカルツリーと同期ツリーとの間の差異に基づき生成される操作セットは、競合する場合がある。また、プランナ225は、これら2つの操作セットを単一のマージされた操作プランにマージするように構成されることができる。
【0076】
スケジューラ230は、生成された操作プランを行い、これらの操作の実行を管理するように構成される。いくつかの実施形態により、スケジューラ230は、操作プラン中の各操作を、操作を実行するために実行される必要がある一連の1つ以上のタスクに変換する。いくつかのシナリオにおいて、いくつかのタスクは、期限切れになる、またはもはや関連性がなくなる場合がある。スケジューラ230は、これらのタスクを識別し、それらをキャンセルするように構成される。
【0077】
ツリーデータ構造
図3は、さまざまな実施形態による、ツリーデータ構造の実施例を示す。ツリーデータ構造は、クライアントデバイスに格納され、
図2中のクライアント同期サービス156などのクライアント同期サービスによって管理されることができる。
図3において、リモートツリー310、同期ツリー330、及びローカルツリー350を含む、ツリーデータ構造を示す。
【0078】
リモートツリー310は、クライアントデバイスから遠隔に格納される(例えば、コンテンツ管理システムのサーバ上の)サーバ状態またはコンテンツアイテムの状態を表す。ローカルツリー350は、クライアントデバイス上でローカルに格納される、ファイルシステム状態、または対応するコンテンツアイテムの状態を表す。同期ツリー330は、ローカルツリー及びリモートツリーについてのマージベースを表す。マージベースは、ローカルツリー及びリモートツリーの共通祖先、またはローカルツリーとリモートツリーとの間で最後に既知の同期した状態であると考えられることができる。
【0079】
各ツリーデータ構造(例えば、リモートツリー310、同期ツリー330、またはローカルツリー350)は、1つ以上のノードを含むことができる。各ノードは、1つ以上の子ノードを含むことができ、親子関係は、エッジによって表される。例えば、リモートツリー310は、ノード312及び314を含む。ノード312は、ノード314の親であり、ノード314は、ノード312の子である。この親子関係は、エッジ316によって表される。ルートノード312などのルートノードは、親ノードを含まない。ノード314などの葉ノードは、子ノードを含まない。
【0080】
ツリーデータ構造中の各ノードは、コンテンツアイテム(例えば、ファイル、ドキュメント、フォルダなど)を表すことができる。例えば、ルートノード312は、コンテンツ管理システムと関連するルートフォルダを表すことができ、ノード314は、そのルートフォルダに位置しているファイル(例えば、「Foo.txt」と称されるテキストファイル)を表すことができる。ツリーデータ構造中の各ノードは、例えば、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)、コンテンツアイテムについてのファイル名、コンテンツアイテムについてのファイル識別子、及びコンテンツアイテムについてのメタデータなどのデータを含むことができる。いくつかの実施形態において、ツリーデータ構造中の各ノードは、入力され、そのファイル識別子によって参照され、ルートからノードへの一意のパスを含むことができる。
【0081】
上述されるように、クライアント同期サービスは、3つのツリー(例えば、リモートツリー310、同期ツリー330、及びローカルツリー350)がすべて同一であるときに、クライアントデバイスのサーバ状態及びファイルシステム状態が同期していると判定することができる。換言すれば、ツリーは、それらのツリー構造、及びそれらが表現する関係が同一であり、またそれらのノードに含まれるデータが同様に同一であるときに同期している。一方、3つのツリーが同一ではない場合に、これらのツリーは、同期していない。
図3に示される例示的なシナリオにおいて、リモートツリー310、同期ツリー330、及びローカルツリー350は、同一であり、同期している場合が示されているため、結果として、サーバ状態及びファイルシステム状態は、同期している。
【0082】
ツリーデータ構造を使用する変更の追跡
図4は、さまざまな実施形態による、ツリーデータ構造の実施例を示す。
図3に示されるツリーデータ構造と同様に、
図4に示されるツリーデータ構造(リモートツリー410、同期ツリー430、及びローカルツリー450を含む)をクライアントデバイスに格納し、
図2中のクライアント同期サービス156などのクライアント同期サービスによって管理することができる。
図3に、ツリーデータ構造を示す。
【0083】
図4は、
図3に示されるシナリオなど、前に同期した状態の後のシナリオを示し、ツリーがもはや同期していないようにコンテンツアイテムを修正する、追加のアクションをツリーに表されるコンテンツアイテム上で実行する。同期ツリー430は、前の既知の同期した状態の表現を維持し、クライアント同期サービスによって、サーバ状態とファイルシステム状態との間の差異を識別するだけではなく、コンテンツ管理システム及び/またはクライアントデバイスについての操作を生成して実行し、サーバ状態及びファイルシステム状態が同期するように収束させるために使用されることができる。
【0084】
例えば、ユーザ(クライアントデバイスと関連するユーザと同一のユーザ、またはコンテンツアイテムへのアクセスを有する異なるユーザ)は、コンテンツ管理システムによって格納される「foo.txt」コンテンツアイテムへの修正をすることができる。このコンテンツアイテムは、リモートツリー410中のノード414によって表される。リモートツリー410に示される修正は、foo.txtコンテンツアイテムの除去(例えば、コンテンツ管理システムによって管理されるスペースからのコンテンツアイテムの除去)または削除である。これらの修正は、例えば、別のクライアントデバイス上で実行されることができ、これらの修正は、コンテンツ管理システムによって格納されるコンテンツアイテム、またはウェブブラウザを介してコンテンツ管理システムによって格納されるコンテンツアイテムに同期した。
【0085】
コンテンツ管理システム上で変更を行うときに、コンテンツ管理システムは、行われる変更を指定する修正データを生成し、この修正データをクライアントデバイス上のクライアント同期サービスに送信する。クライアント同期サービスは、修正データに基づきコンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーを更新する。例えば、リモートツリー410において、foo.txtコンテンツアイテムを表すノード414が削除された場合を示す。
【0086】
クライアント同期サービスは、リモートツリー410と同期ツリー430との間の差異を識別することができ、結果として、コンテンツ管理システムにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態が同期しているようにそれらサーバ状態及びファイルシステム状態を収束させるように構成される、クライアントデバイス上に格納されるコンテンツアイテムについての操作セットまたはシーケンスをさらに生成して、実行することができる。
【0087】
追加的に、または代替的に、ユーザ(コンテンツ管理システムにおける修正と関連するユーザと同一のユーザ、またはコンテンツアイテムへのアクセスを有する異なるユーザ)は、コンテンツ管理システムと関連付けられるクライアントデバイス上にローカルに格納されるコンテンツアイテムへの修正を行うことができる。例えば、ユーザは、フォルダ「/bar」を「/root」フォルダに追加し、「Hi.doc」ドキュメントを「/bar」フォルダに追加することができる。
【0088】
変更をクライアントデバイス上で行うときに、クライアントデバイス(例えば、
図1のクライアント同期サービス156またはクライアントアプリケーション152)は、行われる変更を指定する修正データを生成し、修正データをクライアントデバイス上のクライアント同期サービスに渡す。クライアント同期サービスは、修正データに基づきクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態を表すローカルツリーを更新する。例えば、ローカルツリー450において、ノード452及びノード454が追加される場合を示す。ノード452及びノード454は、それぞれ「/bar」フォルダ及び「Hi.doc」ドキュメントを表す。
【0089】
クライアント同期サービスは、ローカルツリー450と同期ツリー430との間の差異を識別し、結果として、クライアントデバイスにおけるコンテンツアイテムの修正により、サーバ状態及びファイルシステム状態がもはや同期していないと判定することができる。クライアント同期サービスは、サーバ状態及びファイルシステム状態を収束させることで、それらが同期しているように設定される、コンテンツ管理システムによって格納されるコンテンツアイテムについての操作セットまたはシーケンスをさらに生成することができる。これらの操作を実行のためにコンテンツ管理システムに送信することができる。
【0090】
図4に示されるように、クライアントデバイス上に格納されるコンテンツアイテム、及びコンテンツ管理システムによって格納されるコンテンツアイテムへの修正は、実質的に同時に、または特定の期間内に起こる可能性がある。これらの修正をツリーデータ構造に反映し、クライアント同期サービスによって使用して、クライアントデバイスについての、またコンテンツ管理システムについての操作を並列して生成することができる。他のシナリオにおいて、しかしながら、修正は、同じ期間内に必ずしも起こらない場合があり、操作は、必要に応じた方式において生成されることができる。さらに、
図4がコンテンツアイテムを追加するための、またコンテンツアイテムを削除するためのシナリオを示すが、コンテンツアイテムを編集する、リネームする、コピーする、または移動させるなどの他のタイプの修正をもサポートする。
【0091】
さまざまな実施形態により、2つのツリーデータ構造間の差異を識別すること、そして操作を生成することは、両方のツリーデータ構造中の各ノードをチェックすること、そしてアクションがこのノード上で実行されているかどうかを判定することを伴うことがある。これらのアクションは、例えば、ノードの追加、ノードの削除、ノードの編集、またはノードの移動を含むことができる。次いで、これらのアクションを使用して、サーバ状態及びファイルシステム状態を収束させるように構成される操作を生成することができる。
【0092】
例えば、2つのツリーデータ構造が同期ツリー及びリモートツリーである場合に、クライアント同期サービスは、例えば、同期ツリー中のすべてのノードのファイル識別子を要求することによって、同期ツリー中の各ノードを識別することができる。同期ツリー中の各ノード、またはこのノードについてのファイル識別子のために、クライアント同期サービスは、ノードまたはファイル識別子もリモートツリー中にあるかどうかを判定することができる。リモートツリー中に見つからない同期ツリー中のノードまたはファイル識別子は、ノードがリモートツリーによって表されるサーバ状態から削除されていることを示すことができる。その結果、クライアント同期サービスは、削除アクションがリモートツリー上に発生したと判定することができる。ノード、またはこのノードについてのファイル識別子がリモートツリー中に見つかる場合に、クライアント同期サービスは、リモートツリー中のノードが編集されているか、移動しているかをチェックすることができる。
【0093】
リモートツリー中のノードが同期ツリー中のノードに関して編集されているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについてのメタデータを、リモートツリー中の対応するノード(例えば、同一のファイル識別子を有するノード)についてのメタデータと比較することができる。メタデータは、ノードによって表されるコンテンツアイテムが編集されているかどうかを判定するために使用され得る情報を含むことができる。例えば、メタデータは、コンテンツアイテム中のデータに基づき生成される1つ以上のハッシュ値、またはそれらの一部を含むことができる。メタデータは、追加的に、または代替的に、コンテンツアイテムについての、サイズ値、最後に修正された値、または他の値を含むことができる。同期ツリー中のノードについてのメタデータを、リモートツリー中のノードについてのメタデータと比較することができる。メタデータがマッチングしない場合、コンテンツアイテムの編集は、リモートツリーによって表されるサーバ状態において編集されている。その結果、クライアント同期サービスは、編集アクションがリモートツリー上のノードに発生していると判定することができる。メタデータがマッチングする場合に、編集は発生しなかった可能性がある。
【0094】
リモートツリー中のノードが移動しているかどうかを判定するために、クライアント同期サービスは、同期ツリー中のノードについての位置を、リモートツリー中の対応するノード(例えば、同一のファイル識別子を含むノード)についての位置と比較することができる。この位置は、例えば、ノードが位置しているパス、ファイル名、及び/またはノードの親のファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)を含むことができる。これらの位置がマッチングする場合に、移動は、起こらなかった可能性がある。一方、これらの位置がマッチングしない場合に、コンテンツアイテムの移動は、リモートツリーによって表されるサーバ状態に起こった可能性がある。その結果、クライアント同期サービスは、移動アクションがリモートツリー上のノードに対して発生したと判定することができる。
【0095】
ノードをリモートツリーに追加したかどうかを判定するために、クライアント同期サービスは、同期ツリー中に見つからない、リモートツリー中のいずれかのノードまたはファイル識別子を識別することができる。ノードまたはファイル識別子がリモートツリー中に見つかり、同期ツリー中に見つからない場合に、クライアント同期サービスは、このノードの追加アクションがサーバ状態を表すリモートツリー上に発生したと判定することができる。
【0096】
上記の実施例が同期ツリー及びリモートツリーに関して記述されているが、他の実施形態において、同様のプロセスは、同期ツリーとローカルツリーとの間の差異を識別し、ファイルシステム状態を表すローカルツリー上に発生したアクションを判定するために、同期ツリー及びローカルツリーに関して発生することができる。
【0097】
ツリーデータ構造を使用する同期
図5は、本技術のさまざまな実施形態により、ツリーデータ構造を使用してサーバ状態及びファイルシステム状態を同期させる例示的な方法を示す。本明細書に記載されるこれらの方法及びプロセスが特定の順序で、ある特定のステップ及び操作によって示されることができるが、同様の、もしくは代替の順序で、または並列して実行される追加の、より少ない、または代替のステップ及び操作は、別段の定めがない限り、さまざまな実施形態の範囲内にある。この方法500は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などのシステムによって実装されることができる。
【0098】
このシステムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーと、クライアントデバイス上に格納される対応するコンテンツアイテムについてのファイルシステム状態を表すローカルツリーと、サーバ状態及びファイルシステム状態の間の既知の同期した状態を表す同期ツリーとの間の差異を識別するように設定される。これらの差異に基づき、生成されることができる操作セットは、実行される場合に、3つのツリーデータ構造が同一である同期した状態に向けてサーバ状態及びファイルシステム状態を収束させるように構成される。
【0099】
例えば、操作505において、システムは、コンテンツ管理システムによって、またはクライアントデバイス上に、格納されるコンテンツアイテムについての修正データを受信することができる。操作510において、この修正データを使用して、リモートツリーまたはローカルツリーを更新することができる。
【0100】
修正データは、コンテンツ管理サービスと関連する1つ以上のコンテンツアイテムに行われる変更を指定する。その結果、修正データをコンテンツ管理システムから、またはクライアントデバイスから(例えば、
図1中のクライアントデバイス150上で実行するクライアントアプリケーション152から)受信することができる。コンテンツ管理システムから受信する修正データは、サーバ修正データと称されることができる。サーバ修正データは、コンテンツ管理システムによって1つ以上のコンテンツアイテムに行われる変更を指定し、操作510において、リモートツリーを更新するために使用され得る。クライアントデバイスから受信する修正データは、クライアント修正データと称されることができる。クライアント修正データは、クライアントデバイス上で1つ以上のコンテンツアイテムに行われる変更を指定し、操作510においてローカルツリーを更新するために使用されることができる。
【0101】
操作515において、システムは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態、及びクライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態が同期しているかどうかを判定することができる。ローカルツリー及びリモートツリーがファイルシステム状態及びサーバ状態を表し、コンテンツ管理システム及びクライアントデバイスに発生する変更を追跡して、継続的に更新されているため、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、ローカルツリー及び/またはリモートツリーを同期ツリーと比較して、ツリー間の差異を見つけることによって行われ得る。ツリー間の差異を見つける、このプロセスは、ときとしてツリーの「差分を取る」と称される。
【0102】
いくつかの実施形態及びシナリオによる、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することは、リモートツリーと同期ツリーとの間の差異を識別すること、及び/またはローカルツリーと同期ツリーとの間の差異を識別することのうちの1つ以上を含むことができる。リモートツリーと同期ツリーとの間の差異は、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更の発生を示すことができる。同様に、ローカルツリーと同期ツリーとの間の差異は、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更の発生を示すことができる。
【0103】
ツリー間に差異がない場合に、サーバ状態及びファイルシステム状態は、同期し、同期アクションは、必要とされない。その結果、この方法は、操作505に戻り、新規の修正データを待機することができる。一方で、これらの差異が検出される場合に、システムは、操作520においてサーバ状態及びファイルシステム状態を収束させるように設定される操作セットを生成することができる。
【0104】
生成される操作セットは、検出される1つ以上の差異に依存する。例えば、2つのツリー間の差異が追加されたコンテンツアイテムである場合に、生成された操作セットは、追加されたコンテンツアイテムを取得して、それを追加することを含むことができる。2つのツリー間の差異がコンテンツアイテムの削除である場合に、生成された操作セットは、コンテンツアイテムを削除することを含むことができる。いくつかの実施形態により、また、操作セットは、ツリー制約が維持されていることを確保する複数のチェックを含むことができる。以下にさらに記述されるように、操作セットは、サーバ状態、ファイルシステム状態、または実行を保留している他の操作の現在の状態によって競合する場合がある。その結果、システムは、続行する前にこれらの競合をも解消することができる。
【0105】
上述されるように、リモートツリーと同期ツリーとの間に差異がある場合に、クライアントデバイスに反映されていない可能性がある、コンテンツ管理システムによって格納されるコンテンツアイテムへの変更が発生している場合がある。その結果、このシナリオにおいて、システムは、クライアントデバイス上に格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作セットを生成することができ、このクライアント操作セットは、操作525において、実行のためにクライアントデバイスに提供され得る。
【0106】
一方、ローカルツリーと同期ツリーとの間の差異がある場合に、コンテンツ管理システムに反映されていない可能性がある、クライアントデバイスに格納されるコンテンツアイテムへの変更が発生している可能性がある。その結果、このシナリオにおいて、システムは、コンテンツ管理システムによって格納されるコンテンツアイテム上で動作して、サーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作セットを生成することができ、このサーバ操作セットは、操作525において、実行のためにコンテンツ管理システムに提供されることができる。いくつかの事例において、両方の事例は、真であることができ、クライアント操作セット及びサーバ操作セットは、操作525において生成され、それらの意図されたレシピエントに提供され得る。
【0107】
操作セット(複数可)が意図されたレシピエント(複数可)に提供されると、方法は、操作505に戻り、新規の修正データを待機することができる。操作セット(複数可)は、サーバ状態及びファイルシステム状態の収束に向けて1つ以上のステップを提供する、またはサーバ状態及びファイルシステム状態を同期させるために必要とされるすべてのステップを提供することができる。例えば、コンテンツ管理システムは、サーバ操作セットを受信し、サーバ操作セットをコンテンツ管理システムによって格納されるコンテンツアイテム上で実行することができる。サーバ操作セットのこの実行は、変更をコンテンツ管理システムによって格納されるコンテンツアイテムに引き起こし、これらの変更をサーバ修正データ中で検出し、指定し、システムに返送する。次いで、このシステムは、リモートツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。
【0108】
クライアントデバイスは、クライアント操作セットを受信し、クライアント操作セットをクライアントデバイス上に格納されるコンテンツアイテム上で実行することができる。クライアント操作セットのこの実行は、変更をクライアントデバイス上に格納されるコンテンツアイテムに引き起こし、これらの変更をクライアント修正データ中で検出し、指定し、システムに渡す。次いで、このシステムは、ローカルツリーを更新し、サーバ状態及びファイルシステム状態が同期しているかどうかを判定することができる。方法500のこれらの操作は、サーバ状態及びファイルシステム状態が同期するまで継続することができる。
【0109】
方法500の操作は、クライアント側及びサーバ側(例えば、ローカルツリー及びリモートツリー、ファイルシステム状態及びサーバ状態、クライアント操作セット及びサーバ操作セット、クライアント修正データ及びサーバ修正データ)に関して記述されている。さまざまな実施形態において、これら2つの側と関連する操作は、並列して、順次に、他の側から切り離されて、または組み合わせて、発生し得る。
【0110】
さらに詳細に考察されるように、いくつかの実施形態により、操作を実行のために提供する前に、システムは、操作をチェックし、それらが1セットのルールまたは不変条件に従うかどうかを判定することができる。操作がルールに違反する場合に、システムは、ルール違反と関連する解消プロセスを実行する。
【0111】
加えて、いくつかの実施形態により、システム(例えば、
図2中のクライアント同期サービス156のスケジューラ230)は、操作セットの実行を管理することができる。例えば、操作セット中の各操作は、タスク、実行スレッド、一連のステップ、または命令と関連付けられることができる。システムは、タスク、スレッド、ステップ、または命令を実行し、クライアントデバイス及び/またはコンテンツ管理システムとインタフェースし、操作セットを実行してサーバ状態及びファイルシステム状態を収束させるように設定されることができる。
【0112】
競合ハンドリング
図5に関して上述されるように、同期ツリーとリモートツリーとの間の差異を識別し、使用して、サーバ状態及びファイルシステム状態を収束させるように構成されるクライアント操作セットを生成する。しかしながら、いくつかの事例において、クライアント操作セットは、ローカルツリーの現在の状態と競合する場合がある。同様に、同期ツリーとローカルツリーとの間の差異を識別し、使用して、サーバ状態及びファイルシステム状態を収束させるように構成されるサーバ操作セットを生成する。しかしながら、サーバ操作セットは、リモートツリーの現在の状態と競合する。追加的に、または代替的に、クライアント操作セット及びサーバ操作セットは、互いに競合する、またはシステムによって維持される別のルールもしくは不変条件に違反する場合がある。その結果、本発明の技術のさまざまな実施形態は、これらの競合を解消することによってさらなる技術的な改善を提供する。
【0113】
例えば、
図2のクライアント同期サービス156中のプランナ225は、ルールと競合する操作セット(例えば、クライアント操作セットまたはサーバ操作セット)中の操作を識別することができる。競合を識別するために使用される各ルールは、競合の解消とも関連付けられることができる。クライアント同期サービスは、実行のための操作セットを提供する前に、競合についての解消に基づき操作セットを更新する、または競合についての解消と関連する操作を実行することによって競合の解消を実行することができる。
【0114】
図6は、本発明の技術のさまざまな実施形態による、ツリーデータ構造を使用して、サーバ状態及びファイルシステム状態を同期させるときに競合を解消するための例示的な方法600を示す。ある特定のステップ及び操作を有する、本明細書に記述されるこれらの方法及びプロセスは、特定の順序で示されることができるが、同様の順序もしくは代替の順序で、または並列して、実行される追加の、より少数の、または代替のステップ及び操作は、特に明示されない限り、さまざまな実施形態の範囲内にある。この方法600は、例えば、
図2のクライアント同期サービス156などのシステムによって実装され、クライアントデバイス上で実行される。
【0115】
システムは、操作620において、サーバ状態及びファイルシステム状態を収束させるように設定される操作セットを受信することができる。操作セットは、例えば、クライアント操作セット、サーバ操作セット、または
図5の方法500に関して生成され、記述される組み合わされた操作セットであることができる。
【0116】
操作650において、システムは、ルールセットに基づき操作セット中で1つ以上の違反を識別する。このルールセットは、
図2中のクライアント同期サービス156によって格納され、解消される必要がある操作について、複数の制約、不変式、または競合を指定することができる。このルールセットは、ツリーデータ構造に適用され、同期ビヘイビアの制御を援助することができる。また、このルールセットの中の各ルールは、そのルールの違反への解消に関連付けられる、またはその他の方法によりリンクされることができる。例えば、この解消は、操作セット中の1つ以上の操作の変更、1つ以上の操作の除去、1つ以上の操作の追加、サーバ状態もしくはファイル状態への1つ以上の追加アクション、またはアクションの組み合わせを備えることができる。
【0117】
操作セット中の各操作について、システムは、ルールセットのうちのいずれかのルールに違反しているかどうかを判定することができる。ルールに違反している場合に、システムは、違反の解消を識別し、操作655において、解消を実行する。この解消は、操作セット中の1つ以上の操作を修正するようなアクション、1つ以上の操作を除去する、もしくは追加するアクション、またはサーバ状態もしくはファイル状態上の追加アクションを備えることができる。
【0118】
解消アクションが実行されると、システムは、操作660において、解消及び操作セットに基づき、解消された、またはリベースされた操作セットを生成し、操作665において、解消された操作セットを実行のために適切なエンティティに提供することができる。例えば、管理された実行のために、解消された操作セットを
図2中のクライアント同期サービス146のスケジューラ230に提供することができる。代替に、操作セットがクライアント操作セットである場合に、解消された操作セットは、クライアントデバイスに提供されることができる。操作セットがサーバ操作セットである場合に、解消された操作セットは、コンテンツ管理サービスに提供されることができる。加えて、
図6の方法600は、順次に、並列して、またはさまざまな異なる順序で、クライアント操作セット、及びサーバ操作セット上で実行されることができる。
【0119】
いくつかの実施形態により、各操作タイプは、同一の、または異なる1セットのルールと関連付けられることができる。例えば、操作タイプは、例えば、コンテンツアイテムを追加すること、コンテンツアイテムを削除すること、コンテンツアイテムを編集すること、コンテンツアイテムを移動させること、コンテンツアイテムをリネームすることなどを含むことができる。操作セットは、上記の操作タイプのうちの1つに各属する操作からなることができる。各操作タイプは、特定の1セットのルールと関連付けられることができる。
【0120】
例示的な目的のために、「Add」操作タイプについての1セットのルールは、コンテンツアイテムについてのファイル識別子がツリー中で一意でなければならない(例えば、1つのツリー中の2つのノードが同一のファイル識別子を含むことができない)ようなルールを有することができ、コンテンツアイテムの親ノードのファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)は、対向するツリーデータ構造中に存在しなければならず、コンテンツアイテムについてのDirFileID及びファイル名の組み合わせは、対向するツリー中に使用されない。
【0121】
対向するツリーは、本明細書に使用される場合、対向するエンティティの状態を表すツリーデータ構造を指す。例えば、クライアントデバイス上で動作するように設定されるクライアント操作セット、及びクライアントデバイス上でのファイルシステムへの結果として生じる変更をローカルツリーに反映する。その結果、クライアント操作セットについて対向するツリーは、リモートツリーである。同様に、サーバ操作セットは、コンテンツ管理システムに送信され、実行されるように設定され、サーバ状態への結果として生じる変更は、リモートツリーに反映される。その結果、サーバ操作セットについて対向するツリーは、ローカルツリーである。
【0122】
図7は、さまざまな実施形態により、追加操作についてのルール違反を示すツリーデータ構造の実施例を示す。ツリーデータ構造は、リモートツリー710、同期ツリー750、及びローカルツリー770を含む。ローカルツリー770を参照するときに、リモートツリー710が対向するツリーとみなされることができる。一方、リモートツリー710を参照するときに、ローカルツリー770は、対向するツリーとみなされることができる。
図7は、ノード712によって表されるコンテンツアイテムをリモートツリー710中に追加する操作セットを示す。例えば、クライアント同期サービスは、リモートツリー710を同期ツリー750と比較して、これらの差異を識別し、ノード712の追加を含む操作セットを生成することができる。ノード712は、4のFileID、3のDirFileID(ノード712の親である、親ノード714を参照する)、及び「Hi」のファイル名と関連付けられる。親ノード714は、3のFileID、1のDirFileID(ノード714の親である、ルートノード716を参照する)、及び「Foo」のファイル名と関連付けられる。
【0123】
クライアント同期サービスは、
図6の方法600を実行し、ノード712についての追加操作が「追加」操作タイプについての「コンテンツアイテムのディレクトリファイル識別子(「DirFileID」)は対向するツリーデータ構造中に存在しなければならない」ルールに違反すると判定することができる。これは、ノード712の親ノード714を参照する、3のファイルIDを有するノードを含まないローカルツリー770によって
図7に示される。これは、例えば、リモートツリー710と同期ツリー750との間の差異が判定され、操作セットが生成された後に、ノード714に対応する「Foo」ノードが対向するツリーから除去されるときに発生し得る。
【0124】
このルールについて関連する解消は、ローカルツリー770から欠落するノードを同期ツリー750から削除して同期ツリー750及びローカルツリー770を同期させること、ならびにリモートツリー710及び同期ツリー750を再差分する(例えば、リモートツリー710と同期ツリー750との間の差分を見いだす)ことを備えることができる。
図7に示されるシナリオにおいて、同期ツリー750中のノード754は、除去され758、差分操作は、リモートツリー710と同期ツリー750との間の差分を識別し始める。これは、操作セット中のノード714の追加操作、及びノード712についての追加操作の包含をもたらす。
【0125】
同様に、「追加」操作タイプに対する「コンテンツアイテムについてのファイル識別子はツリー中で一意でなければならない」ルールの違反は、追加されるノードについて新規のファイルIDをコンテンツ管理システムから要求すること、及びノードを追加するときに新規のファイルIDを使用することを含む操作によって解消されることができる。「追加」操作タイプに対する「コンテンツアイテムについてDirFileID及びファイル名の組み合わせは対向するツリーに使用されない」ルールの違反は、これら2つのノードと関連するメタデータを介して、コンテンツアイテムが同一であるかどうかをチェックすることを含む操作によって解消されることができる。コンテンツアイテムが同一である場合に、追加されているコンテンツアイテムが他のアクション中にすでに追加されている可能性が高い。コンテンツアイテムが同一ではない場合に、追加されているコンテンツアイテムについてのファイル名をリネームすることができる。例えば、追加されているコンテンツアイテムについてのファイル名にtext「(競合したバージョン)」をアペンドすることができる。
【0126】
インクリメンタルプランナ
図3、4、及び7に示されるさまざまなツリーデータ構造が比較的に少ない数のノードを含み、構造において比較的に単純であるが、システムによってサポートされるツリーデータ構造は、複数のレベルについて、さらにより大きく複雑であり、各レベルにおいてノードの数が潜在的に多いことがある。その結果、操作中にツリーデータ構造を格納するために必要とされるメモリ使用量は、非常に大きい可能性があり、ツリーデータ構造上で動作するために必要とされる計算時間及びリソースは、非常に大きい可能性がある。例えば、リモートツリーと同期ツリーとの間の差異、及び/またはローカルツリーと同期ツリーとの間の差異を見いだすこと、ならびにリモートツリー及び同期ツリー、及び/またはローカルツリー及び同期ツリーを収束させるために必要とされる操作を生成することは、大量のメモリ、時間、及び他の計算リソースを必要とする可能性がある。
【0127】
残念ながら、これらの計算リソースは、限られている。例えば、クライアントデバイスは、限られた利用可能なメモリ量を有することができ、ツリーを差分して操作を生成するために必要とされる時間長は、コンテンツ管理システムによって提供される、クライアントデバイス、クライアントアプリケーション、またはコンテンツ管理サービスのユーザビリティを妨げる可能性がある。さらに、サーバ状態及びファイルシステム状態を収束させるために必要とされる時間が長くなるほど、いずれかの状態への間に起こる変更が計算される、または実行される操作セットをレンダリングする可能性がより高くなる、及び/または標的同期状態が古くなる可能性がより高くなる。その結果、本発明の技術のさまざまな実施形態は、サーバ状態及びファイルシステム状態を、そしてそれらを表すツリーデータ構造と共にインクリメンタルに収束させることによってさらなる技術的な改善を提供する。
【0128】
図8は、本発明の技術のさまざまな実施形態により、サーバ状態及びファイルシステム状態をインクリメンタルに収束させる例示的な方法800を示す。本明細書に記述される、特定の順序で、ある特定のステップ及び操作を備える、これらの方法及びプロセスを示すことができるが、同様の、もしくは代替の順序で、または並列して実行される、追加の、少数の、または代替のステップ及び操作は、特に明示されない限り、さまざまな実施形態の範囲内にある。この方法800は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などの、システムによって実装されることができる。
【0129】
操作805において、システムは、修正データを受信することができ、この修正データを使用して、リモートツリーまたはローカルツリーのいずれか一方を更新することができる。例えば、サーバ修正データは、コンテンツ管理サービスから受信され、コンテンツ管理システムによって格納される1つ以上のコンテンツアイテムと関連する修正または他のアクション(例えば、編集、追加、削除、移動、またはリネーム)を指定することができる。サーバ修正データを使用して、コンテンツ管理システムによって格納されるコンテンツアイテムのサーバ状態を表す、リモートツリーを更新することができる。同様にクライアント修正データは、クライアントデバイス(例えば、クライアントアプリケーション)から受信され、クライアントデバイス上に格納される1つ以上のコンテンツアイテムと関連する修正または他のアクションを指定することができる。クライアント修正データを使用して、クライアントデバイス上に格納されるコンテンツアイテムのファイルシステム状態を表す、ローカルツリーを更新することができる。
【0130】
操作810において、コンテンツアイテムと関連する修正を指定する受信した修正データに基づき、システムは、修正されたコンテンツアイテムに対応するノードを識別し、これらのノードを修正されたコンテンツアイテムのリストに追加する(例えば、ノードと関連するファイル識別子を修正されたコンテンツアイテムのリストに追加する)ことができる。操作805及び810は、システムが方法800の次の段階に進む前にしばらくの間、連続して発生する場合がある。例えば、追加の修正データを受信して使用し、システムによって管理されるツリーを更新し、ノードを修正されたコンテンツアイテムのリストに追加することができる。
【0131】
サーバ状態及びファイルシステム状態をインクリメンタルに収束させるために、操作815において、システムは、修正されたコンテンツアイテムのリスト中の各ノードを取得し、ノードが修正された方法(例えば、どのアクションがノードと関連付けられるか)を判定する。いくつかの実施形態において、修正データは、ノードへの修正を指定することができる。しかしながら、他の実施形態において、システムは、リモートツリーの同期ツリーとの比較、及び/またはローカルツリーの同期ツリーとの比較に基づきノードへの修正を判定することができる。例えば、これらの修正は、ノードの追加、ノードの削除、ノードの編集、またはノードの移動を含むことができる。
【0132】
修正されたコンテンツアイテムのリスト中の各ノード、またはこのノードについてのファイル識別子に対して、システムは、もしあれば、ノード上に実行された修正を判定する、一連のチェックを実行することができる。例えば、システムは、ファイル識別子が同期ツリー中にあるが、リモートツリー中にないかどうかを判定することができる。リモートツリー中に見いだされない同期ツリー中のファイル識別子は、ノードがリネームツリーによって表されるサーバ状態から削除されたことを示すことができる。その結果、クライアント同期サービスは、ノード上の削除修正がリモートツリー上で発生したと判定することができる。同様に、システムは、ファイル識別子が同期ツリー中にあるがローカルツリー中にないかどうかをも判定することができる。ローカルツリー中に見いだされない同期ツリー中のファイル識別子は、ノードがローカルツリーによって表されるファイルシステム状態から削除されたことを示すことができる。その結果、クライアント同期サービスは、ノード上の削除修正がローカルツリー上で発生したと判定することができる。
【0133】
編集修正がノード上で実行されたかどうかを判定するために、システムは、同期ツリー中のノードについてのメタデータを、リモートツリー及び/またはローカルツリー中の対応するノード(例えば、同一のファイル識別子を有するノード)についてのメタデータと比較することができる。このメタデータは、ノードによって表されるコンテンツアイテムが編集されたかどうかを判定するために使用されることができる情報を含むことができる。例えば、メタデータは、コンテンツアイテム中のデータ、またはそれらの一部に基づき生成される1つ以上のハッシュ値を含むことができる。加えて、または代替に、メタデータは、コンテンツアイテムについてのサイズ値、最後に修正された値、または他の値を含むことができる。メタデータがマッチングしない場合に、コンテンツアイテムの編集は、リモートツリーによって表されるサーバ状態、及び/またはローカルツリーによって表されるファイルシステム状態において編集された可能性がある。その結果、システムは、編集アクションがリモートツリー及び/またはローカルツリー上のノードに対して発生したと判定することができる。
【0134】
リモートツリー中のノードが移動したかどうかを判定するために、システムは、同期ツリー中のノードについての位置を、リモートツリー及び/またはローカルツリー中の対応するノード(例えば、同一のファイル識別子を有するノード)についての位置と比較することができる。この位置は、例えば、ノードが位置しているパス、ファイル名、及び/またはノードの親のファイル識別子を指定するディレクトリファイル識別子(「DirFileID」)を含むことができる。これらの位置がマッチングする場合に、移動は、起こらなかった可能性がある。一方、これらの位置がマッチングしない場合に、コンテンツアイテムの移動は、リモートツリーまたはローカルツリーに起こった可能性がある。その結果、クライアント同期サービスは、移動アクションがリモートツリー及び/またはローカルツリー上のノードに対して発生したと判定することができる。
【0135】
ノードをリモートツリーに追加したかどうかを判定するために、システムは、修正されたコンテンツアイテムのリスト中のファイル識別子がリモートツリー中に、またはローカルツリー中にあるが同期ツリー中にないかどうかを判定することができる。ファイル識別子がリモートツリーまたはローカルツリー中に見いだされ、同期ツリー中に見いだされない場合に、システムは、このノードについて追加修正が発生したと判定することができる。
【0136】
修正されたコンテンツアイテムのリスト中のノードへの1つ以上の修正を判定すると、システムは、操作820において、これらの修正のいずれかが依存性を有するかどうかを判定することができる。
図9に関してさらに説明されるように、例えば、修正は別の修正が最初に発生することなく実行されることができないときに、ノード上の修正は、依存性を有する。
【0137】
修正が依存性を有さない場合に、操作825において、システムは、修正をアクションのブロックされていないリストに追加する。修正が依存性を有する場合に、修正は、操作830において当分の間ブロックされ、別の修正が最初に処理されることなく実行されることができない。各修正を処理した後に、システムは、これらの修正と関連するファイル識別子を、修正されたコンテンツアイテムのリストからクリアすることができる。
【0138】
図9は、さまざまな実施形態により、ツリーデータ構造の実施例を示す。
図9に示されるツリーデータ構造をクライアントデバイスに格納し、
図2中のクライアント同期サービス156などのシステムによって管理することができる。説明目的のために、リモートツリー910及び同期ツリー950のみを
図9に示し、説明する。また、同様の操作及び説明をローカルツリーにも適用することができる。
【0139】
リモートツリー910は、1のファイル識別子を有するルートノード912、5のファイル識別子及び「Foo」のファイル名を有するノード914、6のファイル識別子及び「Bar」のファイル名を有するノード916、ならびに7のファイル識別子及び「Bye」のファイル名を有するノード918を含む。同期ツリーは、1のファイル識別子を有するルートノード952を含む。
【0140】
図9に示されるツリーデータ構造に基づき、システムは、5、6、及び7のファイル識別子を有するノードを操作810において修正したことを識別し、
図9中の参照番号980によって示されるような、修正されたコンテンツアイテムのリストにこれらのノードを追加した可能性がある。操作815において、システムは、修正されたコンテンツアイテムのリスト中のノードへの修正リストを決定する。リモートツリー910及び同期ツリー950の比較によって示されるように、ノード914、916、及び918をリモートツリー910に追加した。より具体的に、
図9中の参照番号982によって示されるように、ファイル識別子6及び名前「Bar」を有するノード916を子として、ファイル識別子5を有するノード914に追加した。これは、参照番号982中の「Add(6,5,Bar)」エントリによって表される。ファイル識別子7及び名前「Bye」を有するノード918を子として、ファイル識別子5を有するノード914に追加した。これは、参照番号982中の「Add(7,5,Bye)」によって表される。ファイル識別子5及び名前「Foo」を有するノード914を子として、ファイル識別子1を有するルートノード912に追加した。これは、参照番号982中の「Add(5,/root,Foo)」エントリによって表される。
【0141】
操作820において、システムは、ノード914の追加修正が依存性を有さず、結果としてブロックされていないと判定する。その結果、操作825において、システムは、ノード914と関連する修正(例えば、参照番号982中の「Add(5,/root,Foo)」エントリによって表される修正)をブロックされていないアクションリストに追加する。これは、
図9中の参照番号984に示される。一方、参照番号982中の「Add(6,5,Bar)」及び「Add(7,5,Bye)」エントリによって表されるノード916及び918についての修正は、最初に発生する「Add(5,/root,Foo)」によって表される修正に依存している。換言すれば、ノード914を追加するまで、ノード916及び/またはノード918を追加することができない。その結果、これらの修正を
図9中の参照番号986によって示されるブロックされたアクションリスト中に含む。
【0142】
図8の方法800に戻り、操作835において、システムは、修正セットをブロックされていないアクションリストから選択し、選択された修正セットに基づき操作セットを生成することができる。操作セットは、サーバ状態及びファイルシステム状態を収束させるように設定される。生成される操作セットは、ブロックされていないリストから選択された修正セットに依存する。例えば、選択された修正セットが
図9中のノード914と関連する追加修正(例えば、参照番号984中の「Add(5,/root,Foo)」エントリによって表される修正)を含む場合に、生成された操作セットは、追加されたコンテンツアイテムをコンテンツ管理システムから取得すること、及びそれをクライアントデバイスのローカルファイルシステムに追加することを含むことができる。
【0143】
いくつかの実施形態により、システムは、すべての修正を、ブロックされていないアクションリストから選択し、1つ以上の操作セットを生成することができる。しかしながら、いくつかのシナリオにおいて、ブロックされていないリスト中の修正数は、かなり多い可能性があり、すべての修正を処理するために必要とされる計算リソース(例えば、メモリ及び処理時間)は、相当である。これらの技術的な負担を軽減させるために、システムは、インクリメンタルに処理するためにブロックされていないアクションリスト中で、より少ない修正セットを選択することができる。例えば、システムは、修正の最初の、または上位のX番またはパーセントを選択し、操作を生成することができる。プロセスのさらなる繰り返しにおいて、ブロックされていないリスト中のリネーム修正を処理することができる。
【0144】
いくつかの実施形態において、ブロックされていないリスト中の修正を処理についてランク付けすることができる。これらの修正は、例えば、修正タイプ(例えば、削除修正を追加修正より優先的に扱う)、この修正と関連するメタデータ(例えば、より小さいサイズのコンテンツアイテムの追加修正をより大きいサイズのコンテンツアイテムの追加修正より優先的に扱い、より大きいサイズのコンテンツアイテムの削除修正をより小さいサイズのコンテンツアイテムの削除修正より優先的に扱うなど)に基づきランク付けされることができる。
【0145】
これらのランク付けルールは、システムによって格納されることができ、コンテンツ同期のためにさまざまなパフォーマンス目標を達成するように設計されることができる。例えば、新規のコンテンツアイテムを追加することができる前に、潜在的に限られたストレージスペースをユーザに対してできるだけ多く解放するために、削除修正を追加修正より優先的に扱うことができる。追加されるコンテンツアイテムの数に関してできる限りの進捗をできるだけ早く提供するために、より多いコンテンツアイテムより、より少ないコンテンツアイテムの追加を優先的に扱うことができる。
【0146】
操作835において、システムは、操作セットをコンテンツ管理システム及び/またはクライアントデバイスに提供することができる。上述されるように、コンテンツ管理システムによって実行されるアクションと関連する修正を、クライアントデバイスに反映しない場合がある。その結果、このシナリオにおいて、システムは、クライアントデバイス上に格納されるコンテンツアイテム上で動作し、サーバ状態及びファイルシステム状態を収束させるように設定されるクライアント操作セットを生成することができ、操作835における実行のために、このクライアント操作セットをクライアントデバイスに提供することができる。
【0147】
一方、クライアントデバイスによって実行されるアクションと関連する修正を、コンテンツ管理システムに反映しない場合がある。その結果、このシナリオにおいて、システムは、コンテンツ管理システムによって格納されるコンテンツアイテム上で動作し、サーバ状態及びファイルシステム状態を収束させるように設定されるサーバ操作セットを生成することができ、操作835における実行のために、このサーバ操作セットをコンテンツ管理システムに提供することができる。
【0148】
いくつかの事例において、両方の事例は、真であることができ、操作835において、クライアント操作セット及びサーバ操作セットを生成し、それらの意図されたレシピエントに提供することができる。また、操作セットは、ツリー制約が維持されていることを確保するために、複数のチェックを含むことができる。例えば、操作セットは、
図6に関して考察されるように、さまざまな競合または制約を解消することができる。
【0149】
操作セット(複数可)を意図されたレシピエント(複数可)に提供すると、方法は、操作805に戻り、新規の修正データを待機することができる。例えば、
図9に示されるシナリオに関して、操作セットは、ノード914と関連するコンテンツアイテムをコンテンツ管理システムから取得すること、及びそれをクライアントデバイスのローカルファイルシステムに追加することを備えることができる。これは、ローカルツリー(
図9に示されない)及び同期ツリー950中のノード914に対応するノードの追加をもたらす。
図8のプロセス800の次の繰り返しに、参照番号982における「Add(6,5,Bar)」及び「Add(7,5,Bye)」エントリによって表されるノード916及びノード918の追加修正は、それらの親ノード914を同期ツリーに既に追加したため、もはやブロックされない。その結果、参照番号982における「Add(6,5,Bar)」及び「Add(7,5,Bye)」エントリによって表されるノード916及びノード918の追加修正は、ブロックされていないアクションリストに追加され、サーバ状態及びファイルシステム状態を収束させるように設定される1つ以上の操作セットを生成するために使用されることができる。
【0150】
操作セット(複数可)は、サーバ状態及びファイルシステム状態のインクリメンタルな収束のために1つ以上のステップを提供することができる。インクリメンタルなプロセスを実装することにより、ときとしてさらに複雑になる可能性があるが、インクリメンタルなプロセスは、処理時間における短縮、及び必要とされるメモリにおける減少を達成することができる。これらの、また他の最初の技術的な改善は、さらなる技術的な改善に当然通じる。例えば、処理時間が短縮するため、もはや用いられない、または古い、ある特定の修正を行うクライアントデバイスまたはコンテンツ管理システムからの追加の変更の尤度も低下させる。
【0151】
図9に関して、説明目的のために、コンテンツアイテム、修正、アクション、またはファイル識別子のさまざまなグループ化をリストとして記述する。他のタイプのデータ構造も互換性がある。例えば、ブロックされていないアクションリストは、データをソートし続け、対数時間中に検索、順次アクセス、挿入、及び削除を可能にするために、Bツリーデータ構造として実装されることができる。
【0152】
スケジューラ
いくつかの実施形態において、クライアント同期サービスは、サーバ状態及びファイルシステム状態を収束させるように設定される操作セットまたは操作シーケンスを生成し、これらの操作を実行のためにコンテンツ管理システムまたはクライアントデバイスに提供することができる。しかしながら、いくつかのシナリオにおいて、クライアントデバイスのファイルシステム上での変更、またはコンテンツ管理システム上での変更は、操作セットが実行プロセス中である間に、生成された操作セットが古くなる、またはもはや用いられなくなる原因となる可能性がある。さまざまな実施形態は、これらの課題及び他の技術的な課題への技術的な解決策を提供することに向けられる。例えば、クライアント同期サービスは、クライアントデバイスのファイルシステム上での変更、またはコンテンツ管理システム上での変更を監視し、必要に応じてクライアントデバイス及び/またはコンテンツ管理を更新するように設定され得る。さらに、クライアント同期サービスは、操作の同時発生的な実行を可能にすることによって、パフォーマンスを改善し、処理時間を短縮するように設定され得る。
【0153】
いくつかの実施形態により、
図2に示されるクライアント同期サービス156のプランナ225は、順序付けされていない操作セットからなるプラン、または操作プランを生成することができる。プラン内のすべての操作は、依存性を有さず、結果として、別々のスレッドで、またはいずれかの順序で同時に実行され得る。プランにおけるこれらの操作は、いくつかの実施形態により、状態及びツリーデータ構造を収束させるために、コンテンツ管理システム及び/またはクライアントデバイスによって行われることができる抽象的な命令である。例示的な命令は、コンテンツアイテムのリモートもしくはローカル追加、コンテンツアイテムのリモートもしくはローカル削除、コンテンツアイテムのリモートもしくはローカル編集、またはコンテンツアイテムのリモートもしくはローカル移動を含むことができる。
【0154】
図2に示されるクライアント同期サービス156のスケジューラ230は、プランナ225から操作プランを受信し、プラン中の操作の実行を管理し、プランが更新されたか、変更されたかどうかを判定し、更新された、または変更されたプランの実行を管理するように設定され得る。例えば、スケジューラ230は、ファイルシステムインタフェース205及びサーバインタフェース210を調整し、プラン中の操作を実装するために必要とされるタスク及びステップを実行することができる。これは、ファイルシステムもしくはコンテンツ管理システムから確認、またはネットワーク接続がないときの、もしくはコンテンツアイテムがいくつかの他のアプリケーションによってロックされているときの再試行のハンドリングなどの、エラーハンドリングアクティビティを受信することを含むことができる。
【0155】
各操作は、タスクと称されるスクリプトまたはスレッドによって実装されることができる。タスクは、関連した操作のアプリケーションを調整し、この操作を実装するために必要とされる1つ以上のステップを含むことができる。例えば、「ローカル追加操作」は、コンテンツアイテムをクライアントデバイスのローカルファイルシステムに追加し、結果として、サーバ状態及びファイルシステム状態を同期させるために、コンテンツアイテムをコンテンツ管理システムに追加したことを示すことができる。その結果、ローカル追加操作は、ローカル追加操作を実装するために必要とされる1つ以上のステップを含む「ローカル追加タスク」と関連付けられることができる。これらのステップは、新規のコンテンツアイテムのコンテンツ管理システムに通知すること、1つ以上のデータブロック中のコンテンツアイテムをコンテンツ管理システムにアップロードすること、すべてのデータブロックをコンテンツ管理システムによって受信したことを確認すること、コンテンツアイテムが破損していないことを確かめること、コンテンツアイテムについてのメタデータをコンテンツ管理システムにアップロードすること、及びコンテンツアイテムの追加をコンテンツ管理システムにおける適切な位置にコミットすることのうちの1つ以上を備えることができる。
【0156】
タスクは、実行を開始し、他のイベントの完了を待つ間に良定義ポイントでサスペンドし、イベントが発生したときに再開し、最終的に終了することができる。いくつかの実施形態により、スケジューラ230は、タスクをキャンセルする、再生成する、または置換するように設定される。例えば、サーバ状態またはファイルシステム状態への変更に基づき、タスクは、それが実行される前に古くなる可能性があり、スケジューラ230は、それが実行される前に古くなったタスクをキャンセルすることができる。
【0157】
上述されるように、プランナ225は、1セットのツリーデータ構造(例えば、リモートツリー、同期ツリー、及びローカルツリー)に基づき操作プランを生成することができる。経時的に、プランナ225は、ツリーデータ構造のステータスに基づき操作プランを生成し続ける。ツリーデータ構造がサーバ状態及びファイルシステム状態の状態を反映するために変更される場合に、プランナ225は、前のプランと異なる新規に更新されたプランも生成することができる。スケジューラ230は、プランナ225によって生成される各操作プランを実行する。
【0158】
いくつかのシナリオにおいて、後のプランの操作における変更は、意図されていないビヘイビアが実行プロセス中である前のプラン中の操作と競合する原因となる可能性がある。例えば、第一プラン中の操作を実行している場合に、これらの操作のうちの1つ以上は、第二プランにおいてキャンセルされる(または存在していない)。図示するように、
図10は、時間t1に、リモートツリーによって表されるサーバ状態、及びローカルツリーによって表されるファイルシステム状態が、すべてマッチングするリモートツリー、同期ツリー、及びローカルツリーによって示されるように同期している例示的なシナリオを示す。この同期した状態に基づき、プランナ225は、t1で操作(例えば、空のプラン)を含まないプランを生成することができる。
【0159】
クライアントデバイス上のユーザは、コンテンツアイテムAをローカルファイルシステムから削除する、またはクライアント同期サービス156によって管理されるフォルダからコンテンツアイテムAを移動させることができ、これは、時間t2におけるノードAのローカルツリーからの除去によって反映される。プランナ225は、時間t2にツリーデータ構造の状態に基づき操作LocalDelete(A)を含むプランを生成することができる。スケジューラ230は、LocalDelete(A)操作を実装するために必要とされるタスクまたはステップを開始することができる。これらのステップは、コンテンツアイテムAを削除する命令をコンテンツ管理システムに送信することを備えることができる。
【0160】
コンテンツアイテムAを削除する命令をコンテンツ管理システムに送信した後に、クライアントデバイス上のユーザは、コンテンツアイテムAの削除を取り消す、またはコンテンツアイテムAを移動させて前の位置に戻すことができる。時間t3にこの新規のアクションに基づきローカルツリーを更新し、プランナは、操作を含まない空である新規のプランを生成することができる。もう一度、ツリーデータ構造は、マッチングし、システムは、時間t3に同期した状態にある。
【0161】
しかしながら、コンテンツアイテムAを削除する命令をコンテンツ管理システムに送信したため、コンテンツ管理システムは、コンテンツアイテムAをサーバ状態から削除する。スケジューラ230がコンテンツアイテムAの削除をキャンセルすることを試行する可能性があるが、これらの命令を既に送信し、コンテンツ管理システムによって完了した可能性がある。サーバにおけるこの変更をクライアント同期サーバ156に通信し、時間t4にノードAを削除することによってリモートツリーを更新する。プランナ225は、リモートツリー中の変更、及びリモートツリーと同期ツリーとの間の差異を認め、コンテンツアイテムAをサーバ状態において除去したと判定することができる。その結果、プランナ225は、時間t4におけるRemoteDelete(A)操作をプランに作成する。サーバ状態及びファイルシステム状態を同期させる試みの中で、コンテンツアイテムAをクライアントデバイス及びローカルツリーから最終的に削除する。
【0162】
問題を起こすような方法で、コンテンツアイテムAのサーバ状態からの除去、RemoteDelete(A)操作の生成、及びコンテンツアイテムAのファイルシステム状態からの結果として起きる除去は、すべてが意図されず、ユーザに対して将来においてさらなる問題を引き起こす可能性がある。さらに、いくつかの事例において、アプリケーションまたはプロセスも、コンテンツアイテムにアクセスすることができ、意図しない同期ビヘイビアは、次々と追加の技術的な問題を引き起こす可能性がある。さまざまな実施形態は、サーバ状態とファイルシステム状態との間のコンテンツアイテムの同期における意図しない結果を防ぐことに向けられる。
【0163】
いくつかの実施形態により、もはや操作プランにない古くなった操作についてのタスクをキャンセルするときに、スケジューラ230は、他のタスクの実行を開始することに取りかかる前に、キャンセルが完了するのを待機することができる。例えば、スケジューラ230は、他のタスクを進める前にクライアントデバイスまたはコンテンツ管理システムからキャンセルの確認を受信するために待機することができる。スケジューラ230は、タスクを開始したかどうかを判定することができ、そしてタスクを開始していない場合に、スケジューラは、タスクをキャンセルし、タスクがもはや実行を待機していないことを確認することができる。タスクを開始した場合に、この確認は、クライアントデバイスまたはコンテンツ管理システムからのものであり、キャンセルされたタスクと関連するすべてのステップが取り消されたことをスケジューラに通知することができる。いくつかの実装に従い、スケジューラ230は、タスクを開始するとタスクのキャンセルを許可しない。これは、すべてのタスク、またはタスクもしくはタスクタイプ(例えば、サーバ状態との同期のためにファイルシステム状態上の更新をコンテンツ管理システムに送信するコミットタスク)のある特定のサブセットについての事例にあり得る。
【0164】
パフォーマンスを改善し、タスクの同時実行、及びタスクのキャンセルを可能にするために、スケジューラ230は、そのうえ、第一操作プランと更新された第二操作プランとの間の差異に基づきタスクの実行及びキャンセルを管理するように設定され得る。
図11は、本発明の技術のさまざまな実施形態による、2つの操作プランの例示的なベン
図1100表現を示す。プランナ225は、第一操作セットを含むプラン1 1110を生成し、ツリーデータ構造への更新を受信し、第二操作セットを含む更新されたプラン2 1120を生成することができる。
【0165】
プラン1 1110及びプラン2 1120は、ベン
図1100の部分1130によって表される複数の共通操作を共有することができる。また、プラン1 1110及びプラン2 1120は、共通ではない複数の操作を共有することができる。例えば、プラン2 1120中にはないプラン1 1110中の操作は、古く、プランナ225によって検出されるツリー構造への更新に基づき、もはや最新ではない。プラン1 1110のこれらの古い操作は、ベン
図1100の部分1140によって表される。プラン1 1110中にないプラン2 1120中の新規の操作は、部分1150によって表される。プラン1 1110とプラン2 1120との間の差異及び共通性を表す、部分1130、1140、及び1150のそれぞれは、ツリーデータ構造中に反映されるサーバ状態及びファイルシステム状態への更新に依存する、操作を含まなくても、多くの操作を含んでもよい。
【0166】
部分1140中の操作は、もはや最新のプランにはないため、スケジューラ230は、これらの操作と関連するタスクをキャンセルすることができる。意図されない同期ビヘイビアを防ぐために、プラン1中にはないプラン2中の(例えば、部分1150中の)操作と関連するタスクは、部分1140中の操作と関連するタスクのキャンセルが完了するまで延期される。しかしながら、各プラン中の操作は、同時に実行されることができるように設定されるため、部分1130によって表されるプラン1及びプラン2の共通部分中の操作と関連するタスクは、それらの完了を待機する必要なしに、部分1140中の操作と関連するタスクのキャンセルと同時に実行されることができる。部分1140と関連するタスクの同時キャンセル、及び部分1130と関連するタスクの実行を可能にすることによって、利用可能な計算リソースのさらに効率的な使用だけではなく、処理時間の短縮も達成することができる。
【0167】
図12は、本発明の技術のさまざまな実施形態による、操作プラン中の変更を管理する例示的な方法を示す。本明細書に記載されるこれらの方法及びプロセスが特定の順序で、ある特定のステップ及び操作によって示されることができるが、同様の、もしくは代替の順序で、または並列して実行される追加の、より少ない、または代替のステップ及び操作は、別段の定めがない限り、さまざまな実施形態の範囲内にある。この方法1200は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などのシステムによって実装されることができる。
【0168】
このシステムは、コンテンツ管理サービスと関連するコンテンツアイテムについて、コンテンツ管理システム及び/またはクライアントデバイスから更新を受信するように設定されることができる。例えば、システムは、コンテンツ管理サービスによって格納されるコンテンツアイテムについてのサーバ修正データを受信し、このサーバ修正データに基づき、リモートツリーを更新することができる。このリモートツリーは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表す。また、システムは、クライアントデバイス上に格納されるコンテンツアイテムについてのクライアント修正データを受信し、このクライアント修正データに基づきローカルツリーを更新することができる。ローカルツリーは、クライアントデバイス上に格納されるコンテンツアイテムについてのファイルシステム状態を表す。
【0169】
操作1205において、システムは、コンテンツ管理システムと関連するサーバ状態、及びクライアントデバイスと関連するファイルシステム状態を収束させるように設定される第一操作セットを受信することができる。例えば、システムは、同期ツリーとリモートツリーとの間の、または同期ツリーとローカルツリーとの間の差異を識別し、これらのツリー間のいずれかの差異に基づき第一操作セットを生成することができる。同期ツリーは、サーバ状態とファイルシステム状態との間の既知の同期状態を表す。
【0170】
システムは、第一操作セットを実装し始めることができる。例えば、いくつかの事例において、これらの操作は、実行のためにコンテンツ管理システム及び/またはクライアントデバイスに送信されるフォーマット準備中である。他の事例において、これらの操作は、システムによって管理されることができる1つ以上のタスク、スクリプト、または実行スレッドに変換されることができる。システムは、サーバ状態及びファイルシステム状態を収束させるために、タスク、スクリプト、または実行スレッドに従い、コンテンツ管理システム及び/またはクライアントデバイスとインタフェースすることができる。
【0171】
この時間中に、システムは、コンテンツ管理サービスと関連するコンテンツアイテムについての修正データをコンテンツ管理システム及び/またはクライアントデバイスから受信し続けることができる。修正データに基づき、システムは、リモートツリーまたはローカルツリーを更新し、これらのツリーデータ構造への更新に基づき第二操作セットを生成することができる。操作1210において、システムは、第二操作セットを受信することができる。
【0172】
操作1215において、システムは、もしあれば、第二操作セット中にはない第一操作セット中の第一操作を識別する。システムが第二操作セット中にはない第一操作セット中の操作を見いだす場合に、この操作は、修正データ中に指定される変更の結果として、古く、今は使われていない可能性がある。その結果、システムは、操作1220において第一操作のキャンセルを開始する。第一操作のキャンセルは、複数のステップ、これらのステップの複数の確認受信、及び自明でない処理時間量を有することができる。
【0173】
操作1225において、システムは、もしあれば、第一操作セット及び第二操作セットの両方の中に含まれる第二操作を識別する。このシステムが第一操作セット及び第二操作セットの両方の中で操作を見いだす場合に、この操作は、修正データ中で指定された変更にもかかわらず、まだ有効であり得る。さらに、両方の操作セット中の操作がセット中の他の操作について同時に、またはいずれかの順序で実行されることができるように設定されることから、第二操作は、第一操作がキャンセルされていながら、実行を継続することができる。その結果、システムは、第一操作がキャンセルを完了するのを待機せずに、操作1230において第二操作の実行を開始する。
【0174】
操作1235において、システムは、もしあれば、第二操作セット中にあるが第一操作セット中にない第三操作を識別する。このシステムが第一操作セット中にない操作を第二操作セット中に見いだす場合に、この操作は、修正データ中で指定される変更の結果として、新規の操作であり得る。意図されない結果を防ぐために、システムは、第一操作のキャンセルの完了について待機を開始する。操作1240において、システムは、第一操作がキャンセルを完了したと判定し、結果として、操作1245において第三操作の実行を開始することができる。
【0175】
ローカルツリーの更新
上述されるように、ローカルツリーは、クライアントデバイスのローカルファイルシステム上に格納されるコンテンツアイテムについてのファイルシステム状態を反映するように設定される。例えば、
図2中のクライアント同期サービス156のファイルシステムインタフェース205は、クライアントデバイスのローカルファイルシステムに変更(例えば、1つ以上のコンテンツアイテムの追加、削除、移動、編集、またはリネーム)を行い、ローカルファイルシステムへの変更を検出し、ローカルファイルシステムへの変更に基づきローカルツリーを更新するように設定される。これらの変更は、ファイルシステム上でのユーザアクション、クライアントデバイス上で実行する第三者のアプリケーション、またはファイルシステム状態をサーバ状態と同期させるクライアント同期サービスによって引き起こされることができる。
【0176】
本発明の技術のさまざまな実施形態は、ローカルファイルシステムへの変更に基づきローカルツリーを更新することへのさまざまな技術的な解決策を提供する。ローカルツリーは、他のツリーデータ構造に加えて、さまざまな実施形態においてクライアントデバイスとコンテンツ管理システムとの間の同期プロセスにきわめて重要である。例えば、ローカルツリーへの更新が行われると、残りのシステムは、この更新に反応し、いくつかの事例では、コンテンツ管理システムにおいてサーバ状態にローカルツリーへの変更を同期させ、適用することができる。その結果、ローカルツリーが更新される方法について注意することが重要である。
【0177】
例えば、ユーザがファイルをA.txtからB.txtにリネームする場合に、いくつかの事例で、システムは、コンテンツアイテムA.txtの削除、及びコンテンツアイテムB.txtの追加を検出することができる。これにより、A.txtについてのノードをローカルツリー上で削除させ、B.txtについてのノードを追加させることができる。ただし、これにより、しばらくの間、リネームされたコンテンツアイテムについてのノードがローカルツリー上に存在しない事例をもたらす。これにより、B.txtについてのノードを追加する前に、クライアントデバイス、クライアントアプリケーション、及び/またはクライアント同期サービスが遮断される、失敗する、またはリブートする可能性があるため、データ整合性への著しい損傷の原因となり、結果として、ユーザのコンテンツアイテムを損失する。次いで、ユーザのコンテンツアイテムの損失は、コンテンツ管理システムにおいてサーバ状態に同期することができる。同様のリスクは、ある位置から別の位置にコンテンツアイテムを移動させるユーザと関連付けられる。
【0178】
加えて、ローカルファイルシステムへの変更は、順不同で検出されることができ、必ずしもユーザまたはアプリケーションによる単一のアクションにすべて関連していない多数の変更を含む可能性がある。また、クライアントアプリケーションは、ローカルファイルシステムへ多くの変更が行われている間、オフにされる、または実行されないことができる。起動時に、クライアントアプリケーションは、ローカルファイルシステムをクロールし、それをローカルツリーと比較し、クライアントアプリケーションがオフであった間に発生したローカルファイルシステムへの変更を判定することができる。これらの変更は、適切な経時的な順序にはない可能性がある。また、これらの因子は、ローカルツリーが注意深く更新されない場合に、意図されない同期ビヘイビアをもたらす可能性がある。
【0179】
制約セットを使用して、ツリーデータ構造の整合性を確保し、意図されない同期ビヘイビアから保護することができる。これらの制約は、例えば、(1)ツリー中のすべてのノードがファイル識別子(fileID)と関連付けられること、(2)ツリー中のすべてのノードが一意のファイル識別子を有すること、(3)空ではない親ノードが削除され得ないこと、(4)削除されたノードがクライアント同期サービスによって管理される位置から実際に削除される(移動するだけではなく)、または除去されること、(5)すべての兄弟ノードが大文字小文字に関係なく一意のファイル名を有すること、(6)すべてのノードが既存の親を含まなければならないこと、及び/または(7)すべての兄弟ノードがそれらの親のファイルID(DirFileID)に一致することを備えることができる。いくつかの実装において、上記の制約サブセットを使用することができる、代替の、もしくは追加の制約を使用することができる、または組み合わせを使用することができる。制約の異なる1セットまたは複数セットを他のツリーデータ構造に適用することができながら、制約の1セットをすべてのツリーデータ構造、またはツリーデータ構造の1サブセットのみに適用することができる。
【0180】
ローカルファイルシステムへの変更を検出するときに、この変更を制約セットに対してチェックすることができる。変更が制約セットと一貫性がある場合に、ローカルツリーは、ローカルファイルシステムへの変更に基づき更新されることができる。変更が制約のうちの1つに違反する場合に、この制約は、追加の条件が満たされる必要がある場合がある。例えば、制約は、これらの変更をローカルツリーに適用することができる前に追加のパスが観測される、もしくはファイルイベントが発生する、1つ以上の修復ステップが実行される、または組み合わせをする必要がある場合がある。ある特定の制約(例えば、修復ステップが行われる、追加のパスが観測される、またはファイルイベントが発生する)を満たすためにアクションが発生する場合に、他の制約に違反している可能性がある。その結果、すべての制約を満たすまで、制約セットを連続してチェックすることができる。これらの制約を満たすと、ファイルイベントと関連する変更をローカルツリーに適用することができる。
【0181】
ファイルイベントは、ローカルファイルシステム上で検出される変更に応答してクライアント同期サービス156によって検出されることができる。各ファイルイベントは、コンテンツアイテム(例えば、コンテンツアイテムについてのファイル識別子)、及びイベントタイプ(例えば、追加、移動、削除、または編集イベントタイプ)と関連付けられることができる。また、各ファイルイベントは、関連したコンテンツアイテムのパスまたは位置を指定するパスと関連付けられることができる。検出されたファイルイベントと関連するパスは、クライアント同期サービスによって観測されるパスセットを投入することができる。しかしながら、いくつかの事例において、これらのパスは、1つ以上の制約違反によってファイルイベントに対応しないと観測されることができる。
【0182】
図13は、本発明の技術のさまざまな実施形態により、例示的なシナリオを示す。特に、
図13は、ファイルイベント1315を検出するときのローカルツリー1310の現在の状態を示す。例えば、クライアント同期サービスは、ファイルシステムをローカルツリー1310と比較し、path/root/a/b/c.txtにおいてファイルシステムにコンテンツアイテムが存在するが、/root/a/b/c.txtにおいてコンテンツアイテムについてのノードがローカルツリー1310に存在しないことを見いだすことができる。その結果、ローカルツリー1310上に必要とされる/root/a/b/c.txtにおけるノードの追加を指定する、ファイルイベント1315を生成することができる。
【0183】
クライアント同期サービスは、更新のためにファイルイベント1315を観測されたパスセットに追加し、観測されたパス1320が制約セットと一貫性があるかどうかを判定し、観測されたパス1320またはファイルイベント1315がセット中の制約のうちの1つに違反することを見いだすことができる。
図13に示されるシナリオにおいて、観測されたパス1320は、「すべてのノードが既存の親を有さなければならない」制約に違反する。より具体的に、/root/a/b/c.txtに追加されるノードの親は、存在せず、ノードの祖父母も存在しない。その結果、追加のパス(親及び祖父母ノード)は、変更をローカルツリーに適用する前に観測されなければならない。
【0184】
クライアント同期サービスは、更新のために、追加のファイルイベントを検出し、それらを観測されたパスセットに追加することができる。例えば、クライアント同期サービスは、/root/aのファイルイベント、及びAdd/root/a/bのファイルイベントを検出し、/root/aのパス及びAdd/root/a/bのパスを観測されたパスセットに追加することができる。これらのパスを観測すると、違反された制約を満たす(そして他の制約に違反していない)。結果として、更新のために観測されたファイルイベントのすべてをローカルツリーに適用することができる。より具体的に、ノードを/root/aに追加することができ、ノードを/root/a/bに追加することができ、ノードを/root/a/b/c.txtに追加することができる。その結果、クライアント同期サービスは、アトミックまたはユニタリ更新について関連したファイルイベントを合わせてグループ化する。さらに詳細に記載されるように、ローカルツリーへのアトミック更新について関連したファイルイベントを合わせてグループ化することにより、ツリーデータ構造の整合性を向上させ、意図されていない同期ビヘイビアから保護し、ローカルツリーにおける中間状態を防ぐ。
【0185】
図14は、本発明の技術のさまざまな実施形態により、ローカルツリーを更新する例示的な方法を示す。本明細書に記載される、これらの方法及びプロセスが特定の順序で、ある特定のステップ及び操作によって示されることができるが、同様の、もしくは代替の順序で、または並列して実行される追加の、より少ない、または代替のステップ及び操作は、別段の定めがない限り、さまざまな実施形態の範囲内にある。この方法1400は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などのシステムによって実装されることができる。
【0186】
操作1405において、システムは、ファイルイベントを検出し、このファイルイベントと関連するパスを観測されたパスセットに追加する。例えば、起動時に、システムは、クライアントデバイスのファイルシステムをクロールし、ファイルシステム上で情報を収集し、この収集された情報を、ファイルシステムの最新の既知の状態を表すローカルツリーと比較することができる。システムは、クライアントデバイスのローカルツリーとファイルシステムとの間の差異を識別し、これらの識別された差異に基づき複数のファイルイベントを生成することができる。代替に、または加えて、システムは、実行時間中にファイルシステムを監視し、ローカルツリー中に反映されていないファイルシステムに行われた変更を検出し、これらの検出されたファイルシステムへの変更に基づきファイルイベントを生成することができる。これらの生成されたファイルイベントは、システムによって行われるファイルシステムについての観測と考えられることができる。
【0187】
操作1410において、システムは、ローカルツリー制約セットに対して観測されたパスセットをチェックし、観測されたパスのいずれかがローカルツリー制約に違反するかどうかを判定する。観測されたパスのいずれもローカルツリー制約セット中の制約のいずれかに違反していない場合に、操作1435において、観測されたパスセットを使用して、ローカルツリーを更新することができる。
【0188】
各制約違反は、制約を満たすように設定される修復と関連付けられることができる。例えば、「すべてのノードが既存の親を含まなければならない」制約の違反は、
図13に示されるように、親ノードの追加が観測される要件と関連付けられることができる。
【0189】
他の事例において、制約違反は、違反を解消して制約を満たすアクションが行われる必要がある場合がある。例えば、ユーザがファイルシステム中のコンテンツアイテムをコピーし、既存のコンテンツアイテムの新規のコピーを作成するときに、この新規のコンテンツアイテムは、元のコンテンツアイテムと同一のファイル識別子を有することができる。システムは、新規のコピーの追加を観測することができるが、この新規のコピーは、「ツリー中のすべてのノードが一意のファイル識別子を有する」という制約に違反する。この制約違反は、ローカルツリーを更新する前に、コンテンツアイテムについての新規のファイル識別子を要求する修復ステップ、及び新規のコンテンツ識別子をコンテンツアイテムに割り当てる修復ステップ、したがって、この違反を解消する修復ステップ、及び制約を満たす修復ステップと関連付けられることができる。その結果、ローカルツリーは、いずれかの制約に違反する状態にまったくない。
【0190】
別の実施例において、ユーザは、大文字と小文字が異なっているが、ファイル名が既に存在するファイルシステムの位置の中に新規のコンテンツアイテムを作成することができる。図示するように、ユーザは、ファイル「a.txt」が同一のファイルシステムパスに関して既に存在するときに、「A.txt」と名付けられたファイルを作成することができる。クライアントデバイスのオペレーティングシステムは、これを許可する場合があるが、クライアント同期サービスは、許可しない場合がある。システムは、新規のコンテンツアイテムの追加を観測することができるが、この新規のコンテンツアイテムは、「すべての兄弟ノードが大文字小文字にかかわらず一意のファイル名を有する」という制約に違反する。この制約違反は、大文字小文字の競合が存在することを示す新規のコンテンツアイテムの名前を編集する修復ステップと関連付けられることができる。例えば、「A.txt」ファイルを、「A(case conflict).txt」にリネームすることで、違反を解消し、制約を満たすことができる。ファイルイベント及びパスを観測されたパスセットから除去し、「A(case conflict).txt」コンテンツアイテムの追加のための新規のファイルイベントを検出するようなプロセスを再開することができる、または「A.txt」のためのファイルイベントを更新して新規の名前「A(case conflict).txt」を反映することができる。
【0191】
1つ以上の観測されたパスが1つ以上の制約に違反する場合に、システムは、違反された制約が操作1415において行われる修復アクションを必要とするかどうか、または違反された制約が操作1425において観測される追加のパスを必要とするかどうかを判定することができる。追加の修復アクションを必要とする場合に、操作1420において、システムは、追加の修復アクションを実行することができる。追加のパスが観測される場合に、操作1430において、システムは、追加のファイルイベントを検出し、ファイルイベントと関連するパスを操作1430において観測されたパスセットに追加することができる。
【0192】
次いで、プロセスは、操作1410に戻り、観測されたパスセットがローカルツリー制約に違反するかどうかを判定する。いくつかの事例において、修復アクションの実行、検出される新規のファイルイベント、または観測されたパスセットに追加されるパスは、ローカルツリーへの更新を実行し得る前に、解消されなければならない1つ以上の制約の新規の違反の原因となる場合がある。その結果、ローカルツリー制約のさらなる違反が存在しなくなるまで、プロセスを繰り返すことができる。次いで、プロセスは、操作1435に進行することができ、そこでシステムは、観測されたパスセットに基づきローカルツリーを更新することができる。
【0193】
移動またはリネーム変更に関するローカルツリーの更新
いくつかの実施態様により、ローカルファイルシステムについてのコンテンツアイテム上での移動またはリネーム操作は、追加の技術的な問題をもたらす可能性がある。例えば、いくつかの事例において、ファイルまたはフォルダなどのコンテンツアイテムがユーザまたはアプリケーションによって古い位置から新しい位置に移動するときに、操作は、コンテンツアイテムの古い位置からの削除、及び新しい位置への新しいコンテンツアイテムの追加としてファイルシステムまたはクライアントアプリケーションに出現することができる。同様に、古いファイル名から新しいファイル名へのコンテンツアイテムのリネームは、古いファイル名を有するコンテンツアイテムの削除、及び新しいファイル名を有する新しいコンテンツアイテムの追加として出現することができる。さらに、コンテンツアイテムが多くの他のコンテンツアイテムの親であり、潜在的に深く複雑なツリー構造を有するフォルダである場合に、コンテンツアイテムの移動またはリネームは、すべての子孫コンテンツアイテムのそれらの古い位置またはパスから新しい位置またはパスへの削除としても出現することができる。
【0194】
上述されるように、コンテンツアイテムを新しい位置に、または新しい名前によって再追加する前に、ローカルツリーからコンテンツアイテムを削除する、または除去する中間状態は、望ましくはなく、ユーザのデータが失われる可能性があるデータ脆弱性を増大させる。加えて、移動またはリネーム操作は、対応する追加操作が検出されるまで、クライアント同期サービスへの削除操作として出現する。しかしながら、ローカルファイルシステムのサイズ及び複雑さに基づき削除操作を検出した後に長期間、追加操作を検出しない場合がある。例えば、クライアント同期サービスは、ローカルファイルシステムの1つの部分をクロールし、コンテンツアイテムの削除を見いだし、コンテンツアイテムをローカルファイルシステムの別の部分に追加したことを見いださないことにより、クライアント同期サービスがローカルファイルシステムのその部分をクロールするまで、移動操作を完了することができる。
【0195】
本発明の技術の取り組みのさまざまな実施形態は、削除操作が移動またはリネーム操作の部分であるか、単に削除操作であるかどうかを判定する、より効率的で、より高速な方法を提供することによって技術的な解決策を、これらの、また他の技術的な問題に提供することに向けられる。
【0196】
図15は、本発明の技術のさまざまな実施形態により、移動またはリネーム操作に応答してローカルツリーを更新する例示的な方法を示す。本明細書に記載される、これらの方法及びプロセスが特定の順序で、ある特定のステップ及び操作によって示されることができるが、同様の、もしくは代替の順序で、または並列して実行される追加の、より少ない、または代替のステップ及び操作は、別段の定めがない限り、さまざまな実施形態の範囲内にある。この方法1500は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などのシステムによって実装されることができる。
【0197】
操作1505において、システムは、コンテンツアイテムについての削除イベントを検出する。システムは、クライアントデバイスのローカルファイルシステム、またはシステムが管理するように設定されるローカルファイルシステムの一部(例えば、コンテンツ管理フォルダ)への変更をクロールする、または監視することができる。システムは、ローカルファイルシステムとローカルツリーとの間の差異を識別するために、ローカルファイルシステムをローカルツリーと比較することができる。この削除イベントは、1つ以上の識別された差異に基づき検出されることができる。例えば、コンテンツアイテムについてのノードは、特定の位置においてローカルツリー中に存在するが、ローカルファイルシステム上のその位置に存在しない。これは、コンテンツアイテムをその位置から除去させるアクションをユーザまたはアプリケーションが実行したことを示すことができ、システムに削除イベントを検出させる。
【0198】
削除イベントを検出させたアクションは、ユーザまたはアプリケーションによって、コンテンツアイテムをシステムによって監視される別の位置に移動させること、コンテンツアイテムをシステムによって監視されていない別の位置に移動させること、コンテンツアイテムをリネームする(いくつかのファイルシステムによる移動として扱われることができる)こと、またはコンテンツアイテムを実際に削除することに起因し得る。削除イベントの原因とされるのはどのユーザアクションか、及び/または削除イベントと関連する追加イベントが検出されるか、既に検出されたかどうかを判定するために、システムは、操作1510において、コンテンツアイテムについてオペレーティングシステムが提供した識別子を識別することができる。
【0199】
いくつかの実施形態において、オペレーティングシステムが提供した識別子は、iノード識別子であることができ、コンテンツ管理システム及び/またはクライアント同期サービスによって提供されるファイル識別子と異なる。多くの事例において、オペレーティングシステムは、とりわけ、iノード識別子に基づくコンテンツアイテムの位置の迅速なクエリ実行を可能にするために、iノード識別子を提供することができる。例えば、いくつかのオペレーティングシステムは、システムがキーとしてiノード識別子を使用してコンテンツアイテムの現在のパスまたは位置にクエリを行うことができるインタフェースを提供することができる。操作1515において、システムは、コンテンツアイテムの位置についてオペレーティングシステムにクエリを行うことによってコンテンツアイテムの位置を決定することができる。クエリに応答して、オペレーティングシステムは、ノード識別子によって参照されるコンテンツアイテムのローカルファイルシステムに現在の位置またはパスを返すことができる。
【0200】
コンテンツアイテムの現在の位置を使用して、システムは、削除イベントを引き起こしたアクションを判定することができる。例えば、現在の位置がヌル位置である場合に、またはその他の方法により、コンテンツアイテムがもはやローカルファイルシステム上にないことを示す場合に、削除イベントを引き起こしたアクションは、実際の削除である。その結果、システムは、コンテンツアイテムについてのノードをローカルツリーから適切に削除することができる。現在の位置がシステム(例えば、クライアント同期サービス)によって管理されていない位置である場合に、削除イベントを引き起こしたアクションは、コンテンツアイテムのその前の位置からその現在の位置への移動である可能性が高い。しかしながら、コンテンツアイテムがシステムによって管理されるテリトリ外に移動するため、システムは、コンテンツアイテムをもはや追跡する必要がなく、コンテンツアイテムについてのノードをローカルツリーから削除することができる。
【0201】
現在の位置がシステムによってまだ管理されている新規の位置である場合に、削除イベントを引き起こしたアクションは、コンテンツアイテムのその前の位置からその現在の位置への移動でもある。しかしながら、コンテンツアイテムがシステムによって管理されるテリトリ内にまだあるため、システムは、対応する追加イベントの検出を待機し、削除イベント及び追加イベントを合わせて移動アクションとして扱い、ローカルツリーをアトミックに更新し、削除イベントを引き起こした実際のアクションをミラーリングする必要がある。
【0202】
同様に、現在の位置がシステムによって管理されている古い位置と同一の位置である場合に、削除イベントを引き起こしたアクションは、コンテンツアイテムのその前の位置からその現在の位置へのリネームでもある。いくつかのファイルシステムにおいて、リネーム操作及び移動操作は、リネーム操作が1つの名前を含む1つの位置から新規の名前を含む同一の位置への移動操作として扱われているという点で関連する。その結果、システムは、対応する追加イベント(新規の名前を含む)の検出を待機し、削除イベント及び追加イベントを合わせて移動またはリネームアクションとして扱い、ローカルツリーをアトミックに更新し、削除イベントを引き起こした実際のアクションをミラーリングする必要がある。
【0203】
その結果、操作1520において、システムは、削除イベントがコンテンツアイテムの位置に基づきコンテンツアイテムについての追加イベントと関連付けられるかどうかを判定する。削除イベントが追加イベントと関連付けられない場合に、削除イベントは、操作1525において処理され得る。削除イベントが追加イベントと関連付けられる場合に、システムは、追加イベントを待機し、操作1530においてコンテンツアイテムについての追加イベントを検出し、操作1535においてローカルツリーへのユニタリ更新における追加イベントと削除イベントを処理することができる。いくつかの実施態様により、iノードクエリがコンテンツアイテムについて現在の位置またはパスを既に提供した場合に、追加イベントを待機することは、必要ではない。その結果、システムは、コンテンツアイテムについてのそのパスを観測し、このパスを観測されたパスセットに追加することができる。
【0204】
図14の方法1400及び
図15の方法1500が別々に記述されているが、これら2つの方法は、ローカルツリーを更新するために互いに連携して機能し得る。例えば、削除イベントが追加イベントと関連付けられない場合に、削除イベントは、
図15の操作1525において削除イベントを対応する追加イベントと組み合わせることなく処理され得る。いくつかの実施形態により、削除イベントを処理することは、例えば、削除イベントを観測されたパスセットに追加してチェックし、ローカルツリー制約に違反していないかどうかを判定することができる、
図14に示される操作を含むことができる。
【0205】
例えば、削除イベントと関連するコンテンツアイテムがローカルツリー中に1つ以上の子孫ノードを含む場合に、「空ではない親ノードを削除することができない」制約に違反している可能性がある。この違反に対する修復は、追加のパス(例えば、コンテンツアイテムのすべての子孫ノードについての削除イベント)を観測することを待機することを含むことができる。追加のファイルイベントが検出されると、これらの追加のファイルイベントまたはパスについての制約は、追加の削除ファイルイベントがさらなる対応する追加イベントと関連付けられるかどうかを判定するチェックを含む、チェックを行われる場合がある。観測されたファイルイベントのすべてがバリデートされると、これらのファイルイベントは、合わせてバッチ処理され、ローカルツリーを更新するために使用されることができる。
【0206】
同様に、削除イベントが追加イベントと関連付けられる場合に、システムは、追加イベントを待機することができ、操作1535においてローカルツリーへのユニタリ更新中に追加イベントと削除イベントを処理することは、両方のイベントを観測されたファイルイベントセットに追加すること、いずれかのローカルツリー制約に違反するかどうかを判定すること、それらを行う場合に適切な修復を実行すること、及び観測されたファイルイベントセット全体に基づきローカルツリーを更新することを含むことができる。
【0207】
リモートツリーの更新
上述されるように、リモートツリーは、コンテンツ管理システムによって格納されるコンテンツアイテムについてのサーバ状態を表す。例えば、
図1中のサーバ同期サービス112は、クライアント同期サービス156と通信し、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムへの変更を同期させるように設定される。
【0208】
本発明の技術のさまざまな実施形態は、コンテンツ管理システムにおける変更に基づきリモートツリーを更新するさまざまな技術的な解決策を提供する。リモートツリーは、他のツリーデータ構造に加えて、さまざまな実施形態において、クライアントデバイスとコンテンツ管理システムとの間の同期プロセスにとって、きわめて重要である。例えば、リモートツリーへの更新が行われると、残りは、システムがこの更新に反応し、いくつかの事例では、クライアントデバイスにおいてファイルシステム状態に、リモートツリーへの変更を同期させて、適用することができる。したがって、リモートツリーが更新される方法について注意することが重要である。
【0209】
さらに詳細に全体を通して説明されるように、ある特定の実施形態において、コンテンツ管理システム110は、サーバファイルジャーナル148における変更、アクセスなどについてのデータログも格納することができる。サーバファイルジャーナル148は、コンテンツストレージ142中のコンテンツアイテムへのリビジョンの1つ以上のジャーナルを維持することができる。1つ以上のジャーナルは、各ネームスペース上で各コンテンツアイテムのリビジョンを追跡することができる。サーバファイルジャーナル148上のジャーナル中の値のロウは、ネームスペース中でコンテンツアイテムを識別し、ネームスペース中にコンテンツアイテムの状態を反映することができる。ネームスペース中の同一のコンテンツアイテムに対応するジャーナル中の後のロウは、ネームスペース中にコンテンツアイテムへの後のリビジョンを反映することができる。
【0210】
したがって、コンテンツアイテムと関連するサーバファイルジャーナル148中のロウは、コンテンツアイテムの現在の状態、及び作成から現在の状態までのコンテンツアイテムへのいずれかのリビジョンを識別することができる。コンテンツアイテム情報をサーバファイルジャーナル148と同期させるために、コンテンツ管理システム110は、サーバファイルジャーナル148に含まれる情報を、クライアントデバイス150に提供され得る操作データに変換し、クライアントデバイス150にサーバファイルジャーナル148からのコンテンツアイテムの最新のサーバ状態を提供することができる。
【0211】
本発明の技術のさまざまな実施形態は、コンテンツ管理システム110から操作データを受信し、この操作データに基づきコンテンツ管理システム上に格納されるコンテンツアイテムについてのサーバ状態を表すリモートツリーを更新するクライアントデバイス150に関する。しかしながら、クライアントデバイス150に提供される操作データは、リモートツリーのようなツリーデータ構造にない場合がある。代替に、操作データは、操作ログを表す。その結果、クライアントデバイス150上で実行するクライアント同期サービス156は、操作ログを含む操作データを受信し、この操作ログをリモートツリー上で実行することにより、リモートツリーを更新するように設定される。
【0212】
いくつかの実施形態により、コンテンツ管理システム110は、リモートツリー全体を再構築するように設定される操作データを生成し、提供することができる。これは、1つ以上のネームスペースについての操作ログ全体を含むことができる。いくつかの事例において、コンテンツ管理システム110は、もはや最新のものではない、またはリモートツリーを構築するために必要とされていない操作をログから除去することができる。例えば、後に削除されるコンテンツアイテムについての操作を操作データから除去することができる。クライアント同期サービス156は、操作ログを受信し、このログ中の各操作を通して、完全なリモートツリーを構築することをインクリメンタルに進めることができる。代替に、クライアント同期サービスは、既存のリモートツリーを操作ログと比較し、リモートツリーを最新にするために既存のリモートツリーに適用される必要があるログ中の操作を判定することができる。
【0213】
他の実施形態において、コンテンツ管理システム110は、クライアントデバイスによって格納されるリモートツリーをインクリメンタルに更新するように設定される操作データを生成し、提供することができる。操作データを生成するために使用される必要があるログの部分を判定するために、コンテンツ管理システム110は、ネームスペースについてのタイムライン中のポイントを表すカーソルを使用する。カーソルは、例えば、特定のネームスペースに対応するサーバファイルジャーナル148中の操作ログ中のエントリ識別子を含むことができる。1つの実施形態において、エントリ識別子は、ネームスペースについての操作ログにおけるエントリごとに増加する、SJ_IDであることができる。しかしながら、カーソルは、サーバ状態のライフサイクル中のポイントをマーク付けすることができる、論理クロック値、カウンタ、タイムスタンプ、またはいずれかの他の値としても実装されることができる。
【0214】
例えば、コンテンツ管理システム110は、ネームスペースへの変更があったと判定し、通知をクライアント同期サービス156に送信することができる。変更の通知を受信することに応答して、クライアント同期サービス156は、リモートツリーが更新された最後の時間から、操作ログについての要求を送信することができる。この要求は、リモートツリーが更新された最後の時間、またはコンテンツ管理システム110から受信した最後の更新を示すカーソルを含むことができる。代替に、クライアント同期サービス156は、コンテンツ管理システム110からの通知を必要とせずに、カーソルを含む要求を送信することができる。さらに別の実施態様において、コンテンツ管理システム110は、操作データをクライアント同期サービス156に送信するたびにカーソルの追跡を続け、クライアント同期サービス156は、カーソルをコンテンツ管理システムに送信するために必要ではない。
【0215】
このカーソルを使用して、コンテンツ管理システム110は、クライアント同期サービス156に送信する操作ログの部分を判定し、その部分を操作データとして送信することができる。クライアント同期サービス156は、操作ログの部分を操作データとして受信し、リモートツリーを更新するために、このログ中の各操作を通してインクリメンタルに進めることができる。
【0216】
ある特定の機能を有効にするために、しかしながら、サーバ状態、及びそれを表すリモートツリーは、1つより多いネームスペースを含むことができる。例えば、複数のネームスペースを含むことにより、より組織中心のストレージモデル及び/または個人及びグループの間での共有を可能にし得る。
図16は、さまざまな実施形態により、ツリーデータ構造の実施例を示す。リモートツリー1600を
図16に示すが、他のツリーデータ構造(例えば、同期ツリー及びローカルツリー)は、同様の構造及び特性を有し得る。リモートツリーは、4つのネームスペース1605、1610、1615、及び1620を含むことができる。ネームスペース1605は、ルートネームスペースを表すことができ、ネームスペース1610及び1615は、ネームスペース1605内にマウントされる。ネームスペース1620のネームスペース1610内のマウントによって示されるように、ネストされたネームスペースも可能である。
【0217】
各ネームスペースは、1つ以上の個々のユーザ及び異なるパーミッションと関連付けられることができる。例えば、企業ネームスペース1605は、会社または組織全体と関連付けられることができ、ネームスペース1615は、組織における経理部門と関連付けられることができ、ネームスペース1610は、組織内のエンジニアリング部門と関連付けられることができる。ネームスペース1620は、エンジニアリング部門内のグループと関連付けられることができ、個々のユーザについてのネームスペースを含むさらなるネームスペースを有することができる。異なるネームスペースは、ユーザ間のコンテンツアイテムの共有及びアクセスのより良い連携及び制御を可能にする。
【0218】
各ネームスペースは、そのネームスペースについてのタイムライン中のポイントを表すネームスペース識別子(例えば、NS_ID)及びカーソル(例えば、SJ_ID)によって識別される別個の操作ログと関連付けられることができる。しかしながら、複数のネームスペースについてのSJ_IDを使用して、進捗を追跡すること、及び複数のネームスペースにわたりタイムラインを同期させることは、困難である。例えば、第一のネームスペースについての第一のSJ_IDが第二のネームスペースについての第二のSJ_IDに等しいことにより、第一及び第二のネームスペースが同一の状態または時点に対応することを保証することができない。
【0219】
これは、ネームスペースにわたる操作があるときに深刻な技術的問題を提示する。例えば、1つのネームスペースの別のネームスペース中へのマウント操作は、これら2つのネームスペースの操作ログ間の依存性をもたらす。移動操作などのネームスペースにわたる操作は、ツリーデータ構造に課される制約に違反する可能性がある。例えば、ネームスペース1620中のコンテンツアイテム1650をネームスペース1615に移動させる、
図16に示される移動操作1655は、ネームスペース1620についての操作ログ中の操作(例えば、削除操作)、及びネームスペース1615についての操作ログ中の対応する操作(例えば、追加操作)として出現する。ファイル識別子がツリー中の1つより多い位置に存在することができない制約を守るために、ネームスペース1620中の削除操作は、ネームスペース1615中の追加操作前に発生する必要がある。しかしながら、各ネームスペースのログについてSJ_IDのみを使用してこれを保証することは困難である。
【0220】
以下の節にさらに詳細に考察されるように、本発明の技術のさまざまな実施形態は、ランポートクロックを使用して複数のネームスペースの複数のログエントリ識別子(例えば、SJ_ID)を同期させ、複数のネームスペースのSJ_ID間の順序付け制約を、そして結果として、ネームスペースにわたる全体の順序付けを符号化するように設定されるコンテンツ管理システムを使用する技術的な解決策を提供する。コンテンツ管理システムは、操作データ中に含まれ、クライアントデバイスに提供される、線形化された操作セット中に各ネームスペースについての操作ログを線形化するようにさらに設定され得る。
【0221】
クライアントデバイスに関して、クライアント同期サービスは、複数のネームスペースにわたり線形化され、正しいシーケンスに順序付けされる操作セットを含む操作データを受信することができる。クライアント同期サービスは、カーソルを使用して、リモートツリーを更新するために線形化された操作セット中の各操作を通してインクリメンタルに進めることができる。
【0222】
リモートツリー中のネームスペースのマウント
上述されるように、クライアント同期サービスは、コンテンツ管理システムから受信する操作データに基づき、リモートツリーをクライアントデバイス上で更新することができる。さらなる技術的な問題は、クライアント同期サービスが操作データ中の前の未知のネームスペースターゲットについてのマウント操作に遭遇するときに発生する。リモートツリーの整合性を保護するために、マウントターゲットのコンテンツを決定し、それをさまざまな制約またはルールに対して潜在的にバリデートする前に、クライアント同期サービスがネームスペースターゲットをマウントするのを防ぐ。しかしながら、マウントターゲットが前に未知であったため、クライアント同期サービスは、マウントターゲットのコンテンツを認識しない。本発明の技術のさまざまな実施形態は、これら、また他の技術的な問題に対処する。
【0223】
図17は、さまざまな実施形態による、ネームスペースをマウントする概念図を示す。コンテンツ管理システムは、クライアントデバイスに提供される、線形化された操作セット中に各ネームスペースについての操作ログを線形化するように設定される。
図17は、ネームスペースNSID1 1710について操作ログ、及びネームスペースNSID2 1715についての操作ログの表現を含む。これら2つのネームスペースの間のネームスペース間順序付けは、エントリログ識別子(例えば、SJ_ID)及びランポートクロック値の使用によって確立される。
【0224】
最初の期間中に、コンテンツ管理システムは、ユーザアカウントと関連する2つのネームスペースを線形化している。イベント1720において、ネームスペースNSID2 1715についての操作ログは、新規のネームスペースがネームスペースNSID2 1715内にマウントされることを示す、SJ_ID9、クロック15において処理される。この時点までに、クライアントデバイスは、新規のネームスペースと関連するいかなる情報も含まない可能性があるため、ネームスペースを直ちにマウントした場合、ツリー制約に違反していないという保証がない。
【0225】
コンテンツ管理システムは、ターゲットネームスペース1725をマウントするためのマウント操作1720を検出する。マウント操作1720を検出することに応答して、コンテンツ管理システムは、ターゲットネームスペースについてのネームスペース識別子を含むマウント通知をクライアントデバイスに送信する。コンテンツ管理システムは、ネームスペースNSID1 1710及びネームスペースNSID2 1715に加えて、ターゲットネームスペース1725を線形化プロセスにさらに追加し、ターゲットネームスペース1725についての操作ログのプレフィックスをクライアントデバイスに送信する。このプレフィックスは、マウント操作1720までに追加されるターゲットネームスペース1725についての操作ログの最初の部分であることができ、ネームスペースをリモートツリーにマウントする前にターゲットネームスペース1725についてのサブツリーを構築するためにクライアントデバイスによって使用されることができる。
【0226】
図18は、本発明の技術のさまざまな実施形態による、ネームスペースをリモートツリー中にマウントする例示的な方法を示す。本明細書に記述される、これらの方法及びプロセスは、特定の順序で、ある特定のステップ及び操作によって示されることができるが、同様の、もしくは代替の順序で、または並列して実行される、追加の、より少ない、または代替のステップ及び操作は、特に明示されない限り、さまざまな実施形態の範囲内にある。この方法1800は、クライアントデバイス上で実行する、例えば、
図2のクライアント同期サービス156などのシステムによって実装されることができる。
【0227】
操作1805において、システムは、ターゲットネームスペースについてのマウント通知を受信することができる。マウント通知をコンテンツ管理システムによってシステムに送信し、インカミングプレフィックス、またはターゲットネームスペースについての操作ログの最初の部分に基づきサブツリーを作成することをシステムに通知することができる。操作1810において、システムは、ターゲットネームスペースについての操作ログの最初の部分を受信することができる。
【0228】
図17に示されるように、プレフィックス、またはターゲットネームスペースについての操作ログの最初の部分1730をコンテンツ管理システムからシステム(例えば、クライアントデバイス)に送信する。操作1815において、システムは、操作ログの最初の部分に基づきターゲットネームスペースについてのサブツリーを構築し始めることができる。
図17に示されるように、システムがサブツリーを構築することを完了するまで、ターゲットネームスペース1750についてのサブツリーをプレリモート保持領域1760中に生成することができる。
【0229】
プレリモート保持領域は、マウントターゲット(例えば、マウントされるネームスペース)と関連する1つ以上のサブツリーを格納して生成する、クライアントデバイスについての位置である。これらのマウントターゲットについてのサブツリーは、これらのサブツリーがリモートツリーの現在の状態(例えば、カーソル)に追いつくまで、プレリモート保持領域中に格納され、更新されることができる。マウントターゲットについてのサブツリーがリモートツリーの現在の状態に追いつくと、マウントターゲットについてのサブツリーは、リモートツリー中にマウントされ得る。
【0230】
上述されるように、追加のネームスペースは、ターゲットネームスペース内にネストされ、クライアントデバイスに以前に知られていない可能性がある。操作ログの最初の部分1730が処理され、クライアントデバイスに送信されると、追加のマウントは、見いだされることができ、方法1800は、再帰的に繰り返され得る。例えば、ターゲットネームスペースについての操作ログの最初の部分1730をシステムに送信し、追加のマウント操作をコンテンツ管理システムによって検出し、コンテンツ管理システムに別のターゲットネームスペースについての別のマウント通知を送信させることにより、方法1800の最初の繰り返しの内に方法1800の再帰的繰り返しを開始することができる。方法1800の再帰的繰り返しが完了する(見いだされたさらにネストされたネームスペースについての任意のさらなる繰り返しに加えて)と、プロセスは、方法1800の最初の繰り返しに戻ることができる。
【0231】
ターゲットネームスペースについての操作ログの最初の部分1730がクライアントデバイスに送信されたときに、コンテンツ管理システムは、
図17のマウント操作1720を送信することができ、その検出により最初にプロセスを開始した。クライアントデバイスは、マウント操作を受信し、操作1820において、ターゲットネームスペースについてのサブツリーをリモートツリーのマウント位置にマウントする。いくつかの実施形態により、マウント位置は、マウント操作、マウント通知、または両方によって提供され得る。
図17に示されるように、ターゲットネームスペース1750についてのサブツリーは、リモートツリー1780のマウント位置1770にマウントされる。いくつかの実施形態により、追加のバリデーションチェックを実行し、マウントされたサブツリーを含むリモートツリーがリモートツリーに適用されるすべてのツリー制約と一貫性があることを確認することができる。
【0232】
いくつかの実施形態による、プレフィックス、またはターゲットネームスペースについての操作ログの最初の部分は、もはや有効ではない、最新ではない、または最終サブツリーに反映されない操作を除去するために処理され得る。例えば、最初の部分は、最終サブツリーに反映されないコンテンツアイテムについての削除操作、最終サブツリーに反映されないコンテンツアイテムについての追加及び対応する削除操作、またはターゲットネームスペース外にコンテンツアイテムを移動させる移動操作を含むことができる。これらの操作タイプは、ターゲットネームスペースについての最終サブツリーに反映されず、スペース、帯域幅、処理時間、及び他の計算リソースを減少させるために、操作ログの最初の部分から除去されることができる。
【0233】
コンテンツ管理システムのファイルジャーナル及びストレージシステム
コンテンツ管理システム110に我々の焦点を向けると、
図19Aは、システムコンフィグレーション100において、コンテンツ管理システム110とクライアントデバイス150との間でコンテンツを同期させるための例示的なアーキテクチャの概略図を示す。この実施例において、クライアントデバイス150は、コンテンツストレージインタフェース1906及びファイルジャーナルインタフェース1902を介してそれぞれコンテンツストレージ142及びサーバファイルジャーナル148とインタラクトする。コンテンツストレージインタフェース1906は、コンテンツストレージサービス116によって提供される、または管理されることができ、ファイルジャーナルインタフェース1902は、サーバ同期サービス112によって提供される、または管理されることができる。例えば、コンテンツストレージインタフェース1906は、コンテンツストレージサービス116のサブコンポーネントまたはサブサービスであり得、ファイルジャーナルインタフェース1902は、サーバ同期サービス112のサブコンポーネントまたはサブサービスであり得る。
【0234】
コンテンツストレージインタフェース1906は、コンテンツ要求またはインタラクションなどの通信をクライアントデバイス150とコンテンツストレージ142との間で管理することができる。コンテンツストレージインタフェース1906は、コンテンツストレージ142に、またコンテンツストレージ142からコンテンツをアップロードし、ダウンロードする、クライアントデバイス150からの要求を処理することができる。コンテンツストレージインタフェース1906は、コンテンツ要求(例えば、ダウンロード、アップロードなど)をクライアントデバイス150から受信し、アクセス制御リスト145中のパーミッションを検証し、認可サービス132と通信してクライアントデバイス150(及び/またはクライアントデバイス150からの要求)がコンテンツストレージ142に、またはコンテンツストレージ142からコンテンツをアップロードする、またはダウンロードすることを認可されるかどうかを判定し、コンテンツストレージ142とインタラクトしてコンテンツストレージ142中のコンテンツをクライアントデバイス150にダウンロードする、またはアップロードすることができる。クライアントデバイス150からの要求がコンテンツアイテムをダウンロードする要求である場合に、コンテンツストレージインタフェース1906は、コンテンツアイテムをコンテンツストレージ142から取得し、コンテンツアイテムをクライアントデバイス150に提供することができる。クライアントデバイス150からの要求がコンテンツアイテムをアップロードする要求である場合に、コンテンツストレージインタフェース1906は、コンテンツアイテムをクライアントデバイス150から得て、コンテンツアイテムをストレージ用のコンテンツストレージ142にアップロードすることができる。
【0235】
クライアントデバイス150からのコンテンツ要求を処理するときに、コンテンツストレージインタフェース1906は、ストレージインデックス1910と通信し、コンテンツストレージ142中の要求されたコンテンツの可用性及び/またはストレージ位置をチェックし、コンテンツストレージ142中でコンテンツアイテムを追跡することができる。ストレージインデックス1910は、コンテンツストレージ142上でコンテンツアイテムを識別する、コンテンツストレージ142上のコンテンツアイテムのインデックスを維持することができ、そのうえコンテンツアイテムのそれぞれの位置をコンテンツストレージ142内で識別することができる。したがって、ストレージインデックス1910は、コンテンツストレージ142上でコンテンツアイテムを、またコンテンツアイテムのストレージ位置を追跡することができる。ストレージインデックス1910は、ファイルなどのすべてのコンテンツアイテム、及び/またはブロックまたはチャンクなどのコンテンツアイテムの部分を追跡することができる。いくつかの事例において、コンテンツアイテムは、コンテンツストレージ142に格納され、ストレージインデックス1910において追跡されることができるブロックまたはチャンクに分割され得る。例えば、コンテンツストレージ142は、コンテンツアイテムのそれぞれのデータ部分を含むデータのブロックまたはチャンクとして、コンテンツアイテムを格納することができる。ストレージインデックス1910は、コンテンツストレージ142に格納されるコンテンツアイテムのブロックまたはチャンクを追跡することができる。下記の
図19Bは、コンテンツアイテムのブロックを格納して追跡するための例示的なコンフィグレーションを示す。
【0236】
ファイルジャーナルインタフェース1902は、メタデータ要求、ならびにコンテンツ同期及び操作などの通信を、クライアントデバイス150とサーバファイルジャーナル148との間で管理することができる。例えば、ファイルジャーナルインタフェース1902は、操作、コンフィグレーション、及び状態情報を、クライアントデバイス150とサーバファイルジャーナル148との間で変換する、妥当性確認する、認証する、及び/または処理することができる。ファイルジャーナルインタフェース1902は、カーソル内の、もしくは認可サービス132を介してFSAuthトークンからのパーミッションを検証し、クライアントデバイス150によってサーバファイルジャーナル148へ送信される要求を認可する、またはこれらの要求の認可を検証することができる。クライアントデバイス150からの要求または操作を処理するときに、ファイルジャーナルインタフェース1902は、ネームスペースメンバーシップストア1908にアクセスして、クライアントデバイス150からの要求または操作と関連するいずれかのネームスペースについてネームスペース所有権情報を判定し、または検証し、パーミッション情報をアクセス制御リスト145から取得してクライアントデバイス150からの要求または操作と関連するコンテンツのパーミッションを検証することができる。
【0237】
ファイルジャーナルインタフェース1902中の変換サービス1904は、通信のための線形化操作及び変換操作をクライアントデバイス150とサーバファイルジャーナル148との間で実行することができる。例えば、変換サービス1904は、クライアントデバイス150からの通信を、サーバファイルジャーナル148中のデータの構造及びフォーマットと一貫性がある異なるフォーマットに、そしてその逆もまた同様に変換することができる。図示するように、いくつかの事例において、クライアントデバイス150は、コンテンツアイテム情報(例えば、状態、変更、バージョンなど)をクライアントデバイス150において操作として処理することができ、サーバファイルジャーナル148は、データベーステーブルなどのデータ構造中のロウによって反映されるコンテンツアイテムリビジョンと同一の情報を処理することができる。クライアントデバイス150とサーバファイルジャーナル148との間のコンテンツアイテム情報の同期を有効にするために、変換サービス1904は、クライアントデバイス150からの操作を、サーバファイルジャーナル148に適しているリビジョンに変換することができ、サーバファイルジャーナル148上でデータのロウ中に反映されるリビジョンを、クライアントデバイス150に適している操作に変換することができる。
【0238】
いくつかの事例において、認可サービス132は、クライアントデバイス150が要求されたコンテンツアイテムにアクセスする、このコンテンツアイテムを更新する、ダウンロードする、またはアップロードすることを認可されることを検証する、または指示するトークンを生成することができる。このトークンは、クライアントデバイス150と関連するデバイス識別子、クライアントデバイス150に認証される、または認可されるユーザアカウントと関連するアカウント識別子、クライアントデバイス150に認可されたセッションと関連するセッション識別子、ビューコンテキスト、及び識別されたコレクションへのアクセスパーミッションを含むことができる。トークンは、以下により詳細に記述される、カーソルと称される暗号によって署名されたデータオブジェクト中に含まれ得る。コンテンツ管理システム110及び/または認可サービス132は、トークン(複数可)をクライアントデバイス150に送信することができ、クライアントデバイス150は、以下にさらに記述されるようなサーバファイルジャーナル148へのコンテンツアイテムのリビジョン及び/または更新を要求するときに、トークンをコンテンツ管理システム110に提供することができる。また、クライアントデバイス150は、トークンをコンテンツストレージインタフェース1906に提供し、いずれかのコンテンツ要求(例えば、ダウンロード、アップロードなど)を有効にすることができる。コンテンツストレージインタフェース1906は、トークンを使用して、ストレージインデックス1910へのクエリを認可し、コンテンツアイテムをコンテンツストレージ142に、またはコンテンツストレージ142からアップロードする、またはダウンロードすることができる。
【0239】
例えば、クライアントデバイス150は、コンテンツストレージ142にコンテンツアイテムをアップロードする要求をコンテンツストレージインタフェース1906に送信することができる。この要求は、トークン、及びアップロードされるコンテンツアイテムを含むことができる。コンテンツストレージインタフェース1906は、トークンを使用して、コンテンツアイテムがコンテンツストレージ142に既に存在するかどうかをチェックするストレージインデックス1910へのクエリを認可し、そしてコンテンツストレージ142へのコンテンツアイテムのアップロードを認可することができる。また、クライアントデバイス150は、トークンをファイルジャーナルインタフェース1902に提供し、メタデータをサーバファイルジャーナル148上に格納してコンテンツアイテムのアップロード及びリビジョンを追跡する要求を認可することができる。
【0240】
図19Bは、例示的なブロックストレージ及び同期コンフィグレーションを示す。この実施例において、コンテンツストレージ142は、特定のサイズ(例えば、4MB)までコンテンツアイテム(例えば、ファイル)の不透明チャンクであることができる、データブロックを格納することができる。コンテンツアイテムは、ブロック中に分割されることができ、これらのブロックは、アクセス用にコンテンツストレージ142に格納されることができる。ストレージインデックス1910は、コンテンツストレージ142に格納されるブロックと、コンテンツストレージ142に格納されるブロックのそれぞれの位置とを追跡することができる。ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148とインタラクトし、コンテンツストレージ142に格納されるコンテンツアイテム及び/またはブロックへのリビジョンを追跡することができる。
【0241】
例えば、コンテンツアイテム1920(例えば、MyFile.abc)をブロック1920A、1920B、1920C、1920N中に分割することができる。コンテンツストレージインタフェース1906は、ブロック1920A、1920B、1920C、1920Nを受信して、コンテンツストレージ142におけるストレージのためにブロックデータ1922Bをコンテンツストレージ142に送信することができる。ブロックデータ1922Bは、コンテンツアイテム1920と関連するブロック1920A、1920B、1920C、1920Nを含むことができる。
【0242】
ブロック1920A、1920B、1920C、1920Nは、コンテンツストレージ142において1つ以上のストレージデバイスまたはボリューム上に格納される、及び/または1つ以上の論理ストレージコンテナ(例えば、バケット)またはデータクラスタ内に集約されることができる。いくつかの事例において、ブロック1920A、1920B、1920C、1920Nは、同一位置(例えば、ストレージデバイス、ボリューム、コンテナ、及び/またはクラスタ)上に合わせて格納されることができる。他の事例において、いくつかの、またはすべてのブロック1920A、1920B、1920C、1920Nは、2つ以上の異なる位置(例えば、2つ以上の異なるストレージデバイス、ボリューム、コンテナ、及び/またはクラスタ)上に格納されることができる。
【0243】
また、コンテンツストレージインタフェース1906は、ブロックメタデータ1922Aをストレージインデックス1910に格納することができる。ブロックメタデータ1922Aは、ブロック1920A、1920B、1920C、1920Nを識別することができ、ストレージインデックス1910がブロック1920A、1920B、1920C、1920Nをコンテンツストレージ142において追跡することを可能にする。ブロックメタデータ1922Aは、各ブロック1920A、1920B、1920C、1920Nについての識別子を含むことができる。ブロックについての識別子は、ブロックを識別する、ブロックのハッシュなどの名前またはキーであることができる。
【0244】
また、ブロックメタデータ1922Aは、ブロック1920A、1920B、1920C、1920Nのそれぞれのストレージ位置を示す、ブロック1920A、1920B、1920C、1920Nについての位置情報を含むことができる。ブロックの位置情報は、ブロックが格納されているストレージデバイスまたはボリューム、及び/またはブロックが含まれている論理ストレージコンテナまたはデータクラスタを識別することができる。この位置情報を使用して、関連したブロックにアクセスする、またはこのブロックを取得することができる。
【0245】
コンテンツストレージインタフェース1906は、ブロック1920A、1920B、1920C、1920Nをコンテンツストレージ142に格納する前に、またはこれらを格納した後に、ブロックメタデータ1922Aをストレージインデックス1910に格納することができる。例えば、コンテンツストレージインタフェース1906は、ブロック1920A、1920B、1920C、1920Nをコンテンツストレージ142に格納した後に、ブロックメタデータ1922Aをストレージインデックス1910に格納し、ブロック1920A、1920B、1920C、1920Nがコンテンツストレージ142に格納されていることを示すことができる。
【0246】
いくつかの事例において、コンテンツストレージインタフェース1906は、ブロック1920A、1920B、1920C、1920Nをコンテンツストレージ142に格納する前に、ストレージインデックス1910にクエリを行い、ブロック1920A、1920B、1920C、1920Nがコンテンツストレージ142に格納されているかどうか(または格納されている位置)を判定することができる。例えば、コンテンツストレージインタフェース1906は、ブロックメタデータ1922Aに基づきストレージインデックス1910にクエリを行い、ブロック1920A、1920B、1920C、1920Nがコンテンツストレージ142に格納されているかどうかをチェックすることができる。ストレージインデックス1910は、ブロックメタデータ1922A中のブロック識別子をストレージインデックス1910におけるブロック識別子と比較して、任意のマッチをチェックすることができる。ブロック識別子間のマッチは、関連したブロックがコンテンツストレージ142に格納されていることを示す。
【0247】
前述されるように、サーバファイルジャーナル148は、コンテンツアイテムの追加、編集、移動またはリネーム、削除などを有する、コンテンツアイテムリビジョンを追跡する。その結果、ファイルジャーナルインタフェース1902は、リビジョン1922Cをサーバファイルジャーナル148に格納し、コンテンツアイテム1920及び/またはブロック1920A、1920B、1920C、1920Nをコンテンツストレージ142に追加したことを示すことができる。リビジョン1922Cは、サーバファイルジャーナル148においてコンテンツアイテムリビジョンのジャーナル内にコンテンツアイテム1920のリビジョンを表すことができる。
【0248】
リビジョン1922Cは、コンテンツアイテム1920、及びコンテンツアイテム1920と関連する操作、例えば、追加操作(例えば、アップロード)、編集操作、移動またはリネーム操作、削除操作などを識別することができる。また、リビジョン1922Cは、コンテンツアイテム1920が格納されているコンテンツ管理システム110中のネームスペースと、リビジョン1922Cを格納するためのサーバファイルジャーナル148におけるコンテンツアイテムリビジョンのジャーナル中のロウとを識別することができる。コンテンツアイテムリビジョンのジャーナル内のロウは、コンテンツアイテム1920についてのリビジョン1922Cと関連するリビジョン番号を表すことができる。
【0249】
ファイルジャーナルインタフェース
図19Cは、ファイルジャーナルインタフェース1902によってクライアントデバイス150とサーバファイルジャーナル148との間で処理される通信の図を示す。サーバファイルジャーナル148は、ロウ中の値、及びサーバファイルジャーナル148中のフィールドとして、コンテンツアイテム状態及び変更(例えば、リビジョン)を追跡する。例えば、サーバファイルジャーナル148は、コンテンツストレージ142中でコンテンツアイテムへのリビジョンの1つ以上のジャーナルを維持することができる。1つ以上のジャーナルは、各コンテンツアイテムのリビジョンを各ネームスペース上で追跡することができる。サーバファイルジャーナル148上のジャーナル中の値のロウは、コンテンツアイテムをネームスペース中で識別することができ、このコンテンツアイテムの状態をネームスペース中に反映する。ネームスペース中の同一のコンテンツアイテムに対応するジャーナル中の後のロウは、コンテンツアイテムへの後のリビジョンをネームスペース中に反映することができる。したがって、コンテンツアイテムと関連するサーバファイルジャーナル148中のロウは、コンテンツアイテムの現在の状態と、このコンテンツアイテムへのいずれかのリビジョンの作成から現在の状態までとを識別することができる。
【0250】
コンテンツアイテム情報(例えば、状態、変更またはリビジョンなど)をクライアントデバイス150と同期させるために、サーバファイルジャーナル148は、サーバファイルジャーナル148中で追跡される、または格納される、1つ以上のコンテンツアイテムについてのリビジョンを表すリビジョンデータ1934を、ファイルジャーナルインタフェース1902へ、またはこのファイルジャーナルインタフェース1902から送信する、または受信することができる。リビジョンデータ1934は、例えば、サーバファイルジャーナル148中のロウに対応するコンテンツアイテムリビジョンのログを含むことができる。サーバファイルジャーナル148は、リビジョンデータ1934をファイルジャーナルインタフェース1904に送信することができ、このファイルジャーナルインタフェース1904は、以下にさらに記述されるように、リビジョンデータ1934をクライアントデバイス150についての操作データ1932に変換することができる。
【0251】
クライアントデバイス150は、クライアントデバイス150においてコンテンツアイテムを更新する、または修正するコンテンツ操作を実行することができる。コンテンツアイテム情報をサーバファイルジャーナル148と同期させるために、クライアントデバイス150は、操作データ1932をファイルジャーナルインタフェース1902へ、またはこのファイルジャーナルインタフェース1902から送信する、または受信することができる。クライアントデバイス150は、操作データ1932をファイルジャーナルインタフェース1902に送信し、コンテンツアイテムへの変更をクライアントデバイス150に報告し、操作データ1932をファイルジャーナルインタフェース1902から受信してコンテンツアイテムの最新の状態(例えば、リビジョンデータ1934)をサーバファイルジャーナル148から得ることができる。
【0252】
例えば、クライアントデバイス150は、コンテンツアイテムAをクライアントデバイス150において編集し、コンテンツアイテムAへの編集を示す編集操作をファイルジャーナルインタフェース1902に報告することができる。この編集操作は、ファイルジャーナルインタフェース1902と通信して、コンテンツアイテムAへのリビジョンを示す、操作データ1932中に含まれ得る。ファイルジャーナルインタフェース1902は、編集操作を含む操作データ1932を受信して、サーバファイルジャーナル148におけるストレージのためのリビジョンを生成し、このコンテンツアイテムAへの編集を追跡することができる。ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148を更新してコンテンツアイテムAの編集された状態を表すリビジョンを格納するために、リビジョンデータ1934中の編集操作と関連するリビジョンをサーバファイルジャーナル148に含むことができる。
【0253】
以下にさらに記述されるように、操作データ1932は、クライアントデバイス150によってクライアントデバイス150と関連する各ネームスペースについて取得される最新の状態またはリビジョンを識別するカーソルを含むことができる。例えば、カーソルは、クライアントデバイス150によって、このクライアントデバイス150と関連する各ネームスペースについて取得される最新のリビジョンをサーバファイルジャーナル148中で識別することができる。このカーソル中の情報により、クライアントデバイス150からの操作データ1932中の操作がこの操作と関連するネームスペース(複数可)について最新の状態またはリビジョンをサーバファイルジャーナル148中で反映するかどうかをファイルジャーナルインタフェース1902が判定することが可能である。これは、サーバファイルジャーナル148中の既存のリビジョンと、操作データ1932から変換されるリビジョンとの間の競合を生じる可能性がある、より古いリビジョンに対応するクライアントデバイス150からの操作データ1932中の操作がサーバファイルジャーナル148に書き込まれていないことをファイルジャーナルインタフェース1902が確保することを援助することができる。
【0254】
クライアントデバイス150とサーバファイルジャーナル148との間のコンテンツアイテム情報の同期を可能にするために、ファイルジャーナルインタフェース1902は、操作データ1932をリビジョンデータ1934に、そしてその逆も同様に変換する(例えば、変換サービス1904を介して)ことができる。操作データ1932をクライアントデバイス150から受信するときに、ファイルジャーナルインタフェース1902は、操作データ1932を、この操作データ1932中の操作から解釈されるコンテンツアイテムリビジョンを含むリビジョンデータ1934に変換することができる。リビジョンデータ1934をサーバファイルジャーナル148から受信するときに、ファイルジャーナルインタフェース1902は、リビジョンデータ1934を、リビジョンデータ1934中のリビジョンをクライアントデバイス150に実装するための操作を含む操作データ1932に変換することができる。リビジョンデータ1934は、1つ以上のコンテンツアイテムに起こっていること(すなわち、1つ以上のコンテンツアイテムへのリビジョン)を記述する、データをサーバファイルジャーナル148中に含み、操作データ1932は、クライアントデバイス150に実行されている、または実行されるであろう、1つ以上のコンテンツアイテムを修正する操作を含む。したがって、ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148からの1つ以上のコンテンツアイテムへのリビジョンを記述するデータ(例えば、操作データ1934)を、クライアントデバイス150に実行されている、または実行されるであろう1つ以上のコンテンツアイテムをクライアントデバイス150において修正する操作に変換することができる。
【0255】
前述されるように、クライアントデバイス150からの操作データ1932をサーバファイルジャーナル148についてのリビジョンデータ1934に変換することに加えて、ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148からのリビジョンデータ1934をクライアントデバイス150についての操作データ1932に変換することができる。ファイルジャーナルインタフェース1902は、リビジョンデータ1934をサーバファイルジャーナル148から取得し、リビジョンデータ1934中のリビジョンを、これらのようなリビジョンに従いクライアントデバイス150において1つ以上コンテンツアイテムをリバイスする、クライアントデバイス150における実行のための操作に変換することができる。リビジョンデータ1934中のリビジョンから生成されるこれらの操作は、ファイルジャーナルインタフェース1902によってクライアントデバイス150に提供される操作データ1932に含まれる。操作データ1932とリビジョンデータ1934との間のこの変換により、クライアントデバイス150及びサーバファイルジャーナル148は、コンテンツアイテム情報を必要に応じて互いに同期させることが可能である。
【0256】
クライアントデバイス150によって提供される操作データ1932から生成されるいずれかのリビジョンデータ1934をサーバファイルジャーナル148に書き込む前に、ファイルジャーナルインタフェース1902は、操作データ1932中のカーソルをチェックし、及び/またはサーバファイルジャーナル148にクエリを行い、リビジョンデータ1934中のいかなるリビジョンもサーバファイルジャーナル148中で競合を生じないことを確保することができる。例えば、ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148にクエリを行い、リビジョンデータ1934中のリビジョンと関連するコンテンツアイテムのバージョンがサーバファイルジャーナル148におけるコンテンツアイテムの同一のバージョンであるかどうか、またはリビジョンデータ1934中のリビジョンが関係するコンテンツアイテムとして、サーバファイルジャーナル148におけるコンテンツアイテムのバージョンが更新されたバージョンであるか、異なるバージョンであるかどうかをチェックすることができる。リビジョンデータ1934が関係するバージョンと、コンテンツアイテムの最新のバージョンが異なるバージョンであることをサーバファイルジャーナル148が示す場合に、これら2つのバージョンは、競合している。
【0257】
ファイルジャーナルインタフェース1902は、サーバファイルジャーナル148を更新して、操作データ1932から導出されるリビジョンデータ1934に含まれる新規のリビジョンを格納することができる。サーバファイルジャーナル148中のリビジョンにクエリを行う、及び/またはこれらのリビジョンを更新するときに、ファイルジャーナルインタフェース1902は、ネームスペースメンバーシップストア1908にクエリを行い、リビジョンデータ1934中のリビジョンが影響するいずれのネームスペースと関連するネームスペース所有権情報を取得することができる。このネームスペース所有権情報は、所有するユーザアカウント(複数可)、または特定のネームスペースのメンバーであるユーザアカウント(複数可)を示すことができるため、特定のネームスペースにアクセスすることができる。したがって、ファイルジャーナルインタフェース1902は、ネームスペース所有権情報を分析し、サーバファイルジャーナル148がネームスペースのメンバーではないユーザアカウントからのネームスペースへのリビジョンを含むように更新されないことを確保することができる。
【0258】
図19Dを参照して、サーバファイルジャーナル148は、ジャーナル1960、1962を格納し、コンテンツアイテムのリビジョン及び状態を追跡し、識別することができる。この実施例において、ジャーナル1960は、ネームスペース識別子(NS_ID)、サーバジャーナル識別子(SJ_ID)、パス、ブロック、前のリビジョン(Prev_Rev)、及びターゲットネームスペース(Target_NS)を有する記録を含む。NS_IDは、ネームスペースをサーバファイルジャーナル148中で一意に識別するために1つ以上の値を含むことができる。SJ_IDは、ネームスペースについての所与のジャーナル中のロウにマッピングする、単調に増加する値を含み、そのネームスペース内で操作またはリビジョンの順序付けを提供することができる。パスは、関連したコンテンツアイテムを識別するネームスペース相対パスであることができる。Prev_Revは、このパスと関連するコンテンツアイテムの前の状態に対応するロウのSJ_IDを識別する。Target_NSは、マウントされたネームスペースのマウントポイントについてのターゲットネームスペースのNS_IDを識別する。Target_NSフィールドは、マウントポイントに対応していないロウ(例えば、リビジョン)に設定されない。
【0259】
ジャーナル1962は、NS_ID、SJ_ID、クロック(例えば、タイムスタンプ)、ファイル識別子(File_ID)、拡張属性(複数可)(xattr)などを有する記録を含む。xattrは、コンテンツアイテムまたは操作と関連するメタデータを格納することができる。
【0260】
いくつかの事例において、ジャーナル1960は、関連したコンテンツアイテムのサイズを表すサイズフィールド、コンテンツアイテムがディレクトリであるときを示すように設定されることができるディレクトリフィールド(例えば、Is_Dir)、関連したファイルを一意に識別するファイル識別子、クロックまたはタイムスタンプフィールドなどのような他のフィールドを含むことができる。
【0261】
ファイルジャーナルインタフェース1902は、前述されるように、操作データ1932及びリビジョンデータ1934に基づき変換1970を実行することができる。変換1970を実行するときに、変換サービス1904は、サーバファイルジャーナル148におけるストレージのために線形化されたリビジョンを含むリビジョン1972に、操作データ1932を変換することができる。また、変換サービス1904は、リビジョンデータ1934を線形化された操作1974Aに変換することができ、これらの線形化された操作1974Aは、クライアントデバイス150に送信される操作データ1932に含まれ、クライアントデバイス150によって適用され、クライアントデバイス150においてコンテンツアイテム情報(例えば、状態、変更など)を更新することができる。また、変換サービス1904は、カーソル1974Bを生成して、または更新して、操作データ1932中のカーソル1974Bをクライアントデバイス150に提供することができる。カーソル1974Bは、線形化された操作1974Bと関連する各ネームスペース及び/またはコンテンツアイテムに対応するそれぞれのリビジョンまたはロウをサーバファイルジャーナル148中で識別する。
【0262】
例えば、カーソル1974Bは、そのネームスペース(例えば、SJ_ID)についてサーバファイルジャーナル148中でネームスペース(例えば、NS_ID)及びロウを識別することができ、そのネームスペースについてサーバファイルジャーナル148中で最新のリビジョンを示す。カーソル1974B中のネームスペース及びロウは、線形化された操作1974A中の操作と関連付けられることができる。カーソル1974Bは、線形化された操作1974Aがクライアントデバイス150に適用された後に、及び/または適用される前に、サーバファイルジャーナル148中のネームスペースのリビジョンまたは状態を示す、特定のネームスペースについてのサーバファイルジャーナル148中のリビジョンのログ上の特定の位置を識別することができる。したがって、カーソル1974Bは、線形化された操作1974Aの前または後に、サーバファイルジャーナル148中のネームスペース及び/またはコンテンツアイテムの状態を示すことができ、リビジョン競合を回避すること、ならびに線形化された操作1974Aが適用される前に、及び適用された後に、リビジョンの順序を追跡することを援助することができる。
【0263】
図20Aは、サーバファイルジャーナルデータを線形化された操作に変換するための例示的な変換及び線形化プロセスの図を示す。この実施例において、サーバファイルジャーナル148中のジャーナル1960は、サーバファイルジャーナル148によって追跡されるリビジョン1972を有するロウ2002を含む。ジャーナル1960中のリビジョン1972は、ネームスペース100及び101(すなわち、NS_ID100及び101)と関連付けられる。いくつかの事例において、サーバファイルジャーナル148は、それぞれのネームスペースに固有なリビジョンを追跡するネームスペース固有ジャーナルを格納することができる。ネームスペース固有ジャーナル中のこれらのロウ(例えば、2002)は、そのネームスペースに固有なデータを含み、各ロウは、そのネームスペースに固有なリビジョンを反映する。
【0264】
ジャーナル1960中の各ロウ(2002)は、そのロウと関連するネームスペースを一意に識別するネームスペース識別子フィールド(NS_ID)、所与のネームスペース中のロウにマッピングする単調に増加する値を含み、そのネームスペース内で操作またはリビジョンの順序付けを提供するサーバジャーナル識別子フィールド(SJ_ID)を含む。また、ジャーナル1960は、コンテンツアイテムのネームスペース相対パスを識別するためのパスフィールド(Path)、コンテンツアイテムと関連するブロックまたはブロックリストを識別するためのブロックフィールド(Block)、コンテンツアイテムの前の状態またはリビジョンを表すジャーナル1960中のロウ(すなわち、SJ_ID)を識別するための前のリビジョンフィールド(Prev_Rev)、及びマウントされたネームスペースのマウントポイントについてのターゲットネームスペースを識別する(ロウがマウントに対応する場合)ためのターゲットネームスペースフィールド(Target_NS)を含む。マウントポイントに対応しないロウ(例えば、リビジョン)に対してTarget_NSフィールドについてのデータはない。
【0265】
ジャーナル1960中の最初のロウ2002は、ブロック「h1」に対応し、前のリビジョン(Prev_Rev)またはターゲットネームスペース(Target_NS)を含まない、ネームスペース「100」(NS_ID100)中の「File1」(パスフィールド値File1)について最初のリビジョン(SJ_ID1)を識別する。ロウが前のリビジョンまたはターゲットネームスペースを含まないことから、ロウによって表されるリビジョンは、ブロック「h1」と関連する「File1」のネームスペース「100」における追加に対応する。SJ_ID「4」を含むジャーナル1960中のロウは、このロウがネームスペース「100」上の「File1」に対応するジャーナル1960中の最後のロウまたはSJ_IDであることから、ネームスペース「100」上の「File1」についてジャーナル1960中の最後のリビジョンを表す。SJ_ID「4」を含むこのロウは、ネームスペース「100」上の「File1」がSJ_ID「1」に加えられた後に編集され、この編集がブロック「h4」に対応することを示す。
【0266】
修正2004は、リビジョン1972を表す修正の実施例を描く。この実施例において、修正2004のそれぞれは、ジャーナル1960中の対応するロウ(2002)からのコンテンツリビジョンを示す。各修正は、ジャーナル1960中のSJID及びNSIDに対応し、ジャーナル1960中のこれらの対応するSJID及びNSIDと関連するファイルに対応する。この実施例において、修正2004と関連するコンテンツは、ジャーナル1960中のブロック(例えば、「h1」、「h2」、「h3」、「h4」)の例示的なコンテンツ値を表す。修正2004におけるこれらのコンテンツ値を例示目的のために提供し、各リビジョンと関連するコンテンツへの例示的な修正を描く。
【0267】
例えば、修正2004における第一修正は、ジャーナル1960中のSJID「1」及びNSID「100」を表し、加えられているネームスペース「100」中の「File1」を描く。コンテンツ「aaa」は、NSID「100」のSJID「1」において「File1」についての「h1」の値を表す。また、修正2004は、「aa2」(例えば、「h4」)に修正されているネームスペース「100」中の「File1」と関連するコンテンツ「aaa」(例えば、「h1」)を説明する、ジャーナル1960中のSJID「4」及びNSID「100」を表す、ネームスペース「100」中の「File1」の編集を描く。
【0268】
変換1970において、ジャーナル1960中のロウ2002からのリビジョン1972を、線形化された操作1974Aに変換する。線形化された操作1974Aは、ジャーナル1960中のリビジョン1972から生成され、線形化後の修正2004を表す。線形化された操作1974Aによって示されるように、線形化された操作1974A中の操作は、複数のリビジョン(1972)及び/または修正(2004)、または単一のリビジョン(1972)及び/または修正(2004)に基づくことができる。
【0269】
例えば、修正2004は、ジャーナル1960中のSJID「1」及びNSID「100」に対応する、「File1」をネームスペース「100」に加えるリビジョンと、ジャーナル1960中の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」が編集を表すことを示唆する。
【0270】
線形化された操作1974Aにおいて、NSID「100」についてのSJID「1」及びSJID「4」に対応する追加及び編集修正(2004)を、「aaa」(例えば、「h1」)から「aa2」(例えば、「h4」)に「File1」と関連するコンテンツ値を編集する単一の線形化された操作(編集操作)に変換することができる。「File1」のコンテンツ(例えば、「h1」)を「aa2」(例えば、「h4」)に編集する、単一の線形化された操作は、コンテンツ「aaa」(例えば、「h1」)と関連する「File1」をネームスペース「100」に追加する修正と、ネームスペース「100」中の「File1」と関連するコンテンツ「aaa」(例えば、「h1」)を「aa2」(例えば、「h4」)に編集する修正とを反映する。その結果、この線形化された操作は、2つの修正2004、及びリビジョン1972中の2つの対応するリビジョンに基づく。
【0271】
ジャーナル1960中のSJID「2」及びNSID「100」に対応する修正2004における修正は、コンテンツ「bbb」(例えば、「h2」)と関連する「File2」をネームスペース「100」に追加するリビジョンを表す。この修正は、ネームスペース「100」上で「File2」に対応するジャーナル1960からのリビジョン1972のみを表す。その結果、線形化された操作1974Aは、コンテンツ「bbb」(例えば、「h2」)と関連する「File2」をネームスペース「100」に追加し、単一の修正2004(ネームスペース「100」上での「File2」の追加)、及びリビジョン1972に基づく、ネームスペース「100」上での「File2」についての単一の操作を含む。
【0272】
また、この実施例において、修正2004は、ジャーナル1960中のSJID「3」及びNSID「100」に対応する、コンテンツ「ccc」(例えば、「h3」)と関連する「File3」をネームスペース「100」に追加する修正と、ジャーナル1960中のSJID「5」及びNSID「100」に対応する、ネームスペース「100」からの「File3」の削除(「-1」として表される)とを含む。したがって、リビジョン1972は、ネームスペース「100」上の「File3」と関連する2つの修正2004を含む。「File3」及びネームスペース「100」と関連するジャーナル1960中の最後のリビジョンがジャーナル1960中のSJID「5」及びNSID「100」を表す削除修正に対応することから、リビジョン1972からの「File3」及びネームスペース「100」と関連する追加及び削除修正2004は、ネームスペース「100」から「File3」を削除する単一の操作に線形化されることができる。その結果、線形化された操作1974Aは、「File3」をネームスペース「100」から削除する単一の操作である、「File3」及びネームスペース「100」についての単一の操作を備える。
【0273】
ジャーナル1960において、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つの修正2004によって描かれる。
【0274】
ジャーナル1960中のNSID「100」のSJID「6」及び「7」にそれぞれ対応する、「Dir」及びネームスペース「100」の追加及び削除修正2004は、「Dir」及びネームスペース「100」に対応するジャーナル1960中の最後のリビジョンがSJID「7」及びNSID「100」におけるネームスペース「100」からの「Dir」の削除であることから、「Dir」をネームスペース「100」から削除する単一の操作に線形化される。ジャーナル1960中のSJID「1」及びNSID「101」に対応する、ネームスペース「101」への「Dir」の追加は、「Dir」及びネームスペース「101」に対応する修正2004及びリビジョン1972のみである。その結果、「Dir」及びネームスペース「101」についての単一のマウント操作として、線形化された操作1974Aに追加を提供する。したがって、NSID「100」中のSJID「6」及び「7」、ならびにNSID「101」中のSJID「1」に対応するリビジョン1972からの3つの修正2004(すなわち、ネームスペース「100」上での「Dir」の追加及び削除、ならびにネームスペース「101」上での「Dir」の追加)は、ネームスペース「100」中の「Dir」についての削除操作、及びネームスペース「101」中の「Dir」についてのマウント操作という、線形化された操作1974A中の2つの操作に線形化される。
【0275】
上記に示されるように、線形化された操作1974Aは、「File1」及びネームスペース「100」についての編集操作、「File2」及びネームスペース「100」についての追加操作、ネームスペース「100」中の「File3」の削除操作、ネームスペース「100」中の「Dir」についての削除操作、ならびに「Dir」をネームスペース「101」に追加するためのマウント操作を備える。線形化された操作1974A中のこれらの操作は、リビジョン1972から生成され、ジャーナル1960中の各コンテンツアイテムの最新の状態を反映する。ファイルジャーナルインタフェース1902は、線形化された操作1974Aを生成し、線形化された操作1974Aをクライアントデバイス150に送信して、クライアントデバイス150がリビジョン1972からの最新の状態をジャーナル1960中に含むことを確保することができる。
【0276】
線形化された操作1974Aをクライアントデバイス150に提供するときに、ファイルジャーナルインタフェース1902は、クライアントデバイス150への線形化された操作1974Aに加えてカーソル1974Bを含むことができる。カーソル1974Bは、ジャーナル1960中の各ネームスペース(NSID)について最後のリビジョン(SJID)を識別することができる。いくつかの実施形態において、カーソル1974Bは、ユーザIDを有するFSAuthトークン、及びカーソルに提供されるNS_IDへの最後に観測されたアクセスパーミッションをも含むことができる。各ネームスペースについての最後のリビジョンは、各ネームスペースに対してクライアントデバイス150に送信された最新のリビジョンに対応するジャーナル1960中の位置を示すことができる。
【0277】
いくつかの事例において、カーソル1974Bは、線形化された操作1974A中の各操作をジャーナル1960中のネームスペース(NSID)及びロウ(SJID)にマッピングすることができる。操作と関連するネームスペース及びロウは、この操作に対応するジャーナル1960中の位置を示すことができる。換言すれば、操作と関連するネームスペース及びロウは、ジャーナル1960中にその操作によって表されるリビジョン番号を示すことができる。カーソル1974B中のネームスペース及びロウは、線形化された操作1974Aと関連する各ネームスペース及びコンテンツアイテムについてジャーナル1960中で最新の状態に対応する。クライアントデバイス150からの変更(例えば、操作データ1932を介して)を1つ以上のネームスペース及び/またはコンテンツアイテムに適用することを試みるときに、カーソル1974Bをクライアントデバイス150用のツールとしてクライアントデバイス150に提供し、1つ以上のネームスペース及び/またはコンテンツアイテムについてクライアントデバイス150によって取得される最新の状態またはリビジョンを、ファイルジャーナルインタフェース1902に対して識別することができる。ファイルジャーナルインタフェース1902がカーソル1974Bをクライアントデバイス150から受信するときに、それは、カーソル1974Bを使用して、ジャーナル1960においてクライアントデバイス150の位置(例えば、クライアントデバイス150によって取得されるジャーナル1960からの最新のリビジョン)を識別し、クライアントデバイス150からの操作によって引き起こされる競合を検出する、または回避することができる。
【0278】
例えば、ファイルジャーナルインタフェース1902が「File1」をネームスペース「100」中で修正する操作をクライアントデバイス150から受信する場合に、ファイルジャーナルインタフェース1902は、それが操作に加えてクライアントデバイス150から受信する、カーソル1974Bを使用して、ジャーナル1960がネームスペース「100」中の「File1」に対して、クライアントデバイス150からカーソル1974B中で識別されるリビジョンよりも、新しいいずれかのリビジョンを含むかどうかをチェックすることができる。カーソル1974B中のリビジョンがジャーナル1960中で直近のリビジョンである場合に、ファイルジャーナルインタフェース1902は、ネームスペース「100」中の「File1」についてジャーナル1960中の新規のリビジョン(例えば、NSID「100」中のSJID「8」)として編集操作をコミットすることができる。
【0279】
代替に、カーソル1974B中のリビジョンがネームスペース「100」中の「File1」に対してジャーナル1960中の直近のリビジョンではない場合に、ファイルジャーナルインタフェース1902は、クライアントデバイス150からの編集操作がネームスペース「100」中の「File1」に対して、ジャーナル1960中で直近のバージョンに基づいていないと判定することができる。例えば、カーソル1974Bがジャーナル1960中でSJID「4」及びNSID「100」を識別し、ジャーナル1960がネームスペース「100」中の「File1」に対して、SJID「12」及びNSID「100」におけるリビジョンを含むとファイルジャーナルインタフェース1902が判定する場合に、ファイルジャーナルインタフェース1902は、クライアントデバイス150からの編集操作がネームスペース「100」上の「File1」のより古いバージョン(例えば、SJID「4」及びNSID「100」)に関係があると判定することができ、この編集操作は、その後修正されたファイルを編集する場合に競合を生じる可能性がある。ファイルジャーナルインタフェース1902は、この編集操作によって生じるこの競合を検出して編集操作を拒否し、この競合を調整することを試みる、または最新のリビジョンをクライアントデバイス150に提供してクライアントデバイス150が競合を調整することを可能にすることができる。
【0280】
ファイルジャーナルインタフェース1902は、線形化された操作をクライアントデバイス150に送信するたびに、各ネームスペース及び/またはコンテンツアイテムについてのそれぞれの位置をジャーナル1960中で識別する、本明細書に記述されるようなカーソルを含むことができる。同様に、いつでもクライアントデバイス150は、操作をファイルジャーナルインタフェース1902に送信し、ファイルジャーナルインタフェース1902がクライアントデバイス150における状態をジャーナル1960における状態にマッピングするために使用することができる、その最新のカーソルを含むことができる。
【0281】
この実施例におけるジャーナル1960は、複数のネームスペースを備えるジャーナルを描く。前述されるように、いくつかの実施例において、サーバファイルジャーナル148は、ネームスペース固有のジャーナルを維持することができる。カーソル1974Bは、各ネームスペースについてSJID及びNSIDを含み、各ネームスペースについての最新のリビジョンを示すことができる。カーソル1974Bに基づき、ファイルジャーナルインタフェース200は、複数のジャーナルが維持されている実施形態において、本明細書にさらに説明されるように、複数のジャーナルにクエリを行う、及び/またはリビジョンを複数のジャーナルから取得することができる。
【0282】
図20Bは、クライアントデバイス150からの操作データ1932をサーバファイルジャーナル148においてジャーナル1960についてのリビジョン1972に変換する、線形化2010のための例示的なプロセスの図を示す。クライアントデバイス150は、操作データ1932をファイルジャーナルインタフェース1902に提供することができる。この実施例における操作データ1932は、コンテンツアイテムの編集、追加、リネーム、移動、マウント、または削除操作などの、操作2012をクライアントデバイス150に含む。いくつかの事例において、操作2012は、同一のコンテンツアイテムに対して複数の操作を含むことができる。例えば、操作2012は、ネームスペース「100」上の「File4」を編集する操作、ネームスペース「100」からの「File4」を削除する操作を備えることができる。
【0283】
また、操作データ1932は、ファイルジャーナルインタフェース1902からクライアントデバイス150によって以前に受信されたカーソル1974Bを含む。カーソル1974Bは、ジャーナル1960において1つ以上のネームスペース及び/またはコンテンツアイテムについての状態(例えば、NSID及びSJID)または最新のリビジョンを識別することができる。クライアントデバイス150は、カーソル1974Bを操作2012についての基準ポイントとしてファイルジャーナルインタフェース1902に提供することができる。この実施例において、カーソル1974Bは、SJID「9」によって表されている、ネームスペース「100」についての最新の状態を提供する。
【0284】
いくつかの事例において、カーソルは、コンテンツ管理システム110によって暗号により署名され、カーソルが改ざんされていないことをファイルジャーナルインタフェース1902が判定することを可能にする。さらに、クライアントデバイス150がネームスペースについて直近のリビジョンをサーバファイルジャーナル148から受信したときに、クライアントデバイス150がリビジョンをサーバファイルジャーナル148にコミットすることから、ファイルジャーナルインタフェース1902は、NS_IDに対して最後に観測されたアクセスパーミッションがまだ有効であるため、クライアントデバイス150がネームスペースへのアクセスを有することを許容することができる。
【0285】
ファイルジャーナルインタフェース1902は、操作2012及びカーソル1974Bを受信して線形化2010を実行し、クライアントデバイス150からの操作2012を線形化してジャーナル1960についてのリビジョン1972に変換することができる。操作2012に基づき、ファイルジャーナルインタフェース1902は、操作のログ2014を生成することができる。ログ2014は、ジャーナル1960中のそれぞれのネームスペース(複数可)にマッピングされる操作2012からの操作リストを含むことができる。いくつかの事例において、ログ2014は、以前に説明されるような操作2012から生成される線形化された操作を備えることができる。
【0286】
ファイルジャーナルインタフェース1902は、ジャーナル1960を更新してログ2014に操作を反映する前に、カーソル1974Bを使用して、その操作2012がジャーナル1960に最新の状態またはリビジョンを反映することを検証することができる。カーソル1974Bがジャーナル1960においてログ2014と関連するネームスペース及び/またはコンテンツアイテムに対して最新の状態またはリビジョンを反映することをファイルジャーナルインタフェース1902が確認する場合に、ファイルジャーナルインタフェース1902は、ログ2014に基づきリビジョン1972をジャーナル1960に追加することができる。リビジョン1972は、ログ2014中の操作と関連する各コンテンツアイテム及び/またはネームスペースの最新の状態またはリビジョンを含むことができる。
【0287】
ログ2014における操作は、「File5」についての追加及び編集操作を備える。その結果、リビジョン1972は、ファイルジャーナルインタフェース1902がジャーナル1960に「File5」の最新状態(すなわち、線形化方式において追加及び編集操作を「File5」に適用した後の状態)として書き込むことができる、「File5」の編集を備える。また、ログ2014におけるこれらの操作は、「Dir2」についての追加操作、ならびにネームスペース「100」上での「File4」についての編集及び削除操作を備える。したがって、リビジョン1972は、「Dir2」をネームスペース「100」に追加する操作、ならびに「File4」をネームスペース「100」から削除する操作を、それぞれ「Dir2」及び「File4」の最新の状態として有することができる。
【0288】
図20Bにおいて、ジャーナル1960中に描かれるリビジョン(1972)は、操作2012と関連する各コンテンツアイテム(「File4」、「File5」、「Dir2」)の最新の状態を反映する。しかしながら、いくつかの事例において、ファイルジャーナルインタフェース1902がログ2014に起因する各ネームスペース及び/またはコンテンツアイテムの最新の状態のリビジョンだけではなく、最新の状態またはリビジョンまでに導出するいずれかの前の状態またはリビジョンをも反映するため、ログ2014によって表されるあらゆるリビジョンをジャーナル1960に書き込むことができることに留意するべきである。例えば、ファイルジャーナルインタフェース1902は、操作2012からの最新の状態を反映する「File4」の編集のみを書き込むこととは対照的に、ジャーナル1960に「File4」の編集についてのリビジョン、及び「File4」の削除についての後のリビジョンを書き込み、ジャーナル1960に操作2012からの「File4」のリビジョンのフルシーケンスを示すことができる。
【0289】
ファイルジャーナルインタフェース1902は、ログ2014中の操作をリビジョン1972に変換し、ジャーナル1960を更新してリビジョン1972を含むことができる。ファイルジャーナルインタフェース1902は、ジャーナル1960中のそれぞれのロウにおいて、リビジョン1972をジャーナル1960に書き込むことができる。ファイルジャーナルインタフェース1902は、リビジョン1972をジャーナル1960中の次の利用可能なロウ(例えば、SJID)に追加することができる。いくつかの事例において、ファイルジャーナルインタフェース1902は、線形化2010及び/またはそれぞれのタイムスタンプまたはクロックに基づき決定されることができる相対的な順序に基づきリビジョン1972を追加することができる。
【0290】
図20Bに示されるように、ネームスペース「100」中の「File4」の削除操作は、ネームスペース「100」についてのロウ「11」またはSJID「11」に含まれる。ジャーナル1960のSJID「11」中のリビジョンは、ブロックフィールド中のマイナス記号によって反映される場合、ネームスペース「100」中の「File4」が削除されていることを示し、ネームスペース「100」中の「File4」についてのジャーナル1960において、SJID「9」を前のリビジョンとして識別する。「Dir2」の追加、及び「File5」の編集は、ロウまたはSJID12及び14にそれぞれ含まれる。
【0291】
図20B中のジャーナル1960は、ログ2014及びカーソル1974Bに基づくリビジョン1972を含み、ログ2014中で修正される各コンテンツアイテムの状態を反映するように更新されている。ジャーナル1960中の各ロウにおけるパスフィールドは、関連したネームスペース(例えば、ネームスペース「100」)内でコンテンツアイテムを識別する。ロウのパスフィールドは、ログ2014中の対応する操作からのファイル及びネームスペースに基づく。ジャーナル1960中のブロックフィールドは、コンテンツアイテムを表す。いくつかの事例において、ブロックフィールドは、それぞれのコンテンツアイテムまたはデータブロックのハッシュを含むことができる。コンテンツアイテムが削除されている、及び/またはディレクトリ、フォルダ、マウントなどである場合に、ブロックフィールドは、空であり得る。
【0292】
ジャーナル1960がログ2014に基づくリビジョン1972、及びカーソル1974Bを含むように更新するときに、変換サービス1904は、ジャーナル1960のパスフィールド中に含む、各コンテンツアイテムのパスを識別することができる。いくつかの事例において、変換サービス1904は、コンテンツアイテムの識別子(例えば、ファイルID)をコンテンツアイテムのパス(例えば、/directory/filename)に変換することができる。例えば、クライアントデバイス150は、コンテンツアイテムについてのそれぞれのパスを追跡する、または計算することなく、識別子を使用して、コンテンツアイテム(例えば、操作データ1932中のコンテンツアイテム)を識別することができる。ジャーナル1960は、コンテンツアイテムのパスを代替に使用して、コンテンツアイテムを識別することができる。変換サービス1904は、クライアントデバイス150からのコンテンツアイテムの識別子を使用してジャーナル1960についてのコンテンツアイテムのパスを計算し、コンテンツアイテムについて計算されるパスを使用してジャーナル1960を更新することができる。また、変換サービス1904は、逆変換を実行してコンテンツアイテムのパスに基づきコンテンツアイテムの識別子を取得し、クライアントデバイス150と通信するコンテンツアイテムを参照するときにコンテンツアイテムの識別子を使用することができる。
【0293】
例えば、変換サービス1904は、ジャーナル1960中のパス、ジャーナル1960中のNSID、及び/またはジャーナル1960中のディレクトリフィールド(またはサーバファイルジャーナル148中の他の箇所)を使用して、コンテンツアイテムを識別し、そのコンテンツアイテムの識別子(例えば、ファイルID)を取得することができる。ファイルジャーナルインタフェース1902がそのコンテンツアイテムに関係がある更新または情報をクライアントデバイス150に送信する場合に、ファイルジャーナルインタフェース1902は、クライアントデバイス150がコンテンツアイテムのパスを含む、または含まないコンテンツアイテムを識別するために使用することができる、コンテンツアイテムの識別子をクライアントデバイス150に提供することができる。
【0294】
前述されるように、操作2012からのリビジョン1972をジャーナル1960に書き込む前に、ファイルジャーナルインタフェース1902は、カーソル1974Bが操作2012と関連する各ネームスペース及び/またはコンテンツアイテムについてジャーナル1960中の最新の状態またはリビジョンを反映するかどうかをチェックすることができる。いくつかの事例において、カーソル1974Bがジャーナル1960中の最新の状態またはリビジョンを反映することを確認した後に、ファイルジャーナルインタフェース1902は、操作2012から生成されるリビジョンがジャーナル1960中の既存のリビジョンと競合しないことを確保する第二チェックも実行することができる。例えば、ジャーナル1960においてネームスペース「100」中のSJID「5」が「File5」の削除操作を表す場合に、クライアントデバイス150からのファイルジャーナルインタフェース1902によって受信される操作2012から発行されるSJID「14」中に描かれる「File5」の編集リビジョン1972は、「File5」がSJID「5」において削除された場合でも、「File5」を編集することを試みることによって競合を生じる。したがって、ファイルジャーナルインタフェース1902は、この実施例において編集操作及びリビジョンを拒否し、編集操作が無効であることをクライアントデバイス150に通信することができる。ファイルジャーナルインタフェース1902は、カーソル1974Bを更新し、更新されたカーソルをクライアントデバイス150に提供し、必要に応じて「File5」(及びいずれかの他のコンテンツアイテム)についてジャーナル1960中の最新の状態またはリビジョンのクライアントデバイス150に通知することができる。
【0295】
新規のリビジョンをジャーナル1960及び/またはサーバファイルジャーナル148に追加するときに、ファイルジャーナルインタフェース1902は、更新されたカーソルをクライアントデバイス150に送信し、新規のリビジョンを報告して新規のリビジョンをクライアントデバイス150と同期させることができる。また、クライアントデバイス150は、クライアントデバイス150においてカーソルに更新を要求することができる。クライアントデバイス150は、ファイルジャーナルインタフェース1902から受信する最後カーソルのコピーを、クライアントデバイス150によって取得される最後のリビジョン(複数可)を示すジャーナル1960中の、クライアントデバイス150上のコンテンツアイテムの状態の反映、及び/またはクライアントデバイス150の位置として格納することができる。
【0296】
図20Cは、サーバファイルジャーナル148からのリビジョンをクライアントデバイス150についての操作に変換する例示的な方法を示す。ステップ2050において、ファイルジャーナルインタフェース1902は、コンテンツ管理システム110に登録されるユーザアカウントについてクライアントデバイス150に格納される1つ以上のコンテンツアイテムと関連する複数のリビジョン(例えば、1972)を、サーバファイルジャーナル148においてリビジョンのジャーナル1960から取得する。各リビジョンは、ネームスペース、フォルダ、ファイル、または任意のコンテンツアイテムを修正することができる。さらに、各リビジョンは、ネームスペース、及びそのネームスペースについてのジャーナル識別子(SJID)と関連付けられることができる。
【0297】
いくつかの事例において、ファイルジャーナルインタフェース1902は、クライアントデバイス150に利用可能ではないリビジョンを含む、ジャーナル1960を更新したという判定に基づきジャーナル1960から複数のリビジョンを取得することができる。例えば、ファイルジャーナルインタフェース1902は、ジャーナル1960に追加される新規のリビジョンを追跡すること、及び/またはジャーナル1960におけるリビジョンをクライアントデバイス150におけるカーソルと比較することができる。いくつかの事例において、ファイルジャーナルインタフェース1902は、ジャーナル1960にクエリを行い、複数のリビジョンを取得すること、及び/またはジャーナル1960に利用可能なリビジョンをチェックすることができる。
【0298】
ステップ2052において、ファイルジャーナルインタフェース1902は、複数のリビジョンと関連する各コンテンツアイテムのそれぞれのリビジョンセットに基づきそれぞれの操作を決定する。例えば、ファイルジャーナルインタフェース1902は、コンテンツアイテムの任意のリビジョンを線形化し、これらのリビジョンを、そのコンテンツアイテムについての1つ以上のそれぞれの操作に変換することができる。いくつかの事例において、複数の操作が線形方式において実行されるときに、ファイルジャーナルインタフェース1902は、そのコンテンツアイテムについての複数の操作をも、コンテンツアイテムの状態または修正を定義する、または反映する単一操作に変換することができる。
【0299】
いくつかの事例において、複数のリビジョンについてのそれぞれの操作を計算するときに、ファイルジャーナルインタフェース1902は、特定のコンテンツアイテムと関連するリビジョン数、及び/またはこれらのようなリビジョンと関連するコンテンツアイテムのタイプに基づき推測または計算を行うことができる。例えば、複数のリビジョンがコンテンツアイテムについて単一リビジョンを含む場合に、ファイルジャーナルインタフェース1902は、単一リビジョン(例えば、リビジョン1972)及び/またはこのリビジョンと関連するブロックまたはコンテンツ(例えば、ジャーナル1960のロウ2002中のブロックまたはコンテンツ)から、そのリビジョンによって表されるコンテンツアイテムの修正(例えば、2004)のタイプを推測し、リビジョンによって表される修正のタイプに基づき、そのコンテンツアイテムについてそれぞれの操作を計算することができる。
【0300】
図示するために、
図4Aに示されるように、修正2004は、SJID「1」及びNSID「100」に対応するネームスペース「101」における「Dir」についての修正を描く。この修正は、ネームスペース「101」についての修正(2004)及びリビジョン(1972)のみである。したがって、ファイルジャーナルインタフェース1902は、それが「Dir」を含むように修正される、または改訂される、ネームスペース「101」の第一インスタンスを表す場合に、ネームスペース「101」に「Dir」を描く修正が「Dir」の追加またはマウントであると推測することができる。ジャーナル1960中のブロックフィールドによって示されるように、「Dir」がディレクトリまたはフォルダであることから、この修正は、ディレクトリまたはフォルダの追加またはマウントであり得る。「Dir」がネームスペースであった場合に、修正は、ネームスペース「101」においてネームスペース「Dir」のマウントを表す。一方、「Dir」が、ジャーナル1960中のブロックフィールドに基づき決定されることができる、特定のコンテンツまたはブロックと関連したファイルであった場合に、次いで、「Dir」についての修正は、ファイル「Dir」のネームスペース「101」への追加である。例えば、SJID「1」及びNSID「101」が「h1」と関連する「File1」を代替に示した場合に、対応する修正は、「File1」のネームスペース「101」への追加である。
【0301】
したがって、ジャーナル1960中のリビジョン(1972)と関連するコンテンツまたはブロックフィールドが削除(例えば、ブロックまたはコンテンツフィールド中のマイナス記号)を示さない限り、コンテンツアイテムの最初の、または唯一のリビジョンについてのそれぞれの操作は、コンテンツアイテムがネームスペースであるか、コンテンツアイテムの別のタイプであるかによってマウントまたは追加操作を表すことができる。これは、編集、マウント解除、または削除操作などの他の操作が関連したコンテンツアイテムをマウントする、または追加するために前のリビジョンを含むことが予測されるという仮定に基づく。コンテンツアイテムがそれと関連する前のリビジョンを含まない場合に、ファイルジャーナルインタフェース1902は、コンテンツアイテムと関連するリビジョンが編集、マウント解除、または削除操作ではないが、むしろ追加またはマウント操作である可能性が高いと推測することができる。
【0302】
いくつかの事例において、ファイルジャーナルインタフェース1902は、コンテンツアイテムについての操作を、そのコンテンツアイテムについての複数のリビジョン(1972)、及び関連したネームスペースに基づき計算することができる。例えば、ファイルジャーナルインタフェース1902は、コンテンツアイテムの追加またはマウントを表すリビジョン、及び削除、編集、またはマウント解除を表す後のリビジョンから、削除、編集、またはマウント解除操作を推測することができる。図示するために、
図20Aに示されるように、ファイルジャーナルインタフェース1902は、ジャーナル1960中のネームスペース「100」についてのSJID「1」及び「4」に対応する複数の修正(2004)及びリビジョン(1972)に基づき、ネームスペース「100」中の「File1」についての編集操作を計算する。修正2004においてコンテンツ値「aaa」及び「aa2」を表すブロック「h1」及び「h4」を、SJID「1」及び「4」が含むことから、ファイルジャーナルインタフェース1902は、SJID「1」が追加操作を表し、SJID「4」が編集操作を表し、結果として生じる状態がSJID「4」における編集操作に基づいていると判定することができる。
【0303】
それぞれの操作に基づき、ステップ2054において、ファイルジャーナルインタフェース1902は、各コンテンツアイテムについて線形化された操作(例えば、1972)のセットを生成する。線形化された操作セットは、ジャーナル1960中の複数のリビジョンに基づき各コンテンツアイテムの修正2004を反映することができる。ファイルジャーナルインタフェース1902は、相対クロック及び/または因果関係に基づき各コンテンツアイテムについて計算されるそれぞれの操作を線形化することによって線形化された操作(324A)のセットに、複数のリビジョン(1972)を変換することができる。
【0304】
ステップ2056において、ファイルジャーナルインタフェース1902は、線形化された操作セットによって表されるジャーナル1960中の位置を識別するカーソル(例えば、324B)を生成する。ステップ2058において、ファイルジャーナルインタフェース1902は、線形化された操作セット及びカーソルをクライアントデバイス150に送信する。カーソルは、各ネームスペース及び/または操作について、それぞれのネームスペース識別子(NSID)及びジャーナル識別子(SJID)を含むことができる。カーソル中のNSID及びSJIDの組み合わせは、特定のネームスペースについてジャーナル1960中にリビジョン番号を示すことができる。クライアントデバイス150は、カーソルを使用して、クライアントデバイス150によって取得されるリビジョンを、またクライアントデバイス150によって取得されたこれらのリビジョンに対応するジャーナル1960中のクライアントデバイス150の位置を識別することができる。また、クライアントデバイス150は、その最新のカーソルをファイルジャーナルインタフェース1902に提供し、ファイルジャーナルインタフェース1902に、ジャーナル1960中のクライアントデバイス150の現在の位置を報告することができる。例えば、クライアントデバイス150は、カーソルをファイルジャーナルインタフェース1902に提供し、クライアントデバイス150が新規のリビジョンを必要とするかどうかを判定することができる。
【0305】
また、クライアントデバイス150はまた、クライアントデバイス150における操作をファイルジャーナルインタフェース1902に報告するときに、そのカーソルをファイルジャーナルインタフェース1902に提供することができる。カーソルは、これらの操作をジャーナル1960中の特定のリビジョン、及び/またはジャーナル1960中の位置にマッピングする。これにより、クライアントデバイス150からの操作が操作によって修正されたコンテンツアイテムへの最新のリビジョンに基づくかどうかをファイルジャーナルインタフェース1902が判定することが可能である。
【0306】
クライアントデバイス150は、カーソル、及び線形化された操作セットを受信し、これらの操作に基づきクライアントデバイス150においてコンテンツアイテムを更新することができる。このように、クライアントデバイス150は、クライアントデバイス150とコンテンツ管理システム110との間でコンテンツアイテムを同期させることができる。クライアントデバイス150は、カーソルを格納し、ジャーナル1960中のその位置をファイルジャーナルインタフェース1902に提供することができる。
【0307】
図21は、ネームスペース間操作の例示的な線形化の図を示す。ネームスペース間の線形化、及びシャード間またはネームスペース間のリスト化は、クロック順序付けを介して実行されることができる。テーブル2102A、2102B(合わせて「2102」)は、線形化のためのネームスペース間操作のバッチを示す。テーブル2102A、2102Bは、テーブル2102A、2102B中の記録用のネームスペースを識別するためのネームスペース(NSID)フィールドであるカラム2106A、2108Aと、カラム2106A、2108A中のそれぞれのネームスペース用のテーブル2102A、2102B中のロウまたはSJIDを識別するためのSJIDフィールドであるカラム2106B、2108Bと、各SJIDと関連する操作を識別するための操作フィールドであるカラム2106C、2108Cと、カラム2106C、2108C中の操作と関連するタイムスタンプを識別するためのクロックフィールドであるカラム2106D、2108Dとをそれぞれ含む。
【0308】
この実施例において、テーブル2102Aは、NSID「1」についてのSJID「100」及び「101」を描く。SJID「100」は、タイムスタンプ「1000」において「foo.txt」をネームスペース「1」に追加する操作と関連付けられ、そしてSJID「101」は、タイムスタンプ「1001」においてネームスペース「2」をマウントする操作と関連付けられる。テーブル2102Bは、NSID「2」についてのSJID「1」及び「2」を描く。SJID「1」は、タイムスタンプ「2100」において「bar.txt」をネームスペース「2」に追加する操作と関連付けられ、そしてSJID「2」は、タイムスタンプ「1002」において「bar.txt」を編集する操作と関連付けられる。
【0309】
リニアライザ(例えば、変換サービス1904)は、テーブル2102A及び2102B(合わせて2102)中の操作のバッチを取得し、カーソル(2114)によって操作(2112)の単一のストリームを発行することができる。リニアライザは、テーブル2102中に少なくとも1つの操作を含むすべてのネームスペースを識別し、それぞれタイムスタンプ、NSID、SJIDに基づきすべてのネームスペースについての操作を線形化することができる。この実施例において、テーブル2102中の操作のバッチは、テーブル2104に示される操作のストリームに線形化する。
【0310】
テーブル2104は、各操作のネームスペースを識別するためのNSIDフィールドを含むNSIDカラム2110、テーブル2104中の操作を識別するための操作フィールドを含む操作カラム2112、及び各操作についてのカーソル状態を識別するためのカーソルフィールドを含むカーソルカラム2114を含む。テーブル2104中のロウ2104Aは、テーブル2102A中のネームスペース「1」のSJID「100」からの追加操作を備える。ロウ2104Aについてのカーソルカラム2114中のカーソル状態は、追加操作がテーブル2102Aに示されるネームスペース「1」中のSJID「100」に対応することを示す、ネームスペース「1」及びSJID「100」である。テーブル2104中のロウ2104Bは、NSIDカラム2110または操作カラム2112中に値を含まないが、この実施例において、ネームスペース「2」についてSJID「0」を追加する、ネームスペース間のカーソル状態を含む、カーソルカラム2114中のカーソル状態を更新する。
【0311】
テーブル2104中のロウ2104Cは、テーブル2102Aに示されるネームスペース「2」中のSJID「1」からの追加操作を含む。ロウ2104Cについてのカーソルカラム2114中のカーソル状態は、ロウ2104C中の追加操作と関連するネームスペース「1」及び「2」についてそれぞれSJID「100」及び「1」を含む。示されるように、カーソル状態は、カーソルがネームスペース「1」中のSJID「100」、及びネームスペース「2」中のSJID「1」にあることを示す。換言すれば、ネームスペース「1」中のロウまたはSJIDは、追加操作がネームスペース「1」の状態に影響しない場合に増加しないが、ネームスペース「2」中のロウまたはSJIDは、追加操作がネームスペース「2」中のリビジョンを表し、ネームスペース「2」の状態に影響する場合に1つ増加した。したがって、ロウ2104C中のカーソル状態は、ネームスペース「2」中のSJID「1」における追加操作後に、ネームスペース「1」及びネームスペース「2」についてそれぞれのSJIDを追跡する。
【0312】
テーブル2104中のロウ2104Dは、SJID「101」におけるマウント操作、及びテーブル2102Aにおけるネームスペース「1」を含む。マウント操作は、ネームスペース「2」をネームスペース「1」にマウントする。マウント操作は、ネームスペース「1」中のSJIDを「100」から「101」に増加させるが、ネームスペース「2」中のSJIDを増加させない。その結果、ロウ2104Dについてのカーソルカラム2114中のカーソル状態は、ネームスペース「1」についてSJID「101」を含み、ネームスペース「2」についてSJID「1」を維持する。このカーソル状態は、ネームスペース「1」及び「2」における状態及び/または順序を反映する。
【0313】
テーブル2104中のロウ2104Eは、マウント及び編集操作のそれぞれのタイムスタンプに従い、ネームスペース「1」中のSJID「101」におけるマウント操作後である、テーブル2102A中のSJID「2」及びネームスペース「2」における編集操作を含む。ロウ2104Eのカーソルカラム2114中のカーソル状態は、SJID「101」におけるネームスペース「1」についてのカーソル状態を維持するが、SJID「2」へのネームスペース「2」についてのカーソル状態を増加させる。
【0314】
テーブル2104中に示されるように、操作2112は、ネームスペース「1」及び「2」にわたる因果関係及びタイムスタンプに基づき線形化される操作のストリームとしてリスト化される。操作2112をテーブル2104中で線形化してネームスペース間の因果関係及び連鎖を反映すると、操作2112をサーバファイルジャーナル148中のリビジョン(例えば、ジャーナル1960中のリビジョン1972)に変換し、サーバファイルジャーナル148に書き込むことができる。
【0315】
例えば、サーバファイルジャーナル148中のネームスペース「1」についてのジャーナルは、「foo.txt」をネームスペース「1」に追加する追加操作を表すSJID「100」におけるリビジョン、及びネームスペース「2」をネームスペース「1」上にマウントするマウント操作を表すSJID「101」におけるリビジョンを含むように更新されることができる。さらに、サーバファイルジャーナル148中のネームスペース「2」についてのジャーナルは、「bar.txt」をネームスペース「2」に追加する追加操作を表すSJID「1」におけるリビジョン、及びネームスペース「2」上の「bar.txt」を編集する編集操作を表すSJID「2」におけるリビジョンを含むように更新されることができる。
【0316】
ランポートクロック
図22は、イベントのために計算されるランポートクロックに従い順序付けされるネームスペースにわたるイベントの図を示す。この実施例において、さまざまな操作は、ネームスペースNSID1、NSID2、及びNSID3にわたり実行されている。各ネームスペースは、ネームスペース内の操作の順序付けを決定するために、そのネームスペースにおけるすべての操作に対してSJIDを維持する。しかしながら、ネームスペースのSJIDは、ネームスペースにわたる操作の順序付け及び因果関係を識別しない。その結果、ランポートクロックをネームスペースNSID1、2、3中の操作について計算し、因果関係を判定し、操作のネームスペース間順序付けを取得する。
【0317】
NSID1において、操作2210は、SJID1及びクロック1を含む。NSID2において、操作2216は、SJID1及びクロック1を含む。NSID3において、操作2220は、SJID1及びクロック1を含む。操作2210、2216、2220は、複数のネームスペースにまたがり、因果関係を含まない。その結果、操作2210、2216、2220は、互いのクロックに影響しない。
【0318】
ネームスペース内の操作の順序付けは、ネームスペースにおいてSJIDに基づき決定されることができる。同一のネームスペース内の操作についてのクロックは、1つ単にインクリメントされることができる。したがって、NSID1中のSJID2において、操作2212についてのクロックは、2にインクリメントされる。
【0319】
NSID1中の操作2212は、File1からNSID2への移動である。その結果、操作2212は、File1のNSID2における追加である、操作2218をNSID2にトリガする。NSID2における操作2218が異なるネームスペースからの別な操作、すなわち、NSID1からの操作2212に因果関係によって依存していることから、操作2218についてのクロックは、NSID1におけるクロック、及びNSID2におけるクロックに基づき計算される。このアルゴリズムは、TargetNS_clockt1=max(Source_NSclock,TargetNS_clockt0)+1として表現されることができる。したがって、この実施例において、NSID2における操作2218についてのクロックは、3(例えば、max(2,1)+1)である。その結果、NSID2における操作2218は、SJID2及びクロック3を含む。
【0320】
同様に、NSIDにおける操作2216は、NSID2からNSID1へのFile2の移動である。したがって、操作2216は、File2をNSID1に追加するための、NSID1における操作2222をトリガする。操作2222についてのクロックは、クロックアルゴリズムに基づき計算され、3に等しい。したがって、操作2222は、NSID1におけるSJID3、及びクロック3を含む。
【0321】
NSID3における操作2223は、同一のネームスペースにおける操作、すなわち、NSID3における操作2220に因果関係によって依存している。したがって、操作2223についてのクロックは、NSID3における操作2220のクロックをインクリメントすることによって計算され得る。この実施例において、したがって、操作2223についてのクロックは、2である。NSID3における操作2223は、SJID2及びクロック2を含む。操作2223がDirをNSID1に移動させるための移動操作であることから、操作2223は、DirをNSID1に追加する、NSID1における操作2224をトリガする。
【0322】
操作2224が操作2222によって異なるネームスペース(NSID3)にトリガされることから、操作2224についてのクロックは、NSID1におけるクロック、及び操作2222についてのクロックに基づき計算される。その結果、操作2224についてのクロックは、4に設定される(例えば、max(2,3+1)。したがって、操作2224は、NSID1におけるSJID4、及びクロック4を含む。
【0323】
NSID1における操作2226は、File3をNSID1に追加し、ネームスペース間操作ではない。その結果、操作2226についてのクロックは、NSID1においてクロックをインクリメントすることによって計算される。したがって、操作2226についてのクロックは、5に設定される。
【0324】
操作2228は、NSID1内で操作2226にも因果関係によって依存している。したがって、操作2228についてのクロックは、NSID1において操作2226のクロックをインクリメントすることによって、6に設定される。操作2228は、NSID1におけるSJID6、及びクロック6を含む。
【0325】
操作2228は、File3をNSID3に移動させる移動操作である。したがって、操作2228は、NSID3に操作2230をトリガする。操作2230が異なるネームスペースからの操作に基づくことから、そのクロックは、NSID3におけるクロック、及び操作2228のクロックに基づくクロックアルゴリズムを使用して計算される。この事例において、操作2230についてのクロックは、7に設定される。したがって、操作2230は、NSID3におけるSJID3、及びクロック7を含む。
【0326】
操作2232、2234は、ネームスペース間操作ではなく、NSID3における操作2230に因果関係によって関連がある。したがって、操作2232、2234についてのクロックは、操作2230のクロックをインクリメントすることによって計算されることができる。この実施例において、操作2232、2234についてのクロックは、それぞれ8及び9に設定される。
【0327】
図23は、コンピューティングシステム2300の実施例を示し、このコンピューティングシステムは、クライアントデバイス150、コンテンツ管理システム110またはそれらのいずれかのコンポーネントを構成する、例えば、いずれかのコンピューティングデバイスであることができ、このシステムのこれらのコンポーネントは、接続2305を使用して互いに通信する。接続2305は、バスを介する物理的な接続、またはチップセットアーキテクチャなどの、プロセッサ2310中に直接接続であることができる。また、接続2305は、仮想接続、ネットワーク化された接続、または論理接続であることができる。
【0328】
いくつかの実施形態において、コンピューティングシステム2300は、本開示に記述される機能が1つのデータセンター、複数のデータセンター、ピアネットワークなどの内に分散されることができる分散システムである。いくつかの実施形態において、記述されたシステムのコンポーネントのうちの1つ以上は、コンポーネントが記述されている機能のうちのいくつか、またはすべてを各実行する、多くのこれらのようなコンポーネントを表す。いくつかの実施形態において、これらのコンポーネントは、物理デバイスまたは仮想デバイスであることができる。
【0329】
例示的なシステム2300は、少なくとも1つの処理ユニット(CPUまたはプロセッサ)2310、ならびに読み出し専用メモリ(ROM)2320及びランダムアクセスメモリ(RAM)2325などのシステムメモリ2315を含むさまざまなシステムコンポーネントをプロセッサ2310に結合する接続2305を備える。コンピューティングシステム2300は、プロセッサ2310の部分と、直接に、近接して、または統合されて、接続される高速メモリ2312のキャッシュを含むことができる。
【0330】
プロセッサ2310は、いずれかの汎用プロセッサ、ならびにストレージデバイス2330に格納され、プロセッサ2310を制御するように構成されるサービス2332、2334、及び2336などのハードウェアサービスまたはソフトウェアサービスだけではなく、ソフトウェア命令が実際のプロセッサ設計中に組み込まれる専用プロセッサをも含むことができる。プロセッサ2310は、本質的に、複数のコアまたはプロセッサ、1つのバス、メモリコントローラ、キャッシュなどを含む、完全に自己完結型コンピューティングシステムであることができる。マルチコアプロセッサは、対称または非対称であることができる。
【0331】
ユーザインタラクションを可能にするために、コンピューティングシステム2300は、入力デバイス2345を含み、この入力デバイスは、音声用のマイクロフォン、ジェスチャまたはグラフィカル入力用のタッチパネル、キーボード、マウス、モーション入力、音声などのような、いずれかの数の入力メカニズムを表すことができる。また、コンピューティングシステム2300は、出力デバイス2335を含むことができ、この出力デバイスは、当業者に知られている複数の出力メカニズムのうちの1つ以上であることができる。いくつかの例において、マルチモーダルシステムは、コンピューティングシステム2300と通信する複数のタイプの入力/出力をユーザが提供することを可能にする。コンピューティングシステム2300は、通信インタフェース2340を含むことができ、この通信インタフェースは、ユーザ入力及びシステム出力を一般的に規制し、管理することができる。いずれかの特定のハードウェア配置上の操作に制約がないため、本明細書における基本機能は、それらが開発されているような改善されたハードウェアまたはファームウェア配置の代わりに容易に使用されることができる。
【0332】
ストレージデバイス2330は、不揮発性メモリデバイスであることができ、ハードディスク、またはコンピュータによってアクセス可能であるデータを格納することができる、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタルバーサタイルディスク、カートリッジ、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、及び/またはこれらのデバイスのいくつかの組み合わせのような、他のタイプのコンピュータ可読媒体であることができる。
【0333】
ストレージデバイス2330は、ソフトウェアサービス、サーバ、サービスなどを含むことができ、このようなソフトウェアを定義するコードがプロセッサ2310によって実行されるときに、そのコードがシステムに機能を実行させる。いくつかの実施形態において、特定の機能を実行するハードウェアサービスは、この機能を実行する、プロセッサ2310、接続2305、出力デバイス2335などのような、必要なハードウェアコンポーネントと関連するコンピュータ可読媒体に格納されるソフトウェアコンポーネントを含むことができる。
【0334】
説明の明確さのために、いくつかの例において、本技術は、ソフトウェア、またはハードウェア及びソフトウェアの組み合わせに具体化される方法において、デバイス、デバイスコンポーネント、ステップまたはルーチンを有する機能ブロックを含む個々の機能ブロックを備えるように提示されることができる。
【0335】
本明細書に記述されるステップ、操作、機能、またはプロセスのいずれかは、ハードウェア及びソフトウェアサービスの組み合わせ、もしくはサービス単独で、または他のデバイスと組み合わせて実行される、または実装されることができる。いくつかの実施形態において、サービスは、クライアントデバイスのメモリ、及び/またはコンテンツ管理システムの1つ以上のサーバに存在するソフトウェアであり、プロセッサがサービスと関連するソフトウェアを実行するときに1つ以上の機能を実行することができる。いくつかの実施形態において、サービスは、特定の機能を実行するプログラムまたはプログラムコレクションである。いくつかの実施形態において、サービスは、サーバとみなされることができる。メモリは、非一時的なコンピュータ可読媒体であることができる。
【0336】
いくつかの実施形態において、コンピュータ可読ストレージデバイス、媒体、及びメモリは、ビットストリーム及び同様のものを有するケーブルまたは無線信号を含むことができる。しかしながら、言及されるときに、非一時的なコンピュータ可読記憶媒体は、エネルギー、搬送信号、電磁波、及び信号自体を明確に除外する。
【0337】
上述される実施例による方法は、格納される、またはその他の方法によりコンピュータ可読媒体から利用可能である、コンピュータ実行可能命令を使用して、実装されることができる。これらのような命令は、例えば、汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスに、ある特定の機能、もしくは機能群を実行させる、またはその他の方法により汎用コンピュータ、専用コンピュータ、もしくは専用処理デバイスがある特定の機能、もしくは機能群を実行するように設定する、命令及びデータを含むことができる。使用されているコンピュータリソースの部分は、ネットワーク経由でアクセス可能である。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式命令、ファームウェア、またはソースコードであり得る。命令、使用される情報、及び/または記述された実施例に従う方法中に作成される情報を格納するために使用されることができるコンピュータ可読媒体の実施例は、磁気または光ディスク、ソリッドステートメモリデバイス、フラッシュメモリ、不揮発性メモリによって提供されるUSBデバイス、ネットワーク化されたストレージデバイスなどを含む。
【0338】
これらの開示に従う方法を実装するデバイスは、ハードウェア、ファームウェア及び/またはソフトウェアを含むことができ、さまざまなフォームファクタのいずれかを取ることができる。これらのようなフォームファクタの典型的な実施例は、サーバ、ラップトップ、スマートフォン、スモールフォームファクタパーソナルコンピュータ、パーソナルデジタルアシスタントなどを含む。また、本明細書に記述される機能性は、周辺機器またはアドインカードに具体化されることができる。また、このような機能性は、さらなる実施例として、異なるチップ間回路基板、または単一のデバイス中で実行する異なるプロセスに実装されることができる。
【0339】
これらの命令、これらのような命令を伝えるための媒体、それらを実行するためのコンピューティングリソース、及びこれらのようなコンピューティングリソースをサポートするための他の構造は、これらの開示に記述される機能を提供するための手段である。
【0340】
さまざまな実施例及び他の情報を使用して、添付の特許請求の範囲内で態様を説明したが、特許請求の範囲の制限は、当業者がこれらの実施例を使用して多種多様な実施態様を導出することができる場合に、これらのような実施例における特定の特徴または配置に基づき黙示的に伝えられるべきではない。さらに、ある発明の主題が構造的特徴及び/または方法ステップの実施例に特有の言語で記述されている場合があるが、添付の特許請求の範囲に定義されている本発明の主題がこれらの記述された特徴また行為に必ずしも限定されないことを理解するであろう。例えば、このような機能性は、本明細書において特定されている構成要素以外の構成要素に、異なるように分散される、または実行されることができる。むしろ、記述された特徴及びステップは、添付の特許請求の範囲内でシステム及び方法の構成要素の実施例として開示されている。