本出願は、2021年9月14日に出願された、「非同期動作のための意図トラッキング」という名称の米国特許出願第17/474,958号の優先度を主張し、これは、2021年3月30日に出願された、「非同期動作のための意図トラッキング」という名称の米国特許出願第17/217,600号の継続であり、これらの全ては、基準によりその全体が本明細書に組み込まれる。
この開示の特定の態様および実施形態は、以下に提供される。これらの態様および実施形態のいくつかは、個別に適用することができ、それらのいくつかは、当業者に明らかなように組み合わせて適用することができる。以下の説明では、説明の目的のために、アプリケーションの実施形態を完全に理解するために、特定の詳細が説明されている。しかしながら、これらの特定の詳細が無くても、様々な実施形態が実施可能であることは明らかである。図及び説明は、制限することを意図したものではない。
以下の説明は、例示的な実施形態のみを提供するものであり、開示の範囲、適用性、又は構成を限定するものではない。むしろ、例示的な実施形態の以下の説明は、例示的な実施形態を実施するための可能な説明を当業者に提供する。特許請求の範囲に記載された本出願の精神および範囲から逸脱することなく、要素の機能および配置に種々の変更を加えることができることを理解されたい。
クラウドストレージシステムにより、ユーザは複数のデバイスにまたがってコンテンツアイテムを保存し、アクセスすることができる。コンテンツアイテムは、ファイル、ドキュメント、メッセージ(例えば、電子メールメッセージ、テキストメッセージ、コメント、通知等)、メディアファイル(例えば、画像、ビデオ、オーディオファイル等)、フォルダ、オブジェクト、及び/又は任意の他のユニット及び/又は種類のデジタルコンテンツを含むことができるが、これらに限定されない。コンテンツアイテムは、共有コンテンツアイテムを操作したり、共有コンテンツアイテムを介して相互にコラボレーションしたりできる複数のユーザと共有することができる。さらに、利用者は、例えば、コンテンツアイテムの追加/格納、コンテンツアイテムの変更、コンテンツアイテムの削除、コンテンツアイテムの名前変更、コンテンツアイテムの移動、コンテンツアイテムの共有、コンテンツアイテムのコピー、コンテンツアイテムの表示、コンテンツアイテムのマウント(例えば、共有もしくはネームスペース)、コンテンツアイテムの分割、コンテンツアイテムの暗号化など、1つ以上のコンテンツアイテム操作を行うことができる。
しかし、複数のデバイスやユーザアカウントで共有または保存されているコンテンツアイテムを同期することは、非常に困難であり、欠陥があり、エラーや不整合が発生しやすく、技術的な障害が発生しやすくなる。図示のために、第1のマシン(例えば、クライアントデバイスまたはサーバ)は、クラウドストレージシステム上のユーザのコンテンツアイテムの修正に関する情報を提供する第2のマシンに通信を送ることができる。これらの通信は、第2のマシンによって使用され、第1のマシン上のコンテンツアイテムに対して実行されたアクションが第2のマシン上のコンテンツアイテムに反映され、第1のマシン上のコンテンツアイテムが第2のマシン上のコンテンツアイテムと同一または実質的に同一であるように、第2のマシン上のコンテンツアイテムを同期させることができる。
多くの場合、1つ以上のコンテンツアイテムのローカルコピーを保存する種々のマシン間で送信されるいくつかの通信がある。このような通信は管理が困難な場合がある。さらに、クライアントやネットワークの問題などのさまざまな問題の結果として、通信の一部が順序どおりに受信されない場合がある。これにより、多くの場合、さまざまなマシンのコンテンツアイテム間で競合やエラーが発生する。また、ユーザのアクティビティによって多数のリビジョンが生成され、同期作業がさらに複雑になり、不整合が悪化する可能性がある。例えば、ユーザは、様々なコンテンツアイテムに対して多数の修正を行ったり、短期間に修正を取り消したり、以前に修正されたコンテンツアイテムに対して追加の修正を迅速に行ったりすることができる。これにより、ユーザからの変更やリビジョンが順序どおりに受信されず、古い変更や競合するコンテンツアイテムが発生する可能性が高くなる。その結果、一部の操作はコンテンツアイテムの現在の状態と互換性がなくなり、操作が競合しているかどうかを検出することが極めて困難になる可能性がある。さらに、任意の時点において、あるマシン上のコンテンツアイテムのコピーの状態は、別のマシン上のそのコンテンツアイテムの別のコピーの状態と異なる可能性がある。
同期アクションには固有のレイテンシもある。例えば、第1のマシンで実行されたアクションは第1のマシンによって検出され、通信が生成され、ネットワークを介して送信される。通信には、第1のマシンで実行されたアクションに基づいてコンテンツアイテムの1つ以上のコピーを更新する同期アクションを含めることができる。通信は、コンテンツアイテムの1つ以上のコピーに対して実行される他の動作に対応する以前の通信をまだ処理しているかもしれない第2のマシンによって受信されることができる。アクション間の競合を避けるために、第2のマシンは、第1のマシンで実行されたアクションに基づいて、受信した通信に関連付けられた同期アクションを実装する前に、前の通信で詳細なアクションを完了しようとする。
しかし、この例示シナリオでは、レイテンシのいくつかの可能なポイントがあり、特に、第1のマシン、第2のマシン、およびネットワークを含む。レイテンシが増加すると、コンテンツアイテムのコピー間で競合が発生する可能性も高くなる。このような競合する通信の処理と競合の解決は、極めて困難で計算コストの高いタスクである。さらに、デバイス間でコンテンツアイテムのコピーを同期する潜在的な待ち時間及び/又は遅延のために、任意の時点で、あるマシン上のコンテンツアイテムのコピーの状態は、別のマシン上のコンテンツアイテムの別のコピーの状態とは潜在的に異なる可能性がある。これにより、マシンからコンテンツアイテムの各コピーにアクセスするときに、ユーザに表示される内容が異なる場合がある。異なるマシンにおけるコンテンツアイテムコピーの状態におけるこのような変動は、あるマシンにおいて、古くなったもしくは不正確なコンテンツをもたらす可能性があり、マシンにおけるユーザにデータ損失及び/又は他のデータ問題が発生したと感じさせる可能性があり、ユーザのコンテンツ及び/又はコラボレーションエクスペリエンスに著しく影響を与える可能性がある。
例えば、第1のマシンでフォルダに対して実行された移動操作が第2のマシンに完全に伝播される前に、第2のマシンのユーザがフォルダにアクセスしようとすると、第2のマシンのユーザは、移動前のフォルダを参照したり、移動の中間結果を参照したりする可能性があり、さまざまな不一致や不整合が発生する可能性がある。説明するように、第2のマシンのユーザは、進行中の同期動作の一部として移動されていないフォルダ内のいくつかのアイテムを含むフォルダを見ることができ、一方、フォルダ内の他のアイテムは、同期動作の一部としてすでに移動されている場合は、欠落しているように見えることがある。ユーザは、フォルダに対して実行された移動操作や進行中の同期動作に気づかず、部分的なデータ損失が発生したと感じるかもしれない。
さらに、コンテンツアイテムにアクセスするマシン及び/又は他のマシン上の同じまたは異なるユーザが同じコンテンツアイテムに変更を加える場合、追加の状態および同期の複雑さを導入する可能性がある。また、コンテンツアイテムが大規模なコラボレーション環境でローカルおよびリモートで変更される場合にも、追加の技術的な問題が発生する可能性がある。これらの問題は、急速に複雑さを増殖、増大させる可能性があり、コンテンツアイテムに幅広い問題や不整合が生じる。
本明細書に開示する技術は、特に、分散ストレージシステム(例えば、クラウドストレージシステムなど)における前述の問題および課題に対処することができ、分散ストレージシステムにおける同期の性能、正確性、タイミング、および効率を改善することができる。例えば、先に述べたように、分散ストレージ環境における異なるデバイスからのユーザによってアクセスされ、及び/又は、修正されたコンテンツアイテムの状態を正確に同期させることは、例えば、大量の関連するユーザアクティビティおよびコンテンツアイテムリビジョン、データ依存性、ユーザアカウント許可、ネットワークおよびデバイス遅延、潜在的なコンテンツアイテム競合などの様々な理由のために、非常に困難であり得る。これらの課題をさらに複雑にする、場合によっては、同期及び/又はコラボレーション通信および動作の性能、正確性、信頼性などに影響を与える可能性のあるタイミング(及び/又は効率)の問題/考慮事項がしばしば存在する。
例えば、同期通信、動作などにおける遅延及び/又は待ち時間は、異なるデバイスにわたって記憶/アクセスされるコンテンツアイテム(及び/又は関連する状態データ)における潜在的な競合、不正確性、古さ及び/又はエラーの量を増加させる可能性がある。多くの場合、異なるデバイスからの処理アクティビティにおける待ち時間、遅延及び/又は非効率性(例えば、リビジョン、同期動作、通信など)、コンテンツアイテムの同期状態の計算、およびデバイス間でのコンテンツアイテムの同期状態の伝播は、異なるデバイス及び/又はユーザアカウントから観察されるコンテンツアイテムの状態間の不整合をもたらすことがある。コンテンツアイテムの状態が同期されず、及び/又はタイムリーに及び/又は効率的な方法で正確に実行されない場合、ユーザは、データ損失として現れるものを観察することができ、及び/又は、一時的に、ユーザのデバイスに完全に同期されていない、及び/又はユーザのデバイスにおける現在の状態を反映していないコンテンツアイテムにアクセスすることができない可能性がある。
本明細書に開示する技術は、分散ストレージシステムにおける同期動作の性能、精度、タイミング及び/又は効率を改善することができる。また、本明細書に開示する技術は、異なるデバイスにまたがって保存、アクセス、及び/又は実行されるコンテンツアイテムの状態の正確性、新鮮度、及び/又は適時性を向上させることができる。例えば、分散ストレージシステムにおけるこれら及び他の同期化改善は、分散ストレージシステムにおいてユーザによってしばしば経験される問題である、異なるデバイスにおいて保存、アクセス、及び/又は実行される共有コンテンツアイテムの状態におけるエラー、古さ、不一致等を防止及び/又は低減することができる。
いくつかの例では、本明細書で開示する技術は、進行中及び/又は不完全な動作によって影響を受けるコンテンツアイテムの意図された状態を計算及びトラッキングすることができる。本明細書で開示する技術は、意図した状態を使用して、進行中または不完全な動作に関連するコンテンツアイテムへのアクセスを要求するユーザに、コンテンツアイテムの予測状態を提供することができる。予測状態は、動作の完了後にユーザに表示されるべき内容を反映することができる。これにより、進行中または不完全な動作の後に、ユーザのアカウント上のコンテンツアイテムがその状態に従って表示されるようにし、動作が進行中または未完了のときにユーザに提示されるコンテンツアイテムの潜在的な不一致、不整合、およびその他の問題を防止または排除することができる。
いくつかの例では、開示された技術は、特に、コンテンツアイテム同期能力およびコラボレーション機能を有するコンテンツ管理システムのコンテキスト内で展開される。一例のシステム構成100が図1に示されており、これはクライアントデバイス150とインタラクションするコンテンツ管理システム110を示す。
コンテンツ管理システム110は、コンテンツアイテムをアカウントに関連付けて保存し、コンテンツアイテムを検索、修正、ブラウズ、及び/又は共有するなどの様々なコンテンツアイテム管理タスクを実行することができる。さらに、コンテンツ管理システム110は、アカウントが複数のクライアントデバイスからコンテンツアイテムにアクセスすることを可能にすることができる。
コンテンツ管理システム110は、複数のアカウントをサポートする。エンティティ(ユーザ、ユーザのグループ、チーム、会社など)は、コンテンツ管理システムを有するアカウントを生成することができ、アカウントの詳細は、アカウントデータベース140に保存されることができる。アカウントデータベース140は、登録されたエンティティについてのプロファイル情報を保存することができる。場合によっては、登録エンティティのプロファイル情報は、ユーザ名及び/又は電子メールアドレスを含む。アカウントデータベース140は、アカウントタイプ(例えば、様々な階層(tier)の無料アカウントまたは有料アカウント)、割り当てられたストレージスペース、使用されたストレージスペース、常駐する登録コンテンツ管理クライアントアプリケーション152を有するクライアントデバイス150、セキュリティ設定、個人用構成設定などのアカウント管理情報を含むことができる。
アカウントデータベース140は、エンティティに関連するアカウントのグループを保存することができる。グループは、グループポリシーやアクセスコントロールリストに基づいて権限を持つことができ、グループのメンバーは権限を継承することができる。例えば、マーケティンググループは1セットのコンテンツアイテムにアクセスでき、エンジニアリンググループは別のセットのコンテンツアイテムにアクセスできる。管理者グループは、グループの変更、ユーザアカウントの変更などを行うことができる。
コンテンツ管理システム110の機能は、コンテンツストレージ142に保存することができるコンテンツアイテムの保存である。コンテンツアイテムは、ドキュメント、コラボレーションコンテンツアイテム、テキストファイル、オーディオファイル、画像ファイル、ビデオファイル、Webページ、実行可能ファイル、バイナリファイルなどの任意のデジタルデータにすることができる。コンテンツアイテムには、フォルダ、zipファイル、プレイリスト、アルバムなど、さまざまな態様でコンテンツアイテムをグループ化するためのコレクションやその他の機構を含めることもできる。コレクションは、フォルダ、または共通属性によって関連またはグループ化された複数のコンテンツアイテムを参照することができる。いくつかの例では、コンテンツストレージ142は、特定の機能を処理するために、他のタイプのストレージまたはデータベースと組み合わされる。
コンテンツストレージ142はコンテンツアイテムを保存することができるが、コンテンツアイテムに関するメタデータはメタデータデータベース146に保存することができる。同様に、コンテンツアイテムがコンテンツストレージ142に保存される場所に関するデータは、コンテンツディレクトリ144に保存することができる。さらに、変更、アクセスなどに関するデータを、サーバファイルジャーナル148に保存することができる。コンテンツストレージ142、コンテンツディレクトリ144、サーバファイルジャーナル148、およびメタデータデータベース146などの様々なストレージ/データベースのそれぞれは、複数のそのようなストレージまたはデータベースで構成することができ、多くのデバイスおよびロケーションに分散することができる。その他の構成も可能である。例えば、コンテンツストレージ142、内容ディレクトリ144、サーバファイルジャーナル148、及び/又はメタデータデータベース146からのデータは、1つ以上のコンテンツストレージまたはデータベースに結合されてもよく、または追加のコンテンツストレージまたはデータベースにさらにセグメント化されてもよい。従って、コンテンツ管理システム110は、図1に示すよりも多くまたは少数のストレージ及び/又はデータベースを含んでもよい。
いくつかの例では、コンテンツストレージ142は、少なくとも1つのコンテンツストレージサービス116に関連付けられ、これは、保存のためのコンテンツアイテムの受信、保存のためのコンテンツアイテムの準備、コンテンツアイテムのための保存場所の選択、保存からのコンテンツアイテムの検索などを含む、コンテンツアイテムの保存を管理するソフトウェアまたは他のプロセッサ実行可能命令を含むが、これに限定されない。いくつかの例において、コンテンツストレージサービス116は、コンテンツストレージ142で保存するために、コンテンツアイテムをより小さなチャンクに分割することができる。コンテンツアイテムを構成する各チャンクの位置は、コンテンツディレクトリ144に記録することができる。コンテンツディレクトリ144は、コンテンツストレージ142に保存された各コンテンツアイテムに対するコンテンツエントリを含むことができる。コンテンツエントリは、コンテンツアイテムを識別する一意のIDに関連付けることができる。
いくつかの例では、コンテンツディレクトリ144内のコンテンツアイテムを識別する一意のID(オブジェクトIDとも呼ばれる)は、決定論的ハッシュ関数から導出可能である。コンテンツアイテムの一意のIDを導出するこの方法は、決定論的ハッシュ関数が同じコンテンツアイテムのすべてのコピーに対して同じ識別子を出力するが、異なるコンテンツアイテムに対して異なる識別子を出力するため、コンテンツアイテムの重複がそのように認識されることを保証することができる。この方法論を使用して、コンテンツストレージサービス116は、各コンテンツアイテムに対してユニークなIDを出力することができる。
コンテンツストレージサービス116はまた、メタデータデータベース146内のコンテンツアイテムに対するコンテンツパスを指定または記録することができる。コンテンツパスには、コンテンツアイテムの名前及び/又は、コンテンツアイテムに関連付けられたフォルダ階層を含めることができる。例えば、コンテンツパスには、コンテンツアイテムがクライアントデバイスのローカルファイルシステムに保存されているフォルダまたはフォルダのパスを含めることができる。コンテンツアイテムは、コンテンツストレージ142内にブロックで保存され、ディレクトリ構造のようなツリーの下に保存されることはないが、そのようなディレクトリ構造は、ユーザにとって快適なナビゲーション構造である。コンテンツストレージサービス116は、ディレクトリ構造の「ルート」ノードが各アカウントのネームスペースであり得るコンテンツアイテムに対するコンテンツパスを定義または記録することができる。ネームスペース内には、アカウント及び/又はコンテンツストレージサービス116のユーザによって定義されるディレクトリ構造があり得る。メタデータデータベース146は、各コンテンツアイテムのコンテンツパスをコンテンツエントリの一部として保存することができる。
いくつかの例では、ネームスペースには、ルートノード内に保存されているかのように、ディレクトリ構造にネストされた追加のネームスペースを含めることができる。これは、アカウントが共有コレクションにアクセスできる場合に発生する可能性がある。共有コレクションには、コンテンツ管理システム110内で独自のネームスペースを割り当てることができる。一部の共有コレクションは、実際には共有コレクションのルートノードであるが、ディレクトリ構造内のアカウントネームスペースの下に配置され、アカウントのフォルダ内のフォルダとして表示される場合がある。上述したように、ディレクトリ構造は、単にユーザにとって快適なナビゲーション構造であるが、コンテンツストレージ142内のコンテンツアイテムの保存位置とは相関しない。
アカウントがコンテンツアイテムを表示するディレクトリ構造は、コンテンツ管理システム110における保存位置に相関しないが、ディレクトリ構造は、クライアントデバイス150によって使用されるファイルシステムに依存して、クライアントデバイス150上の保存位置に相関し得る。
上述したように、コンテンツディレクトリ144内のコンテンツエントリは、コンテンツアイテムを構成する各チャンクの位置を含むこともできる。より具体的には、コンテンツエントリは、コンテンツアイテムを構成するチャンクのコンテンツストレージ142内の位置を識別するコンテンツポインタを含むことができる。
コンテンツパスおよびコンテンツポインタに加えて、コンテンツディレクトリ144内のコンテンツエントリは、コンテンツアイテムへのアクセス権を有するユーザアカウントを識別するユーザアカウント識別子、及び/又はコンテンツアイテムへのアクセス権を有するグループを識別するグループ識別子及び/又はコンテンツエントリが属するネームスペースを含むこともできる。
コンテンツストレージサービス116は、コンテンツアイテムまたはコンテンツアイテムのバージョンを構成する重複コンテンツアイテムまたは重複ブロックを識別することによって、必要とされる保存スペースの量を減らすことができる。複数のコピーを保存する代わりに、コンテンツストレージ142は、コンテンツアイテムまたはコンテンツアイテムのブロックの単一のコピーを保存することができ、コンテンツディレクトリ144は、重複を単一のコピーにリンクさせるポインタまたは他の機構を含むことができる。
コンテンツストレージサービス116はまた、コンテンツアイテムの固有のIDに関連して、コンテンツアイテム、コンテンツアイテムタイプ、フォルダ、ファイルパス、及び/又はコンテンツアイテムと様々なアカウント、コレクション、またはグループとの関係を記述するメタデータをメタデータデータベース146に保存することができる。
コンテンツストレージサービス116はまた、変更、アクセス等に関するデータのログをサーバファイルジャーナル148に保存することができる。サーバファイルジャーナル148は、コンテンツアイテムの一意のIDと、変更またはアクセスのアクションの説明と、タイムスタンプまたはバージョン番号と、その他の関連データとを含むことができる。サーバファイルジャーナル148は、変更またはコンテンツアイテムアクセスによって影響を受けるブロックへのポインタを含むこともできる。コンテンツストレージサービスは、コンテンツアイテムに対する変更、コンテンツアイテムの異なるバージョン(ダイバージング(diverging)バージョンツリーを含む)をトラッキングするコンテンツアイテムバージョンコントロールと、サーバファイルジャーナル148から取得可能な変更履歴とを使用することにより、動作を元に戻す機能を提供することができる。
コンテンツ管理システム110の別の機能は、少なくとも1つのクライアントデバイス150とのコンテンツアイテムの同期である。クライアントデバイスは、異なる形態をとり、異なる能力を有することができる。例えば、クライアントデバイス1501は、その上に常駐する多数のアプリケーションによってアクセス可能なローカルファイルシステムを有するコンピューティングデバイスである。クライアントデバイス1502は、コンテンツアイテムが、特定のアプリケーションによって、または特定のアプリケーションによって与えられた許可によってのみアクセス可能であり、コンテンツアイテムは、典型的には、特定アプリケーション空間またはクラウドのいずれかに格納されるコンピューティングデバイスである。クライアントデバイス1503は、ウェブブラウザを介してコンテンツ管理システム110にアクセスし、ウェブインタフェースを介してコンテンツアイテムにアクセスする任意のクライアントデバイスである。
例示のクライアントデバイス1501、1502、および1503は、ラップトップ、モバイル端末、またはウェブブラウザのようなフォームファクタで描かれているが、それらの記述はこれらの例示のフォームファクタのデバイスに限定されないことを理解されたい。例えば、クライアント1502のような移動デバイスは、その上に常駐する多数のアプリケーションによってアクセス可能なローカルファイルシステムを有することができ、またはクライアント1502は、ウェブブラウザを介してコンテンツ管理システム110にアクセスすることができる。従って、クライアント150の能力を考慮する際には、フォームファクタを制限することを考慮すべきではない。クライアントデバイス150に関して本明細書に記載する1つ以上の機能は、デバイスの特定の能力に依存して、すべてのクライアントデバイス上で利用可能であってもなくてもよく、ファイルアクセスモデルはそのような能力の1つである。
いくつかの例では、クライアントデバイスはコンテンツ管理システム110のアカウントに関連付けられているが、いくつかの例では、クライアントデバイスは共有リンクを使用してコンテンツにアクセスすることができ、アカウントを必要としない。
上述したように、いくつかのクライアントデバイスは、ウェブブラウザを使用してコンテンツ管理システム110にアクセスすることができる。しかし、クライアントデバイスは、クライアントデバイス150上に格納され実行されているクライアントアプリケーション152を使用して、コンテンツ管理システム110にアクセスすることもできる。クライアントアプリケーション152は、クライアント同期サービス156を含むことができる。
クライアント同期サービス156は、サーバ同期サービス112と通信して、クライアントデバイス150とコンテンツ管理システム110との間のコンテンツアイテムに対する変更を同期させることができる。
クライアントデバイス150は、クライアント同期サービス156を介してコンテンツをコンテンツ管理システム110と同期させることができる。同期はプラットフォームに依存しない。つまり、さまざまなタイプ、機能、オペレーティングシステムなどの複数のクライアントデバイス間でコンテンツを同期することができる。クライアント同期サービス156は、あらゆる変更(新規、削除、修正、コピー、または移動されたコンテンツアイテム)を、クライアントデバイス150のファイルシステムの指定された位置にあるコンテンツアイテムに同期することができる。
コンテンツアイテムは、クライアントデバイス150からコンテンツ管理システム110に同期されることができ、またその逆も可能である。同期がクライアントデバイス150からコンテンツ管理システム110へと行われる例では、ユーザは、クライアントデバイス150のファイルシステムからコンテンツアイテムを直接操作することができ、一方、クライアント同期サービス156は、監視されるフォルダ内のファイルに対する変更について、クライアントデバイス150上のディレクトリを監視することができる。
クライアント同期サービス156が、監視するディレクトリ内のコンテンツの書き込み、移動、コピー、または削除を検出すると、クライアント同期サービス156は、変更をコンテンツストレージサービス116に同期させることができる。いくつかの例では、クライアント同期サービス156は、コンテンツアイテムをブロックに分割する、コンテンツアイテムをハッシュして一意の識別子を生成するなど、上記でアドレス指定された機能を含むコンテンツストレージサービス116のいくつかの機能を実行することができる。クライアント同期サービス156は、クライアントストレージインデックス164内のコンテンツにインデックスを付け、結果をストレージインデックス164に保存することができる。インデックス生成では、コンテンツアイテムごとの、保存パス、一意のサーバ識別子、および一意のクライアント識別子を含めることができる。いくつかの例では、クライアント同期サービス156は、サーバ同期サービス112から固有のサーバ識別子を学習し、クライアントデバイス150のオペレーティングシステムから固有のクライアント識別子を学習する。
クライアント同期化サービス156は、ストレージインデックス164を使用して、コンテンツ管理システム110上のユーザアカウントに関連するコンテンツと、クライアントストレージ内のコンテンツの少なくとも一部の同期を容易にすることができる。例えば、クライアント同期サービス156は、ストレージインデックス164をコンテンツ管理システム110と比較し、クライアントストレージ上のコンテンツと、コンテンツ管理システム110上のユーザアカウントに関連付けられたコンテンツとの間の差異を検出することができる。次に、クライアント同期サービス156は、適宜、クライアントストレージ上のコンテンツをアップロードし、ダウンロードし、修正し、削除することによって、差を調整することを試みることができる。コンテンツストレージサービス116は、コンテンツアイテムのための変更された又は新規ブロックを保存し、必要に応じて、サーバファイルジャーナル148、メタデータデータベース146、コンテンツディレクトリ144、コンテンツストレージ142、アカウントデータベース140などを更新することができる。
コンテンツ管理システム110からクライアントデバイス150に同期する際に、サーバファイルジャーナル148に記録されたコンテンツアイテムのマウント、修正、追加、削除、移動は、通知サービス117を使用してクライアントデバイス150に送信される通知をトリガすることができる。クライアントデバイス150が変更を通知されると、クライアントデバイスが最後に認識した同期点からサーバファイルジャーナル148にリストされた変更要求を行う。クライアントデバイス150がコンテンツ管理システム110と同期していないと判断すると、クライアント同期サービス156は、変更を含むコンテンツアイテムブロックを要求し、変更されたコンテンツアイテムのローカルコピーを更新する。
いくつかの例では、ストレージインデックス164はツリーデータ構造を保存し、あるツリーはサーバ同期サービス112によるディレクトリの最新の表現を反映し、他方、別のツリーはクライアント同期サービス156によるディレクトリの最新の表現を反映する。クライアント同期サービスは、サーバ同期サービス112からのデータを要求するか、またはクライアントデバイス150上の変更をコンテンツ管理システム110にコミットすることにより、ツリー構造が確実に一致するように動作することができる。
場合によっては、クライアントデバイス150は、利用可能なネットワーク接続を有していないことがある。このシナリオでは、クライアント同期サービス156は、リンクされたコレクションを監視してコンテンツアイテムの変更を探し、ネットワーク接続が利用可能なときに、それらの変更を後でコンテンツ管理システム110に同期するためにキューに入れることができる。同様に、ユーザは、コンテンツ管理システム110との同期を手動で開始、停止、一時停止、または再開することができる。
クライアント同期サービス156は、コンテンツ管理システム110上の特定のユーザアカウントに関連する全てのコンテンツを同期することができる。代替的に、クライアント同期サービス156は、コンテンツ管理システム110上の特定のユーザアカウントに関連するコンテンツ全体のうちのコンテンツの一部を選択的に同期化することができる。コンテンツの一部のみを選択的に同期させることによって、クライアントデバイス150上のスペースを維持し、帯域幅を節約することができる。
いくつかの例では、クライアント同期サービス156は、特定のユーザアカウントに関連するコンテンツの一部を選択的に保存し、コンテンツの残りの部分のためのクライアントストレージ内にプレースホルダコンテンツアイテムを保存する。例えば、クライアント同期サービス156は、コンテンツ管理システム110上のそれぞれの完全なコンテンツアイテムのファイル名、パス、拡張子、メタデータが同じであるが、完全なコンテンツアイテムのデータが欠けているプレースホルダコンテンツアイテムを保存することができる。プレースホルダコンテンツアイテムのサイズは数バイト以下で、それぞれの完全なコンテンツアイテムは大幅に大きくなる可能性がある。クライアントデバイス150がコンテンツアイテムにアクセスしようとした後、クライアント同期サービス156はコンテンツ管理システム110からコンテンツアイテムのデータを検索し、アクセスするクライアントデバイス150に完全なコンテンツアイテムを提供することができる。このアプローチは、コンテンツ管理システム110上のユーザのコンテンツへの完全なアクセスを依然として提供しながら、かなりのスペースおよび帯域幅の節約を提供することができる。
コンテンツ管理システム110の別の例示的な特徴は、ユーザ間のコラボレーションを容易にすることである。コラボレーション機能には、コンテンツアイテムの共有、コンテンツアイテムに関するコメント、コンテンツアイテムに関するコワーキング、インスタントメッセージング、コンテンツアイテムに関するプレゼンス及びビュー状態情報の提供などがある。
コンテンツ管理システム110は、共有サービス128を介して共有コンテンツを管理することができる。コンテンツへのリンクを提供することによるコンテンツの共有は、コンテンツ管理システム110とのネットワーク通信において、任意のコンピューティングデバイスからコンテンツアイテムをアクセス可能にすることを含むことができる。しかし、いくつかの例では、リンクは、コンテンツ管理システム110およびアクセス制御リスト145によって実施されるアクセス制限に関連付けることができる。コンテンツの共有はまた、共有サービス128を用いてコンテンツをリンクし、コンテンツ管理システム110内のコンテンツを少なくとも1つの追加ユーザアカウント(コンテンツアイテムに関連する元のユーザアカウントに加えて)と共有し、各ユーザアカウントがコンテンツアイテムにアクセスできるようにすることを含むことができる。追加のユーザアカウントは、コンテンツを受け入れることによってコンテンツへのアクセスを得ることができ、これは、ウェブインタフェースサービス124を介して、またはクライアントデバイス150上の自分のアカウントに関連するディレクトリ構造内から直接アクセス可能である。共有は、プラットフォームに依存しない方法で実行することができる。すなわち、コンテンツは、様々なタイプ、能力、オペレーティングシステムなどの複数のクライアントデバイス150にわたって共有され得る。コンテンツは、さまざまなタイプのユーザアカウント間で共有することもできる。
コンテンツ管理システム110内でコンテンツアイテムを共有するために、共有サービス128は、コンテンツアイテムに関連付けられたアクセス制御リスト145内のコンテンツエントリに、ユーザアカウント識別子または複数のユーザアカウント識別子を追加し、これにより、追加されたユーザアカウントにコンテンツアイテムへのアクセス権を付与することができる。共有サービス128はまた、コンテンツエントリからユーザアカウント識別子を削除して、コンテンツアイテムへのユーザアカウントのアクセスを制限することができる。共有サービス128は、コンテンツアイテム識別子、コンテンツアイテムへのアクセスを与えられたユーザアカウント識別子、及びアクセス制御リスト145内のアクセスレベルを記録することができる。例えば、いくつかの例では、単一のコンテンツアイテムに関連付けられたユーザアカウント識別子は、関連付けられたコンテンツアイテムに関して、それぞれのユーザアカウント識別子に対して異なる許可を指定することができる。
コンテンツ管理システム110の外部でコンテンツアイテムを共有するために、共有サービス128は、ユニフォームリソースロケータ(URL)のようなカスタムネットワークアドレスを生成することができ、これにより、任意のWebブラウザが、認証なしでコンテンツ管理システム110内のコンテンツアイテムまたはコレクションにアクセスすることができる。これを達成するために、共有サービス128は、生成されるURL中にコンテンツ識別データを含むことができ、これは、後に、要求されたコンテンツアイテムを適切に識別し、返すために使用することができるようにする。例えば、共有サービス128は、アカウント識別子及びコンテンツパス又は生成されたURL内のコードを識別するコンテンツアイテムを含むことができる。URLを選択すると、URLに含まれるコンテンツ識別データをコンテンツ管理システム110に送信し、受信したコンテンツ識別データを用いて適切なコンテンツアイテムを識別し、コンテンツアイテムを返すことができる。
共有サービス128は、コンテンツアイテムへのURLが生成されたことをアクセス制御リスト145に記録するように構成することもできる。いくつかの例では、コンテンツアイテムに関連付けられたコンテンツエントリに、コンテンツアイテムへのURLが生成されたかどうかを示すURLフラグを含めることができる。例えば、URLフラグは、最初に0または偽に設定されたブール値で、コンテンツアイテムへのURLが生成されていないことを示すことができる。共有サービス128は、コンテンツアイテムへのURLを生成した後、フラグの値を1または真に変更することができる。
場合によっては、共有サービス128は、コンテンツアイテムのURLに一連の許可を関連付けることができる。例えば、ユーザがURLを介してコンテンツアイテムにアクセスしようとする場合、共有サービス128は、コンテンツアイテムに対する制限されたセットの許可を提供することができる。制限された許可の例は、ユーザがコンテンツアイテムをダウンロードできない、コンテンツアイテムを保存することができない、コンテンツアイテムをコピーすることができない、コンテンツアイテムを修正することができないなどの制限を含む。場合によっては、制限された許可は、コンテンツアイテムが特定の領域から、例えば企業ネットワーク領域内から、あるいは特定の領域に関連付けられたアカウント、例えば、企業アカウントに関連付けられたアカウント(例えば、@acme.com)によってアクセスされることのみを許可する制限を含む。
いくつかの例では、共有サービス128は、生成されたURLを非アクティブ化するように構成することもできる。例えば、各コンテンツエントリには、生成されたURLからの要求に応じてコンテンツを返す必要があるかどうかを示すURLアクティブフラグも含めることができる。例えば、共有サービス128は、URLアクティブフラグが1または真に設定されている場合にのみ、生成されたリンクによって要求されたコンテンツアイテムを返すことができる。このように、URLが生成されたコンテンツアイテムへのアクセスは、URLアクティブフラグの値を変更することで簡単に制限できる。これにより、ユーザはコンテンツアイテムを移動したり、生成されたURLを削除したりすることなく、共有コンテンツアイテムへのアクセスを制限することができる。同様に、共有サービス128は、URLアクティブフラグの値を1または真に再び変更することによって、URLを再びアクティブにすることができる。このように、ユーザは、新しいURLを生成することなく、簡単にコンテンツアイテムへのアクセスを復元することができる。
いくつかの例では、コンテンツ管理システム110は、コンテンツアイテムをアップロードするためのURLを指定することができる。例えば、ユーザアカウントを持つ第1のユーザは、このようなURLを要求し、貢献しているユーザにURLを提供し、貢献しているユーザはURLを使用して第1のユーザのユーザアカウントにコンテンツアイテムをアップロードできる。
いくつかの例では、コンテンツ管理システム110はチームサービス130を含む。チームサービス130は、ユーザアカウントの定義されたチームを生成および管理するための機能を提供することができる。チームは、サブチーム(例えば、ビジネスユニット、またはプロジェクトチームなど)を使用して、会社用に生成することができる。また、チームおよびサブチームに割り当てられたユーザアカウント、または定義されたユーザアカウントのグループに対して生成することもできる。チームサービス130は、チーム、プライベートユーザアカウントフォルダ、およびアクセス制限された共有フォルダのための共通の共有空間を提供することができる。チームサービスでは、管理者がチーム内のコレクションやコンテンツアイテムを管理するための管理インタフェースを提供したり、チームに関連付けられたユーザアカウントを管理したりすることもできる。
いくつかの例では、コンテンツ管理システム110は、許可サービス132を含む。許可サービス132は、ネームスペースにアクセスしようとするユーザアカウントが、ネームスペースにアクセスするための適切な権利を有することを確実にする。許可サービス132は、ネームスペースへのアクセス要求に続くクライアントアプリケーション152からトークンを受信することができ、ユーザアカウントに許可された能力を返すことができる。複数レベルのアクセスを有するユーザアカウント(例えば、ユーザ権限および管理者権限を有するユーザアカウント)の場合、許可サービス132は、管理者による意図しないアクションを回避するために、明示的な権限エスカレーションを要求することもできる。
いくつかの例では、コンテンツ管理システムは、コンテンツアイテムが共有されているユーザがどのようにインタラクティブにやり取りしているか、またはコンテンツアイテムとインタラクションしているかについての情報を提供することができる。いくつかの例では、コンテンツ管理システム110は、コンテンツアイテムが共有されているユーザがコンテンツアイテムを現在表示していることを報告することができる。例えば、クライアントコラボレーションサービス160は、クライアントデバイス150がコンテンツアイテムにアクセスしているとき、通知サービス117に通知することができる。そして、通知サービス117は、コンテンツアイテムに関してクライアントデバイス150のユーザの存在を、同じコンテンツアイテムにアクセスする他のユーザの任意のクライアントデバイスに通知することができる。
いくつかの例では、コンテンツ管理システム110は、共有コンテンツアイテムとのユーザインタラクションの履歴を報告することができる。コラボレーションサービス126は、メタデータデータベース146及びサーバファイルジャーナル148のようなデータソースに問い合わせて、ユーザがコンテンツアイテムを保存したこと、ユーザがコンテンツアイテムをまだ閲覧していないこと、等を判定し、このステータス情報を通知サービス117を用いて他のユーザに広めて、コンテンツアイテムを誰が現在閲覧しているか又は閲覧したか又は修正したかを知ることができるようにすることができる。
コラボレーションサービス126は、コンテンツアイテムがコメント機能をネイティブにサポートしない場合であっても、コンテンツに関連するコメントを容易にすることができる。このようなコメントは、メタデータデータベース146に保存することができる。
コラボレーションサービス126は、ユーザのために通知を発信し、送信することができる。例えば、ユーザはコメントの中で別のユーザにメンションすることができ、コラボレーションサービス126は、自分がコメントの中で言及されたという通知をそのユーザに送信することができる。コンテンツアイテムの削除、コンテンツアイテムの共有など、その他の様々なコンテンツアイテムイベントで通知をトリガすることができる。
コラボレーションサービス126は、ユーザがインスタントメッセージ、音声コール、電子メールなどを送受信することができるメッセージングプラットフォームを提供することができる。いくつかの例では、コラボレーションサービス126は、ユーザが同時にコラボレーションコンテンツアイテムを生成し、コラボレーションコンテンツアイテム内にコメントを生成し、コラボレーションコンテンツアイテム内のタスクを管理することができるインタラクティブコンテンツアイテムコラボレーションプラットフォームを提供することができるコラボレーションドキュメントサービス134も含むことができる。コラボレーションコンテンツアイテムは、ユーザがコラボレーションコンテンツアイテムエディタを使用して生成および編集することができるファイルであり、コラボレーションコンテンツアイテム要素を含むことができる。コラボレーションコンテンツアイテム要素には、コラボレーションコンテンツアイテム識別子、1つ以上の作成者識別子、コラボレーションコンテンツアイテムテキスト、コラボレーションコンテンツアイテム属性、インタラクション情報、コメント、共有ユーザなどを含めることができる。コラボレーションコンテンツアイテム要素は、データベースエンティティとして保存されることができ、これにより、コラボレーションコンテンツアイテムの検索と取得が可能になる。複数のユーザは、コラボレーションコンテンツアイテムに同時に又は異なる時間に、アクセス、表示、編集、およびコラボレーションすることができる。いくつかの例では、2人のユーザがWebインタフェースを介してコンテンツアイテムにアクセスし、コンテンツアイテムの同じコピー上で同時に作業できるようにようにすることで、これを管理することができる。
いくつかの例では、クライアントコラボレーションサービス160は、クライアントデバイス150上に提示されているコンテンツアイテムに関連する情報を表示する目的のために、ネイティブアプリケーションコンパニオンインタフェースを提供することができる。コンテンツアイテムが、クライアントアプリケーション152によって管理されるように、クライアントデバイス150のファイルシステムの指定された位置にあるコンテンツアイテムが保存され、クライアントデバイス150上で実行されるネイティブアプリケーションによってアクセスされる例では、ネイティブアプリケーションは、上記アドレス指定されたコラボレーションデータを表示するネイティブな方法を提供しないかもしれない。このような例では、クライアントコラボレーションサービス160は、ユーザがコンテンツアイテムを開いたことを検出し、コラボレーションデータなどのコンテンツアイテムの追加情報を含むオーバーレイを提供することができる。例えば、追加情報は、コンテンツアイテムに対するコメント、コンテンツアイテムの状態、以前に又は現在コンテンツアイテムを見ている他の利用者のアクティビティを含むことができる。このようなオーバーレイは、別のユーザが現在コンテンツアイテムを編集しているために変更が失われる可能性があることをユーザに警告することができる。
いくつかの例では、上述のサービスまたはストレージ/データベースの1つ以上は、パブリックまたはプライベートアプリケーションプログラミングインタフェースを使用してアクセスすることができる。
特定のソフトウェアアプリケーションは、ユーザの代わりにアプリケーションプログラミングインタフェース(API)を介してコンテンツストレージ142にアクセスすることができる。例えば、クライアントデバイス150上で稼動するアプリケーションのようなソフトウェアパッケージは、ユーザが認証クレデンシャルを提供し、コンテンツを読み取り、書き込み、生成、削除、共有、またはその他の方法で操作するとき、コンテンツ管理システム110に対してAPIコールを直接プログラム的に行うことができる。
ユーザは、ウェブインタフェースサービス124によって生成され供給されるウェブインタフェースを介して、ユーザアカウントに保存されたコンテンツを表示または操作することができる。例えば、ユーザは、ウェブブラウザにおいて、コンテンツ管理システム110によって提供されるウェブアドレスにナビゲートすることができる。コンテンツアイテムの新しいバージョンをアップロードするなど、ウェブインタフェースを介して行われたコンテンツストレージ142内のコンテンツに対する変更または更新は、ユーザのアカウントに関連する他のクライアントデバイスに伝搬することができる。例えば、それぞれが自身のクライアントソフトウエアを有する複数のクライアントデバイスは単一のアカウントと関連付けられていてもよく、そのアカウントのコンテンツアイテムは複数のクライアントデバイスのそれぞれの間で同期されてもよい。
クライアントデバイス150は、ユーザに代わってコンテンツ管理システム110に接続することができる。ユーザは、例えば、クライアントデバイス150がデスクトップまたはラップトップコンピュータ、電話機、テレビ、インターネット・オブ・シングスのデバイスなどである場合に、クライアントデバイス150と直接インタラクションすることができる。代替的にまたは追加的に、クライアントデバイス150は、例えばクライアントデバイス150がサーバである場合、ユーザがクライアントデバイス150に物理的にアクセスすることなく、ユーザの代わりに動作することができる。
クライアントデバイス150のいくつかの機能は、クライアントデバイス150にインストールされたアプリケーションによって有効化される。いくつかの例では、アプリケーションは、コンテンツ管理システム特有のコンポーネントを含むことができる。例えば、コンテンツ管理システム特有のコンポーネントは、スタンドアロンアプリケーション(例えば、クライアントアプリケーション152)、1つ以上のアプリケーションプラグイン、及び/又はブラウザ拡張であり得る。しかし、ユーザはまた、クライアントデバイス150上に存在し、コンテンツ管理システム110と通信するように構成された、ウェブブラウザのようなサードパーティーアプリケーションを介してコンテンツ管理システム110とインタラクションすることができる。様々な実装において、クライアント側アプリケーション(例えば、クライアントアプリケーション152)は、ユーザがコンテンツ管理システム110とインタラクションするためのユーザインタフェース(UI)を提示することができる。例えば、ユーザは、ファイルシステムと統合されたファイルシステムエクスプローラを介して、またはウェブブラウザアプリケーションを用いて表示されるウェブページを介して、コンテンツ管理システム110とインタラクションすることができる。
いくつかの例では、クライアントアプリケーション152は、コンテンツ管理システム110の複数のアカウントのコンテンツを管理し、同期するように構成することができる。このような例では、クライアントアプリケーション152は、複数のアカウントにログインしたままにしておき、複数のアカウントに対して通常のサービスを提供することができる。いくつかの例では、各アカウントは、ファイルシステム内のフォルダとして現れることができ、そのフォルダ内のすべてのコンテンツアイテムは、コンテンツ管理システム110と同期されることができる。いくつかの例では、クライアントアプリケーション152は、主アカウントまたはデフォルトアカウントとなる複数のアカウントの1つを選択するセレクタを含むことができる。
コンテンツ管理システム110は特定のコンポーネントを備えているが、当業者であれば、システム110のアーキテクチャ構成が単なる1つの可能な構成であり、より多くまたは少なくコンポーネントを備えた他の構成が可能であることを理解すべきである。さらに、サービスは、別のサービスとして記載される機能を含む、多かれ少なかれ機能を持つことができる。さらに、実施形態に関して本明細書に記載する特徴は、別の実施形態に関して記載する特徴と組み合わせることができる。
図2Aは、システム構成100におけるコンテンツ管理システム110とクライアントデバイス150との間でコンテンツを同期させるための一例のアーキテクチャを示す図である。この例では、クライアントデバイス150は、コンテンツストレージインタフェース206を介してコンテンツストレージ142とインタラクションし、ファイルジャーナルインタフェース202を介してサーバファイルジャーナル148と意図ストア212とインタラクションする。場合によっては、コンテンツストレージインタフェース206をコンテンツストレージサービス116によって提供または管理することができ、ファイルジャーナルインタフェース202をサーバ同期サービス112によって提供または管理することができる。例えば、コンテンツストレージインタフェース206は、コンテンツストレージサービス116のサブコンポーネントまたはサブサービスとすることができ、ファイルジャーナルインタフェース202は、サーバ同期サービス112のサブコンポーネントまたはサブサービスとすることができる。
コンテンツストレージインタフェース206は、クライアントデバイス150とコンテンツストレージ142との間のコンテンツ要求及び/又はインタラクションのような通信を管理することができる。コンテンツストレージインタフェース206は、コンテンツストレージ142との間でコンテンツをアップロード及びダウンロードするためのクライアントデバイス150からの要求を処理することができる。コンテンツストレージインタフェース206は、クライアントデバイス150からコンテンツ要求(例えば、ダウンロード、アップロードなど)を受信し、アクセス制御リスト145内の許可を確認し、許可サービス132と通信して、クライアントデバイス150(及び/又はクライアントデバイス150からの要求)がコンテンツストレージ142へのコンテンツのアップロード又はダウンロードを許可されているか否かを判定し、コンテンツストレージ142とインタラクションして、コンテンツストレージ142から/へコンテンツのダウンロード及び/又はアップロードを行うことができる。
例えば、クライアントデバイス150からコンテンツストレージインタフェース206への要求が、コンテンツストレージ142からコンテンツアイテムをダウンロードする要求である場合、コンテンツストレージインタフェース206は、要求されたコンテンツアイテムをコンテンツストレージ142から検索し、コンテンツアイテムをクライアントデバイス150に提供することができる。クライアントデバイス150からの要求がコンテンツアイテムをアップロードする要求である場合、コンテンツストレージインタフェース206は、コンテンツ管理システム110で保存するために、コンテンツアイテムをクライアントデバイス150から取得し、コンテンツアイテムをコンテンツストレージ142にアップロードすることができる。
いくつかの例では、クライアントデバイス150からのコンテンツ要求を処理するとき、コンテンツストレージインタフェース206はストレージインデックス210と通信し、コンテンツストレージ142内の要求されたコンテンツの可用性及び/又は保存位置を確認し、及び/又はコンテンツストレージ142内のコンテンツアイテムをトラッキングすることができる。ストレージインデックス210は、コンテンツストレージ142上のコンテンツアイテムのインデックスを維持することができる。インデックスは、コンテンツストレージ142上のコンテンツアイテム、及び/又はコンテンツストレージ142内のコンテンツアイテムのそれぞれの位置を識別することができる。従って、ストレージインデックス210は、コンテンツストレージ142上のコンテンツアイテム、及びコンテンツアイテムの保存位置をトラッキングすることができる。ストレージインデックス210は、ファイル及びフォルダのようなコンテンツアイテム全体、及び/又はそれぞれのコンテンツアイテムのブロック又はチャンクのようなコンテンツアイテムの部分をトラッキングすることができる。場合によっては、コンテンツアイテムは、コンテンツストレージ142に保存され、ストレージインデックス210でトラッキングされることができるブロックまたはチャンクに分割され得る。例えば、コンテンツストレージ142は、コンテンツアイテムを、コンテンツアイテムのデータ部分を含むデータのブロックまたはチャンクとして保存することができる。ストレージインデックス210は、コンテンツストレージ142に保存されたコンテンツアイテムのブロックまたはチャンクをトラッキングすることができる。以下に説明する図2Bは、コンテンツアイテムのブロックを保存およびトラッキングするための構成例を示す。
ファイルジャーナルインタフェース202は、クライアントデバイス150とサーバファイルジャーナル148との間のメタデータ要求、コンテンツ同期、データ操作などの通信を管理することができる。例えば、ファイルジャーナルインタフェース202は、クライアントデバイス150とサーバファイルジャーナル148との間で、操作、構成、及び/又は状態情報を変換し、検証し、認証し、及び/又は処理することができる。場合によっては、ファイルジャーナルインタフェース202は、カーソル内または許可サービス132を介して、許可または「FSAuth」トークンなどのトークンからの許可を検証して、クライアントデバイス150によってサーバファイルジャーナル148に送信された要求を許可する(及び/又は許可を検証する)ことができる。クライアントデバイス150からの要求または操作を処理するとき、ファイルジャーナルインタフェース202は、ネームスペースメンバシップストア208にアクセスして、クライアントデバイス150からの要求または操作に関連する任意のネームスペースのネームスペース所有権情報を判定または検証し、アクセスコントロールリスト145からアクセス許可情報を検索して、クライアントデバイス150からの要求または操作に関連するコンテンツの許可を検証することができる。
場合によっては、ファイルジャーナルインタフェース202内の変換サービス204は、クライアントデバイス150とサーバファイルジャーナル148との間の通信のために、線形化及び/又は変換操作を実行することができる。例えば、変換サービス204は、クライアントデバイス150からの通信を、サーバファイルジャーナル148内のデータの構造及び/又はフォーマットと整合する異なるフォーマット及び/又は状態に変換し、その逆も可能である。例示のために、クライアントデバイス150は、コンテンツアイテム情報(例えば、状態情報、変更、バージョンなど)を操作としてクライアントデバイス150で処理することができ、サーバファイルジャーナル148は、データベーステーブルなどのサーバファイルジャーナル148内のデータ構造内の行によって反映されるコンテンツアイテムリビジョンと同じ情報を処理することができる。いくつかの例では、クライアントデバイス150とサーバファイルジャーナル148との間でコンテンツアイテム情報の同期を可能にするために、変換サービス204は、クライアントデバイス150からの操作をサーバファイルジャーナル148に適したリビジョンに変換し、サーバファイルジャーナル148上のデータの行に反映されたリビジョンをクライアントデバイス150に適した操作に変換することができる。
場合によっては、許可サービス132は、クライアントデバイス150がコンテンツアイテムにアクセスし、更新し、ダウンロードし、及び/又はアップロードすることを許可されていることを検証する又は示すトークンを生成することができる。トークンは、例えば、クライアントデバイス150に関連するデバイス識別子、クライアントデバイス150で認証及び/又は許可されたユーザアカウントに関連するアカウント識別子、クライアントデバイス150で許可されたセッションに関連するセッション識別子、タイムスタンプ、ビューコンテキスト、コンテンツアイテムへのアクセス許可、セキュリティデータ(例えば、暗号化キー、署名など)、要求情報などを含むことができ、これらに限定されない。場合によっては、トークンをカーソルと呼ばれる暗号で署名されたデータオブジェクトに含めることができる。
コンテンツ管理システム110及び/又は許可サービス132は、トークンをクライアントデバイス150に送信することができ、クライアントデバイス150は、以下にさらに説明するように、サーバファイルジャーナル148にコンテンツアイテムのリビジョン及び/又は更新を要求する場合に、コンテンツ管理システム110にトークンを提供することができる。クライアントデバイス150はまた、任意のコンテンツ要求(例えば、ダウンロード、アップロードなど)を検証するために、コンテンツストレージインタフェース206にトークンを提供することができる。コンテンツストレージインタフェース206は、トークンを使用して、ストレージインデックス210へのクエリを許可し、コンテンツストレージ142との間でコンテンツアイテムをアップロード及び/又はダウンロードすることができる。
例えば、クライアントデバイス150は、コンテンツストレージインタフェース206に、コンテンツアイテムをコンテンツストレージ142にアップロードする要求を送信することができる。要求には、アップロードするトークンとコンテンツアイテムを含めることができる。コンテンツストレージインタフェース206は、トークンを使用してストレージインデックス210へのクエリを許可し、コンテンツアイテムがコンテンツストレージ142に既に存在するかどうかをチェックし、コンテンツアイテムのコンテンツストレージ142へのアップロードを許可することができる。クライアントデバイス150はまた、或いは代替的に、トークンをファイルジャーナルインタフェース202に提供して、サーバファイルジャーナル148上にメタデータを保存する要求を許可して、コンテンツアイテムのアップロード及びリビジョンをトラッキングすることができる。
コンテンツ管理システム110は意図ストア212を含むこともできる。意図ストア212は、1つ以上のコンテンツアイテム操作に関連する開始状態と、1つ以上のコンテンツアイテム操作に関連する終了状態とをトラッキングすることができる。例えば、意図ストア212は、移動操作の前のコンテンツアイテムの状態と、移動操作の後のコンテンツアイテムの状態とをトラッキングすることができる。意図ストア212でトラッキングされる終了状態は、以下でさらに説明するように、実際の終了状態及び/又は予測/投影終了状態を含むことができる。いくつかの例では、意図ストア212は、送信元位置(例えば、送信元ネームスペース/コンテンツアイテム)と宛先位置(例えば、宛先ネームスペース/コンテンツアイテム)の状態をトラッキングすることができる。例えば、コンテンツ管理システム110が、コンテンツアイテム「Foo」をネームスペース1からネームスペース2に移動する要求を受信した場合、意図ストア212は、コンテンツアイテム「Foo」の移動の前及び/又は後のネームスペース1の状態と、コンテンツアイテム「Foo」の移動の前及び/又は後のネームスペース2の状態とをトラッキングすることができる。
場合によっては、意図ストア212は、送信元位置の状態および宛先位置の予測/投影状態をトラッキングすることができる。前述の例では、意図ストア212は、移動操作に基づいてコンテンツアイテム「Foo」がネームスペース1からネームスペース2に移動される前に、ネームスペース1の状態をトラッキングでき、コンテンツアイテム「Foo」が移動操作に基づいてネームスペース2に移動された後の、ネームスペース2の予測/投影状態をトラッキングできる。場合によっては、コンテンツ管理システム110は、意図ストア212に予測/投影状態を含める及び/又はコミットする前に、1つ以上の操作を検証することができる。
例えば、コンテンツ管理システム110は、ユーザアカウントAから位置Xから位置Yに「フォルダN」を移動する要求を受け取ることができる。コンテンツ管理システム110は、「フォルダN」が位置Yに移動した後に、位置Xおよび位置Yにおいてどの状態に移動するかを決定することができる。図示のため、コンテンツ管理システム110は、位置Xが「フォルダN」を含まなくなり、位置Yを含むこともできる。コンテンツ管理システム110は、また、ユーザアカウントAが位置Xから位置Yに「フォルダN」を移動するためのアクセス権を有することを検証することができる。コンテンツ管理システム110は、位置Yから「フォルダN」を移動するためのアクセス権及び/又は、位置Xから位置Yに「フォルダN」を移動するためのアクセス権を有すると判定した場合、コンテンツ管理システム110は、送信元状態(例えば、位置Xの状態)を記録することができ、また、移動操作後に、予測/投影された宛先状態(例えば、位置Yの状態)を記録することができる(例えば、「フォルダN」が位置Xから位置Yに移動された後)。ある場合には、予測/投影状態を判定する場合に、コンテンツ管理システム110は、許可を検証し、時系列/タイミング情報を決定し、及び/又は要求された操作に関与する任意のアトミック(atomic)操作(及び/又は操作のシーケンス)を判定することができる。
上述の例を参照すると、ユーザアカウントBが位置Xから「フォルダN」へのアクセスを要求した場合、コンテンツ管理システム110は、意図ストア212内の情報から、「フォルダN」を位置Xから位置Yへ移動する操作が進行中であるか、又は完了していないことを判定することができる。ユーザアカウントBに応答を返す前に、コンテンツ管理システム110は、移動後の「フォルダN」(及び/又は位置Xおよび位置Y)の予測/投影状態を識別することができる(例えば、意図ストア212から)。コンテンツ管理システム110はまた、移動後に、ユーザアカウントBが「フォルダN」へのアクセス権を有することを検証することができる(例えば、ユーザアカウントBが位置Yにおいて「フォルダN」へのアクセス権を有する)。移動後にユーザアカウントBが「フォルダN」へのアクセスを有する場合、コンテンツ管理システム110は、予測/投影状態に基づくユーザアカウントBからのアクセス要求に対する応答を返すことができる。
例えば、移動の完了前の「フォルダN」の状態を提供する代わりに(例えば、位置Xに保存された「フォルダN」)、コンテンツ管理システム110は、意図ストア212内の予測/投影状態を使用して、代わりに予測/投影状態を提供するように、ユーザアカウントBへの応答を修正することができる(例えば、位置Yに格納された「フォルダN」)。ユーザアカウントBがコンテンツ管理システム110から応答を受信した場合、ユーザアカウントBがコンテンツ管理システム110に要求を送信し及び/又は応答を受信したときに、位置Xから位置Yへの「フォルダN」の移動が完了していない場合であっても、「フォルダN」が位置Yに位置しているように見える。換言すれば、コンテンツ管理システム110は、そのコンテンツアイテムに対する動作の完了前にコンテンツアイテムの状態を「早送り」することができ、そのコンテンツアイテムに対するアクセスの要求に応答して、コンテンツ管理システム110は、そのコンテンツアイテムに対する動作の完了後に、そのコンテンツアイテムへのアクセスに対する適切な権利/許可を有する要求ユーザアカウントに対して、早送りした状態(例えば、開始状態または中間状態の代わりに)を提供することができる。
意図ストア212は、ここに記載されるように意図を保存するためのデータ構造を含むことができる。例えば、意図ストア212は、データベース、テーブル、ログ、及び/又は同様のものを含むことができる。場合によっては、意図ストア212は、サーバファイルジャーナル148の一部であり得、及び/又はサーバファイルジャーナル148によって実施され得る。他の場合には、意図ストア212は、サーバファイルジャーナル148とは別個のコンテンツ管理システム110によって実現することができる。例えば、意図ストア212は、データベース及び/又はデータベーステーブルのような、サーバ上の別々の及び/又はスタンドアローンのデータ構造とすることができる。
いくつかの例では、ファイルジャーナルインタフェース202は、意図ストア212に格納された意図に基づいて、クライアントデバイス150に予測/投影状態情報を提供することができる。場合によっては、ファイルジャーナルインタフェース202は、クライアントデバイス150と意図ストア212との間の通信を管理する。いくつかの例では、変換サービス及び/又はコンテンツ管理システム110の他のコンポーネントは、クライアントデバイスに提供される予測/投影状態を決定し、及び/又は意図ストア212に保存することができる。
図2Bは、ブロックストレージと同期構成の一例を示す図である。この例では、コンテンツストレージ142はデータのブロックを保存することができる。いくつかの例では、データのブロックは、コンテンツアイテムの不透明なチャンクであったり、特定のサイズまでであったりする。コンテンツアイテムはブロックに分割することができ、ブロックは、アクセスのためにコンテンツストレージ142に保存することができる。ストレージインデックス210は、コンテンツストレージ142に保存されたブロック、並びにコンテンツストレージ142に保存されたブロックのそれぞれの位置をトラッキングすることができる。ファイルジャーナルインタフェース202は、サーバファイルジャーナル148とインタラクションして、コンテンツストレージ142に保存されたコンテンツアイテム及び/又はブロックに対するリビジョンをトラッキングすることができる。
例えば、コンテンツアイテム220(例えば、MyFile.abc)は、ブロック220A、220B、220C、220Nに分割することができる。コンテンツストレージインタフェース206は、ブロック220A、220B、220C、220Nを受信し、コンテンツストレージ142に保存するためのブロックデータ222Bをコンテンツストレージ142に送信することができる。ブロックデータ222Bは、コンテンツアイテム220に関連するブロック220A、220B、220C、220Nを含むことができる。
ブロック220A、220B、220C、220Nは、コンテンツストレージデバイス142における1つ以上のストレージデバイスまたはボリューム上に保存され、及び/又は1つ以上の論理ストレージコンテナ(例えば、バケット)またはデータクラスタ内に集約され得る。場合によっては、ブロック220A、220B、220C、220Nを、同一の位置(例えば、ストレージデバイス、ボリューム、コンテナ、及び/又はクラスタ)に一緒に保存することができる。他の場合には、ブロック220A、220B、220C、220Nの一部または全部を、2つ以上の異なる位置(例えば、2つ以上の異なるストレージデバイス、ボリューム、コンテナ、及び/又はクラスタ)に保存することができる。
コンテンツストレージインタフェース206はまた、ストレージインデックス210においてブロックメタデータ222Aを保存することができる。ブロックメタデータ222Aは、ブロック220A、220B、220C、220Nを識別することができ、ストレージインデックス210が、コンテンツストレージ142においてブロック20A、220B、220C、220Nをトラッキングすることを可能にする。ブロックメタデータ222Aは、各ブロック220A、220B、220C、220Nに対する識別子を含むことができる。ブロックの識別子は、ブロックを識別するブロックのハッシュなど、名前またはキーにすることができる。
ブロックメタデータ222Aは、ブロック220A、220B、220C、220Nのそれぞれの保存位置を示すブロック220A、220B、220C、220Nの位置情報も含むことができる。ブロックの位置情報は、ブロックが保存されているストレージデバイスまたはボリューム、及び/又はブロックが格納されている論理ストレージコンテナまたはデータクラスタを識別することができる。位置情報は、関連するブロックへのアクセスまたは取得に使用することができる。
コンテンツストレージインタフェース206は、コンテンツストレージ142にブロック220A、220B、220C、220Nを保存する前または後に、ストレージインデックス210でブロックメタデータ222Aを保存することができる。例えば、コンテンツストレージインタフェース206は、コンテンツストレージ142にブロック220A、220B、220C、220Nを保存し、その後、ブロック220A、220B、220C、220Nがコンテンツストレージ142に保存されたことを示すために、ストレージインデックス210にブロックメタデータ222Aを保存することができる。
場合によっては、コンテンツストレージインタフェース206は、コンテンツストレージ142にブロック220A、220B、220C、220Nを保存する前にストレージインデックス210に問い合わせて、ブロック220A、220B、220C、220Nがコンテンツストレージ142に保存されているかどうかを判定することができる。例えば、コンテンツストレージインタフェース206は、ブロックメタデータ222Aに基づいてストレージインデックス210に問い合わせて、ブロック220A、220B、220C、220Nがコンテンツストレージ142に保存されているかどうかを確認することができる。ストレージインデックス210は、ブロックメタデータ222A内のブロック識別子をストレージインデックス210内のブロック識別子と比較し、任意の一致を確認することができる。ブロック識別子間の一致は、関連するブロックがコンテンツストレージ142に保存されることを示す。
前述したように、サーバファイルジャーナル148は、コンテンツアイテムの追加、編集、移動、名前変更、削除などを含むコンテンツアイテムのリビジョンをトラッキングする。従って、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148にリビジョン222Cを保存して、コンテンツアイテム220及び/又はブロック220A、220B、220C、220Nがコンテンツストレージ142に追加されたことを示すことができる。リビジョン222Cは、サーバファイルジャーナル148におけるコンテンツアイテムリビジョンのジャーナル内のコンテンツアイテム220のリビジョンを表すことができる。
リビジョン222Cは、コンテンツアイテム220及びコンテンツアイテム220に関連する操作、例えば追加操作(例えば、アップロード)、編集操作、移動操作、名前変更操作、削除操作などを識別することができる。リビジョン222Cはまた、コンテンツアイテム220が保存されているコンテンツ管理システム110内のネームスペースと、リビジョン222Cを保存するためのサーバファイルジャーナル148におけるコンテンツアイテムリビジョンのジャーナル内の行とを識別することができる。コンテンツアイテムリビジョンのジャーナル内の行は、コンテンツアイテム220のリビジョン222Cに関連付けられたリビジョン番号を表すことができる。
図3Aは、クライアントデバイス150とサーバファイルジャーナル148との間のファイルジャーナルインタフェース202によって処理される通信を示す図である。いくつかの例では、サーバファイルジャーナル148は、サーバファイルジャーナル148内の行およびフィールド内の値として、コンテンツアイテム状態および変更(例えば、リビジョン)をトラッキングすることができる。例えば、サーバファイルジャーナル148は、コンテンツストレージ142内のコンテンツアイテムに対するリビジョンの1つ以上のジャーナルを維持することができる。場合によっては、1つ以上のジャーナルが各ネームスペースの各コンテンツアイテムのリビジョンをトラッキングすることができる。サーバファイルジャーナル148上のジャーナル内の行の値は、ネームスペース内のコンテンツアイテムを識別し、ネームスペース内のコンテンツアイテムの状態を反映することができる。ネームスペース内の同じコンテンツアイテムに対応するジャーナル内の後続の行は、ネームスペース内のコンテンツアイテムに対する後続のリビジョンを反映することができる。従って、コンテンツアイテムに関連するサーバファイルジャーナル148内の行は、コンテンツアイテムの状態、およびコンテンツアイテムに対する生成から現在の状態への任意のリビジョンを識別することができる。
コンテンツアイテム情報(例えば、状態、変更またはリビジョンなど)をクライアントデバイス150と同期させるために、サーバファイルジャーナル148は、1つ以上のコンテンツアイテムに対してトラッキングされる又はサーバファイルジャーナル148に格納される、リビジョンを表すファイルジャーナルインタフェース202との間で、リビジョンデータ304を送受信することができる。リビジョンデータ304は、例えば、サーバファイルジャーナル148内の行に対応するコンテンツアイテムリビジョンのログを含むことができる。サーバファイルジャーナル148は、リビジョンデータ304をファイルジャーナルインタフェース202に送信することができ、これは、本明細書にさらに記載するように、リビジョンデータ304をクライアントデバイス150のための操作データ302に変換することができる。
場合によっては、クライアントデバイス150は、コンテンツ操作を実行して、クライアントデバイス150でコンテンツアイテムを更新または修正することができる。コンテンツアイテム情報をサーバファイルジャーナル148と同期させるために、クライアントデバイス150は、操作データ302をファイルジャーナルインタフェース202との間で送受信することができる。クライアントデバイス150は、操作データ302をファイルジャーナルインタフェース202に送信して、クライアントデバイス150での変更をコンテンツアイテムに報告し、ファイルジャーナルインタフェース202から操作データ302を受信して、サーバファイルジャーナル148からコンテンツアイテムの最新の状態を取得することができる(例えば、リビジョンデータ304)。
操作データ302は、クライアントデバイス150に関連する各ネームスペースについてクライアントデバイス150によって取得された最新の状態またはリビジョンを識別するカーソルを含むことができる。例えば、カーソルは、クライアントデバイス150に関連する各ネームスペースについて、クライアントデバイス150によって取得されたサーバファイルジャーナル148内の最新のリビジョンを識別することができる。カーソル内の情報により、ファイルジャーナルインタフェース202に、クライアントデバイス150からの操作データ302内の操作が、操作に関連するネームスペースのためのサーバファイルジャーナル148内の最新の状態またはリビジョンを反映するかどうかを判定可能にする。これは、ファイルジャーナルインタフェース202が、サーバファイルジャーナル148内の古いリビジョンに対応するクライアントデバイス150からの操作データ302内の操作、これはサーバファイルジャーナル148内の既存のリビジョンと、操作データ302から変換されたリビジョンとの間のコンフリクトを生成し得る、がサーバファイルジャーナル148に書き込まれないことを確実にするのに役立つ。
クライアントデバイス150とサーバファイルジャーナル148との間でコンテンツアイテム情報の同期を可能にするために、ファイルジャーナルインタフェース202は、(例えば、変換サービス204を介して)操作データ302をリビジョンデータ304に、及びその逆に変換することができる。クライアントデバイス150から操作データ302を受信すると、ファイルジャーナルインタフェース202は、操作データ302を、操作データ302内の操作から解釈されたコンテンツアイテムリビジョンを含むリビジョンデータ304に変換することができる。サーバファイルジャーナル148からリビジョンデータ304を受信すると、ファイルジャーナルインタフェース202は、リビジョンデータ304を、クライアントデバイス150でリビジョンデータ304内にリビジョンを実施するための操作を含む操作データ302に変換することができる。リビジョンデータ304は、1つ以上のコンテンツアイテム(例えば、1つ以上のコンテンツアイテムに対するリビジョン)に何が起きたかを記述するサーバファイルジャーナル148内のデータを含み、操作データ302は、1つ以上のコンテンツアイテムを修正するために、クライアントデバイス150で実行された、または実行されるべき操作を含む。従って、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148からの1つ以上のコンテンツアイテムに対するリビジョンを記述するデータ(例えば、リビジョンデータ304)を、クライアントデバイス150で実行されるべき又はされるべきであった操作に変換して、クライアントデバイス150において1つ以上のコンテンツアイテムを修正することができる。
クライアントデバイス150からの操作データ302をサーバファイルジャーナル148のためのリビジョンデータ304に変換することに加えて、ファイルジャーナルインタフェース202は、サーバファイルジャーナル148からのリビジョンデータ304をクライアントデバイス150のための操作データ302に変換することができる。ファイルジャーナルインタフェース202は、リビジョンデータ304をサーバファイルジャーナル148から取得し、リビジョンデータ304のリビジョンを、クライアントデバイス150で実行される操作に変換して、このようなリビジョンに従ってクライアントデバイス150で1つ以上のコンテンツアイテムを更新することができる。リビジョンデータ304内のリビジョンから生成される操作は、ファイルジャーナルインタフェース202によってクライアントデバイス150に提供される操作データ302に含まれる。操作データ302とリビジョンデータ304との間のこの変換によって、クライアントデバイス150とサーバファイルジャーナル148は、コンテンツアイテム情報を互いに同期させることができる。
サーバファイルジャーナル148に書き込む前に、クライアントデバイス150によって提供される操作データ302から生成される任意のリビジョンデータ304を、ファイルジャーナルインタフェース202は、データ302及び/又はクエリサーバファイルジャーナル148内のカーソルを確認して、リビジョンデータ304内の任意のリビジョンがサーバファイルジャーナル148内に競合を生じないことを確実にすることができる。例えば、ファイルジャーナルインタフェース202は、リビジョンデータ304内のリビジョンに関連するコンテンツアイテムのバージョンが、サーバファイルジャーナル148におけるコンテンツアイテムのバージョンと同一であるか否か、あるいは、サーバファイルジャーナル148におけるコンテンツアイテムのバージョンが、リビジョンデータ304におけるリビジョンが関連するコンテンツアイテムとして、更新されたバージョンであるか異なったバージョンであるか否かを確認するために、サーバファイルジャーナル148に問い合わせることができる。サーバファイルジャーナル148が、コンテンツアイテムの最新バージョンが、リビジョンデータ304が関連するバージョンとは異なるバージョンであることを示している場合、2つのバージョンは競合している。
ファイルジャーナルインタフェース202は、サーバファイルジャーナル148を更新して、操作データ302から導出されたリビジョンデータ304に含まれる新しいリビジョンを保存することができる。いくつかの例では、サーバファイルジャーナル148内のリビジョンを問い合わせ及び/又は更新する場合、ファイルジャーナルインタフェース202は、リビジョンデータ304内のリビジョンによって影響を受ける任意のネームスペースに関連するネームスペース所有権情報を検索するために、ネームスペースメンバシップストア208に問い合わせることができる。ネームスペースの所有権情報は、特定のネームスペースのどのユーザアカウントが所有しているか、またはメンバーであるかを示し、特定のネームスペースにアクセスすることができる。従って、ファイルジャーナルインタフェース202は、ネームスペースの所有権情報を分析して、サーバファイルジャーナル148が、ネームスペースのメンバではないユーザアカウントからネームスペースにリビジョンを含むように更新されないことを確実にすることができる。
図3Bを参照すると、サーバファイルジャーナル148は、ジャーナル310、312を保存し、コンテンツアイテムのリビジョンおよび状態をトラッキングおよび識別することができる。この例では、ジャーナル310には、リビジョン識別子(または状態識別子)、パス、ブロック、以前のリビジョン(Prev_Rev)、およびターゲットネームスペース(Target NS)を含むレコードが含まれている。いくつかの例では、リビジョン識別子は、ネームスペース内の操作またはリビジョンの順序を提供及び/又は識別することができる。いくつかの例では、リビジョン識別子は、ネームスペース識別子(NSID)、クロック(例えば、タイムスタンプ、ラムポートクロック、ハイブリッド論理クロックなど)、サーバジャーナル識別子(SJID)、オブジェクト識別子、及び/又は他の任意の識別子値を含むことができる。
NSIDは、サーバファイルジャーナル148内のネームスペースを一意に識別する1つ以上の値を含むことができる。場合によっては、SJIDは、特定のネームスペース内の各行にマップする単調増加値を含むことができ、そのネームスペース内の操作またはリビジョンの順序付けを提供する。場合によっては、パスは、関連するコンテンツアイテムを識別するネームスペース相対パスとすることができる。Prev_Revは、パスに関連するコンテンツアイテムの以前の状態に対応するサーバファイルジャーナル148内の行を識別する。ターゲットNSは、マウントされたネームスペースのマウントポイントのターゲットネームスペースのNSIDを識別する。ターゲットNSフィールドは、マウントポイントに対応しない行(リビジョンなど)には設定されない。
この例では、ジャーナル312は、識別子(例えば、NSID、クロック、SJID、及び/又は任意の他の識別子値)、オブジェクト識別子(OID)、拡張属性(xattr)などを含む記録を含む。xattrは、コンテンツアイテムまたは操作に関連付けられたメタデータを保存することができる。ジャーナル310およびジャーナル312の値の例は、説明のために提供された単なる例である。当業者であれば、他の値及び/又は構成も可能であり、本明細書で意図されるものであることを認識するであろう。例えば、ジャーナル310及び/又はジャーナル312は、関連するコンテンツアイテムのサイズを表すサイズフィールド、コンテンツアイテムがディレクトリであるときを示すように設定できるディレクトリフィールド(例えば、Is_Dir)、関連するファイルを一意に識別するファイル識別子などの他のフィールドを含むことができる。
ファイルジャーナルインタフェース202は、操作データ302およびリビジョンデータ304に基づいて、変換320を実行することができる。変換320を実行するとき、変換サービス204は、操作データ302を、サーバファイルジャーナル148での保存のための線形化リビジョンを含むことができるリビジョン322に変換することができる。変換サービス204は、リビジョンデータ304を、クライアントデバイス150に送られる操作302に含まれる線形化操作324Aに変換することができ、これは、クライアントデバイス150によって適用されて、クライアントデバイス150でコンテンツアイテム情報(例えば、状態、変更など)を更新することができる。変換サービス204はまた、カーソル324Bを生成または更新し、操作データ302内のカーソル324Bをクライアントデバイス150に提供することができる。カーソル324Bは、線形化操作324Aに関連する各ネームスペース及び/又はコンテンツアイテムに対応する、サーバファイルジャーナル148内のそれぞれのリビジョンまたは行を識別する。
先に説明したように、サーバファイルジャーナル148は、保存されたコンテンツアイテムのコピーをデバイスにわたる同期化において使用するために、コンテンツ管理システム110におけるコンテンツアイテムの状態及び/又はリビジョンをトラッキングすることができる。意図ストア212はまた、進行中及び/又は完了していない1つ以上の関連する操作の実行後の、コンテンツアイテムの意図された状態をトラッキングすることができる。コンテンツ管理システム110は、意図ストア212内の意図された状態を使用して、完了していない操作に関連するコンテンツアイテムへのアクセスを要求するクライアントデバイスに対して、意図された状態に従った、要求されたコンテンツアイテムを提供することができる。そして、クライアントデバイスは、操作の前の状態及び/又は操作の完了前の中間状態においてコンテンツアイテムにアクセスするのではなく、操作が完了していない、及び/又は進行中であったとしても、操作が既に完了しているかのように、意図された状態のコンテンツアイテムにアクセスすることができる。
いくつかの例では、クライアントデバイスは、現在の時間(例えば、リアルタイム)または過去の時間であり得る特定の期間におけるコンテンツアイテム上の進行中または未完了の操作に関連する意図された状態を取得することができる。例えば、クライアントデバイスは、コンテンツアイテムに対する操作が進行中であった過去の期間に、コンテンツアイテムへのアクセスを要求することができる。コンテンツ管理システム110は、その特定の時点で操作が完了していなくても、そのコンテンツアイテムに対する意図した状態を提供することができる。
コンテンツ管理システム110は、意図した状態を達成すると推定される操作が進行中であるか、及び/又は完了していない場合でも、コンテンツアイテムの意図した状態を予測/投影することができる。コンテンツ管理システム110は、例えば、コンテンツアイテム及び/又は操作に関連する任意の依存性、因果関係、許可、タイムスタンプ/クロック等に基づいて、コンテンツアイテムの意図された状態を予測/投影することができる。コンテンツ管理システム110は、コンテンツアイテムに関連するクライアント要求への応答に使用するために、コンテンツアイテムに対して予測/投影される意図状態を意図ストア212に保存することができる。
意図された状態は、クライアントデバイスが、特にクライアントデバイスによって任意のそのような状態(操作の開始前の状態及び/又は中間状態)を要求されていない限り、クライアントデバイスが、操作の開始前及び/又は操作が開始された後の中間状態にあるコンテンツアイテムの状態におけるコンテンツアイテムにアクセスすることを防止することができる。これにより、クライアントデバイスが古くなった/使われなくなったコンテンツアイテムの状態を受信しないようにしたり、進行中または未完了の操作に関連するコンテンツアイテムの不整合を観察しないようにしたり、明らかなデータ損失を経験しないようにしたり(例えば、操作中に予期せずデータが欠落しているように見えるなど)、または進行中または未完了の操作中にコンテンツアイテムがアクセスされたときに発生する可能性のあるその他の予期しない/矛盾した操作及び/又は状態を経験しないようにしたりすることができる。
図4Aは、コンテンツアイテム操作に関連する中間状態に従ってコンテンツアイテムにアクセスするときに、クライアントデバイスが経験する不一致の例を示す図である。この例では、クライアントデバイス1501がコンテンツ管理システム110に移動要求404を送信している。移動要求404は、フォルダ418内のフォルダ412を移動する移動操作402を含む。示されるように、移動操作402の前に、フォルダ412はルートフォルダ410内に位置し、移動操作402の後に、フォルダ412はフォルダ418内に位置する。
移動要求404の後で移動操作402の完了前に、クライアントデバイス1502は、コンテンツ管理システム110に読み取り要求406を送信している。読み取り要求406は、クライアントデバイス1502からフォルダ412を読み取る要求である。読み取り要求406に基づいて、コンテンツ管理システム110は、応答408をクライアントデバイス1502に送信した。この例の応答408は、フォルダ412の中間状態を含む。中間状態は、移動操作402が開始された後、移動操作402が完了する前のフォルダ412の状態である。中間状態に基づいて、フォルダ412は、クライアントデバイス1502がフォルダ412を読み取る場合、1つ以上の不整合を有するように見えることがあり得る。
図4Aに示す例では、移動操作402の前では、フォルダ412はアイテム414とフォルダ416とを含む。しかし、フォルダ412が中間状態に従ってクライアントデバイス1502において表示される場合、フォルダ412は、以前のようにアイテム414を含むように見えるが、フォルダ416が欠落しているように見える。このフォルダ416の見かけ上の損失は、移動操作402がフォルダ412のコンテンツをフォルダ418に移動し始めた後、移動操作402が完了するまでに、クライアントデバイス1502がフォルダ412にアクセスすることによって生じる。つまり、中間状態では、フォルダ412の中のアイテム414は、すでにフォルダ412で移動されているが、フォルダ416は、まだ移動を開始していないか、完了しておらず、従って、フォルダ412の中に表示されない。このような不一致は、クライアントデバイス1502におけるユーザのユーザエクスペリエンスに悪影響を与え、データの部分的な損失(例えば、フォルダ416)が発生したとユーザが誤って感じることさえあり得る。
図4Aに示される不一致および操作のタイプは、説明のために提供される単なる例である。当業者であれば、開示の観点から、他の不一致および問題が発生し得ること、および他のタイプの操作が同一及び/又は異なる不一致及び/又は問題を引き起こし得ることを認識するであろう。例えば、場合によっては、移動操作402、読み取り要求406、及び/又は応答408のタイミング、状況などに応じて、フォルダ412は空に見えるか、または完全に欠落しているように見えることがある。このような操作に関連するコンテンツアイテムを提示する際に不一致及び/又は問題を引き起こし得る他の限定的でない操作の例としては、削除操作、マウント操作、パーティション操作、コピー操作、編集/書き込み操作、名前変更操作、他のファイルシステム操作などがある。
進行中及び/又は未完了の操作からの不一致及び/又は問題を回避するために、コンテンツ管理システム110は、関連する操作の完了後にコンテンツアイテムの状態が何であるかを予測/投影し、そのコンテンツアイテムの予測/投影状態を要求クライアントに提供して、クライアントが操作の完了後の終了状態に従ってコンテンツアイテムを見るようにすることができる。例えば、図4Bを参照すると、クライアントデバイス1502がコンテンツ管理システム110に読み取り要求406を送信すると、コンテンツ管理システム110は、フォルダ412の予測/投影状態(例えば、フォルダ412の状態は、操作402の移動後にどのような状態になるか)を判断し、応答420で予測状態をクライアントデバイス1502に提供することができる。
図4Bに示されるように、応答420におけるフォルダ412の予測/投影状態は、図4Aに示される例において前もって欠落しているフォルダ416を含む、移動操作402後のフォルダ412の状態を反映する。クライアントデバイス1502が応答420の後にフォルダ412を表示すると、フォルダ412は、フォルダ418の内側に位置するように見え、移動操作402の前に有していたすべてのコンテンツアイテム(例えば、アイテム414、フォルダ416)を含むように見える。従って、コンテンツ管理システム110は、フォルダ412の現在の状態(例えば、移動操作402が進行中であり、完了していない間のフォルダ412の状態)を提供するのではなく、応答420に予測/投影状態を提供することによって、代わりに移動操作402の完了後のフォルダ412の状態と異なる状態を提供するときに発生する問題および不一致を除去することができる。
いくつかの例では、コンテンツ管理システム110は意図ストア212からフォルダ412の予測/投影状態を保存及び/又は取得することができる。場合によっては、意図ストア212がフォルダ412の予測/投影状態を有しない場合、コンテンツ管理システム110は、フォルダ412に関連する読み取り要求406を受信すると、フォルダ412の予測/投影状態を計算することができる。コンテンツ管理システム110は、予測/投影状態を意図ストア212に保存し、クライアントデバイス1502への応答420に含めることができる。
いくつかの例では、宛先位置(例えば、フォルダ418)における予測/投影状態を計算することに加えて、コンテンツ管理システム110は、送信元位置(例えば、ルートフォルダ410)における状態を計算及び/又は記録することができる。送信元位置における状態は、移動操作402の前の状態を含むことができる。いくつかの例では、送信元位置における状態は、移動操作402の後の送信元位置の予測/投影状態を追加的にまたは代替的に含むことができる。このような例では、コンテンツ管理システム110は、意図ストア212に、送信元と宛先の両方の位置の予測/投影状態を保存することができる。例えば、コンテンツ管理システム110は、移動操作402後のルートフォルダ410の予測/投影状態と、移動操作402後のフォルダ418の予測/投影状態とを計算することができる。そして、コンテンツ管理システム110は、ルートフォルダ410及びフォルダ418の予測/投影状態を意図ストア212に保存することができる。場合によっては、意図ストア212は、図4Bにおけるルートフォルダ410の状態のような送信元意図と、移動操作402後のフォルダ418の予測/投影状態のような宛先意図とを保存/トラッキングすることができる。
いくつかの例では、予測/投影状態を計算する前及び/又はその一部として、コンテンツ管理システム110は、クライアントデバイス1501(及び/又は、クライアントデバイス1501に関連付けられたユーザアカウント)がフォルダ418にフォルダ412を移動するための十分な権限を有し、且つクライアントデバイス1502(及び/又は、クライアントデバイス1502に関連付けられたユーザアカウント)が、フォルダ418内に保存されたときにフォルダ412にアクセスするための十分な権限を有することを確実にするための権限を検証することができる。例えば、コンテンツ管理システム110が、クライアントデバイス1501(及び/又はクライアントデバイス1501に関連付けられたユーザアカウント)が移動操作402を実行する権限を持たないと判定した場合、コンテンツ管理システム110は移動操作402を拒否することができる。コンテンツ管理システム110が、クライアントデバイス1502(及び/又はクライアントデバイス1502に関連付けられたユーザアカウント)が、フォルダ418の内部に保存されているときのフォルダ412にアクセスするための十分な(または全く)権限を有していないと判定した場合、応答420に含まれる予測/投影状態は、フォルダ418の内部(例えば、フォルダ418の内部のフォルダ412へのアクセスがないことを所与として)またはルートフォルダ410の内部(例えば、移動操作402の後、フォルダ412は、もはやフォルダ418の内部にはないことを所与として)のフォルダ412を反映しないことがある。
いくつかの例では、特定の操作の後に予測/投影状態を計算するために、コンテンツ管理システム110は、特定の操作の一部として(及び/又は特定の操作の意図された結果を達成するために)実行される各アトミック操作及び/又は順次操作を計算することができる。例えば、図4Bでは、移動操作402は、ルートフォルダ410からフォルダ412を削除し、フォルダ418にフォルダ412を追加することを含むことができる。移動操作402後のフォルダ418の予測/投影状態(例えば、宛先位置)を計算するために、コンテンツ管理システム110は、ルートフォルダ410からフォルダ412を削除し、フォルダ412をフォルダ418に追加した結果を計算することができる。保存先の位置(例えばフォルダ418)の予測/投影状態は、フォルダ418にフォルダ412を追加したことを反映する。いくつかの例では、特定の操作後の予測/投影状態の計算の一部として、コンテンツ管理システム110は、特定の操作、特定の操作によって影響を受けるコンテンツアイテム、及び/又はその他の関連条件及び/又はパラメータに関連する、あらゆる依存性、因果関係、影響を受ける及び/又は伝播される許可などを考慮することができる。
図5は、意図ストア212のスキーマ例を示す図である。この例では、意図ストア212に送信元意図502と宛先意図504が含まれている。送信元意図502および宛先意図504は、例えば、テーブル、ログ、データベース、及び/又は任意の他のデータ構造を含み、及び/又は表すことができる。送信元意図502は、操作、1つ以上の送信元位置におけるコンテンツアイテム、及び/又は1つ以上の送信元位置における状態、に関連する情報を保存およびトラッキングすることができる。宛先意図504は、1つ以上の宛先位置、1つ以上の宛先位置におけるコンテンツアイテム、及び/又は1つ以上の宛先位置の予測状態、に影響を与える操作に関連する情報を保存およびトラッキングすることができる。送信元の位置は、例えば、制限なしに、送信元ネームスペース、送信元フォルダ、送信元ディレクトリ、送信元パス、送信元コンテンツアイテムなどを含む、及び/又は表すことができる。同様に、宛先位置は、例えば、制限なしに、宛先ネームスペース、宛先フォルダ、宛先ディレクトリ、宛先パス、宛先コンテンツアイテムなどを含む、及び/又は表すことができる。
図5に示される例では、送信元意図502は、送信元位置502内のエントリを一意に識別するレコードIDフィールドと、レコードIDに関連する操作の一意に識別する操作IDフィールドと、操作IDに関連する操作のタイプを記述するデータのための操作タイプフィールドと、送信元位置を一意に識別するための送信元IDフィールドと、宛先位置を一意に識別するための宛先IDフィールドと、コンテンツアイテムを一意に識別するためのオブジェクトID(ОID)フィールドと、送信元位置で送信元位置及び/又は送信位置におけるコンテンツアイテムに関連する送信元パスを識別するための送信元パスフィールドと、送信元位置で送信元位置及び/又は送信元位置におけるコンテンツアイテムの状態を記録するための状態フィールドと、クロック値を記録するためのクロックフィールドと、サーバファイルジャーナル148内の行に関連するSJIDのためのSJIDフィールドとを含む。
この例の宛先意図504は、宛先意図504内のエンティティを一意に識別するレコードIDフィールドと、レコードIDに関連する操作を一意に識別するための操作IDフィールドと、操作IDに関連する操作のタイプを記述するデータのための操作タイプフィールドと、宛先位置を一意に識別するための宛先IDフィールド、送信元位置を一意に識別するための送信元IDフィールドと、コンテンツアイテムを一意に識別するためのオブジェクトIDフィールドと、宛先パス(例えば、宛先位置に関連するパス、宛先位置に関連するコンテンツアイテム、及び/又は宛先位置に関連する操作)を識別するための宛先パスフィールドと、操作IDに関連する操作に基づく予測状態を記録するための予測状態フィールドと、クロック値を記録するためのクロックフィールドと、サーバファイルジャーナル148内の行に関連するSJIDのためのSJIDフィールドとを含む。
意図ストア212にトラッキングされる及び/又は記録される操作の非限定的な例は、移動操作、追加操作、削除操作、マウント操作、アンマウント操作、パーティション操作、パージ操作などを含むことができる。いくつかの例では、操作に制御操作も含めることができる。例えば、移動は、移動の各段階で意図を定義する1つ以上の移動制御操作に関連付けることができる。制御操作の非限定的な例には、外向き操作、内向き操作、アボート操作、終了操作などが含まれる。このような制御操作は、意図された移動操作のような、1つ以上の意図された操作のフロー及び/又は状態を定義するために、及び/又はアトミック操作及び操作の処理を直列化するために、処理及び/又は記録することができる。
いくつかの例では、宛先意図504は、例えば進行中及び/又は未完了の操作のような、要求された操作のための意図(例えば、予測/投影状態)を定義するレコードをホストすることができる。例えば、宛先意図504は、宛先ネームスペース上の進行中及び/又は未完了の移動の意図を反映する内向き移動レコードを保存することができ、及び/又は送信元意図502は、送信元ネームスペース上の移動の意図を反映する外向き移動レコードを保存することができる。いくつかの例では、送信元意図502は、意図(例えば、予測/投影状態、操作前の状態など)を定義するレコードをホストすることができる。場合によっては、送信元意図502の意図のレコードは、要求された操作の実行前の状態を含むことができる。場合によっては、送信元意図502における意図のレコードは、例えば進行中及び/又は未完了の操作のような、要求された操作に関連する予測/投影状態を追加的にまたは代替的に含むことができる。
いくつかの例では、送信元意図502及び/又は宛先意図504のクロックフィールドで定義されるクロックを使用して、クライアントデバイスに提供される状態を操作の前または後の状態にすべきかどうかを決定することができる。例えば、クロックフィールドのタイムスタンプは、意図及び/又は操作に関連する時刻(例えば、意図が計算/記録された時刻、意図に関連する操作が要求/開始された時刻など)を識別することができる。タイムスタンプを使用して、クライアントデバイスに提供される状態を、送信元位置の状態を変更する操作の前の送信元位置の状態にするか、操作の完了後の宛先位置の予測/投影状態にするかを決定することができる。いくつかの例では、送信元意図502において、送信元位置の状態を修正する操作の前の送信元位置の状態を記録/トラッキングすることができ、宛先意図504において、操作の完了後の宛先位置の予測/投影状態を記録/トラッキングすることができる。
前述したように、コンテンツ管理システム110は、意図ストア212内の送信元意図502及び宛先意図504を使用して、例えば、親、子又はその他の関連フォルダ、ネームスペース、ディレクトリ、オブジェクトなどのコンテンツアイテムの状態に影響を与える1つ以上の進行中及び/又は未完了の操作の完了後に、コンテンツアイテムの状態がどのように予測/投影されるかに応じて、コンテンツアイテムへのアクセスをクライアントデバイスに提供することができる。例えば、クライアントデバイスが操作を要求した場合、コンテンツ管理システム110は、この操作が可能であるか許可されているか(例えば、クライアントデバイスが操作の完了に必要な権利/権限を有するかどうか)を検証することができる。コンテンツ管理システム110が、操作が可能/許可されることを検証すると、コンテンツ管理システム110は、意図ストア212に意図が書き込まれた時間及び/又は操作が検証された時間に対応するタイムスタンプにおいて操作が実行されることを示す意図を意図ストア212に書き込むことができる。
いくつかの例では、コンテンツ管理システム110は送信元意図502に送信元意図を書き込み、宛先意図504に宛先意図を書き込むことができる。場合によっては、送信元意図は、送信元ネームスペースのような操作に関与し及び/又は影響を受ける送信元位置に対応付け及び/又はマッピングされることができ、宛先意図は、宛先ネームスペースのような操作に関与し及び/又は影響を受ける宛先位置に対応付け及び/又はマッピングされることができる。宛先位置は、送信元の位置と同じにすることも、異なる位置にすることもできる。送信元意図502および宛先意図504は、コンテンツ管理システム110が、操作に関連するコンテンツアイテムの名称、操作に関与し及び/又は操作の影響を受けるコンテンツアイテムの任意の部分(及び/又は全体部分)、送信元位置におけるコンテンツアイテムの名称および宛先におけるコンテンツアイテムの名称、及び/又は操作の前後の操作及び状態に関与し及び/又は影響を受けるコンテンツアイテムを決定するための任意の他のデータ、を決定することを可能にする情報を含むことができる。
別のクライアントデバイスがコンテンツアイテムにアクセスしようとすると(例えば、そのクライアントデバイスが読み出しを実行しようとすると)、コンテンツ管理システム110は、クライアントデバイスがアクセスしようとしているコンテンツアイテム及び/又はコンテンツアイテムの一部を示す情報を有する、クライアントからのアクセス要求を受信することができる。例えば、要求は、要求されたコンテンツアイテムの名前とコンテンツアイテムのネームスペースを示すことができる。コンテンツ管理システム110は、このような情報を使用して意図ストア212内のルックアップを実行し、コンテンツアイテムに対する操作に関連する意図があることを決定することができる。コンテンツ管理システム110は、送信元意図502および宛先意図540からそれぞれ送信元意図および宛先意図を取得することができ、そしてそのような意図が意図ストア212に書き込まれたタイムスタンプを取得することができる。
コンテンツ管理システム110は、タイムスタンプを使用して、要求するクライアントデバイスに返された状態が、操作の実行前の送信元位置の状態(例えば、送信元意図502における状態)又は宛先位置の状態(例えば、宛先意図504における予測/投影状態)に従うべきか否かを決定することができる。例えば、クライアントデバイスの要求が、操作に関連したタイムスタンプよりも前のタイムスタンプを有し、且つ意図ストア212に記録されている場合、コンテンツ管理システム110は、クライアントデバイスへの応答で提供される状態が、操作前のコンテンツアイテムの状態を記述することができる送信元意図502の状態に基づくべきであると決定することができる。クライアントデバイスの要求が、操作に関連したタイムスタンプよりも後のタイムスタンプを有し、且つ意図ストア212に記録されている場合、コンテンツ管理システム110は、クライアントデバイスへの応答で提供される状態が、操作完了後のコンテンツアイテムの予測/投影状態を記述することができる宛先意図504の状態に基づくべきであると決定することができる。
いくつかの例では、コンテンツ管理システム110が、クライアントデバイスへの応答における状態が、操作の完了後のコンテンツアイテムの状態を記述する予測/投影状態であるべきであると判定した場合、コンテンツ管理システム110は、送信元意図502から送信元状態を検索し、操作の後にどの状態が予測/投影されるかに従って送信元状態を修正することができる。例えば、操作がネームスペース1からネームスペース2へのコンテンツアイテムの移動であり、クライアントデバイスの要求のタイムスタンプが意図ストア212内の操作のために記録されたタイムスタンプの後である場合、コンテンツ管理システム110は、送信元意図502から、ネームスペース1内のコンテンツアイテムの状態を含むネームスペース1の状態を検索し、移動が完了したときにネームスペース2に対して予測/投影される状態と、ネームスペース2内のコンテンツアイテムとに従って、状態を修正することができる。クライアントデバイスがコンテンツ管理システム110から応答を受信した場合、たとえネームスペース1からネームスペース2への移動が進行中及び/又は未完了であっても、受信した状態は、そのコンテンツアイテムがネームスペース2に保存されている(及び/又は保存されているように見える)ことを確実にすることができる。
いくつかの例では、意図ストア212の意図が、特定のユーザアカウントがアクセス/許可を持たない宛先にコンテンツアイテムを移動する操作(「持ち出し操作」とも呼ばれる)に対応している場合、コンテンツ管理システム110は、操作の完了後に、ユーザアカウントがそのコンテンツアイテムにアクセスできないことを決定することができる。そして、コンテンツ管理システム110は、そのユーザアカウントに関連するクライアントデバイスへの応答に、宛先のコンテンツアイテムに対するユーザアカウントのアクセスの欠如を反映する状態を含めることができる。例えば、コンテンツ管理システム110は、コンテンツアイテムをユーザアカウントから隠蔽するか又は他の方法でユーザアカウントがコンテンツアイテムにアクセスすることを禁止する状態を提供することができる。いくつかの例では、ユーザアカウントは送信元又は宛先の位置にあるコンテンツアイテムへのアクセスまたは可視性(あるいはその両方)を有しないことになる。
場合によっては、マウント操作や共有/パーティション操作などの特定のタイプの操作で、コンテンツ管理システム110は、結果のオブジェクトの識別子(例えば、OID)を事前に(例えば、そのオブジェクトが生成及び/又は構成される前に)生成し、登録することができる。図示のために、いくつかの例では、意図ストア212の意図が共有操作のようなパーティション操作に対応する場合、コンテンツ管理システム110は、パーティション操作の一部として生成される新しいネームスペースに、OIDのような識別子を積極的または先制的に割り当て、要求クライアントデバイスへの応答に、新しいネームスペースの識別子および状態を含めることができる。例えば、共有に対応するパーティション操作を実行する場合、コンテンツ管理システム110は、新しいネームスペースを生成して割り当て、送信元ネームスペースでコンテンツを削除し、新しい宛先ネームスペースにコンテンツを追加し、送信元ネームスペースに関連付けられた元の位置で新しいネームスペースをマウントする。場合によっては、コンテンツ管理システム110は、クライアントデバイスからこの状態のすべてを隠すことができる。
さらに、許可を検証した後、且つパーティションをコミットし、パーティション操作に関連するネームスペースが共有されることを示す意図を意図ストア212を書き込む前に、コンテンツ管理システム110は、新しいネームスペースが生成される前、及び/又は、さもなければ新しいネームスペースのために識別子が生成されるであろう前であっても、新しいネームスペースにOIDを割り当てることができる。OIDを新しいネームスペースに事前に割り当てておくことにより、コンテンツ管理システム110は、パーティション操作の結果として生じる新しいネームスペースだけでなく、要求しているクライアントへの応答にOIDを含めることができる。
別の例として、マウント操作が要求されると、場合によっては、コンテンツ管理システム110は、マウント操作に基づいて新しいネームスペースがマウントされることを示すマウント意図を意図ストア212に記録することができる。次に、コンテンツ管理システム110は、マウント操作に関連する新しいネームスペースが何であるかを決定し、要求しているクライアントデバイスに応答するときに、新しいネームスペースを含む状態を含めることができる。受信した状態に基づいて、新しいネームスペースは、クライアントデバイスに関連付けられたユーザアカウント用にその新しいネームスペースがすでにマウントされているかのように、クライアントデバイスに表示される。
例えば、移動などの特定の操作によって、ユーザアカウントのディレクトリ構造の一部に権限の変更が影響を受けたり、伝達されたりすることがある。従って、場合によっては、このような操作に関連する予測/投影状態を決定するときに、コンテンツ管理システム110は、このような操作の完了後に権限が何になるかを予測することができる。例えば、コンテンツ管理システム110は、ユーザアカウントのディレクトリ構造の1つ以上の部分を横断し、そのような操作に関連する権限変更を予測することができる。コンテンツ管理システム110は、そのユーザアカウントに関連する要求クライアントデバイスにどのように、そして/またはどの状態を戻すかを決定する際に、予測された権限を使用することができる。
宛先ネームスペースなどの宛先位置は、送信元位置と同じ位置または異なる位置(送信元ネームスペースと同じネームスペースまたは異なるネームスペースなど)を参照することができる。例えば、場合によっては、1つ以上のコンテンツアイテムをネームスペース上の1つの位置またはパスから、同じネームスペース内の別の位置またはパスに移動することが移動に関係することがある。この例では、宛先ネームスペースは送信元ネームスペースと同じになる。また、1つ以上のコンテンツアイテムをネームスペース間で移動する必要がある場合もある。移動がネームスペースを越えている場合(例えば、クロスネームスペースの移動)、移動先のネームスペースは移動元のネームスペースとは異なる。
送信元意図502及び宛先意図504に示されているフィールドは、単に説明目的のために提供された例である。他の例では、送信元意図502及び宛先意図504内のフィールドは、図5に示されるものよりも多くまたは少なくなるフィールドを含むことができる。さらに、他の例では、送信元意図502及び宛先意図504のフィールドは、図5に示すフィールドと同じ及び/又は異なるフィールドの1つ以上を含むことができる。
先に説明したように、操作後の予測/投影状態を決定するために、コンテンツ管理システム110は、操作に関連するアトミック操作のシーケンスの状態を計算することができる。コンテンツ管理システム110は、操作後の予測/投影状態を、少なくとも一部はアトミック操作のシーケンスの状態に基づいて決定することができる。いくつかの例では、コンテンツ管理システム110は、クロックのような時間情報を使用して、アトミック操作および操作のシーケンスの状態を計算することができる。
図6は、クロックを用いる動作を処理するためのシーケンス例を示す図である。いくつかの例では、クロックにはlamportクロックなどの論理クロックを含めることができる。他の例では、クロックにハイブリッド論理クロック(HLC)を含めることができる。HLCは、物理的時間(例えば、物理的クロック)と論理的クロックの組み合せを含むことができる。
図6において、操作は、NSID1(ネームスペース1)からNSID2(ネームスペース2)へ移動するクロスネームスペースを含む。移動のさまざまな操作は、移動が両方のネームスペースで完了するまで、NSID1とNSID2に対して処理およびシリアル化される。これは、移動後の終了状態を反映する。コンテンツ管理システム110は、移動後の状態を予測/投影する際の終了状態を算出することができる。
この例では、移動前に、コンテンツ管理システム110は、NSID1で加算操作606を実行した。追加操作606は、「/A/Dir/」、「/A/Dir/foo.txt」、「/A/Dir/bar.txt」をNSID1に追加する。ここで、「Dir」はディレクトリ「A」内のサブディレクトリを表し、「foo.txt」と「bar.txt」はサブディレクトリ「Dir」内に追加される。
追加操作606の後、コンテンツ管理システム110は、ディレクトリ「/A/」をNSID1からNSID2に移動するための移動操作を検出する。コンテンツ管理システム110は、送信元意図502でNSID1の外向き移動操作608を記録することができる。この場合、NSID1は、NSID1のディレクトリ「/A/」の移動操作の送信元ネームスペースである。コンテンツ管理システム110は、外向き移動操作608を処理する際に、NSID1からNSID2への「/A/」の移動に操作識別子612を割り当てることができる。コンテンツ管理システム110は、外向き移動に関連する情報を送信元意図502で記録することができる。例えば、コンテンツ管理システム110は、操作識別子612、送信元ネームスペースとしてのNSID1、宛先ネームスペースとしてのNSID2、NSID1での送信元パス、移動前のNSID1の状態、外向き移動操作608のためのクロック620、及び/又は外向き移動操作608に関連する任意の他の情報を記録することができる。場合によっては、コンテンツ管理システム110は、移動の状態(例えば進行中)を記録し、及び/又は外への移動操作608に基づいてカーソルを定義することもできる。
次に、コンテンツ管理システム110は、宛先意図504でNSID2に対する内向き移動操作610を決定することができる。内向き移動操作610は、NSID2におけるディレクトリ「/A/」の内向き移動に対応する。いくつかの例では、コンテンツ管理システム110は、内向き移動操作610を操作識別子612と記録、及び/又は関連づけ、NSID2での内向き移動操作610を、NSID1での外向き移動操作608と関連する移動に相関させることができる。場合によっては、コンテンツ管理システム110はクロック620をインクリメントして、内向き移動操作610に関連するクロック622を決定することができる。いくつかの例では、コンテンツ管理システムは、宛先意図504内にクロック622を記録することができる。場合によっては、コンテンツ管理システムは、追加的にまたは代替的に、宛先意図504内にクロック620を記録することができる。
そして、コンテンツ管理システム110は、NSID1から「/A/Dir/」、「/A/Dir/foo.txt」、および「/A/Dir/bar.txt」を削除するNSID1での削除操作614を決定することができる。コンテンツ管理システム110は、削除操作614を操作識別子612に関連付けて、削除操作614を、外向き移動操作608に関連付けられたNSID1からNSID2へのディレクトリ「/A/」の移動と相関させることができる。
コンテンツ管理システム110は、クロック624を決定するために、NSID1での削除操作614のためのクロック622をインクリメントすることができる。削除操作614後のNSID1の状態は、NSID1の終了状態を反映することができる。いくつかの例では、コンテンツ管理システム110は、送信元意図502におけるNSID1の終了状態を記録することができる。例えば、コンテンツ管理システム110は、移動前のNSID1の状態に加えて、またはその代わりに、NSID1の終了状態を記録することができる。
コンテンツ管理システム110は、NSID2に「/A/Dir/」、「/A/Dir/foo.txt」、および「/A/Dir/bar.txt」を追加するNSID2での追加操作616を計算することができる。コンテンツ管理システム110は、追加操作616を操作識別子612に相関させて、追加操作616を内向き移動操作610に関連する移動に関連づけることができる。場合によっては、コンテンツ管理システム110は、操作識別子612を識別する属性(例えば、xattr)で追加にタグを付けることもできる。
コンテンツ管理システム110は、クロック624をインクリメントして、移動後のNSID2の終了状態に関連するクロック626を決定することができる。場合によっては、コンテンツ管理システム110は、(例えば、宛先意図504において)クロック626を記録することができる。
追加操作616後のNSID2の状態は、移動後のNSID2の予測/投影状態を反映することができる。コンテンツ管理システム110は、宛先意図504におけるNSID2の予測/投影状態を記録することができる。クライアントデバイスが、クロック620の後(またはクロック620と同時に)に時間NSID 2(及び/又は「/A」、「/A/Dir/」、「/A/Dir/foo.txt」、及び/又は「/A/Dir/bar.txt」)へのアクセスを要求する場合、コンテンツ管理システム110は、宛先意図504内のNSID2の予測/投影状態をクライアントデバイスに提供することができる。一方、クライアントデバイスが、クロック620の前(またはクロック620と同時に)に時間NSID1(及び/又は「/A」、「/A/Dir/」、「/A/Dir/foo.txt」、及び/又は「/A/Dir/bar.txt」)へのアクセスを要求した場合、コンテンツ管理システム110は、送信元意図502内のNSID1の状態をクライアントデバイスに提供することができる。クライアントデバイスに提供される送信元意図502のNSID1の状態は、移動前のNSID1の状態を反映することができる。
この例に示すように、移動後の終了状態を計算する場合、コンテンツ管理システム110は、NSID1での削除操作614に続いて、この例のNSID2での追加操作616を含めて、アトミック操作を順次処理することができる。
図7は、非同期操作のための意図をトラッキングするための一例の方法700を示すフローチャートである。ブロック702において、方法700は、コンテンツ管理システム110において、コンテンツ管理システム110上に保存されたコンテンツアイテムに対して操作を実行するための第1の要求を受信することを含むことができる。この操作には、例えば、限定されるものではないが、移動操作、マウント操作、共有操作、削除操作、追加操作、パーティション操作、コピー操作、及び/又はその他のタイプのコンテンツ操作を含むことができる。
ブロック704で、方法700は、操作を実行するための要求をコンテンツ管理システム110によって処理される操作のキューに追加することを含むことができる。
ブロック706において、方法700は、操作を完了する前に、コンテンツ管理システム110で登録されたユーザアカウントに関連するクライアントデバイス(例えば、クライアントデバイス150)から、コンテンツアイテムにアクセスするための第2の要求を受信することを含むことができる。コンテンツアイテムにアクセスするための第2の要求は、例えば、限定されるものではないが、読み取り要求、コピー要求、編集要求、及び/又は、任意のファイルシステム及び/又はコンテンツアイテムの要求であってもよい。
ブロック708において、方法700は、操作を完了する前に、コンテンツアイテムの第2の要求に応答して、予測状態(例えば、予測/投影状態)を決定することを含むことができる。いくつかの例では、コンテンツアイテムの予測状態は、コンテンツアイテムに対して操作を実行した結果を反映することができる。例えば、場合によっては、予測状態は、操作の実行後にコンテンツアイテムのスナップショットを提供することができる。ある場合には、予測状態は、操作が実行された後に、コンテンツアイテムと1つ以上の他のコンテンツアイテム(例えば、親コンテンツアイテム、子コンテンツアイテム、関連コンテンツアイテム、依存及び/又は相互依存コンテンツアイテムなど)のスナップショットを提供することができる。
ブロック710において、方法700は、操作を完了する前に、コンテンツアイテムの予測状態を含む応答をクライアントデバイスに提供することを含むことができる。クライアントデバイスは、コンテンツアイテムの予測状態を使用して、操作によって影響を受けるコンテンツアイテム及び/又はその他のコンテンツアイテムを予測状態に従って描画することができる。いくつかの例では、予測状態は、操作が実行されたかのように(例えば、操作が完了したかのように)、操作が進行中及び/又は不完全である間に、コンテンツアイテム、コンテンツアイテムの親コンテンツアイテム、コンテンツアイテムの子コンテンツアイテム、及び/又は関連するコンテンツアイテムを表示することができる。
いくつかの例では、コンテンツアイテムの予測状態を決定することは、第1の要求及び/又は操作の前の時間に対応するコンテンツアイテムの状態を決定することと、コンテンツアイテム上で操作を実行した結果/成果を決定することと、コンテンツアイテム上で操作を実行した結果/成果を反映するようにコンテンツアイテムの状態を修正することとを含むことができる。場合によっては、操作によって影響を受ける他のコンテンツアイテムの状態も、状態に反映させることができる。
いくつかの例では、方法700は、コンテンツアイテムが操作の前に位置する送信元ネームスペースに対応する第1のテーブル(例えば送信元意図502)にコンテンツアイテムの状態を保存し、コンテンツアイテムに対して操作が実行された後にコンテンツアイテムが位置することが予測される宛先ネームスペースに対応する第2のテーブル(例えば宛先意図504)にコンテンツアイテムの予測状態を保存することを含むことができる。
いくつかの例では、操作にアトミック操作のセットを含めることができる。場合によっては、コンテンツアイテムの予測状態を決定することは、アトミック操作のセットの1つ以上の相互依存関係を決定することと、1つ以上の相互依存関係に従ってアトミック操作のセットを実行する結果を順次計算することとを含むことができる。場合によっては、コンテンツ管理システム110は、クロック及び/又は依存データを使用して、アトミック操作のセットを順次計算することができる。
場合によっては、操作は移動操作を含み、コンテンツアイテムの予測状態を決定することができ、コンテンツアイテムの送信元位置の第1の状態を決定することと、コンテンツアイテムの宛先位置の第2の状態を決定することとを含むことができる。いくつかの例では、送信元位置の第1の状態は、第1の要求が処理される前及び/又は操作が実行される前の時間に対応することができ、第2の状態は、操作が実行された後のコンテンツアイテムの予測状態を含むことができる。
いくつかの例では、方法700は、送信元位置の状態の第1のテーブル(例えば送信元意図502)から送信元位置の第1の状態を検索することと、第1の状態と操作に基づいて宛先位置の第2の状態を決定することと、第2の状態に基づいて、予測状態を含むように宛先位置の状態の第2のテーブル(例えば宛先意図504)を更新することと、予測状態をクライアントデバイスに提供することとを含むことができる。いくつかの例では、予測状態は、移動が進行中である間、及び/又は移動が実行されていない及び/又は完了していない場合でさえ、コンテンツアイテムが宛先位置にあるように見せることができる。
場合によっては、第1の状態を決定することは、送信元位置からコンテンツアイテムを削除した第1の予測結果を決定することを含み、第2の状態を決定することは、コンテンツアイテムを宛先位置に追加した第2の予測結果を決定することを含むことができる。いくつかの例では、第1の状態は第1の予測結果に基づき、第2の状態は第2の予測結果に基づいている。
場合によっては、操作はネームスペース操作を含むことができる。ネームスペース操作は、新しいネームスペースを生成するために、ユーザアカウントのための新しいネームスペースのマウントすること、及び/又は、コンテンツアイテムのパーティション化すること(例えば、共有)を、含む及び/又は表すことができる。いくつかの例では、コンテンツアイテムの予測状態を決定することは、ユーザアカウントがネームスペース操作に関連付けられた新しいネームスペースへのアクセス(及び/又はネームスペース操作の実行)をユーザアカウントに許可する権限を有することを検証すること、新しいネームスペースを生成する前に、新しいネームスペースにネームスペース識別子を事前に割り当てることと、新しいネームスペースの予測状態を計算することと、クライアントデバイスへの応答において、新しいネームスペースの予測状態を提供することとを含むことができる。場合によっては、予測状態は、事前に割り当てられたネームスペース識別子と、新しいネームスペースのネームスペース状態とを含むことができる。
場合によっては、クライアントデバイスは、第1及び/又は第2の要求をコンテンツ管理システム110に送信し、Webブラウザを介してコンテンツ管理システム110から応答を受信することができる。他の場合には、クライアントデバイスは、APIを介してコンテンツ管理システム110と通信することができる(例えば、第1及び/又は第2の要求を送信し、応答を受信することができる)。
図8は、本明細書に記載する種々の技術を実装することができるコンピューティングデバイスの例のコンピューティングデバイスアーキテクチャ800を示す図である。例えば、コンピューティングデバイスアーキテクチャ800は、図1に示されるコンテンツ管理システム110及び/又はクライアントデバイス150の少なくとも一部を実装し、本明細書に記載される操作および技術を実行することができる。コンピューティングデバイスアーキテクチャ800のコンポーネントは、バスなどの接続部805を使用して互いに電気的に通信する形で示されている。例示的なコンピューティングデバイスアーキテクチャ800は、プロセッシングユニット(CPU又はプロセッサ)810と、読み出し専用メモリ(ROM)820及びランダムアクセスメモリ(RAM)825のような、コンピューティングデバイスメモリ815を含む種々のコンピューティングデバイスコンポーネントをプロセッサ810に結合するコンピューティングデバイス接続部805とを含む。
コンピューティングデバイスアーキテクチャ800は、プロセッサ810の一部として直接、近接して、または集積された高速メモリのキャッシュを含むことができる。コンピューティングデバイスアーキテクチャ800は、プロセッサ810による迅速なアクセスのために、メモリ815及び/又はストレージデバイス830からキャッシュ812にデータをコピーすることができる。このようにして、キャッシュメモリは、データを待つ間のプロセッサ810の遅延を回避する性能向上を提供することができる。これらおよび他のモジュールは、プロセッサ810を制御して種々の操作を行うように制御または構成することができる。他のコンピューティングデバイスメモリ815も同様に使用可能である。メモリ815は、異なる性能特性を有する複数の異なるタイプのメモリを含むことができる。
プロセッサ810は、任意の汎用プロセッサと、サービス(1)832、サービス(2)834、およびストレージデバイス830に保存されたサービス(3)836のような、プロセッサ810を制御するように構成されたハードウェアまたはソフトウェアサービス、ならびにソフトウェア命令がプロセッサデザインに組み込まれる専用プロセッサを含むことができる。プロセッサ810は、複数のコアまたはプロセッサ、バス、メモリコントローラ、キャッシュメモリを含む自己完結型システムであってもよい。マルチコアプロセッサは、対称型であっても非対称型であってもよい。
コンピューティングデバイスアーキテクチャ800とのユーザのインタラクションを可能にするために、入力デバイス845は、発話のためのマイクロフォン、ジェスチャまたはグラフィカル入力のためのタッチセンシティブスクリーン、キーボード、マウス、運動入力、音声などの任意の数の入力機構を表すことができる。出力デバイス835は、ディスプレイ、プロジェクタ、テレビジョン、スピーカデバイスなど、当業者に知られている多数の出力機構の1つ以上であることもできる。場合によっては、マルチモーダルコンピューティングデバイスは、ユーザが複数のタイプの入力を提供してコンピューティングデバイスアーキテクチャ800と通信することを可能にすることができる。通信インタフェース840は、一般に、ユーザ入力およびコンピューティングデバイス出力を制御および管理することができる。特定のハードウェア構成での動作に制限はない。そのため、ここでの基本的な機能は、開発時にハードウェアまたはファームウェア構成を改善するために容易に置き換えることができる。
ストレージ830は、不揮発性メモリであり、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ825、リードオンリーメモリ820、およびそれらのハイブリッドなど、コンピュータによってアクセス可能なデータを保存できるハードディスクまたは他のタイプのコンピュータ可読媒体であることができる。ストレージデバイス830は、プロセッサ810を制御するためのサービス832、834、836を含むことができる。他のハードウェアまたはソフトウェアモジュールも考えられる。ストレージデバイス830は、コンピューティングデバイス接続部805に接続することができる。ある態様では、特定の機能を実行するハードウェアモジュールは、その機能を実行するために、プロセッサ810、接続部805、出力デバイス835などの必要なハードウェアコンポーネントに関連して、コンピュータ可読媒体に格納されたソフトウェアコンポーネントを含むことができる。
「コンピュータ可読媒体」という用語は、携帯用又は非携帯用ストレージ、光ストレージ、及び命令及び/又はデータを保存し、収容し、又は運ぶことのできる種々の他の媒体を含むが、これらに限定されない。コンピュータ可読媒体は、データを保存することができ、キャリア波及び/又は無線または有線接続を介して伝搬する一時的な電気信号を含まない非一時的媒体を含むことができる。非一時的媒体の例には、磁気ディスク又はテープ、コンパクトディスク又はデジタル汎用ディスクのような光記憶媒体、フラッシュメモリ、メモリ又はメモリデバイスが含まれるが、これらに限定されない。コンピュータ可読媒体は、プロシージャ、機能、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、またはプログラム文の任意の組合せを表すことができるコード及び/又は機械実行可能命令を格納することができる。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を受け渡しすることによって、別のコードセグメントまたはハードウェア回路に結合することができる。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク伝送などを含む任意の適切な手段を介して、通過、転送、または伝送することができる。
場合によっては、コンピュータ可読ストレージデバイス、媒体、およびメモリは、ビットストリームなどを含むケーブルまたは無線信号を含むことができる。しかし、言及される場合、非一時的コンピュータ可読記憶媒体(ストレージメディア)は、エネルギー、キャリア、磁波、信号などの媒体を明示的に除外する。
具体的な詳細は、本明細書で提供される実施形態および例を完全に理解するために、上記の説明で提供される。しかし、当業者であれば、これらの特定の詳細がなくても実施可能な実施形態であることは理解されよう。説明を明確にするために、いくつかの例では、本技術は、デバイス、デバイスコンポーネント、ソフトウェアで具体化された方法におけるステップまたはルーチン、またはハードウェアとソフトウェアの組合せを含む個々の機能ブロックを含むものとして提示することができる。追加のコンポーネントは、図及び/又は本明細書に記載するもの以外に使用してもよい。例えば、回路、システム、ネットワーク、プロセス、およびその他のコンポーネントは、不必要な詳細において実施形態を不明瞭にしないように、コンポーネントとしてブロック図の形式で示されてもよい。他のインスタンスでは、周知の回路、プロセス、アルゴリズム、構造、および技術は、実施形態を不明瞭にすることを避けるために、不必要な詳細なしに示されてもよい。
個々の実施形態は、フローチャート、フローダイアグラム、データフローダイアグラム、構造ダイアグラム、またはブロック図として示されるプロセスまたは方法として上述されてもよい。フローチャートは、動作を順次処理として記述することができるが、動作の多くは、並列または並行して実行することができる。また、操作の順序を再調整することができる。プロセスは、その動作が完了すると終了するが、図に含まれていない追加のステップを有することができる。プロセスは、方法、機能、プロシージャ、サブルーチン、サブプログラムなどに対応できる。プロセスが関数に対応する場合、その終端は、呼び出し元関数またはメイン関数への関数の戻りに対応することができる。
上述の例によるプロセスおよび方法は、コンピュータ可読媒体に保存され、そうでなければコンピュータ可読媒体から利用可能なコンピュータ実行可能命令を使用して実施することができる。このような命令は、例えば、汎用コンピュータ、特殊用途コンピュータ、または処理デバイスに、特定の機能または機能のグループを実行させる、または別の方法で構成させる命令およびデータを含むことができる。使用されるコンピュータリソースの一部は、ネットワーク経由でアクセス可能である。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語、ファームウェア、および送信元コードのような中間フォーマット命令であってもよい。記載例に従って方法中に生成される命令、使用される情報、及び/又は情報を格納するために使用され得るコンピュータ可読媒体の例には、磁気または光ディスク、フラッシュメモリ、不揮発性メモリを備えたUSBデバイス、ネットワーク化されたストレージデバイスなどが含まれる。
これらの開示事項に従ってプロセスおよび方法を実施するデバイスは、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せを含むことができ、また、さまざまなフォームファクタのいずれかをとることができる。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実施される場合、必要なタスク(例えば、コンピュータプログラム製品)を実行するためのプログラムコードまたはコードセグメントは、コンピュータ可読または機械可読媒体に格納されてもよい。プロセッサは必要なタスクを実行する。フォームファクタの典型的な例は、ラップトップ、スマートフォン、携帯電話、タブレットデバイスまたは他の小型フォームファクタパーソナルコンピュータ、パーソナルデジタルアシスタント、ラックマウントデバイス、スタンドアロンデバイスなどを含む。本明細書に記載する機能性は、周辺デバイスまたはアドインカードにおいても実施可能である。そのような機能は、更なる例として、単一のデバイスで達成する異なるチップ間または異なるプロセス間の回路ボードでも実施されうる。
命令、そのような命令を伝達するための媒体、それらを実行するためのコンピューティングリソース、及びそのようなコンピューティングリソースをサポートするための他の構造は、本開示に記載される機能を提供する手段である。
前述の説明では、アプリケーションの態様は、その特定の実施形態を参照して説明されるが、当業者は、このアプリケーションの主題事項がこれに限定されないことを認識するであろう。従って、本明細書には例示的実施形態が詳細に記載されているが、本発明の概念は他の点では様々に具体化され、使用され得ること、また、添付のクレームは、先行技術により制限される場合を除いて、そのような変形を含むと解釈されることが意図されていることが理解されるべきである。上述の主題事項の様々な特徴及び態様は、個別に又は共同で使用することができる。さらに、実施形態は、本明細書に記載されているものを超えて、本明細書の広範囲な概念および範囲から逸脱することなく、任意の数の環境およびアプリケーションで利用することができる。従って、明細書および図面は、制限的ではなく例示的なものとみなされる。説明のために、方法は特定の順序で記述された。別の実施形態では、方法は、記載されたものとは異なる順序で実行されてもよいことを理解されたい。
当業者は、本明細書で使用されるより小さい(「<」)およびより大きい(「>」)シンボルまたは用語は、それぞれ、本明細書の範囲から逸脱することなく、より小さくまたは等しい(「≦」)および以上(「≧」)シンボルで置き換えることができることを理解するであろう。
コンポーネントが特定の動作を実行するように「構成されている」と記載されている場合、そのような構成は、例えば、動作を実行するための電子回路またはその他のハードウェアを設計することによって、その動作を実行するようにプログラミング可能な電子回路(例えば、マイクロプロセッサ、またはその他の適切な電子回路)をプログラミングすることによって、またはその任意の組合せによって、達成することができる。
一組の「少なくとも1」及び/又は一組の「1又は2以上」を記載するクレームの言語又は他の言語(例えば、開示の他の部分における言語)は、当該組の1の構成員又は当該組の複数の構成員(任意の組合せ)が当該クレームを満たすことを示す。例えば、「AとBのうちの少なくとも1つ」を記載するクレームの用語は、A、B、またはAとBを意味し、別の例では、「A、B、およびCのうちの少なくとも1つ」を記載するクレームの用語は、「A、B、C、またはAとB、またはAとC、またはBとC、またはAとBとC」を意味し、セットの「少なくとも1つ」及び/又はセットの「1つ以上」を記載する言語は、セットに記載された項目に設定を限定しない。例えば、「AとBの少なくとも1つ」を主張するクレームの用語は、A、B、またはAとBを意味することができ、AとBのセットに記載されていない項目を追加的に含むことができる。
本明細書に開示された実施形態に関連して記載される様々な例示的論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの組み合せとして実施可能である。ハードウェアとソフトウェアのこの互換性を明白に示すために、さまざまな例示的コンポーネント、ブロック、モジュール、回路およびステップを、それらの機能の点から上に一般的に説明した。このような機能をハードウェア又はソフトウェアで実施するか否かは、特定の適用及びシステムに課される設計上の制約次第である。当業者は、特定のアプリケーションごとに様々な方法で記述された機能を実装することができるが、そのような実装の決定は、本願の範囲から逸脱する原因と解釈されるべきではない。
本明細書に記載する技法は、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはこれらの任意の組み合せで実施することもできる。このような技法は、汎用コンピュータ、無線通信デバイスハンドセット、または無線通信デバイスハンドセットおよび他のデバイスにおけるアプリケーションを含む複数のアプリケーションを有する集積回路デバイスのような、様々なデバイスのいずれにも実現することができる。モジュールまたはコンポーネントとして記述される任意の特徴は、集積論理デバイス内で一緒に実施されてもよいし、別個であるが相互運用可能な論理デバイスとして別個に実施されてもよい。ソフトウェアで実施される場合、技法は、少なくとも部分的には、上述の方法の1つ以上を実行する命令を含むプログラムコードを含むコンピュータ可読データ記憶媒体によって実現することができる。コンピュータ可読データ記憶媒体は、パッケージ材料を含むコンピュータプログラム製品の一部を形成することができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体などのメモリまたはデータ記憶媒体を含むことができる。技法は、さらに、または代替的に、プログラムコードを命令またはデータ構造の形成で搬送または通信し、伝搬された信号または波のようなコンピュータによってアクセス、読み取り、及び/又は実行することができる、コンピュータ可読通信媒体によって少なくとも部分的に実現することができる。
プログラムコードは、1つ以上のデジタル信号プロセッサ(DSPs)、汎用マイクロプロセッサ、特定用途向け集積回路(ASICs)、フィールドプログラマブルロジックアレイ(FPGAs)、または他の同等の集積論理回路または個別論理回路など、1つ以上のプロセッサを含むプロセッサによって実行することができる。このようなプロセッサは、本開示に記載される技術のいずれかを実行するように構成することができる。汎用プロセッサは、マイクロプロセッサであってもよいが、代替案では、プロセッサは、従来の任意のプロセッサ、コントローラ、マイクロコントローラ、または状態マシンであってもよい。プロセッサはまた、コンピューティングデバイスの組合せ、例えばDSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと接続された一つ以上のマイクロプロセッサ、または他のそのような構成として実施されてよい。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造のいずれか、前述の構造の任意の組み合わせ、または本明細書で説明する技術の実装に適した任意の他の構造またはデバイスを指すことができる。
開示の具体例は、以下のとおりである。
態様1:方法であって、コンテンツ管理システムにおいて、前記コンテンツ管理システムに保存されたコンテンツアイテムに対する操作を実行する第1の要求を受信することと、前記操作を実行するための前記要求を、前記コンテンツ管理システムによって処理される操作のキューに追加することと、前記操作を完了する前に、前記コンテンツ管理システムに登録されたユーザアカウントに関連付けられたクライアントデバイスから、前記コンテンツアイテムにアクセスする第2の要求を受信することと、前記第2の要求に応じて、前記コンテンツアイテムの予測状態を決定することと、前記コンテンツアイテムに対する操作の実行結果を反映する前記コンテンツアイテムの予測状態を決定することと、前記クライアントデバイスに、前記コンテンツアイテムの予測状態を含む応答を提供することとを含む方法。
態様2:態様1の方法であって、前記予測状態は、前記操作が進行中に、前記操作が実行されたかのように、前記コンテンツアイテム、前記コンテンツアイテムに関連付けられた親コンテンツアイテム、及び前記コンテンツアイテムの子コンテンツアイテムの少なくとも1つを表示させる、方法。
態様3:態様1又は2のいずれかの方法であって、前記コンテンツアイテムの前記予測状態を決定することは、前記第1の要求と前記操作との少なくとも1つの前の時間に対応する前記コンテンツアイテムの状態を決定することと、前記コンテンツアイテムに対する前記操作の前記実行結果を決定することと、前記コンテンツアイテムの前記状態を修正して、前記コンテンツアイテムに対する前記操作の前記実行結果を反映することと、を含む方法。
態様4:態様3の方法であって、前記操作の前に前記コンテンツアイテムが配置されている送信元ネームスペースに対応する第1のテーブルに前記コンテンツアイテムの前記状態を保存することと、前記コンテンツアイテムに対する前記操作が実行された後に前記コンテンツアイテムが配置されると予測される宛先ネームスペースに対応する第2のテーブルに前記コンテンツアイテムの前記予測状態を保存することと、を含む方法。
態様5:態様1から4のいずれかの方法であって、前記操作は、アトミック操作のセットを含み、前記コンテンツアイテムの前記予測状態を決定することは、アトミック操作の前記セットの1つ以上の相互依存関係を決定することと、前記1つ以上の相互依存関係に従ってアトミック操作の前記セットを実行した結果を順次計算することと、を含む方法。
態様6:態様1から5のいずれかの方法であって、前記操作は移動操作を含み、前記コンテンツアイテムの前記予測状態を決定することは、前記コンテンツアイテムの送信元位置の第1の状態を決定することであって、前記送信元位置の前記第1の状態は、前記操作が開始される又は完了する前の時間に対応する、決定することと、前記コンテンツアイテムの宛先位置の第2の状態を決定することであって、前記第2の状態は前記操作が実行された後の前記コンテンツアイテムの前記予測状態を含む、決定することと、を含む方法。
態様7:態様6の方法であって、更に、前記送信元位置の状態データの第1のテーブルから前記送信元位置の前記第1の状態を検索することと、前記第1の状態と前記操作に基づいて、前記宛先位置の前記第2の状態を決定することと、前記第2の状態に基づいて、前記予測状態を含むように前記宛先位置の状態データの第2のテーブルを更新することと、前記予測状態を前記クライアントデバイスに提供することであって、前記予測状態は、前記移動の進行中に前記宛先位置において前記コンテンツアイテムを表示させる、提供することと、を含む方法。
態様8:態様6の方法であって、前記第1の状態を決定することは、前記送信元位置から前記コンテンツアイテムを削除する第1の予測結果を決定することを含み、前記第2の状態を決定することは、前記コンテンツアイテムを前記宛先位置に追加する第2の予測結果を決定することを含み、前記第1の状態は前記第1の予測結果に基づいており、前記第2の状態は前記第2の予測結果に基づいている、方法。
態様9:態様1から8のいずれかの方法であって、前記操作はネームスペース操作を含み、前記ネームスペース操作は、前記ユーザアカウントのための新しいネームスペースをマウントすることと、前記コンテンツアイテムを分割して前記新しいネームスペースを生成することとの少なくとも1つを含み、前記コンテンツアイテムの前記予測状態を決定することは、前記ネームスペース操作に関連付けられた前記新しいネームスペースに前記ユーザアカウントがアクセスすることができる権限を前記ユーザアカウントが有するかを検証することと、前記新しいネームスペースを生成する前に、前記新しいネームスペースにネームスペース識別子を事前に割り当てることと、前記新しいネームスペースに対する前記予測状態を計算することと、前記コンテンツアイテムにアクセスする前記要求に応じて、前記新しいネームスペースに対する前記予測状態を提供することであって、前記予測状態は、前記ネームスペース識別子と前記新しいネームスペースのネームスペース状態とを含む、提供することと、を含む方法。
態様10:コンテンツ管理システムであって、1つ以上のプロセッサと、少なくとも1つの非一時的コンピュータ可読媒体であって、前記1つ以上のプロセッサによって実行されると、前記コンテンツ管理システムに、前記コンテンツ管理システムで保存されるコンテンツアイテムに対する操作を実行する第1の要求を受信することと、前記操作を完了する前に、前記コンテンツ管理システムに登録されたユーザアカウントに関連付けられたクライアントデバイスから、前記コンテンツアイテムにアクセスする第2の要求を受信することと、前記第2の要求に応じて、前記コンテンツアイテムの予測状態を決定することと、前記コンテンツアイテムに対する操作の実行結果を反映する前記コンテンツアイテムの予測状態を決定することと、前記クライアントデバイスに、前記コンテンツアイテムの前記予測状態を含む応答を提供することと、をさせる命令を含む非一時的コンピュータ可読媒体とを含む、コンテンツ管理システム。
態様11:態様10のコンテンツ管理システムであって、前記予測状態は、前記操作が進行中に、前記操作が完了したかのように、前記コンテンツアイテム、前記コンテンツアイテムに関連付けられた親コンテンツアイテム、及び前記コンテンツアイテムの子コンテンツアイテムの少なくとも1つを表示させる、コンテンツ管理システム。
態様12:態様10又は11のコンテンツ管理システムであって、前記コンテンツアイテムの前記予測状態を決定することは、前記第1の要求と前記操作との少なくとも1つの前の時間に対応する前記コンテンツアイテムの状態を決定することと、前記コンテンツアイテムに対する前記操作の前記実行結果を決定することと、前記コンテンツアイテムの前記状態を修正して、前記コンテンツアイテムに対する前記操作の前記実行結果を反映することと、を含むコンテンツ管理システム。
態様13:態様12のコンテンツ管理システムであって、前記1つ以上のプロセッサによって実行されると、前記コンテンツ管理システムに、前記操作の前に前記コンテンツアイテムが配置されている送信元ネームスペースに対応する第1のテーブルに前記コンテンツアイテムの前記状態を保存することと、前記コンテンツアイテムに対する前記操作が実行された後に前記コンテンツアイテムが配置されると予測される宛先ネームスペースに対応する第2のテーブルに前記コンテンツアイテムの前記予測状態を保存することと、をさせる命令を格納するコンテンツ管理システム。
態様14:態様10から13のいずれかのコンテンツ管理システムであって、前記操作は、アトミック操作のセットを含み、前記コンテンツアイテムの前記予測状態を決定することは、アトミック操作の前記セットの1つ以上の相互依存関係を決定することと、前記1つ以上の相互依存関係に従ってアトミック操作の前記セットを実行した結果を順次計算することと、を含む方法。
態様15:態様10から14のいずれかのコンテンツ管理システムであって、前記操作は移動操作を含み、前記コンテンツアイテムの前記予測状態を決定することは、前記コンテンツアイテムの送信元位置の第1の状態を決定することであって、前記送信元位置の前記第1の状態は、前記操作が開始される又は完了する前の時間に対応する、決定することと、前記コンテンツアイテムの宛先位置の第2の状態を決定することであって、前記第2の状態は前記操作が実行された後の前記コンテンツアイテムの前記予測状態を含む、決定することと、を含むコンテンツ管理システム。
態様16:態様15のコンテンツ管理システムであって、前記1つ以上のプロセッサによって実行されると、前記コンテンツ管理システムに、前記送信元位置の状態データの第1のテーブルから前記送信元位置の前記第1の状態を検索することと、前記第1の状態と前記操作に基づいて、前記宛先位置の前記第2の状態を決定することと、前記第2の状態に基づいて、前記予測状態を含むように前記宛先位置の状態データの第2のテーブルを更新することと、前記予測状態を前記クライアントデバイスに提供することであって、前記予測状態は、前記移動の進行中に前記宛先位置において前記コンテンツアイテムを表示させる、提供することと、をさせるコンテンツ管理システム。
態様17:態様15のコンテンツ管理システムにおいて、前記第1の状態を決定することは、前記送信元位置から前記コンテンツアイテムを削除する第1の予測結果を決定することを含み、前記第2の状態を決定することは、前記コンテンツアイテムを前記宛先位置に追加する第2の予測結果を決定することを含み、前記第1の状態は前記第1の予測結果に基づいており、前記第2の状態は前記第2の予測結果に基づいている、コンテンツ管理システム。
態様18:態様10から17のいずれかのコンテンツ管理システムであって、前記操作はネームスペース操作を含み、前記ネームスペース操作は、前記ユーザアカウントのための新しいネームスペースをマウントすることと、前記コンテンツアイテムを分割して前記新しいネームスペースを生成することとの少なくとも1つを含み、前記コンテンツアイテムの前記予測状態を決定することは、前記ネームスペース操作に関連付けられた前記新しいネームスペースに前記ユーザアカウントがアクセスすることができる権限を前記ユーザアカウントが有するかを検証することと、前記新しいネームスペースを生成する前に、前記新しいネームスペースにネームスペース識別子を事前に割り当てることと、前記新しいネームスペースに対する前記予測状態を計算することと、前記コンテンツアイテムにアクセスする前記要求に応じて、前記新しいネームスペースに対する前記予測状態を提供することであって、前記予測状態は、前記ネームスペース識別子と前記新しいネームスペースのネームスペース状態とを含む、提供することと、を含むコンテンツ管理システム。
態様19:非一時的コンピュータ可読媒体であって、1つ以上のプロセッサによって実行されると、コンテンツ管理システムに態様1から9のいずれかの方法を実行させる命令を含む、非一時的コンピュータ読取可能媒体。
態様20:態様1から9のいずれの方法を実行する手段を含むコンテンツ管理システム。