(57)【特許請求の範囲】
【請求項１】
分散型マルチマスタデータ複製システムにおける複数の装置のうちの装置によって実行される方法であって、
データストアにオブジェクトを記憶するステップを備え、少なくとも１つ以上のオブジェクトは、前記分散型マルチマスタデータ複製システム内で複製され、
前記データストア内の前記オブジェクトのスキャンを実行するステップと、
前記データストアにおけるオブジェクトのスキャンに基づいて、前記オブジェクトのうちの１つを、前記オブジェクトのうちの１つを指し示す参照を有さないものとして特定するステップと、
前記オブジェクトのうちの１つについて、固有のネゴシエーション要求識別子を含む削除ネゴシエーションメッセージを生成するステップと、
前記オブジェクトのうちの１つに関連付けられたメタデータとして、前記削除ネゴシエーションメッセージを記憶するステップと、
前記複数の装置のうちの１つ以上の別の装置に、前記削除ネゴシエーションメッセージを有する前記メタデータを、前記オブジェクトのうちの１つに関連付けて複製するステップとを備え、前記削除ネゴシエーションメッセージは、前記オブジェクトのうちの１つの削除ネゴシエーションについてのコンセンサスを与えるために、別の削除ネゴシエーションメッセージに付与される、方法。
【請求項２】
前記分散型マルチマスタデータ複製システムの下層複製層を用いて、前記削除ネゴシエーションメッセージを有する前記メタデータが、前記オブジェクトのうちの１つに関連付けられて複製される、請求項１に記載の方法。
【請求項３】
前記別の１つのオブジェクトに関連付けられたメタデータにおいて別の削除ネゴシエーションメッセージを有するものとして、前記オブジェクトの別の１つを特定するステップをさらに備える、請求項１に記載の方法。
【請求項４】
前記別の１つの前記オブジェクトに関連付けられたメタデータとしての前記別の削除ネゴシエーションメッセージに対する応答、否定応答または確証のうちの１つを記憶するステップと、
前記複数の装置のうちの１つ以上の装置に、前記削除ネゴシエーションメッセージに対する前記応答または前記否定応答を有する前記別の１つのオブジェクトに関連付けられたメタデータを複製するステップとをさらに備える、請求項３に記載の方法。
【請求項５】
前記別の削除ネゴシエーションメッセージが失敗したネゴシエーションを示す場合、前記オブジェクトのうちの１つに関連付けられたメタデータから前記削除ネゴシエーションメッセージを削除するステップをさらに備える、請求項３に記載の方法。
【請求項６】
前記別の削除ネゴシエーションメッセージが成功したネゴシエーションを示す場合、前記オブジェクトのうちの１つを削除するステップをさらに備える、請求項３に記載の方法。
【請求項７】
前記削除ネゴシエーションメッセージを記憶するステップは、ネゴシエーションメッセージインジケータおよびストレージクラスタ識別子を、前記削除ネゴシエーションメッセージに書き込むステップを含む、請求項１に記載の方法。
【請求項８】
前記削除ネゴシエーションメッセージが生成された後には、前記オブジェクトの前記１つには、新しい参照を付与できない、請求項１に記載の方法。
【請求項９】
分散型マルチマスタデータ複製システムにおける複数の装置のうちの装置であって、
オブジェクトに関連付けられたネゴシエーションメッセージを有するものとして、データストア内に記憶されたオブジェクトを特定するための手段を備え、前記ネゴシエーションメッセージは固有のネゴシエーション要求識別子を含み、
前記オブジェクトの状態に基づく新しいネゴシエーションメッセージを、前記オブジェクトに関連付けるための手段と、
ストレージクラスタに前記新しいネゴシエーションメッセージを複製するための手段と、
前記オブジェクトのレプリカに関連付けられた別のネゴシエーションメッセージを受け取るための手段と、
前記別のネゴシエーションメッセージが成功したネゴシエーションを示す場合、前記オブジェクトを削除するための手段とを備える、装置。
【請求項１０】
前記別のネゴシエーションメッセージが失敗したネゴシエーションを示す場合、前記新しいネゴシエーションメッセージと前記別のネゴシエーションメッセージとを削除するための手段をさらに備える、請求項９に記載の装置。
【請求項１１】
命令およびデータストアを記憶するメモリと、
前記データストア内におけるオブジェクトの状態であって、当該オブジェクトが参照を有するか否か、および、削除ネゴシエーションが当該オブジェクトに関連付けられているか否かに関係している状態を判断するために、前記データストアの複数のオブジェクトのスキャンを行ない、
前記オブジェクトの前記状態に基づいて、前記オブジェクトに関連付けられたメタデータに新しいネゴシエーションメッセージを書込み、前記新しいネゴシエーションメッセージは、固有のネゴシエーション要求識別子を含み、
１つ以上の装置に対する前記新しいネゴシエーションメッセージを有するオブジェクトに関連付けられた前記メタデータを複製し、
前記１つ以上の装置のうちの１つから、前記オブジェクトに関連付けられた別のネゴシエーションメッセージを受け取るために、
前記メモリ内の前記命令を実行するプロセッサとを備え、
前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージは
、前記オブジェクトの削除ネゴシエーションに対するコンセンサスを提供する、システム。
【請求項１２】
前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージは、前記オブジェクトに関連付けられたメタデータに埋め込まれ、前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージは、分散型マルチマスタデータ複製環境における複製層を用いて交換される、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサは、さらに、前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージが失敗した削除ネゴシエーションを示す場合、前記オブジェクトに関連付けられたメタデータから前記新しいネゴシエーションメッセージを削除するように構成される、請求項１２に記載のシステム。
【請求項１４】
前記プロセッサは、さらに、前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージが成功した削除ネゴシエーションを示す場合、前記オブジェクトを削除するように構成される、請求項１２に記載のシステム。
【請求項１５】
前記新しいネゴシエーションメッセージは、
ネゴシエーションメッセージインジケータと、
ストレージクラスタ識別子とを備える、請求項１１に記載のシステム。
【請求項１６】
前記ネゴシエーションメッセージインジケータは、
削除ネゴシエーションを起動するための削除インジケータ、
前記削除ネゴシエーションに対する肯定応答を提供するための応答インジケータ、
前記削除ネゴシエーションに対する否定応答を提供するための否定応答インジケータ、または、
前記１つ以上の装置から応答が受け取られたことの確証を与えるための同期インジケータのうちの１つを含む、請求項１５に記載のシステム。
【請求項１７】
分散型マルチマスタデータ複製システム内の複数のストレージクラスタのうちの１つのストレージクラスタのデータストアにおいてオブジェクトのスキャンを行なうステップと、
前記分散型マルチマスタデータ複製システム内の前記複数のストレージクラスタ間で、前記スキャンに基づいて、１つ以上の削除ネゴシエーションメッセージを交換するステップとを備え、前記１つ以上の削除ネゴシエーションメッセージのうちの各削除ネゴシエーションメッセージは、前記削除ネゴシエーションメッセージの対象である対応するオブジェクトのメタデータ内に含まれ、前記削除ネゴシエーションメッセージは、前記分散型マルチマスタデータ複製システムの複製層を用いて前記ストレージクラスタ間で送られ、さらに、
前記１つ以上の削除ネゴシエーションメッセージに基づいて、前記複数のストレージクラスタ間において、分散型コンセンサスが合意すると、前記オブジェクトを削除するステップを備える、方法。
【請求項１８】
前記１つ以上の削除ネゴシエーションメッセージの各々は、
ネゴシエーションメッセージインジケータと、
ストレージクラスタ識別子と、
固有のネゴシエーション要求識別子とを含む、請求項１７に記載の方法。
【請求項１９】
前記ネゴシエーションメッセージインジケータは、
削除ネゴシエーションを起動するための削除インジケータと、
前記削除ネゴシエーションに対して肯定応答を提供するための応答インジケータと、
前記削除ネゴシエーションに対して否定応答を提供するための否定応答インジケータと、
別のストレージクラスタから応答が受け取られたことの確証を提供するための同期インジケータとを含む、請求項１８に記載の方法。
【請求項２０】
前記削除インジケータまたは前記応答インジケータは、前記削除インジケータまたは前記応答インジケータを起動した前記ストレージクラスタが前記オブジェクトに対して新しい参照を加えることを不可能にする、請求項１９に記載の方法。
【請求項２１】
コンピュータ実行可能命令を備えるコンピュータ読取可能メモリであって、
分散型マルチマスタデータ複製システムのデータストアに記憶された複数のオブジェクトのスキャンを行なって、前記データストア内に記憶された前記複数のオブジェクトのうちの一つのオブジェクトの状態を判断するための１つ以上の命令を備え、前記状態は、当該オブジェクトが参照を有するか否か、および、削除ネゴシエーションメッセージが前記オブジェクトに関連付けられているか否かに関係しており、
前記オブジェクトの前記状態に基づいて、前記オブジェクトのメタデータに、前記オブジェクトに関連付けられた新しいネゴシエーションメッセージを書込むための１つ以上の命令を含み、前記新しいネゴシエーションメッセージは、固有のネゴシエーション要求識別子を含み、
１つ以上の他のデータストアに対する前記新しいネゴシエーションメッセージを有する前記メタデータを複製するための１つ以上の命令と、
１つ以上の別の装置から、前記オブジェクトに関連付けられた別のネゴシエーションメッセージを受け取るための１つ以上の命令と、
前記オブジェクトに関連付けられた前記別のネゴシエーションメッセージに基づいて、前記オブジェクトの削除ネゴシエーションに対するコンセンサスを判定するための１つ以上の命令とを備える、コンピュータ読取可能メモリ。
【請求項２２】
前記コンセンサスが、失敗したネゴシエーションを示す場合、前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージを削除するための１つ以上の命令と、
前記コンセンサスが、成功したネゴシエーションを示す場合、前記オブジェクトを削除するための１つ以上の命令とをさらに備える、請求項２１に記載のコンピュータ読取可能メモリ。
【請求項２３】
前記新しいネゴシエーションメッセージおよび前記別のネゴシエーションメッセージの書込み順序の忠実性を維持するための１つ以上の命令をさらに備える、請求項２１に記載のコンピュータ読取可能メモリ。
【請求項２４】
前記削除ネゴシエーションメッセージが起動された後は、前記オブジェクトへの新しい参照の付加を不可能にするための１つ以上の命令をさらに備える、請求項２１に記載のコンピュータ読取可能メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
企業コンピューティングの景観は、ストレージ構造において、中央サービス構造が分散ストレージクラスタに取って代わられるという抜本的な転換期にある。企業が記憶効率を高める方法を求めるにつれ、汎用のコンピュータで作られたそのようなクラスタは、一体型のディスクアレイに比べて僅かなコストで高い能力、可用性、新しいデータ集約型アプリケーションに対する拡張性を実現し得る。ストレージクラスタの潜在能力を全て解き放つため、データは、可用性を高め、クライアントからのネットワーク距離を短くする複数の地理的な場所に亘って複製される。
【背景技術】
【０００２】
ガーベッジコレクションは、大きな分散オブジェクトを管理する管理分散型ストレージシステムに対する問題となり得る。ガーベッジコレクタはもはや参照されないオブジェクトを削除することによってディスクスペースを再利用することに対して責任を有する。ストレージクラスタにおける分散型ガーベッジコレクションは機械の一般的な故障および、オブジェクトならびにそれらの参照の全体的な同時表示を得ることが不可能でなければ難しくするネットワークパーティションによってさらに複雑にされる。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
ある実施例によると、方法は、分散型データ複製システムにおける複数の装置のうちの装置によって実行され得る。方法は、分散型データ複製システムを用いて少なくとも１つ以上が複製されるオブジェクトを、データストアに記憶するステップと、データストア内のオブジェクトのスキャンを実行するステップと、オブジェクトのうちの１つを、オブジェクトを指し示す参照を有さないものとして特定するステップと、１つのオブジェクトに関連付けられたメタデータとして、削除ネゴシエーションメッセージを記憶するステップと、複数の装置のうちの１つ以上の別の装置に、削除ネゴシエーションメッセージを有するメタデータを複製するステップとを含み得る。
【０００４】
別の実施例によると、分散型データ複製システムにおける複数の装置のうちの装置は、オブジェクトに関連付けられたネゴシエーションメッセージを有するものとして、データストア内のオブジェクトを特定するための手段と、オブジェクトの状態に基づく新しいネゴシエーションメッセージを、オブジェクトに関連付けるための手段と、ストレージクラスタに新しいネゴシエーションメッセージを複製するための手段と、オブジェクトのレプリカに関連付けられた別のネゴシエーションメッセージを受け取るための手段と、別のネゴシエーションメッセージが成功したネゴシエーションを示す場合、オブジェクトを削除するための手段とを含み得る。
【０００５】
さらに別の実施例によると、システムは、命令およびデータストアを記憶するメモリと、プロセッサとを備える。プロセッサは、データストア内のオブジェクトが参照を有するか否か、ならびに削除ネゴシエーションメッセージがオブジェクトに関連付けられているか否かに関する、オブジェクトの状態を特定し、オブジェクトの状態に基づいてオブジェクトメタデータに新しいネゴシエーションメッセージを書込み、新しいネゴシエーションメッセージを有するメタデータを１つ以上の装置に複製し、１つ以上の装置のうちの１つから、オブジェクトに関連付けられた別のネゴシエーションメッセージを受け取るために、メモリ内の命令を実行する。新しいネゴシエーションメッセージおよび別のネゴシエーションメッセージは、オブジェクトの削除ネゴシエーションに対するコンセンサスを提供する。
【０００６】
さらに別の実施例によると、方法は、分散型マルチマスタデータ複製システム内のストレージクラスタ間で、１つ以上の削除ネゴシエーションメッセージを交換するステップを含み、各々の削除ネゴシエーションメッセージは、ネゴシエーションメッセージの対象であるオブジェクトのメタデータ内に含まれ、削除ネゴシエーションメッセージは、分散型マルチマスタデータ複製システムの複製層を用いてストレージクラスタ間で送られ、さらに、１つ以上の削除ネゴシエーションメッセージに基づいて、ストレージクラスタ間において、分散型コンセンサスが合意すると、オブジェクトを削除するステップを含み得る。
【０００７】
さらに別の実施例によると、コンピュータ読取可能メモリは、コンピュータ実行可能命令を含み得る。コンピュータ読取可能メモリは、データストア内のオブジェクトが参照を有するか否か、ならびに削除ネゴシエーションメッセージがオブジェクトに関連付けられているか否かに関する、オブジェクトの状態を特定するための１つ以上の命令と、オブジェクトの状態に基づいて、オブジェクトのメタデータに、オブジェクトに関連付けられた新しいネゴシエーションメッセージを書込むための１つ以上の命令と、新しいネゴシエーションメッセージを有するオブジェクトメタデータをストレージクラスタに複製するための１つ以上の命令と、１つ以上の別の装置から、オブジェクトに関連付けられた別のネゴシエーションメッセージを受け取るための１つ以上の命令と、オブジェクトに関連付けられた別のネゴシエーションメッセージに基づいて、オブジェクトの削除ネゴシエーションに対するコンセンサスを判定するための１つ以上の命令とを含み得る。
【０００８】
図面の簡単な説明
この明細書に組入れられ明細書の一部を形成する添付の図面は、ここで説明される１つ以上の実施例を記載し、記述とともに、これらの実施例を説明する。
【図面の簡単な説明】
【０００９】
【図１】ここで説明されるシステムおよび方法が実現され得る例示のネットワークの図である。
【図２】図１のファイルシステムの例示の構成図である。
【図３】図１のストレージクラスタの例示のコンポーネントの図である。
【図４】図１の例示のストレージクラスタの機能ブロック図である。
【図５】ここで説明されるシステムおよび方法と一致する実施例に従って用いられ得るメッセージ構造の例示の図である。
【図６】ここで説明されるシステムおよび方法と一致する実施例に従って、分散型マルチマスタデータ複製システムにおいてガーベッジコレクションを実行するための例示のプロセスのフローチャートである。
【図７】ここで説明されるシステムおよび方法と一致する実施例に従ってネゴシエーションメッセージを記述するためのページのプロセスのフローチャートである。
【図８】ここで説明されるシステムおよび方法と一致する実施例に従って、オブジェクトに対する新しい参照を作成するための例示のプロセスのフローチャートである。
【図９】ある実施例に従う例示の削除ネゴシエーションの一部を記載する図である。
【発明を実施するための形態】
【００１０】
詳細な説明
以下の詳細な説明は添付の図面を参照する。異なる図面における同じ参照番号は同じまたは同様の要素を特定し得る。また、以下の詳細な説明は発明を限定しない。
【００１１】
ここで説明されるシステムおよび／または方法は、複製ストレージクラスタに対して非同期式分散ガーベッジコレクションを実行し得る。ここで説明される実施例は、分散型マルチマスタデータ複製システムの異なるクラスタの間で削除ネゴシエーションを送るために、分散型マルチマスタデータ複製システムの下層複製層を用い得る。活動中の参照も複製された参照もシステムにはないということに分散型コンセンサスが合意したとき、オブジェクトが削除され得る。
【００１２】
例示のネットワーク構造
図１は、ここで説明されるシステムおよび方法が実現され得る例示のシステム１００の図である。システム１００は、クライアント１１０−１からクライアント１１０−Ｎ（まとめてクライアント１１０と呼ばれる）およびネットワーク１３０を介して接続された、ストレージクラスタ１２０−１から１２０−Ｍ（まとめてストレージクラスタ１２０と呼ばれる）を含み得る。ストレージクラスタ１２０は、ファイルシステム１４０（図１において破線で示される）を形成し得る。
【００１３】
ネットワーク１３０は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、公衆交換電話網（ＰＳＴＮ）のような電話網、イントラネット、インターネット、類似もしくは非類似のネットワーク、またはネットワークの組合せ等の１つ以上のネットワークを含み得る。クライアント１１０およびストレージクラスタ２０は、有線、および／または無線接続を介してネットワーク１３０に接続され得る。
【００１４】
クライアント１１０は、パーソナルコンピュータ、無線電話、携帯情報端末（ＰＤＡ）、ラップトップ、または別の種類の通信装置等の１つ以上の種類の装置、これらの装置の１つ上で実行しているスレッドまたはプロセス、および／またはこれらの装置によって実行されるオブジェクトを含み得る。ある実施例において、クライアント１１０は、ファイルデータを読出すもしくは変更（たとえば書込）するためにクライアント１１０の代わりにストレージクラスタ１２０と通信するアプリケーションを含む、もしくはこのアプリケーションに繋げられる。
【００１５】
ストレージクラスタ１２０は、１つ以上のサーバ装置、または、ここで説明される態様で情報を記憶、処理、検索、および／もしくは提供し得る別の種類の演算または通信装置を含み得る。１つの実施例において、ストレージクラスタ１２０は、ファイルに対して大型のランダムリード／ライトアクセスデータストアを維持することが可能な１つ以上のサーバ（たとえばコンピュータシステムおよび／またはアプリケーション）を含み得る。ストレージクラスタ１２０のデータストアは、変化が生じた場合にインデックスの一部を速やかに更新することをインデックス付けシステムに許可し得る。ストレージクラスタ１２０のデータストアは、１つ以上のテーブル（たとえば、ユニフォームリソースロケータ（ＵＲＬ）毎に１つの行を含み得るドキュメントテーブル、ＵＲＬとは異なる値が入力された補助テーブル等）を含み得る。一例として、ストレージクラスタ１２０は、非常に大きなサイズ（たとえば数千のサーバに亘るデータのペタバイト）を計測するように設計され得る構造化データ（たとえばドキュメントのランダムアクセスストレージクラスタ）を管理するための分散型ストレージシステム（たとえば、チャンその他、「ビッグテーブル：構造化データのための分散型ストレージシステム」、第７回ＯＳＤＩ会報、ｐｐ．２０５−２１８（２００６年１１月）において説明されるような「ビッグテーブル」）内に含まれ得る。
【００１６】
図１には示されないが、システム１００は１つ以上の専用の民生用サーバまたはハブ等の別のコンポーネント、さまざまな別のコンポーネントを含み得る。ここで用いられるように、コンポーネントはハードウェアまたはソフトウェアとハードウェアとの組合せを含み得る。民生用サーバはたとえば、クライアント１１０からのアクセスのために、１つ以上のストレージクラスタ１２０からの、データストアの読出専用のコピーを記憶し得る。ハブはたとえば、１つ以上の民生用サーバへの配布のために、１つ以上のストレージクラスタ１２０からのデータストアの読出専用コピーを記憶し得る。
【００１７】
例示のストレージクラスタ構造
図２は、ファイルシステムの例示の構造の図である。図２において示されるように、ファイルシステム１４０は、ストレージクラスタ１２０−１，１２０−２，１２０−３，および１２０−４を含み得る。ある実施例において、ファイルシステム１４０は、各々のストレージクラスタ１２０−１，１２０−２，１２０−３，および１２０−４が別のストレージクラスタに対してマスタサーバとして振る舞い得る分散型マルチマスタデータ複製システムであり得る。ファイルシステム１４０において、データの可用性を高め、かつ、クライアント（たとえばクライアント１１０）からのネットワーク距離を短くするために、（たとえば複数の地理的位置における）ストレージクラスタ１２０−１，１２０−２，１２０−３，および１２０−４に亘ってデータが複製され得る。一般的に、分散されたオブジェクトおよび参照は、異なるストレージクラスタ１２０において動的に作成、変形、複製および削除され得、最終的には全てのストレージクラスタ１２０が同じバージョンのデータに行き着くことを確実にするために下層データ複製層（図示せず）が書込指令の忠実性を維持する。したがって、データ複製層が、単一のオブジェクトに対する同じレプリカへの書込の指令を遵守する。
【００１８】
図２はファイルシステム１４０の例示の機能的なコンポーネントを示すが、別の実施例において、ファイルシステム１４０は図２に示されたものよりも少ない、付加的な、異なる、または異なって配置されたコンポーネントを含み得る。さらに別の実施例において、１つ以上の、ファイルシステム１４０の１つ以上のコンポーネントは、ファイルシステム１４０の１つ以上の別のコンポーネントによって実行されるものとして説明された１つ以上の別のタスクを実行し得る。
【００１９】
図３は、ストレージクラスタ１２０の例示のコンポーネントの図である。ストレージクラスタ１２０は、バス３１０、プロセッサ３２０、メインメモリ３３０、ＲＯＭ３４０、記憶装置３５０、入力装置３６０、出力装置３７０、および通信インターフェイス３８０を含み得る。バス３１０は、ストレージクラスタ１２０のコンピュータの間での通信を許容する１つ以上のコンダクタを含み得る。
【００２０】
プロセッサ３２０は、命令を解釈し実行し得る任意のタイプのプロセッサまたはマイクロプロセッサを含み得る。メインメモリ３３０は、ＲＡＭまたは、情報ならびにプロセッサ３２０による実行のための命令を記憶し得る別の種類の動的記憶装置を含み得る。ＲＯＭ３４０は、ＲＯＭ装置または、静的情報ならびにプロセッサ３２０のよる使用のための命令を記憶し得る別の種類の静的記憶装置を含み得る。記憶装置３５０は、磁気および／または光学記録媒体ならびにその対応するドライブを含み得る。たとえば、記憶装置３５０は、永続的なストレージを提供する１つ以上のローカルディスク３５５を含み得る。ある実施例において、ストレージクラスタ１２０は、メインメモリ３３０および／または記憶装置３５０等の１つ以上のコンピュータ読取可能媒体内において、ファイルシステム１４０内に記憶されたオブジェクトに対して、メタデータを維持し得る。たとえば、ストレージクラスタ１２０は、バージョン番号、タイムスタンプ、カテゴリ、および／またはオブジェクトに対する参照インジケータを記憶装置３５０内に記憶し得る。
【００２１】
入力装置３６０はキーボード、キーパッド、ボタン、マウス、ペン等の、操作者がストレージクラスタ１２０に情報を入力することを可能にする１つ以上の機構を含み得る。出力装置３７０は、ディスプレイ、発光ダイオード（ＬＥＤ）等を含む、操作者に対して情報を出力する１つ以上の機構を含み得る。通信インターフェイス３８０は、ストレージクラスタ１２０が別の装置および／またはシステムと通信できるようにする任意のトランシーバのような機構を含み得る。たとえば、通信インターフェイス３８０は、別のストレージクラスタ１２０およびクライアント１１０と通信するための機構を含み得る。
【００２２】
図４はストレージクラスタ１２０の機能ブロック図を示す。図４に示されるように、ストレージクラスタ１２０はデータストア４１０およびガーベッジコレクタロジック４２０を含み得る。ある実施例において、図４において示されるように、データストア４１０はストレージクラスタ１２０内に配置され得る。別の実施例において、データストア４１０は、外部メモリ装置またはインデックス付けシステムに関連付けられた装置（図示せず）等の、ストレージクラスタ１２０と通信するシステム１００の１つ以上の別の装置内に設けられてもよい。
【００２３】
データストア４１０は、検索システムに対して１つ以上のインデックスを提供するためのドキュメントテーブルおよび二次テーブルを含み得る。一例として、ドキュメントテーブルおよび二次テーブルは、ＵＲＬに関連付けられた情報にアクセスすることおよび／または情報を更新することを手助けするために、ＵＲＬのプロパティによって適合され得る。各データストア４１０の少なくとも一部は、複数のストレージクラスタ１２０上で複製され得る。各データストア４１０に対するレプリカの数はユーザが設定可能である。
【００２４】
ガーベッジコレクタロジック４２０は、以前に削除されたファイル等の、参照されていないコンテンツを取り除くためのロジックを含み得る。ガーベッジコレクタロジック４２０は、たとえばデータストア４１０から参照されていないコンテンツを取り除き得る。たとえば、ガーベッジコレクタロジック４２０は、データストア４１０からのオブジェクト（たとえばドキュメント）がもはや参照されていないか（すなわちオブジェクトを指し示すリンクを含まないオブジェクトであるか）を判断し、ストレージクラスタ１２０から、もはや参照されていない任意のオブジェクトを、ストレージクラスタ１２０を移動し、参照されていないオブジェクトを取り除く機能（たとえばマップ削減機能）を介して取り除き得る。オブジェクが、オブジェクトを指し示すリンクを有していれば、そのオブジェクトは「参照されている」または「活動している」であり得る。したがって、ガーベッジコレクタロジック４２０は、活動しているオブジェクトを維持する一方でストレージクラスタ１２０から不必要な情報を取り除き得る。
【００２５】
オブジェクトは別のストレージクラスタ１２０内において存在し得るため、そのオブジェクトを取り除くことは単にオブジェクトを削除することほど単純ではない。したがって、ガーベッジコレクタロジック４２０は、ファイルシステム１４０の異なるストレージクラスタ１２０間で送られ得る削除ネゴシエーションメッセージを作成し得る。ガーベッジコレクタロジック４２０は、システム内に活動している参照も、複製された参照も存在しないということに、（たとえばそのオブジェクトのレプリカを含むファイルシステム１４０の全てのストレージクラスタ１２０の間において）分散型コンセンサスが合意した場合、オブジェクトを削除し得る。ガーベッジコレクタロジック４２０は、削除ネゴシエーションの対象となっているオブジェクトのメタデータ内に削除ネゴシエーションメッセージを含み得る。そしてメッセージは、オブジェクトのレプリカを含む全ての別のストレージクラスタ１２０に対して非同期的に複製され得る。
【００２６】
ガーベッジコレクタロジック４２０によって作成されたメッセージは、たとえば、削除ネゴシエーションを起動するための「Ｄｅｌｅｔｅ」インジケータ、削除ネゴシエーションに対して肯定応答を提供するための応答（「ＡＣＫ」）インジケータ、削除ネゴシエーションに対して否定応答を提供するための否定応答（「ＮＡＣＫ」）インジケータ、および応答が別のストレージクラスタ１２０から受取られたという確認を与えるための同期（「ＧｏｔＡｌｌ」）インジケータを含み得る。ある実施例において、未処理のＤｅｌｅｔｅまたはＡＣＫメッセージを有するオブジェクトに対しては新しい参照は付与されない。メッセージは、メッセージの形式および使用は以下により詳細に説明される。
【００２７】
図３はストレージクラスタ１２０の例示の機能的なコンポーネントを示すが、別の実施例において、ストレージクラスタ１２０は図３に示される機能的なコンポーネントよりも少ない、付加的な、異なる、または異なって配置されたコンポーネントを含み得る。さらに別の実施例において、ストレージクラスタ１２０の１つ以上の機能的なコンポーネントは、１つ以上の別の機能的なコンポーネントによって実行されるものとして説明された１つ以上の別のタスクを実行し得る。
【００２８】
例示のメッセージ構造
図５は、例示の実施例において用いられ得るネゴシエーションメッセージに対する例示のメッセージ構造５００の図を与える。図５に示されるように、メッセージ構造５００は、メッセージ部５１０、ストレージクラスタ識別部５２０、およびネゴシエーション要求識別部５３０を含み得る。メッセージ部５１０は、たとえば、「Ｄｅｌｅｔｅ」インジケータ、「ＡＣＫ」インジケータ、「ＮＡＣＫ」インジケータ、または「ＧｏｔＡｌｌ」インジケータを含み得る。ストレージクラスタ識別部５２０は、メッセージ部５１０内のメッセージを起動するストレージクラスタ１２０に対する固有の識別情報（たとえばクラスタＩＤ）を含み得る。ネゴシエーション要求識別部５３０は、オリジナルの削除ネゴシエーションに対する固有の識別情報（たとえばＲｅｑＩＤ）を含み得る。
【００２９】
メッセージ構造５００は、メッセージ：クラスタＩＤ：ＲｅｑＩＤの形式で記述され得る。たとえば、オブジェクトに対する削除ネゴシエーションは、メッセージ「Ｄｅｌｅｔｅ：０１：５５５５」を用いてストレージクラスタ１２０−１によって起動され得る。ここで、「０１」はストレージクラスタ１２０−１に対するクラスタＩＤであって、「５５５５」はＲｅｑＩＤである。ストレージクラスタ１２０−２による、ネゴシエーションに対する応答は、「ＡＣＫ：０２：５５５５」であり得る。ここで、ストレージクラスタ１２０−２に対するクラスタＩＤであり、「５５５５」は、依然として、応答（およびオリジナルのネゴシエーションに関連する任意の将来のメッセージ」に対するＲｅｑＩＤである。
【００３０】
例示のプロセスフロー
図６は、分散型マルチマスタデータ複製システム（たとえばファイルシステム１４０）においてガーベッジコレクションを実行するための例示のプロセス６００のフローチャートである。ある実施例において、プロセス６００は、ストレージクラスタ１２０のうちの１つによって実行される。別の実施例において、プロセス６００のうちのいくつかまたは全ては、ストレージクラスタ１２０を含みあるいは除く別の装置または装置の組によって実行され得る。プロセス６００は各ストレージクラスタ１２０において周期的に実現され得、かつ、ストレージクラスタ１２０内のオブジェクトの全てあるいは一部のスキャンを含み得る。以下に説明するプロセス６００の特定の例において、ファイルシステム１４０のストレージクラスタ１２０−１に対して参照が作成され得る。ここで、ストレージクラスタ１２０−１は、「０１」のクラスタＩＤを含む。
【００３１】
図６に記載されるように、プロセス６００は、オブジェクトのスキャンの実行（ブロック６１０）、および、参照されておらず、ネゴシエートされたオブジェクトの識別（ブロック６２０）で始まり得る。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、ストレージクラスタ１２０−１（たとえばデータストア４１０内）に記憶されたオブジェクトの全てあるいは一部のスキャンを実行し得る。スキャンは、たとえば、オブジェクトに関連付けられたメタデータを読むことによって、参照を有しないオブジェクトおよび削除ネゴシエーションメッセージを有するオブジェクトを識別し得る。
【００３２】
オブジェクトに対して完了した削除ネゴシエーションが特定されたか否かが判断され得る（ブロック６３０）。完了した削除ネゴシエーションは、たとえば、成功あるいは失敗した削除ネゴシエーションの指標である。たとえば、ストレージクラスタ１２０−１は、成功あるいは失敗した削除ネゴシエーションを確認するメタデータを有するオブジェクトを特定し得る。
【００３３】
オブジェクトに対して完了した削除ネゴシエーションが特定された場合（ブロック３６０−ＹＥＳ）、ストレージクラスタを起動することによって、成功した削除ネゴシエーションあるいは失敗した削除ネゴシエーションメッセージを有するオブジェクトが削除され得る（ブロック６４０）。例示の実施例において、ストレージクラスタ１２０−１が以前にオブジェクトに対して削除ネゴシエーションを起動し、かつ、オブジェクトを削除可能であることを、（たとえば、オブジェクトメタデータに対してＡＣＫメッセージおよび／あるいはＧｏｔＡｌｌメッセージを書き込むことによって）オブジェクトのレプリカを記憶する全ての別のストレージクラスタが認識したことを示すオブジェクトにおいて、ストレージクラスタ１２０−１がメタデータを特定する場合、ストレージクラスタ１２０−１はオブジェクトならびに関連するメタデータを削除し得る。たとえば、ストレージクラスタ１２０−１内のスキャンが、オブジェクトのレプリカを記憶する全ての別のストレージクラスタ（たとえばストレージクラスタ１２０−２，１２０−３，および１２０−４）からの「Ｄｅｌｅｔｅ：０１：ＲｅｑＩＤ」および「ＧｏｔＡｌｌ：＊：ＲｅｑＩＤ」（ここで「＊」は、各ストレージクラスタ１２０に対するストレージクラスタＩＤを示す）を有するオブジェクトに遭遇した場合、オブジェクトおよびメタデータは削除され得る。したがって、ストレージクラスタ１２０−１は、成功したネゴシエーションのイニシエータであり得る。
【００３４】
さらにブロック６４０を参照して、別の例示の実施例において、ストレージクラスタ１２０−１が以前にオブジェクトに対して削除ネゴシエーションを起動し、かつ、オブジェクトが削除されるべきでないことを、少なくとも１つの別のストレージクラスタ１２０が、ＮＡＣＫメッセージを書き込むことによって示したことを示すオブジェクトにおいてストレージクラスタがメタデータを特定した場合、ストレージクラスタ１２０−１は、オリジナルのネゴシエーションメッセージと別のストレージクラスタ１２０からの全ての対応するメッセージを含むメタデータを削除している。たとえば、全ての別のストレージクラスタからの「Ｄｅｌｅｔｅ：０１：ＲｅｑＩＤ」、「ＡＣＫ：＊：ＲｅｑＩＤ」および「ＮＡＣＫ：＊：ＲｅｑＩＤ」（ここで「＊」はストレージクラスタＩＤを示す）を有するオブジェクトにストレージクラスタ１２０−１内のスキャンが遭遇し、かつ少なくとも１つのＮＡＣＫメッセージが存在する場合、ＲｅｑＩＤに対応する全てのＤｅｌｅｔｅ、ＮＣＫ、ＡＣＫおよびＮＡＣＫメッセージが、オブジェクトに関連付けられたメタデータから削除され得る。したがって、ストレージクラスタ１２０−１は、失敗したネゴシエーションのイニシエータであり得る。
【００３５】
完了した削除ネゴシエーションがオブジェクトに対して特定されない場合（ブロック６３０−ＮＯ）、ネゴシエーションメッセージがオブジェクトステータスに基づいてオブジェクトメタデータに書き込まれ得る（ブロック６５０）。ここでさらに説明されるように、オブジェクトのステータスに基づいて、メッセージ（たとえば「Ｄｅｌｅｔｅ」、「ＡＣＫ」、「ＮＡＣＫ」、「ＧｏｔＡｌｌ」）が１つのクラスタ内のオブジェクトメタデータに書き込まれ、オブジェクトのレプリカを含む全ての別のクラスタに複製される。たとえば、オブジェクトステータスに依存して、ストレージクラスタ１２０−１が、オブジェクトを削除するために新しいネゴシエーションメッセージを書き込み得る。代替的に、ストレージクラスタ１２０−１が継続中のネゴシエーションに応答してＡＣＫメッセージ、ＮＡＣＫメッセージ、またはＧｏｔＡｌｌメッセージを書き込み得る。ネゴシエーションメッセージの使用は図７に関してさらに説明される。
【００３６】
オブジェクトメタデータが別のストレージクラスタに対して複製され得る（ブロック６６０）。たとえば、ストレージクラスタ１２０−１は、ストレージクラスタ１２０−２、ストレージクラスタ１２０−３、ストレージクラスタ１２０−４等にネゴシエーションメッセージを複製するために、分散型マルチマスタデータ複製システムの下層の複製層を用い得る。したがって、ネゴシエーションメッセージは、別々のメッセージとしてよりも、むしろオブジェクトメタデータと共に別のクラスタに分散され得る。
【００３７】
ストレージクラスタ（たとえばストレージクラスタ１２０−１）内の全てのオブジェクトがスキャンされるまでプロセス６００が繰返され、周期的に繰返され得る。分散型マルチマスタデータ複製システム（たとえばファイルシステム１４０）内の各々の別のストレージクラスタ（たとえばストレージクラスタ１２０−２，１２０−３，．．．、１２０−Ｍ）によってプロセス６００が同様に実行され得る。したがって、別のストレージクラスタから複製されたオブジェクトメタデータは、ストレージクラスタ１２０−１からのネゴシエーションメッセージに応答してネゴシエーションメッセージを含み得る。削除のために別のストレージクラスタによって印が付けられたオブジェクトに対するネゴシエーションを非同期的に実行するために、各々のストレージクラスタは、ファイルシステムの複製層においてネゴシエーションメッセージを交換し続け得る。
【００３８】
図７は、図６において参照されたネゴシエーションメッセージを書き込むための例示のプロセス６５０のフローチャートである。プロセス６５０は、分散型マルチマスタデータ複製システム（たとえばファイルシステム１４０）内のストレージクラスタ（たとえばストレージクラスタ１２０の１つ）によって実行され得る。分散型マルチマスタデータ複製システムのストレージクラスタ１２０−１（「０１」のクラスタＩＤを有する）およびストレージクラスタ１２０−２（「０２」のクラスタＩＤを有する）について述べられ得る。
【００３９】
継続中のネゴシエーションが存在するかどうかが判断される（ブロック７１０）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、オブジェクトに対するメタデータが削除ネゴシエーションメッセージを含むかどうかを判断し得る。１つの実施例において、オブジェクトに対する削除ネゴシエーションは、ストレージクラスタ１２０−１によって以前に起動することが可能であったか、または、たとえば別のストレージクラスタ（たとえばストレージクラスタ１２０−２，１２０−３，または１２０−４うちの１つ）によって起動され得た。
【００４０】
継続しているネゴシエーションが存在しないと判断された場合（ブロック７１０−ＮＯ）、いずれかの参照がオブジェクトを指すかどうかが判断され得る（ブロック７１５）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、（たとえば参照の有向グラフを分析することによって）特定のオブジェクトが参照を有するかどうかを判断する。オブジェクトを指す参照がないと判断された場合（ブロック７１５−ＮＯ）、新しい「削除」メッセージが書き込まれ得る（ブロック７２０）。たとえば、参照を有さないオブジェクタにストレージクラスタ１２０−１内のスキャンが遭遇し、かつ、継続中のネゴシエーション（たとえば「Ｄｅｌｅｔｅ」メッセージがない）がない場合、ストレージクラスタ１２０−１は、固有のＲｅｑＩＤを生成し、オブジェクトに対して新しい削除ネゴシエーションメッセージ（たとえば「Ｄｅｌｅｔｅ：０１：ＲｅｑＩＤ」）を書き込むことができる。参照がオブジェクトを指すと判断された場合（ブロック７１５−ＹＥＳ）、メッセージが要求されない（ブロック７９０）。たとえば、ストレージクラスタ１２０−１内のスキャンが参照を有するオブジェクトに遭遇し、かつ、継続中の削除ネゴシエーションがない場合、このとき、オブジェクトは付加的な処理を要求し得ない。
【００４１】
継続中のネゴシエーションが存在すると判断された場合（ブロック７１０−ＹＥＳ）、いずれかの参照がオブジェクトを指すかどうかが判断され得る（ブロック７３０）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、特定のオブジェクトが参照を有するかどうかを判断し得る。参照がオブジェクトを指すと判断された場合（ブロック７３０−ＹＥＳ）、以前の否定応答が既にオブジェクトのメタデータ内に記憶されているかどうかが判断され得る（ブロック７３５）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、ストレージクラスタ１２０−１からのＮＡＣＫメッセージ（たとえば「ＮＡＣＫ：０１：ＲｅｑＩＤ」）が既にオブジェクトのメタデータ内に含まれているかどうかを判断し得る。
【００４２】
以前の否定応答が既にオブジェクトのメタデータに記憶されてはいないと判断された場合（ブロック７３５−ＮＯ）、否定応答（「ＮＡＣＫ」）メッセージが書き込まれ得る（ブロック７４０）。たとえば、参照ならびに別のストレージクラスタ（たとえばストレージクラスタ１２０−２）からの継続中のネゴシエーション（たとえば「Ｄｅｌｅｔｅ：０２：ＲｅｑＩＤ」）を有するオブジェクトにストレージクラスタ１２０−１内のスキャンが遭遇した場合、ストレージクラスタ１２０−１は、否定応答（たとえば「ＮＡＣＫ：０１：ＲｅｑＩＤ」）をオブジェクトのメタデータに書き込み得る。以前の否定応答が既にオブジェクトのメタデータ内に記憶されていると判断された場合（ブロック７３５−ＹＥＳ）、このときにさらなるオブジェクトの処理は要求されない（ブロック７９０）。
【００４３】
オブジェクトを指すリファレンスがないと判断された場合（ブロック７３０−ＮＯ）、全てのＡＣＫが受取られたかどうかが判断される（ブロック７５０）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、システム１４０内の各ストレージクラスタ１２０からの応答（たとえば「ＡＣＫ：＊：ＲｅｑＩＤ」、ここで「＊」はストレージクラスタＩＤを示す）がオブジェクトのメタデータ内に含まれているかどうかを判断し得る。全てのＡＣＫが受取られたと判断された場合（ブロック７５０−ＹＥＳ）、「ＧｏｔＡｌｌ」メッセージが書き込まれ得る（ブロック７６０）。たとえば、削除メッセージ（たとえば「Ｄｅｌｅｔｅ：０２：ＲｅｑＩＤ」）ならびにシステム１４０内の各ストレージクラスタ１２０からの応答（たとえば「ＡＣＫ：＊：ＲｅｑＩＤ」、ここで「＊」はストレージクラスタＩＤを示す）を有するオブジェクトにストレージクラスタ１２０−１内のスキャンが遭遇した場合、ストレージクラスタ１２０−１はイニシエータストレージクラスタ１２０−２による使用のために応答確認メッセージ（たとえば「ＧｏｔＡｌｌ：０１：ＲｅｑＩＤ」）を書き込み得る。全てのＡＣＫが受取られてはいないと判断された場合（ブロック７５０−ＮＯ）、以前の応答がオブジェクトのメタデータ内に既に記憶されているかどうかが判断され得る（ブロック７７０）。たとえば、ストレージクラスタ１２０−１（たとえばガーベッジコレクタロジック４２０を用いる）は、ストレージクラスタ１２０−１（たとえば「ＡＣＫ：０１：ＲｅｑＩＤ」）からのＡＣＫメッセージが既にオブジェクトのメタデータ内に含まれているかどうかを判断し得る。
【００４４】
以前の応答がオブジェクトのメタデータに既に記憶されてはいないと判断された場合（ブロック７７０−ＮＯ）、新しい応答（「ＡＣＫ」）メッセージが書き込まれ得る（ブロック７８０）。たとえば、参照を有さず、かつ、別のレプリカ（たとえばストレージクラスタ１２０−２）からの継続中のネゴシエーション（たとえば「Ｄｅｌｅｔｅ：０２：ＲｅｑＩＤ」）を有するオブジェクトにストレージクラスタ１２０−１内のスキャンが遭遇した場合、ストレージクラスタ１２０−１はオブジェクトのメタデータに対して応答（たとえば「ＡＣＫ：０１：ＲｅｑＩＤ」）を書き込み得る。以前の応答が既にオブジェクトのメタデータに記憶されていると判断された場合（ブロック７７０−ＹＥＳ）、このときにさらなるオブジェクトの処理は要求されない（ブロック７９０）。
【００４５】
図８は、ここで説明されるシステムおよび方法と一致する実施例に従って新しい参照をオブジェクトに対して生成するための例示のプロセス８００のフローチャートを提供する。プロセス８００は、分散型マルチマスタデータ複製システム（たとえばファイルシステム１４０）内のストレージクラスタ（たとえばストレージクラスタ１２０の１つ）によって実行され得る。プロセス８００の特定の例について、ファイルシステム１４０のストレージクラスタ１２０−１（クラスタＩＤ「０１」を有する）に対して参照が作成され得る。
【００４６】
オブジェクトに対する参照表示が受取られ得る（ブロック８１０）。たとえば、ストレージクラスタ１２０−１は、オブジェクトに対して新しい参照を加えるための要求を受取り得る。ストレージクラスタにおいて起動されたネゴシエーションメッセージに対してオブジェクトメタデータが見直され得る（ブロック８２０）。たとえば、ストレージクラスタ１２０−１は、任意の削除ネゴシエーションメッセージ、および、特に、ストレージクラスタ１２０−１によって以前に起動された任意のＤｅｌｅｔｅまたはＡＣＫネゴシエーションメッセージ（たとえば「Ｄｅｌｅｔｅ：０１：ＲｅｑＩＤ」または「ＡＣＫ：０１：ＲｅｑＩＤ」）を特定するためにオブジェクトのメタデータを見直し得る。ここで説明される実施例において、ストレージクラスタ１２０−１によって起動されたＤｅｌｅｔｅまたはＡＣＫメッセージを有するオブジェクトメタデータ内に継続するネゴシエーションを有するオブジェクトに対して、ストレージクラスタ１２０−１は新しい参照を書き込み得ない。
【００４７】
ＤｅｌｅｔｅまたはＡＣＫメッセージが存在するかどうかが判断される（ブロック８３０）。ＤｅｌｅｔｅまたはＡＣＫメッセージが存在する場合（ブロック８３０−ＹＥＳ）、別のストレージクラスタ内のレプリカがフェイルオーバーとして用いられ得る（ブロック８４０）。たとえば、オブジェクトメタデータ内において「Ｄｅｌｅｔｅ：０１：ＲｅｑＩＤ」メッセージをストレージクラスタ１２０−１が特定した場合、メッセージは、オブジェクトに対する新しい参照の書込からストレージクラスタ１２０−１を有効にロックアウトする。したがって、ストレージクラスタ１２０−１内のオブジェクトに対する参照の書込要求は別のストレージクラスタ（たとえばストレージクラスタ１２０−２）に転送される。
【００４８】
ＤｅｌｅｔｅまたはＡＣＫメッセージが存在しない場合（ブロック８３０−ＮＯ）、オブジェクトに対して新しい参照が書き込まれ得る（ブロック８５０）。たとえば、ストレージクラスタ１２０−１は、活動中のオブジェクトに対して単に要求された参照を書き込む。
【００４９】
事例
図９は、ここで説明される実施例に従う例示の削除ネゴシエーションの一部を実行する例示のネットワークを提供する。ガーベッジコレクションアルゴリズムは各々のストレージクラスタＸＸ，ＹＹおよびＺＺにおいて周期的に実行し、ストレージクラスタ内の全てのオブジェクトをスキャンし得る。メッセージ（たとえばＤｅｌｅｔｅ、ＡＣＫ、ＮＡＣＫ、ＧｏｔＡｌｌ）は、１つのクラスタ（たとえばストレージクラスタＹＹ）内のオブジェクトのメタデータに対してガーベッジコレクタによって書き込まれ、かつ、オブジェクトのレプリカを含む全ての別のクラスタ（たとえばストレージクラスタＸＸおよびＺＺ）に対して複製され得る。
【００５０】
ここで説明される原則に一致するガイドラインを用いて、ガベッジコレクタによって用いられるガーベッジコレクションアルゴリズムは作動し得る。参照を有さないオブジェクトにストレージクラスタＹＹ内のガーベッジコレクタのスキャンが遭遇し、かつ、継続中のネゴシエーションが無い（たとえば、Ｄｅｌｅｔｅ：ＹＹ：ＲｅｑＩＤメッセージが無い）場合、ストレージクラスタＹＹ内のガーベッジコレクタは、固有のＲｅｑＩＤ（たとえば、２２２２２）の生成し、オブジェクトのメタデータに対して「Ｄｅｌｅｔｅ：ＹＹ：２２２２２」を書き込むことができる。ストレージクラスタＸＸ内のガーベッジコレクタのスキャンが、別のレプリカからの（たとえば、ストレージクラスタＹＹからの）削除ネゴシエーション（たとえば、Ｄｅｌｅｔｅ：ＹＹ：２２２２２）に初めて遭遇する場合、オブジェクトが参照を有しないか、そうでなければ「ＮＡＣＫ：ＸＸ：２２２２２」を有すると、ガーベッジコレクタは、「ＡＣＫ：ＸＸ：２２２２２」を書き込む。ストレージクラスタＸＸは、未処理のＤｅｌｅｔｅ：ＸＸ：ＲｅｑＩＤまたはＡＣＫ：ＸＸ：ＲｅｑＩＤメッセージを有するオブジェクトに対して新しい参照を不可することができない。ストレージクラスタＸＸ内のガーベッジコレクタのスキャンが、全ての別のレプリカからのＤｅｌｅｔｅ：ＹＹ：２２２２２およびＡＣＫ：＊：２２２２２に初めて遭遇する場合、ガーベッジコレクタは、ＧｏｔＡｌｌ：ＸＸ：２２２２２を書き込み得る。この場合、ストレージクラスタＸＸは、イニシエータではない。ストレージクラスタＹＹのガーベッジコレクタのスキャンが、全ての別のレプリカからのＤｅｌｅｔｅ：ＹＹ：２２２２２およびＧｏｔＡｌｌ：＊：２２２２２に遭遇した場合、オブジェクトおよびメタデータが削除される。（ストレージクラスタＹＹは、成功したネゴシエーションのイニシエータである）。ストレージクラスＹＹ内のガーベッジコレクタのスキャンが、別のレプリカからのＤｅｌｅｔｅ：ＹＹ：２２２２２、ＡＣＫ：ＸＸ：２２２２２およびＮＡＣＫ：ＺＺ：２２２２２に遭遇すると、少なくとも１つのＮＡＣＫメッセージがあるので、ＲｅｑＩＤに対応する全てのＤｅｌｅｔｅ、ＡＣＫおよびＮＡＣＫメッセージは、オブジェクトのメタデータから削除される。この場合、ストレージクラスタＹＹは、失敗したネゴシエータのイニシエータである。
【００５１】
図９のシステムにおいて、ストレージクラスタＸＸ，ＹＹおよびＺＺは、各々、オブジェクトメタデータのレプリカを記憶するように設計され得る。図９は、オブジェクト「オブジェクト１」のメタデータのレプリカ（「メタデータ１Ａ」）を示す。メタデータ１Ａは、ストレージクラスタＸＸに送られた、ストレージクラスタＹＹにより起動された削除ネゴシエーションを含む。応答において、ストレージクラスタＸＸは、オブジェクトメタデータに対して返信メッセージを付加し、ストレージクラスタＹＹにメタデータレプリカ（「メタデータ１Ｂ」）を送り得る。図９のファイルシステムにおいて、メタデータ１Ａおよびメタデータ１Ｂは、ストレージクラスタＺＺ（図示せず）に対しても複製され得る。ストレージクラスタＸＸ，ＹＹおよびＺＺ間で送られる後のメタデータレプリカ（図示せず）は、オブジェクト１を削除するかあるいはオブジェクト１を放置する、ならびに、ストレージクラスタＹＹによって起動されたネゴシエーションに関連するメッセージを削除するということに、分散型コンセンサスが合意するため、オブジェクト１のメタデータ内に付加的なネゴシエーションメッセージを含み得る。
【００５２】
ここで説明されるシステムおよび／または方法のアプリケーションは、活動中のレプリカを有するオブジェクトが削除されずに、常時利用可能であり得るように、プロトコル可用性補償を提供することができる。たとえば、さらに図９を参照して、ストレージクラスタＸＸ内のオブジェクト１の活動中のレプリカがある場合、オブジェクト削除ネゴシエーションは、ストレージクラスタＸＸによって肯定応答されず、したがって、オブジェクト１は削除されない。また、ストレージクラスタＹＹによって起動された削除ネゴシエーションが進行中である場合、ストレージクラスタＹＹ内のクローン要求（たとえば、新しいオブジェクト参照を生成する要求）が、フェイルオーバ（たとえば、自動切換）を通して、ストレージクラスタＸＸ内のオブジェクト１の活動中のレプリカに引き継がれる。
【００５３】
ここで説明されるシステム及および／または方法のアプリケーションは、プロトコルライブネス補償を提供し得る。たとえば、任意の起動された削除ネゴシエーション要求Ｄｅｌｅｔｅ：ＸＸ：ＲｅｑＩＤに対して、ストレージクラスタＹＹ内のガーベッジコレクタのスキャンプロセスは、最終的には、ＡＣＫ：ＹＹ：ＲｅｑＩＤまたはＮＡＣＫ：ＹＹ：ＲｅｑＩＤを書込み、ストレージクラスタＸＸ内のネゴシエーションプロセスは、全てのこれらのＡＣＫおよび／またはＮＡＣＫが複製されたときにＹｅｓまたはＮｏの判断を下して終了する。そして、判断が肯定であって、下層の複製層を介して別のストレージクラスタＹＹおよびＺＺに伝搬するストレージクラスタＸＸによる実際の削除を最終的に引き起こす場合に、ストレージクラスタの全てによってオブジェクトのメタデータに対してＧｏｔＡｌｌ：＊：ＲｅｑＩＤが書き込まれ得る。活動中のレプリカが、たとえばストレージクラスタＺＺ内に存在する場合、判断は否定であり、イニシエータ（たとえばストレージクラスタＸＸ）は、ネゴシエーションメッセージを削除することによってオブジェクトのメタデータが浄化される。浄化されたメタデータは、最終的には、ＡＣＫを書き込んだ全てのストレージクラスタに伝搬され、そこでオブジェクトが利用可能になる。
【００５４】
ここで説明されるシステムおよび／方法のアプリケーションは、オブジェクトが削除された後で、ファントム参照が再出現できないことの補償も提供できる。たとえば、オブジェクト１が、ＸＸにおいて最初に削除されたと想定する。ガーベッジコレクションアルゴリズムに基づき、別のストレージクラスタからのＧｏｔＡｌｌ：＊：ＲｅｑＩＤが、削除が行なわれる前にストレージクラスタＸＸに対して複製されていなければならない。この推論によって、さらに別のストレージクラスタＺＺから複製されたファントム参照から、ストレージクラスタＹＹ域の全ての複製データが浄化される。これは、別のストレージクラスタ、特にストレージクラスタＺＺからの全てのＡＣＫが受け取られたときに、ストレージクラスタＹＹがＧｏｔＡｌｌ：ＹＹ：ＲｅｑＩＤを書き込む一方で、ＡＣＫ：ＺＺ：ＲｅｑＩＤが書き込まれた後ではストレージクラスタＺＺに新たな参照を付加することができず、かつ、このときにはストレージクラスタＺＺ内に活動中の参照がなかったということに起因する。なお、ＡＣＫ：ＹＹ：ＲｅｑＩＤが書き込まれた後であって、ＡＣＫ：ＺＺ：ＲｅｑＩＤが複製される前にはストレージクラスタＹＹにストレージクラスタＺＺから参照がまだ複製され得るが、単一のレプリカに対する書込みの順番を複製層が遵守するので、ＡＣＫ：ＺＺ：ＲｅｑＩＤがストレージクラスタＹＹに複製される時までに、すべてのそのような参照が削除される。
【００５５】
ここに説明されるシステムおよび／または方法のアプリケーションは、さらに、ノープロトコルガーベッジ補償を提供することができる。たとえば、削除ネゴシエーションが失敗すると、イニシエータは、Ｄｅｌｅｔｅ、ＡＣＫおよびＮＡＣＫネゴシエーションメッセージを削除し、複製を介して別のオブジェクトレプリカに削除が伝搬する。イニシエータにより削除される前にイニシエータによって全ての関連するメッセージが受け取られなければならないようにアルゴリズムが構成されているため、ガーベッジは残らない。
【００５６】
結論
ここで説明されたシステムおよび／または方法は、複製ストレージクラスタに対して、可用性、ライブネスおよび一貫性保証を与える非同期式分散ガーベッジコレクションアルゴリズムを提供し得る。アルゴリズムは、異なるクラスタ間でメッセージを移送するために下層の複製層を用いる。各削除ネゴシエーションはクラスタのうちの１つにおけるガーベッジコレクタロジックによって起動され、固有の識別子を有する。アルゴリズムは、複数の同時ネゴシエーションをサポートする。オブジェクトは、分散型コンセンサスが合意したときにイニシエータによって削除され得、そうでなければネゴシエーションは無効であり得る。
【００５７】
実施例の前述の説明は、解説と説明を提供するが、完全なものであることや開示された形式通りに発明を限定することを意図するものではない。上記の教示を踏まえて修正および変更が可能であり、または発明の実施から理解される。
【００５８】
たとえば、別の実施例において、異なるストレージクラスタにおけるガーベッジコレクタが、複製層を用いずに、直接通信するガーベッジコレクションアルゴリズムの同期式バージョンが用いられ得る。また、図６および７に関して一連のブロックが説明されたが、別の実施例においてブロックの順番を変更してもよい。さらに、非従属のブロックが平行的に実行され得る。
【００５９】
ここで説明されるように、実施の形態が、図において記載された実施例においてソフトウェア、ファームウェアおよびハードウェアの多くの異なる形式で実現され得ることが明らかである。ここで説明された実施の形態を実現するために用いられる実際のソフトウェアコードまたは専用の制御ハードウェアは発明を限定するものではない。したがって、実施の形態の作動および挙動は特定のソフトウェアコードを参照することなしに説明された。ソフトウェアおよび制御ハードウェアはここでの説明に基づく実施の形態を実現するために設計され得ることが理解される。
【００６０】
さらに、ここで説明されたある実施例は１つ以上の機能を実行する「ロジック」として実現され得る。このロジックは、プロセッサ、マイクロプロセッサなどのハードウェア、アプリケーション特有の集積回路、または、フィールドプログラマブルゲートアレイ、あるいはハードウェアとソフトウェアとの組合せ（たとえばソフトウェア、プロセッサにより実行されるソフトウェア）。
【００６１】
この明細書において用いられるときの「含む」という用語は、述べられた特徴、整数、ステップ、または構成要素が存在することを特定するものとされるが、１つ以上の別の特徴、整数、ステップ、構成要素またはそれらの組の存在または付加を妨げるものではない。
【００６２】
特許請求の範囲および／または明細書中の開示において特定の特徴の組合せが記載されているが、これらの組合せは、発明の開示を限定することを意図するものではない。実際に、特許請求の範囲および／または明細書中の開示において具体的には記載されていない方法で、これらの特徴の多くが組み合わせられ得る。
【００６３】
本明細書の説明において用いられる要素、動作、または命令は、明確に記載されない限り、発明にとって重要であり不可欠なものとして解釈されるべきではない。また、ここで用いられるように、「ある」という冠詞は１つ以上の品目を含む。１つだけの品目が意図される場合、「１つ」という用語または類似の言葉が用いられる。さらに、「基づく」という表現は、ここで用いられるように、明確に述べられない限り、「少なくとも部分的に基づく」ことが意図される。
【図１】
0005479490.tif 000002
【図２】
0005479490.tif 000003
【図３】
0005479490.tif 000004
【図４】
0005479490.tif 000005
【図５】
0005479490.tif 000006
【図６】
0005479490.tif 000007
【図７】
0005479490.tif 000008
【図８】
0005479490.tif 000009
【図９】
0005479490.tif 000010