(57)【特許請求の範囲】
【請求項１】
コンピュータによって実行される、単一のアトミックな単位として、１つまたは複数のストリームに対する変形を行う方法であって、
変形するための１つまたは複数のストリームを選択するステップと、
前記１つまたは複数の選択されたストリームにそれぞれ関連するメタデータに対するロックを取得するステップであって、前記メタデータは、それぞれのストリームに関連する名前を含む、ステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、それぞれのストリームに関連する前記名前から切り離すステップと、
前記１つまたは複数の選択されたストリームに対する変形を実行するステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、前記名前のうちの少なくとも１つの名前に連結するステップであって、前記切り離すステップおよび当該連結するステップは、前記１つまたは複数の選択されたストリームのそれぞれのグローバル一意識別子と前記名前との連結を記憶する一時的マッピングを用いて実行される、ステップと、
前記１つまたは複数の選択されたストリームそれぞれの前記メタデータに対する前記ロックを解除するステップと
を含む、方法。
【請求項２】
前記１つまたは複数のストリームが付加専用ストリームである、請求項１に記載の方法。
【請求項３】
前記変形は、新しいストリームを作成する工程と、既存のストリームへ付加する工程と、既存のストリームのコピーを作成する工程と、ストリームを消去する工程と、ストリームをリネームする工程と、ストリームのメタデータを更新する工程と、ストリームのエクステントのサブセットを第２のストリームにコピーする工程とのうちの１つまたは複数を含む、請求項１に記載の方法。
【請求項４】
前記１つまたは複数の選択されたストリームのそれぞれを、前記名前のうちの少なくとも１つの名前に連結するステップは、前記１つまたは複数の選択されたストリームのそれぞれのＧＵＩＤを、前記名前のうちの少なくとも１つの名前に関連付けることを含む、請求項１に記載の方法。
【請求項５】
前記変形は、エクステントに対する１つまたは複数のポインタを、１つまたは複数のエクステントのデータを移動することなく変更することにより、前記１つまたは複数の選択されたストリームに影響を与える、請求項１に記載の方法。
【請求項６】
請求項１乃至５のいずれかに記載の方法をコンピュータに実行させる、コンピュータプログラム。
【請求項７】
コンピュータによって実行される、単一のアトミックな単位として、１つまたは複数のストリームに対する変形を行う方法であって、
変形するための１つまたは複数のストリームを選択するステップと、
前記１つまたは複数の選択されたストリームにそれぞれ関連するメタデータに対するロックを取得するステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、それぞれのストリームに関連する名前から切り離すステップと、
前記１つまたは複数の選択されたストリームに対して、複数の変形のうちの第１の変形を実行するステップと、
前記１つまたは複数の選択されたストリームに対する複数の変形のうちの第２の変形が、前記複数の変形のうちの前記第１の変形との不整合を生み出す、と判定するステップと、
前記１つまたは複数の選択されたストリームに対して前記複数の変形のうちの前記第１の変形を反転させるステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、それぞれのストリームに関連する少なくとも１つの名前に連結するステップであって、前記切り離すステップおよび当該連結するステップは、前記１つまたは複数の選択されたストリームのそれぞれのグローバル一意識別子と前記名前との連結を記憶する一時的マッピングを用いて実行される、ステップと、
前記１つまたは複数の選択されたストリームそれぞれの前記メタデータに対する前記ロックを解除するステップと
を含む、方法。
【請求項８】
前記１つまたは複数のストリームが付加専用ストリームである、請求項７に記載の方法。
【請求項９】
前記複数の変形は、前記一時的マッピングにおける変更に影響を与える、請求項７に記載の方法。
【請求項１０】
前記複数の変形のそれぞれは、前記一時的マッピングの新しいコピーを作成し、各コピーは、前記一時的マッピングの前記新しいコピーに関連する前記複数の変形のうちの１つの変形の適用後、前記１つまたは複数の選択されたストリームのスナップショットを示す、請求項７に記載の方法。
【請求項１１】
前記複数の変形のうちの前記第１の変形を反転させるステップは、前記１つまたは複数の選択されたストリームのそれぞれに対する変更を反転させることを含む、請求項７に記載の方法。
【請求項１２】
前記複数の変形は、新しいストリームを作成する工程と、既存のストリームへ付加する工程と、既存のストリームのコピーを作成する工程と、ストリームを消去する工程と、ストリームをリネームする工程と、ストリームのメタデータを更新する工程と、ストリームのエクステントのサブセットを第２のストリームにコピーする工程とのうちの１つまたは複数を含む、請求項７に記載の方法。
【請求項１３】
前記複数の変形は、エクステントに対する１つまたは複数のポインタを、１つまたは複数のエクステントのデータを移動することなく変更することにより、前記１つまたは複数の選択されたストリームに影響を与える、請求項７に記載の方法。
【請求項１４】
請求項７乃至１３のいずれかに記載の方法をコンピュータに実行させる、コンピュータプログラム。
【請求項１５】
コンピュータによって実行される、単一のアトミックな単位として、１つまたは複数のストリームに対する変形を行う方法であって、
変形するための１つまたは複数の付加専用ストリームを選択するステップと、
前記１つまたは複数の選択されたストリームにそれぞれ関連するメタデータに対するロックを取得するステップであって、当該ロックを取得することは、所定の名前を有するストリームを変形してロックストリームにすることを含む、ステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、それぞれのストリームに関連する名前から切り離すステップと、
前記１つまたは複数の選択されたストリームに対して、複数の変形のうちのの第１の変形を実行するステップと、
前記１つまたは複数の選択されたストリームに対する前記複数の変形のうちの第２の変形が、前記複数の変形のうちの前記第１の変形との不整合を生み出すかどうか、を判定するステップと、
前記複数の変形のうちの前記第２の変形が不整合を生み出す場合、前記１つまたは複数の選択されたストリームに対する前記複数の変形のうちの前記第１の変形を反転させるステップと、
前記複数の変形のうちの前記第２の変形が不整合を生み出さない場合、前記１つまたは複数の選択されたストリームに対して前記複数の変形のうちの前記第２の変形を実行するステップと、
前記１つまたは複数の選択されたストリームのそれぞれを、それぞれのストリームに関連する少なくとも１つの名前に連結するステップであって、前記切り離すステップおよび当該連結するステップは、前記１つまたは複数の選択されたストリームのそれぞれのグローバル一意識別子と前記名前との連結を記憶する一時的マッピングを用いて実行される、ステップと、
前記１つまたは複数の選択されたストリームそれぞれの前記メタデータに対する前記ロックを解除するステップと
を含む、方法。
【請求項１６】
前記複数の変形は、エクステントに対する１つまたは複数のポインタを、１つまたは複数のエクステントのデータを移動することなく変更することにより、前記１つまたは複数の選択されたストリームに影響を与える、請求項１５に記載の方法。
【請求項１７】
前記複数の変形は、新しいストリームを作成する工程と、既存のストリームへ付加する工程と、既存のストリームのコピーを作成する工程と、ストリームを消去する工程と、ストリームをリネームする工程と、ストリームのメタデータを更新する工程と、ストリームのエクステントのサブセットを第２のストリームにコピーする工程とのうちの１つまたは複数を含む、請求項１５に記載の方法。
【請求項１８】
請求項１５乃至１７のいずれかに記載の方法をコンピュータに実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散ストレージシステムにおけるデータのアトミックな複合変形に関する。
【背景技術】
【０００２】
サーバファーム、ウェブサービス、および分散型ネットワーク接続ストレージシステム、を含む分散システムは、ますます普及し、膨大なコンピュータリソースおよびストレージリソースを提供することとなった。分散ストレージシステムでは、潜在的に広域なネットワーク全体の複数のノードに亘ってストレージスペースを使用する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
分散ストレージシステム内のノード上に記憶されるデータにアクセスするためのデータアクセスのルーチンは、同時にアクセスすることを要求する複数のクライアントセッションを管理しなければならない。しかし、データの整合性のある表示を維持するためには、変形したアクセスは一度に１つのホストに制限されるべきである。加えて、複合変形を実行するクライアントセッションは、複合変形の適用全体を通してデータの整合性を維持しなければならない。
【課題を解決するための手段】
【０００４】
本発明の実施形態は、本概要ではなく以下の請求項により定義される。本発明の種々の態様の高レベルの概観が、本開示の概観を提供するため、かつ、以下の発明を実施するための形態の節でさらに以下に記載される概念を選択して紹介するために、本明細書に提供される。本概要は、請求の主題の重要な特徴または主要な特徴を確認することを意図しているわけでもなければ、請求の主題の範囲を決定するための助けとして分離して使用されることも意図していない。
【０００５】
本発明の実施形態は、アトミックな複合変形と呼ばれる単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行することに関する。いくつかの実施形態において、複合変形の１つが成功しない場合（例えば、前提条件が満足されない場合）、成功裏に適用された変形は反転され、ストリームはアトミックな複合変形の開始前の元の状態に戻される。
【図面の簡単な説明】
【０００６】
本発明の例示的実施形態を、添付の図面を参照して以下に詳細に記載する。
【図１】本発明の実装に用いるのに適切な例示的ネットワーク環境を示す図である。
【図２】本発明の実装に用いるのに適切な例示的コンピュータデバイスのブロック図である。
【図３】本発明の一実施形態による例示的ストリームのブロック図である。
【図４】本発明の一実施形態による例示的メタデータブロックのブロック図である。
【図５】本発明の一実施形態による例示的複合変形のブロック図である。
【図６】本発明の一実施形態による、単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行する方法を示すフロー図である。
【図７】本発明の一実施形態による、第２の変形が１つまたは複数の選択されたストリームにおいて失敗であると判定される場合に、成功した変形を反転させるための方法を示すフロー図である。
【図８】本発明の一実施形態による、複合変形の１つが不整合または失敗の原因となるかどうかを判定するステップを含む、単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行するための方法を示すフロー図である。
【図９】本発明の一実施形態による、複合変形の例を示す図である。
【発明を実施するための形態】
【０００７】
本発明の主題を、本明細書において法的要件を満足させる特異性と共に記載する。しかしながら、記載自体は、本特許の範囲を限定することを意図しているわけではない。むしろ、本発明者は、請求される主題が他の方法で具現化されうることも意図し、それには、他の現在または未来の技術と併せて、異なるステップ、または本文書に記載されるものと同様のステップの組み合わせが含まれる。さらに、用語「ステップ」および／または「ブロック」は、採用される方法の異なる要素を暗示するために本明細書において使用されるが、これらの用語は、個々のステップの順番が明示的に記載される場合を除き、本明細書に記載される種々のステップ間でのいかなる特定の順番も暗示するものとして解釈してはならない。
【０００８】
本発明の実施形態は、ストレージノードのネットワーク全体に亘って分散されるように記憶されるデータの複合変形を行うことに向けられる。大規模なネットワーク全体に分散される複数のノードから成るネットワークにおいて、データの各ユニットは、潜在的には同時に複数のクライアントセッションにより、アクセスすることができる。さらに、ネットワーク全体の異なるデータに亘って整合性が保持される。データにアクセスする全てのクライアントセッションに亘ってデータの整合性のある表示を維持するために、データの変形を調整する必要がある。データの変形についての調整をしなければ、２つのクライアントセッションが２つのデータを整合性無く変形することが可能になってしまい、予測不可能な結果を招く。さらに、複数の相互に依存する変形をアトミックに適用することをしなければ、変形を行うクライアントセッションの障害によりデータが整合性の無いままにされ、または、第２のクライアントセッションが、中間的な整合性の無い状態を表すデータを読み込むことになる。
【０００９】
これらのタイプの不整合を防ぐために、データの変形を調整することが根本的な操作に要求される。特に、個々の変形を独立させて適用することにより一時的な整合性の無い状態が作り出される場合、複数の相互に依存する変形をアトミックなトランザクションとして１つまたは複数のデータに適用する機能を有することが望ましく、それにより、分散ネットワークにおいて他のクライアントセッションからのデータの表示における不整合を防ぐことができる。さらに、複合変形のうちの１つまたは複数が成功裏に適用できない場合には、複合変形の組全体を取り消すことができることも望ましく、それにより、部分的に成功したトランザクションから得られるデータの表示における不整合を防ぐことができる。加えて、望ましくは、特定の変形が成功裏に適用される前に満足すべき１つまたは複数の予期される前提条件を特定することができ、それにより、分散ロックの使用を必要とせずに、独立した潜在的に矛盾するトランザクションの適用を「楽観的な」方法で、クライアントセッションが調整することができる。
【００１０】
一例として、クライアントセッションＸおよびクライアントセッションＹの両方が、データＡの値を読み込むこと、および、データＡの前の値と、それぞれのクライアントセッション（クライアントセッションＸのデータＣxおよびクライアントセッションＹのデータＣy）により判定される他の外部のデータとに基づくデータＡとデータＢのための新しい値を計算すること、が求められるアルゴリズムを実行しているとする。そして、ＡとＢの新しい値は、アトミックな操作として書き込まれる。しかし、データＡの値の読み込みと、データＡとデータＢの新しい値の書き込みとの間にはロックが保持されないため、クライアントセッションＸおよびクライアントセッションＹの両方が、データＡを同時に読み込み、そして、データＡとデータＢのための新しい値を独立して計算することが可能になる。最初にクライアントセッションＸが、次にクライアントセッションＹが、アトミックな変形トランザクションを使用してデータＡとデータＢのためのそれぞれの新しい値を書き込もうとし、双方とも成功するであろう。しかし、クライアントセッションＸにより適用される変形の効果は、クライアントセッションＹにより適用される変形により事実上取り消され、結果的に外部のデータに対して潜在的な不整合がもたらされる。このことが起こらないようにするために、従来の多くのネットワークベースのファイルシステムでは、データＡとデータＢの書き込みの間を通して、データＡの読み込み全体にクライアントセッションが分散ロックを求めることを要求し、それにより、クライアントセッションＸがデータＡとデータＢの更新を完了するまで、クライアントセッションＹがデータＡの値の読み込みを行わないようにする。しかし、分散ロックの使用により、著しいオーバヘッドが取り込まれ、その結果、より脆弱な分散システムとなり、例えば、クライアントセッションＸがロックの解除に失敗すると、クライアントセッションＹは、無期限に進展が妨げられることになる。本発明では、クライアントセッションＸおよびクライアントセッションＹが、データＡとデータＢのための新しい値を書き込もうとする時に満足すべき前提条件を特定することを可能にすることにより、明示的に分散したロックを必要とはしない。本例において、クライアントセッションＸおよびクライアントセッションＹはそれぞれ、データＡとデータＢが置き換え可能にされる前は、データＡの値は、読み込まれてから変更されていないことが真でなければならない、ということを要求する。データＡの読み込みと、データＡとデータＢの書き込みとの間に変形が生じないため、クライアントセッションＹは、その更新に成功するであろう。しかし、データＡの値が、データＡの読み込みと更新との間に変更したため、クライアントセッションＸは、いずれのデータの更新も成功しないであろう。クライアントセッションＸは、操作を中止すること、または、データＡをもう一度読み込むことにより全体のシーケンスを再スタートすることも自由にできる。いずれの場合においても、全てのデータは、内部的にも、外部の状態とも整合性が保たれる。
【００１１】
ネットワークに記憶されている特定のデータは、異なる多くの形式をとることができる。一般的な形式には、ファイル、および類似ファイルのグループがある。本発明のいくつかの実施形態によれば、データはストリームに組織化され、各ストリームは、種々雑多なストリームメタデータのプロパティ（例えば、ストリーム名、アクセス制御ポリシー、満了時間等）から成るデータエンティティであると共に、エクステントに対する順序付けられた一連の参照である。各エクステントは、連続する順序付けられた一連の付加ブロックから成る。各付加ブロックは不変であり、かつ、連続する順序付けられた一連のバイト値から成る。新しいエクステントへの参照は、ストリームの最後に付加してもよいが、一度付加すると、エクステント参照はストリームから消去することができない。複数のストリームが同じエクステントへの参照を含むことができ、あるいは、単一のストリームでさえ、同じエクステントへの複数の参照を含むことができる。新しい付加ブロックは、エクステントが封印されるまで、そのエクステントに付加してもよく、その後、そのエクステントは不変となる。エクステントは、一度封印されると、その封印を解くことはできない。付加ブロックは、エクステントが封印されたかどうかに関わらず、変形しても、エクステントから削除してもならない。従って、ストリームおよびエクステントは大きさが拡大するのみである。
【００１２】
本発明の一実施形態によれば、ストリームは、エクステントのデータを大きなグループの独立した、疎結合エクステントサーバ上に記憶すること、および、各ストリームを記述するメタデータを集中型サーバまたは小規模の密結合サーバグループ上に記憶することにより、ファイルシステムにおいて組織化される。データをエクステントに付加するには、クライアントセッションは正しい独立したエクステントサーバと対話をし、その結果として、エクステントへの付加は、高度に拡張可能であるが、個別のエクステントへの付加の調整を容易にすることはない。対照的に、全ての関係するストリームのメタデータは、集中型サーバ上で保持されるため、ストリームメタデータへの更新を効率的に調整することが可能になる。
【００１３】
一例として、各ストリームに関連するメタデータには、現在のストリーム名、グローバル一意識別子（ＧＵＩＤ）、アクセス制御ポリシー、満了時間、およびストリームを編成するエクステントへの参照の順序付けられたリスト、等の情報を含むことができる。この組織の１つの利点は、ネットワークにおいて任意のデータを移動させる必要なく、１つのストリームから別のストリームにエクステント参照をコピーできることである。その代わり、参照リストのみが、集中型サーバ上に記憶されるメタデータ内で変更される。複製操作は、ストリームメタデータに影響を与えるだけであるため、アトミックな複合変形の一部として効率的に含むことができる。本発明の他の実施形態において、メタデータ自体を、ネットワークにおいて複数のノード間に分散させることができる。当業者には当然のことながら、本発明はストリーム以外のデータ形式にも適用することができる。
【００１４】
いくつかの実施形態によれば、本発明は、複数のストリーム前提条件制約および変異的な操作を操作の一覧にバッチし、１つのアトミックな複合変形として実行させる機能を提供する。操作には、ストリームメタデータ前提条件制約、ストリームの作成、ストリームの消去、ストリームのリネーム、他のストリームからの既存のエクステント参照の複製、および、満了時間、読み込み専用フラグ、アクセス制御情報および複写のポリシー、等の種々雑多なストリームプロパティの設定が含まれる。加えて、本発明のいくつかの実施形態は、同じ複合変形における他の変形操作への参照に関して、ストリームをまたがる操作を示す機能を提供する。例えば、複合変形において、複合変形により作成されるストリームに追加の操作を適用してもよい。同様に、複合変形において、複合変形の操作により消去またはリネームされるストリームに追加の操作を適用してもよい。複合変形におけるそれぞれ個々の操作レコードを対象のストリームアイデンティティに関連付けることにより、また、ストリームをまたがる操作において、実行中の複合変形におけるソースストリームのそれぞれのレコード指標によって、ソースストリームを参照することにより、複合変形中にアイデンティティが作成されたストリームまたは名前が変更されたストリームを、複合変形の過程の任意の時に参照することができる。例えば、実行されるべき操作の一覧に５個のレコードがあり、３番目の操作が新しいストリームを作成している場合、他の操作のいずれかが、そのストリームを操作３のストリームとして参照することができる。
【００１５】
一実施形態によれば、本発明は、複合変形における操作として非変形前提条件制約を示す機能を提供する。これらの操作自体では、ストリームの状態に何らの変化ももたらさないが、前提条件が満足されない場合に、複合変形全体を機能させないようにすることができる。これにより、複数のクライアントが、外部のロックまたは他の同期機構を使用する必要なく、ストリーム状態の調整された取扱いを実装することが可能になる。特定されうる前提条件の例には、ストリームの存在、ストリーム名、ストリームアイデンティティ（リネームされても保存されるが消去／再作成により変更される一意的ＩＤ）、ストリームバージョン番号、ストリーム満了時間、およびエクステント参照カウントがある。
【００１６】
さらに別の実施形態によれば、本発明は、アトミックな複合変形の一部として、ストリーム内容の一部を新しいストリームに効果的に複製する機能を提供する。ストレージノードのネットワーク全体に分散される連続データブロック（エクステント）への順序付けられた一連の参照として、ストリームをモデル化することができる。ストリームは、単にその内容を読み込むこと、および、同じデータを用いるが、新しいエクステントに新しいストリームを書き込むことによりコピーすることができる。しかし、大量のデータを１つのエクステントから別のエクステントにコピーすることだけが、複数のネットワークノードに関与する高価なネットワーク／ディスク集約的な活動なのではなく、同じエクステントが複数のストリームにより参照されてもよい。単にエクステントを複製することにより、ストリームの非常に大きな部分を異なるストリーム（場合によっては異なる位置の）に効果的に複製することができる。この動作は軽く、かつ、実際のストリームデータの内容をコピーする必要が無い。さらに、このタイプの複製を実行するために扱われる状態の全てを、中央メタデータサーバにより保持することができる。本モデルにより導かれることは、ストリーム内容の潜在的に大きな部分を、１つのストリームから別のストリームに複製することを、長期間保持されるロックを必要とせずに、アトミックな複合変形の一部として実行することができるということである。クライアントは、ストリームの連結、ガーベジコレクション、ログ／ジャーナルのトランケーション、単一インスタンス化、およびエイリアシングを含む多くの目的でこの機能を使用することができる。加えて、多数の関係のない操作を一緒にアトミックな複合変形内にバッチして、特定の量の作業を完了させるのに必要なトランザクションの数を減少させることができる。メタデータ変形は耐久性トランザクションであるため、完了したと見なすことができる前に永続ストレージに重複してコミットされなければならない。耐久性ストレージ（ディスク）のコミット操作の待ち時間／パフォーマンスは、トランザクションシステムのスケーラビリティ／パフォーマンスにおける最大の制限要因であり、また、多くの操作を単一のコミットに組み合わせる機能は利点とすることができる。また、サーバは、任意の変更を適用する前に全ての操作の検証ができるため、そうでなければ不可能であった最適化を実装することができる。
【００１７】
いくつかの実施形態によれば、本発明は、「悉無律型」セマンティクスおよび「同時操作」を表す機能を促進する。悉無律型セマンティクスは、複合変形のいかなる操作も機能しない場合、全体の複合変形が機能しないこと、および、変形に対して選択されるストリームの状態が複合変形の状態より前の状態のままにされることを保証する。これにより、クライアントは、状態の整合性と共に複合変形のアトミック性にも信頼を置くことができる。複合変形システムにおける同時操作では、操作が厳密にシーケンシャルには実行されない場合には難しく、または、非効率的である単一のアトミックな複合変形で、特定の組の変形が生じることになる。一例として、同じ複合変形において、１つの操作でストリーム「Ａ」を「Ｂ」にリネームし、もう１つの操作でストリーム「Ｂ」を「Ａ」にリネームする（すなわち、２つの操作で２つのストリームをネームスペースにスワップする）ことが可能である。これら２つの操作は、最初の操作がネームスペースの衝突により失敗するためシーケンシャルに実行されない場合は成功しない。スワップをシーケンシャルに実行することは、３つの操作および一時的なストリーム名の導入を必要とする（すなわち、「Ａ」を「Ｃ」にリネームし、「Ｂ」を「Ａ」にリネームし、「Ｃ」を「Ｂ」にリネームする）。それは、１つの操作が失敗してその前に他の操作が成功している場合、部分的に完了した複合変形を「巻き戻す」処理をさらに複雑にする（悉無律型セマンティクス）。アトミックな複合変形は、全て同時に適用される順序付けされない１組の操作として扱われ、中途半端に整合した状態をクライアントが示す必要性を取り除き、サーバにアトミックな複合変形の実装を最適化させる。
【００１８】
本発明のさらに別の実施形態によれば、本発明は、アトミックな複合変形を使用して、クライアントがアクセス可能な簡素な分散ロックおよび分散リースを実装する機能を提供する。ストリームメタデータには、満了時間が延長されない限り、特定の期間が過ぎるとストリームが自動的に消去されるようにするために使用することができる満了時間プロパティが含まれる。アトミックな複合変形と併せて満了時間を使用することにより、１組のクライアントが、合意された名前を有する新しいストリームを作成しようとすることによりリースまたはロックを獲得するために競合することができ、成功裏に作成済みのストリーム上で満了時間を延長することによりリースを延長することができる。自作成のリースストリームの存在およびその合意された名前の継続所有を複合変形への付加的前提条件として追加することにより、リース／ロックの所有権を、任意の他のストリームメタデータのアトミックな複合変形に対して前提条件として効果的に追加することができる。クライアントが、リース／ロックを保持しながら機能しない場合、リースまたはロックのファイルは、満了時間が来ると自動的に消去され、別のクライアントがリースを請求できるようになる。リースまたはロックが通常のストリームとして表されるので、ストリームに利用可能なツールおよび機構（例えば、ネームスペースの組織、アクセス制御、ブラウジング／閲覧、等）は、本来、リースおよびロックにも同様に利用可能である。
【００１９】
従って、本発明の一実施形態は、単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行する方法を実行するためのコンピュータ実行可能命令を具現化するコンピュータ可読記憶媒体に向けられる。１つまたは複数のストリームが、選択されたストリームとして変形のために選択される。選択されたストリームに関連する１つまたは複数のメタデータに対してロックが取得される。選択されたストリームに関連する名前が、選択されたストリームから切り離される。複数の変形が、選択されたストリームに対して実行される。選択されたストリームに関連する名前は、選択されたストリームに再び連結される。１つまたは複数の選択されたストリームに関連するメタデータに関連するロックが解除される。
【００２０】
別の実施形態によれば、本発明は、単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行する方法を実行するためのコンピュータ実行可能命令を具現化するコンピュータ可読記憶媒体に向けられる。１つまたは複数のストリームが、選択されたストリームとして変形のために選択される。選択されたストリームに関連するメタデータに対してロックが取得される。選択されたストリームのそれぞれに関連する名前が、選択されたストリームから切り離される。第１の変形が、選択されたストリームに対して実行される。第２の変形は、実行されると不整合を生み出すものと判定される。選択されたストリームに対する第１の変形が反転される。選択されたストリームに関連する名前は、選択されたストリームに再び連結される。選択されたストリームに関連するメタデータに対するロックが解除される。
【００２１】
さらに別の実施形態によれば、本発明は、単一のアトミックな単位として、１つまたは複数のストリームに対する複合変形を実行する方法を実行するためのコンピュータ実行可能命令を記憶するコンピュータ可読媒体に向けられる。１つまたは複数の付加専用ストリームが、選択されたストリームとして変形のために選択される。選択されたストリームに関連するメタデータに対してロックが取得され、ロックを取得するステップには、所定の名前を有するストリームをロックストリームとなるように変形するステップが含まれる。各選択されたストリームに関連する名前は、その関連する選択されたストリームから切り離される。第１の変形が選択されたストリームに適用される。第２の変形は、適用されると不整合を生み出すかどうかが判定される。変形が不整合を生み出すと判定される場合、選択されたストリームに対する第１の変形が反転される。第２の変形が不整合を生み出さない場合、第２の変形が選択されたストリームに適用される。選択されたストリームに関連する名前は、選択されたストリームに再び連結される。選択されたストリームに関連するメタデータに関連するロックが解除される。
【００２２】
本発明の実施形態の概要を記載したが、本発明の実施形態を実装することができる例示的動作環境について、本発明の種々の態様のための一般的コンテキストを提供するために以下に記載する。最初に特に図１を参照すると、典型的なネットワークトポロジ１００は、多くの相互接続されるネットワークセグメント１０１、１０２、１０３、１０４から成り、それぞれのセグメントは、広域ネットワーク１１５に接続される。ネットワークセグメント１０１は、データストレージに参加するホスト１０６および２つのノード１０５、１０７を有する。ネットワークセグメント１０２は、データストレージに参加する２つのノード１０８、１０９を有する。ネットワークセグメント１０３は、データストレージに参加するホスト１１１および２つのノード１１０、１１２を有する。最後に、ネットワークセグメント１０４は、データストレージに参加する２つのノード１１３、１１４を有する。
【００２３】
一例として、ネットワーク上の任意のノードが、ネットワーク全体に記憶されるストリームを記述するメタデータの記憶場所としての役割を果たすことが可能であり、その各ストリーム内にエクステント参照のリストが含まれ、また、ノードの組は各エクステントを保持する。ホスト１１１およびホスト１０６上のクライアントセッションは、ノード１１２およびノード１０９上に記憶されているエクステントインスタンスを有するストリームに対するアトミックな複合変形を同時に実行したい。ノード１１０は、メタデータコントローラとして機能しているものとすることができる。この場合、ホスト１１１および１０６の両方は、ノード１１０に所望のストリームのメタデータへの変更を行わせる要求を同時に送り、競争が起こる。前提条件制約を規定することにより、ノード１１０により成功裏に処理される最初の要求を発したノードならどちらでも、ストリームに関連するメタデータを変形することができる。２番目のノードの要求は失敗し、２番目のノードは、例えば、操作を中止することまたは整合性のある時点から再スタートすることにより、前提条件が満たされないことに対処するよう要求される。これは楽観的な並行モデルにおいて望まれる挙動である。最初および２番目のノードは、複数の異なるトランザクションを伴うより複雑な動作を調整する必要がある場合、その複合変形要求の専用のロック／リースのストリームへの前提条件およびその取扱いを含む、ロックおよびリースを確立することが可能であり、失敗したノードに対して、ロックが解除されるまで待ち、その変形を実行するように要求する。
【００２４】
ここで図２を参照すると、例示的ノードが示され、コンピュータデバイス２００として一般的に指定される。コンピュータデバイス２００は、適切なコンピュータ環境の一例にすぎず、本発明の使用または機能性の範囲について任意の制限を示唆するわけではない。また、コンピュータデバイス２００は、例示されるコンポーネントの任意の１つまたは組み合わせに関する任意の依存性または要件を有するものとして解釈してはならない。
【００２５】
本発明は、携帯情報端末または他のハンドヘルドデバイス等の、コンピュータまたは他のマシンにより実行されるプログラムモジュール等のコンピュータ実行可能命令を含む、コンピュータコードまたはマシン使用可能命令の一般的コンテキストで記載してもよい。一般に、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含むプログラムモジュールは、特定のタスクを実行するコード、または特定の抽象データ型を実装するコードを参照する。本発明は、ハンドヘルドデバイス、家庭用電化製品、汎用コンピュータ、より専門的なコンピュータデバイス等を含む様々なシステム構成において実施してもよい。本発明は、また、通信ネットワークを介してリンクされるリモート処理デバイスによりタスクが実行される分散コンピュータ環境において実施してもよい。
【００２６】
図２を参照すると、コンピュータデバイス２００には、ネットワークデバイス２０２、ＣＰＵ２０３、メモリ２０４、記憶装置２０５、および入力／出力（Ｉ／Ｏ）デバイス２０６を直接または間接的に連結するバス２０１が含まれる。バス２０１は、１つまたは複数のバスであってもよい（アドレスバス、データバス、またはその組み合わせなど）。図２の種々のブロックが、明確にする目的で線によって示されるが、実際には、それほど明確に種々のコンポーネントを輪郭で描けるものではなく、例えて言うなら、線はより正確には、グレーまたはファジーである。例えば、多くのプロセッサがメモリを有する。我々は、そのようなことは従来技術の特質であることを認識し、また、図２の図は、本発明の１つまたは複数の実施形態に関連して使用することができる例示的コンピュータデバイスの、単なる図示であることを繰り返す。「ワークステーション」「サーバ」「ラップトップ」「ハンドヘルドデバイス」等のカテゴリ間に区別は無く、全てが図２の範囲内であり、「コンピュータデバイス」または「ノード」に対する参照内であることが意図される。
【００２７】
コンピュータデバイス２００には、通常、様々なコンピュータ可読媒体が含まれる。コンピュータ可読媒体は、コンピュータデバイス２００がアクセスできる任意の利用可能な媒体でよく、揮発性および不揮発性媒体、着脱可能および着脱不能媒体を含む。限定するわけではないが、一例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含んでもよい。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報を記憶するための任意の方法または技術で実装される揮発性および不揮発性媒体、着脱可能および着脱不能媒体の両方が含まれる。コンピュータ記憶媒体には、限定するわけではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）もしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、所望の情報を記憶するために使用することができ、コンピュータデバイス２００がアクセスできる任意の他の媒体が含まれる。
【００２８】
メモリ２０４には、揮発性メモリ形式のコンピュータ記憶媒体が含まれる。例示的ハードウェアデバイスには、ＲＡＭ等の固体メモリが含まれる。記憶装置２０５には、不揮発性メモリ形式のコンピュータ記憶媒体が含まれる。メモリは、着脱可能でもよいし、着脱不能でもよいし、またはその組み合わせでもよい。例示的ハードウェアデバイスには、固体メモリ、ハードドライブ、光ディスクドライブ等が含まれる。コンピュータデバイス１００には、メモリ２０４、記憶装置２０５、またはＩ／Ｏデバイス２０６等の種々のエンティティからデータを読み込む１つまたは複数のプロセッサ（ＣＰＵ）２０３が含まれる。Ｉ／Ｏデバイス２０６は、内蔵できるものもある入力コンポーネントおよび出力コンポーネントを含む他のデバイスに、コンピュータデバイス２００を論理的に連結することができる。例示的コンポーネントとしては、マイク、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、プリンタ、無線デバイス等がある。コンピュータデバイス２００には、ネットワークデバイス２０２が含まれ、他のネットワークデバイスとの通信を容易にする。ネットワークデバイス２０２は、追加的Ｉ／Ｏデバイスとしての役割を果たす。
【００２９】
当業者には当然のことながら、ノードまたはストレージノードと呼ばれるコンピュータデバイスのネットワーク内に記憶されるデータは、多くの方法でフォーマットすることができる。一例として、一般的には、音楽ファイル、映像ファイル、ワープロ文書等の独立したデータファイルは、分散型手法で記憶される。本発明の一実施形態によれば、データは、ストリームのコレクションとしてモデル化され、これは従来の階層的なネームスペースに組織化してもよい。図３は、データストレージに使用される例示的データ形式としてのストリーム３００を示し、本発明のいくつかの実施形態従って、ストリーム３００に対してアトミックな複合変形を行うことができる。ストリーム３００は、論理的に関連付けられるデータのコレクションである。本発明のいくつかの実施形態によれば、ストリーム３００は、付加専用であり、大きさが非常に大きく、ネットワークノードの個々の記憶装置の何倍もの容量を超すものもある。ストリーム３００は、ハンドルネーム、すなわち名前によりアクセスされ、ストリーム３００等の各ストリームにはリテンション・アクセスポリシーがある。本発明のいくつかの実施形態によれば、各ストリームは、また、関連するグローバル一意識別子（ＧＵＩＤ）を持ち、これはストリームの有効期限の間、変更不可である（すなわち、変更可能な名前とは異なり、ＧＵＩＤは恒久的にその関連するストリームを識別する）。ストリーム３００は、例えば、一連のバイトとして扱うことができる。ストリーム３００は、順序付けられた一連のエクステント３０１、３０２、３０３から成る。エクステント３０１、３０２、３０３は、ストリーム３００に対する割り当ての単位である。エクステント３０１、３０２、３０３は、付加専用でもあり、各エクステント３０１、３０２、３０３は、グローバル一意識別子（ＧＵＩＤ）で識別される。エクステント３０１、３０２、３０３は、ネットワーク内の多くのノード間に分散することができる。エクステント３０１、３０２、３０３は、通常、複製され、エクステント３０１、３０２、３０３のレプリカは、ネットワーク内の多くのノード間に分散することができる。エクステント３０１、３０２、３０３は、大きさに制限があり（例えば２ＧＢ）、多くの目的のためのパーティションの単位である。エクステント３０１、３０２、３０３の大きさは、ストリームを、障害復旧、負荷バラシング、複写，検索、および／またはデータマイニングのために並行して処理することができるチャンク（一まとまりのデータ群）に分割するために、制限されることがある。エクステントの大きさはまた、ストレージシステムの障害復旧モードにより制限されることがある。
【００３０】
本発明のいくつかの実施形態によれば、ストリーム３００は、各エクステント、および／または各エクステントのレプリカの記憶場所（単数または複数）への参照を記憶する。例えば、エクステント３０１のレプリカがノード３０４上に記憶され、エクステント３０２および３０３のインスタンスが両方ともノード３０５上に記憶される。エクステントは複製可能であることに留意されたい。それらのシナリオにおいて、エクステントデータには、複数の記憶場所でアクセスしてもよく、そこはレプリカの記憶場所である。エクステントのＧＵＩＤは変更されないが、そのレプリカの数と記憶場所は時と共に変更してもよい。明確かつ簡素にする目的で、本例は、エクステントが複製されないシナリオを単に示す。参照を記憶することの１つの利点は、エクステントに関連するデータのいずれもコピーまたは移動させることなく、エクステント参照をストリームに追加できることである。一例として、エクステント３０１の別のコピーをストリーム３００に追加する場合、ノード３０４上のデータを変更することもコピーすることも必要ではない。その代わり、付加的エクステント参照が、既にストリーム３００にあるエクステント参照のリストに追加される。
【００３１】
ストリームはメタデータにより表され、それ自体を、本発明の一実施形態に従って、ネットワーク全体に分散、または集中型サーバに記憶させることができる。ここで図４を参照すると、一例として、メタデータ４００はストリームについての情報を含有するデータのコレクションである。本発明のいくつかの実施形態によれば、ストリームに関連するメタデータ４００には、現在ストリーム４０１に関連する名前が含まれる。ストリームの名前は、データにアクセスするクライアントが使用するディレクトリ構造内にストリームをロケートする（位置づける）。ストリームが移動かつ変形されると、名前を変更することができる。本発明のいくつかの実施形態によれば、ホストは名前４０１でストリームにアクセスする。メタデータ４００には、また、ＧＵＩＤ４０２が含まれ、これは、グローバルに一意的であり、また、永久的かつ排他的にストリームに関連付けられる識別子である（すなわち、ストリームに対するＧＵＩＤ４０２は決して変更されず、２つのストリームが同じＧＵＩＤを共有することは無い）。ストリームに関連するメタデータ４００は、また、ストリームを編成するエクステント参照４０３のリストを含有する。各エクステント参照４０３は、特定のエクステントを識別し、クライアントまたはサーバが、そのエクステントの全てのレプリカをネットワーク内にロケートすることを可能にし、実際のデータへの物理的アクセスを提供する。
【００３２】
アトミックな複合変形は、１つまたは複数のストリームに対する複合変形を実行するステップを含む。一例として、変形には、新しいストリームを作成する工程、ストリームを消去する工程、ストリームをリネームする工程、２つまたはそれ以上のストリームを連結させる工程、既存のストリームのコピーを作成する工程、およびストリームのエクステントのサブセットを第２のストリームにコピーする工程が含まれる。当業者には当然のことながら、アトミックな複合変形を形成するために組み合わせて使用することができる多くの他の可能性のある変形がある。ここで図５に移り、アトミックな複合変形の例について考察する。命令の複合変形の組５０３は、ストリーム５０１を「Ａ」から「Ｂ」にリネームする工程と、ストリーム５０２を「Ｂ」から「Ａ」にリネームする工程から成る。当業者には当然のことながら、標準データコピー法を使用すると、そのような変形を実行するための一時的記憶領域が必要となり、障害からの復旧を複雑にするが、それは、復旧の論理では、エラーの場合に一時的記憶領域をクリンアップする必要があり、さらにストリーム５０１およびストリーム５０２の両方が、障害からの復旧後、グローバルに整合性のある状態に確実に達する必要があるためである。しかし、本発明の一実施形態によれば、アトミックな複合変形は、１つのステップであるかのように実行され、それにより、ストリーム５０１およびストリーム５０２両方は障害に直面しても整合性の状態にあり、かつ、クリンアップすべき一時的記憶領域がないという点において、復旧の論理は簡素化される。一例として、ストリーム５０１およびストリーム５０２の名前（それぞれ「Ａ」および「Ｂ」）が、最初にそのメタデータから削除され、両ストリームは名前無しとなる。これにより、ストリームがストリームのネームスペースから切り離され、複合変形を行うことができる。
【００３３】
変形の組５０３における第１の変形５０９が実行される。この場合、ストリーム５０１は「Ｂ」とリネームされるはずである。これを達成するため、ストリーム５０１の名前が「Ｂ」と設定され、ストリーム５０１は、ストリームのネームスペースに再び取り付けられる。これは、ネームスペースの衝突が無ければ成功するが、何故なら、名前「Ｂ」は、ストリーム５０２がストリームのネームスペースから取り去られた時に利用可能になるからである。変形の組５０３からの第２の変形５１２も実行される。この場合、ストリーム５０２は「Ａ」とリネームされるはずである。これを達成するため、ストリーム５０２の名前は「Ａ」と設定され、ストリーム５０２は、ストリームのネームスペースに再び取り付けられる。これは、ネームスペースの衝突が無ければ成功するが、何故なら、名前「Ａ」は、ストリーム５０１がストリームのネームスペースから取り去られた時に利用可能になるからである。
【００３４】
ここで図６を参照すると、フロー図が与えられ、本発明の一実施形態に従う、１つまたは複数の選択されたストリームに対するアトミックな複合変形を実行するための方法６００が示される。ブロック６０１にて示すように、１つまたは複数のストリームが変形のために選択される。当業者には当然のことながら、変形のためにストリームを選択できる方法は多数ある。一例として、ある方法の適用により、現在の名前またはＧＵＩＤによりそれぞれが参照されるストリームのリストが提供され、それらは変形のために選択されるストリームとして含まれるべきものである。名前および／またはＧＵＩＤの一覧を使用して、ストリームに関連するエクステント参照リストを含む、各ストリームのメタデータを見つける。本発明のいくつかの実施形態によれば、各ストリームの物理的記憶場所も、メタデータ内の情報に基づきロケートされる。
【００３５】
ブロック６０２に示すように、変形のために選択された１つまたは複数のストリームのそれぞれに関連するメタデータに対してロックが取得されると共に、複合変形が対象とするストリームのネームスペースが取得される。ブロック６０３に示すように、一旦ロックが取得されると、選択されたストリームは、消去またはリネームの対象となり、そのそれぞれの名前から切り離される。本発明のいくつかの実施形態によれば、これにより、変形が同時に起こったかのように、変形をストリームにもたらす方法で、複合変形を適用することが容易となる。一例として、ストリームを関連する名前から切り離すステップは、選択されたストリームのそれぞれの名前にストリームＧＵＩＤが連結されている元の連結を記憶する、一時的マッピングを作成することにより達成される。
【００３６】
複合変形は、アトミックな複合変形として生じるような方法で行うことができる。図６には２つの変形が示されるが、当業者には当然のことながら、１つまたは複数の選択されたストリーム上で操作して、任意の数の変形を組み合わせて単一のアトミックな複合変形を形成することができる。ブロック６０４に示すように、第１の変形が１つまたは複数のストリームに対して実行され、また、ブロック６０５に示すように、第２の変形が実行される。本発明のいくつかの実施形態によれば、これらの変形は、連続的ではなく、同時に生じるように行う。一例として、変形には、新しいストリームを作成する工程、ストリームを消去する工程、ストリームをリネームする工程、ストリームのメタデータを更新する工程、既存のストリームのコピーを作成する工程、複数のストリームを連結させる工程、およびストリームのエクステントのサブセットを第２のストリームにコピーする工程が含まれる。
【００３７】
アトミックな複合変形における全ての変更が完了すると、ブロック６０６に示すように、ストリームは、名前に再連結される。本発明のいくつかの実施形態によれば、ストリーム名は、対応するストリームに適用される変形のそれぞれにより一時的マッピングに対してなされる変更に基づき、ストリームに連結される。ストリームのＧＵＩＤを使用して、これらの変更をトラッキングし、再連結を行う。ブロック６０７に示すように、１つまたは複数の選択されたストリームのそれぞれに関連するメタデータに対するロック（単数または複数）と共に、複合変形が対象とするストリームのネームスペースが解除される。
【００３８】
ここで図７に移ると、フロー図が与えられ、本発明の一実施形態に従う、複合変形における変形が成功裏に完了できない場合の、１つまたは複数の選択されたストリームに対するアトミックな複合変形を実行するための方法７００が示される。アトミックな複合変形を編成する変形を実行する過程において、変形の１つが、一旦実行されて、成功裏に完了できないという可能性がある。一例として、複合変形における２つの変更両方が、結果として、同じ名前を有するストリームを生じさせようとする場合がある（例えば、ストリームの作成またはリネームを介して）。従って、複合変形が成功可能ならば、結果として得られる状態は、変形が実行された順番に依存し、変形が同時になされるかのように変形を実行する方法は無い。そのような場合が発見されると、アトミックな複合変形の一部として実行される限り全ての変形が反転され、ストリームメタデータは、アトミックな複合変形が開始される前の状態にリセットされる。図６の方法６００と同様に、ブロック７０１に示すように、１つまたは複数のストリームが、アトミックな複合変形を適用するために選択され、ブロック７０２に示すように、選択されたストリームのそれぞれに関連するメタデータに対してロックが取得される。
【００３９】
ブロック７０３に示すように、各選択されたストリームはその関連する名前から切り離され、ブロック７０４に示すように、図６のブロック６０３および６０４と同様、第１の変形が１つまたは複数の選択されたストリームに適用される。ブロック７０５に示すように、選択されたストリームへの第２の変形が成功裏に完了しないことが判定される。当業者には当然のことながら、そのような判定を行うことが可能な多くの方法がある。本発明のいくつかの実施形態によれば、一時的な反転可能変異の履歴を使用して、アトミックな複合変形を実行する処理における任意のステップを巻き戻すための機構を追加的に提供する。
【００４０】
アトミックな複合変形の適用において障害が発生すると判定されると、ブロック７０６に示すように、適用済みの変形が反転される。選択されたストリームに対してなされた任意の変形の反転後、ブロック７０７に示すように、ストリームはそれぞれの元の名前に再連結され、新しく作成されたストリームが消去される。一旦、変形が反転され、ストリームがその元の名前に再連結され、新しく作成されたストリームが消去されると、ブロック７０８に示すように、図６におけるブロック６０７と同様、ロックが解除される。
【００４１】
本発明のいくつかの実施形態による、１つまたは複数の選択されたストリームに対するアトミックな複合変形を実行するための方法を、図８のフロー図に示す。アトミックな複合変形を編成する変形の１つが失敗したことが検出される場合、このアトミックな複合変形は中断され、ストリームはアトミックな複合変形の開始前の状態に戻される。ブロック８０１に示すように、１つまたは複数のストリームが変形のために選択され、ブロック８０２に示すように、図６のブロック６０１および６０２と同様、選択されたストリームに関連するメタデータに対してロックが取得される。
【００４２】
ブロック８０３に示すように、消去またはリネームの対象とされる各ストリームが、その関連する名前から切り離され、ブロック８０４に示すように、図６のブロック６０３および６０４と同様、第１の変形が実行される。そして、ブロック８０５に示すように、第２の変形の適用が成功裏に完了できないかどうかが判定される。この判定は、図７のブロック７０５の判定と同様の方法で行うことができる。例えば、第２の変形の適用で、第１の変形によりまたは以前のトランザクション内で、別のストリームに既に関連付けられた名前に対して、ストリームが関連付けられる場合、第２の変形は成功裏に完了しない。
【００４３】
第２の変形が成功裏に実行可能であると判定される場合、ブロック８０６に示すように、第２の変形が実行され、ブロック８０８に示すように、ストリームはその最後に関連付けられた名前に再連結され、ブロック８０９に示すように、変形のために選択されたストリームに関連するメタデータに対するロック（単数または複数）、およびストリームのネームスペースが解除される。これらのステップのそれぞれは、図６のステップ６０５、６０６、および６０７と同様に実行してもよい。
【００４４】
しかし、第２の変形が失敗すると判定される場合、ブロック８０７に示すように、第１の変形は反転され、ブロック８０８に示すように、ストリームは、その元の関連する名前に再連結され、ブロック８０９に示すように、任意の新しく作成されたストリームが消去され、変形のために選択されたストリームに関連するメタデータに対するロック（単数または複数）、およびストリームのネームスペースが解除される。これらのステップのそれぞれは、図７のステップ７０６、７０７および７０８と同様に実行してもよい。
【００４５】
一例として、図９に、実行中の複合変形の例を示す。図９の例には、システムの状態を示す「チェックポイント＋ログ」という方式の実装が含まれる。そのようなシステムにおいて、システムの状態は、チェックポイントと呼ばれる完全な状態情報を含有するスナップショットと、最後に分かっているチェックポイントからなされる変更を含有する種々のより小さなデルタ（差分）とにより表される。ログは、これらデルタのリストを含有する。システムの現在の状態に到達するために、クライアントは、最後のスナップショット後に起こるログの全てのデルタを、最後のスナップショットに対して適用する。最新のスナップショットより前に発生したスナップショットおよびデルタは古く、もはや必要ないため、ガーベジコレクション処理により、古いスナップショットおよびデルタを定期的に削除することができる。当業者には当然のことながら、アトミックな複合変形のための他の多くのシステム用途がある。
【００４６】
例えば、フォトアルバムを記憶するシステムについて考える。この場合、そのフォトアルバムは、３つのストリームＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０１、ＡＬＢＵＭ．ＤＥＬＴＡ９０２、およびＡＬＢＵＭ．ＤＡＴＡ９０３で表されるものとする。ＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０１は、全てのフォトの完全なリストと、ある特定の時点におけるアルバム内の注釈とを記憶する。フォトの消去および追加が、ＡＬＢＵＭ．ＤＥＬＴＡ９０２に記憶される。実際のフォトは、ＡＬＢＵＭ．ＤＡＴＡ９０３に記憶される。このフォトアルバムには、何千ものクライアントが同時にアクセスし、それぞれが、新しいフォトを追加し、フォトを編集して置き換え、フォトを消去し、フォトをリネームし、フォトに注釈を付けるなどを行ってもよい。周期的に、ＡＬＢＵＭ．ＤＥＬＴＡ９０２ファイルが、非常に大きくなり、クライアントが長いロード時間を待つことになる場合がある。また、ＡＬＢＵＭ．ＤＡＴＡ９０３におけるエクステントが、任意の最近のチェックポイントまたはデルタからの参照が何も無いこともある（例えば、それらのエクステント内のフォトが既に消去されている）。
【００４７】
何千ものクライアントのそれぞれは、これらストリームのそれぞれを開けてもよい。ガーベジコレクション処理は、不必要な項目をストリームから削除することを、いずれは決定する。例えば、ＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０１が２つのエクステント、すなわち、古いチェックポイント９０４を有する第１のエクステント、および、最新のチェックポイント９０５を有する第２のエクステントから成ると仮定する。新しいチェックポイントが完全なシステムスナップショットを含有するので、古いチェックポイントは削除可能である。ＡＬＢＵＭ．ＤＥＬＴＡ９０２もまた、複数のエクステントから成る。この例では、現在のチェックポイント９０５からの関連するデルタが全て、ＡＬＢＵＬＭ．ＤＥＬＴＡの最新のエクステント９０６内にあると仮定する。ＡＬＢＵＭ．ＤＡＴＡ９０３は多くのエクステントを含有し、その中には参照のストリームを持たないエクステント、換言すれば、削除可能なエクステントがばらばらに存在する。例えば、Ｒ、Ｓ、Ｙ、ＺのＩＤを有するエクステント（９１２、９１３、９１４、９１５）のみが、ＡＬＢＵＭ．ＤＡＴＡのストリーム内に保持される。不要なエクステントをクリンアップするために、ガーベジコレクション処理は、以下の変形を実行することができる。すなわち、古いエクステントをＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０１から削除し、古いエクステントをＡＬＢＵＭ．ＤＥＬＴＡ９０２から削除し、ＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０１およびＡＬＢＵＭ．ＤＥＬＴＡ９０２内に残っているエクステントにおいて参照されないＡＬＢＵＭ．ＤＡＴＡ９０３内の任意のエクステントを削除する。ガーベジコレクション処理は、アトミックな複合変形を使用してこれらの変形を達成することが可能である。
【００４８】
ガレージコレクション処理が使用可能なアトミックな複合変形の例には、以下の変形が含まれる。変形１：ＡＬＢＵＭ．ＣＨＥＣＫＰＯＩＮＴＳ９０７と名付けられる新しいストリームを作成し、ＳＴＲＥＡＭ＿ＩＤ  ＡＢＣＤ９０１を有するストリームを消去し、ＥＸＴＥＮＴ＿ＩＤ  Ｂ９１０を新しいストリームに付加する。これにはＩＤＱＲＳＴが割り当てられる。変形２：ＡＬＢＵＭ．ＤＥＬＴＡ９０８と名付けられる新しいストリームを作成し、ＳＴＲＥＡＭ＿ＩＤ  ＡＦＤＥ９０２を有するストリームを消去し、ＥＸＴＥＮＴ＿ＩＤ  Ｌ９１１を新しいストリームに付加する。これにはＳＴＲＥＡＭ＿ＩＤ  ＶＣＤＥが割り当てられる。変形３：ＡＬＢＵＭ．ＤＡＴＡ９０９と名付けられる新しいストリームを作成し、ＳＴＲＥＡＭ＿ＩＤ  ＤＥＦＦ９０３を有するストリームを消去し、ＥＸＴＥＮＴ＿ＩＤ  Ｒ９１２、ＥＸＴＥＮＴ＿ＩＤ  Ｓ９１３、ＥＸＴＥＮＴ＿ＩＤ  Ｙ９１４およびＥＸＴＥＮＴ＿ＩＤ  Ｚ９１５を新しいストリームに付加する。これにはＩＤ  ＲＳＴＶが割り当てられる。全ての変形が自動的に実行されるため、クライアントには、アルバムの不整合が表示されることは無い。この特定の例において、これらのストリームのそれぞれを別個の複合変形のトランザクションにおいて変形することも論理的には正しい。これらのストリームは、効率性の理由で、単一の複合変形トランザクションにおいて変形される（トランザクションの数を減らすため）。しかし、当業者には当然のことながら、複数のストリームが１つのアトミックなトランザクションにおいて変形されて、これらのストリーム間の整合性が確実にされなければならないというシナリオが存在し、これらのシナリオにおいて複合変形のサポートを使用することができる。
【００４９】
示された種々のコンポーネントだけではなく、図示されないコンポーネントについても、本発明の精神および範囲から逸脱することなく、多くの異なる配置が可能である。本発明の実施形態は、限定するわけではなく、例示を目的として説明した。その範囲から逸脱しない代替の実施形態は、当業者に対して明らかとなろう。当業者は、本発明の範囲から逸脱することなく上述の改善を実現させる代替の手段を開発することができる。
【００５０】
当然のことながら、特定の特徴およびサブコンビネーションは、有用であり、他の特徴およびサブコンビネーションを参照することなく採用することができ、かつ、請求項の範囲内に企図される。種々の図面に挙げた全てのステップが、記載される特定の順番で実行される必要はない。
【図１】
0005657550.tif 000002
【図２】
0005657550.tif 000003
【図３】
0005657550.tif 000004
【図４】
0005657550.tif 000005
【図５】
0005657550.tif 000006
【図６】
0005657550.tif 000007
【図７】
0005657550.tif 000008
【図８】
0005657550.tif 000009
【図９】
0005657550.tif 000010