(57)【特許請求の範囲】
【請求項１】
１つ以上のデータ対象に対する入出力操作を制御するプロセッサ及びメモリを含む計算装置を用いて複数のデータ対象のためのスナップショットを調整する方法であって、
前記データ対象に発行される新規な入出力操作をブロック化するために第１コマンドを発行する段階と、
前記第１コマンドへの応答を受け取る段階と、
前記データ対象への新規な入出力操作を非ブロック化するために第２コマンドを発行する段階と、
前記第２コマンドへの応答を受け取る段階と、を含み、
前記第１コマンドを受け取ると、前記データ対象の各々に対して新規な入出力操作がブロック化された後に、第１コマンドが受け取られる前に発行された、前記データ対象に関連した保留中の入出力操作が完了し、次に前記データ対象のスナップショットが作成される方法。
【請求項２】
前記データ対象の各々に対して前記第２コマンドが発行された後に、前記データ対象への新規な入出力操作が非ブロック化される請求項１記載の方法。
【請求項３】
前記複数のデータ対象が少なくとも１つの記憶ノードにより管理され、前記第１コマンドが前記少なくとも１つの記憶ノードによって受け取られ、それに応答して前記少なくとも１つの記憶ノードは前記データ対象に発行される新規な入出力操作をブロック化する請求項１記載の方法。
【請求項４】
前記複数のデータ対象が少なくとも１つの記憶ノードにより管理され、前記第１コマンドへの前記応答が前記少なくとも１つの記憶ノードの各々から受け取られるまで、前記第２コマンドが発行されない請求項１記載の方法。
【請求項５】
前記第２コマンドへの応答を受け取る前記段階が、前記少なくとも１つの記憶ノードの各々から前記第２コマンドへの応答を受け取る段階を含む請求項４に記載の方法。
【請求項６】
グループ一貫性のあるスナップショットを生成するためのシステムであり、少なくとも第１データ対象及び第２データ対象を管理する少なくとも１つの記憶ノードを備えるシステムであって、前記少なくとも１つの記憶ノードは、前記第１及び第２データ対象に発行される新規な入出力操作をブロック化し、新規な入出力操作をブロック化する前に発行された、前記第１及び第２のデータ対象と関連した保留中の入出力操作を完了して、グループ一貫性のあるスナップショットを生成するためのコマンドを受け取った直接的な応答として、前記第１及び第２のデータ対象のスナップショットを作成するようにプログラムされているシステム。
【請求項７】
前記少なくとも１つの記憶ノードが、それが前記第１及び第２のデータ対象に対する新規な入出力操作をブロック化した後に、受取通知信号を生成するように更にプログラムされる請求項１１記載のシステム。
【請求項８】
単一の記憶ノードが少なくとも前記第１データ対象及び前記第２データ対象を管理する請求項１２記載のシステム。
【請求項９】
第１記憶ノードが少なくとも前記第１データ対象を管理し、第２記憶ノードが少なくとも前記第２データ対象を管理する請求項１２記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一群のデータ対象のための一貫性のあるスナップショットを生成する方法及びシステムに関する。
【背景技術】
【０００２】
[0001]記憶システムは読出し及び書込み操作によって不揮発性データを記憶及び検索するための手段を提供する。不揮発性データは、データ対象、例えば物理的又は論理的なボリューム、ファイルシステム、ファイル、又はその他の技術的に適当な編成に編成できる。多くの記憶システムは、データ対象に対してデータ・バックアップ、データ複製、障害回復、デバッギングのためのポイント・イン・タイム移動、及び連続データ保護を可能にするスナップショット機能を実行する。データ対象のスナップショットは、データ対象の不変のインスタンスであって、特定の時点におけるデータ対象の状態を反映する。
[0002]スナップショットの重要な特性は、それらがデータ対象の一貫性のある状態を常に反映するということである。換言すれば、スナップショットは、ある時点におけるデータ対象の妥当な状態を反映しなければならない。書込み操作Ｗ２の潜在的因果的先行オペレーションである同じ対象に対するすべての書込み操作が同じスナップショットにおいて反映される場合にのみ、データ対象のスナップショットは書込み操作Ｗ２を反映しなければならない。書込み操作Ｗ２が書込み操作Ｗ１の完了後に記憶クライアント・アプリケーションにより発行される場合に限り、書込み操作Ｗ１は書込み操作Ｗ２の潜在的因果的先行オペレーションである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]特定の記憶クライアント・アプリケーションは、複数のデータ対象で動作可能であり、複数のデータ対象にわたる因果的書込みシーケンスを生成可能である。このような場合には、個々のデータ対象のためのクラッシュ一貫性のあるスナップショットを生成することは、複数のデータ対象のスナップショットのセットが一貫性のあるアプリケーション状態を反映することを保証しない。これは、例えば、複数のデータ対象で動作する記憶クライアント・アプリケーションが書込み要求の因果的連鎖を生成するときに発生する場合があり、その場合には第１書込み要求は第１データ対象で実行され、それが完了した後に第２書込み要求は第２データ対象で実行され、第１データ対象及び第２データ対象のためのスナップショットは独立して実行される。この場合には、第２書込みはスナップショットにおいて反映されることがあっても、その先行オペレーション書込みである第１書込みが反映されないことがあり、その結果としてスナップショットは本願明細書において「グループクラッシュ一貫性（group crash consistency）」と称される特性を有しない。クラッシュ一貫性のあるデータ対象スナップショットのグループ（即ち、グループクラッシュ一貫性）のために、グループ内のスナップショットを有するいかなる対象にも対する書込み操作Ｗの潜在的因果的先行オペレーションであるすべての書込み操作が、同じグループ内のスナップショットにおいて反映される場合にのみ、書込み操作Ｗはグループ内のスナップショットに反映されなければならない。
【課題を解決するための手段】
【０００４】
[0004]一群のデータ対象にわたって一貫性のあるスナップショットが作成可能なように、本発明の１つ以上の実施形態は、複数のデータ対象のためのスナップショットを調整するための方法及び装置を提供する。
【０００５】
[0005]第１実施形態によれば、１つ以上のデータ対象に対する入出力操作を制御するプロセッサ及びメモリを含む計算装置を用いて複数のデータ対象のためのスナップショットを調整する方法は、データ対象に発行される新規な入出力操作をブロック化するために第１コマンドを発行する段階と、第１コマンドへの応答を受け取る段階と、前記データ対象への新規な入出力操作を非ブロック化するために第２コマンドを発行する段階と、スナップショットが各データ対象のために作成されたことを知らせる、第２コマンドへの応答を受け取る段階と、を含む。前記第１コマンドを受け取ると、データ対象の各々に対して新規な入出力操作がブロック化された後に、第１コマンドが受け取られる前に発行された、そのデータ対象に関連した保留中の入出力操作が完了し、次にそのデータ対象のスナップショットが作成される。また、データ対象の各々に対して第２コマンドが発行された後に、そのデータ対象に発行される新規な入出力操作が非ブロック化され、そして、データ対象を管理する少なくとも１つの記憶ノードが、スナップショットがデータ対象の各々に対して作成されたことを確認した時、前記少なくとも１つの記憶ノードは第２コマンドへの応答を発行する。
【０００７】
[0007]本発明の一実施形態によれば、グループ一貫性のあるスナップショットを生成するシステムは、少なくとも第１データ対象及び第２データ対象を管理する少なくとも１つの記憶ノードを含み、そこでは少なくとも１つの記憶ノードは、第１及び第２データ対象に発行される新規な入出力操作をブロック化し、新規な入出力操作をブロック化する前に発行された、第１及び第２データ対象と関連した保留中の入出力操作を完了し、グループ一貫性のあるスナップショットを生成するためにコマンドを受け取った直接的な応答として、第１及び第２データ対象のスナップショットを作成するようにプログラムされている。
【０００９】
[0009]本願明細書で用いられる用語「記憶ノード」は、当業者にとってそれに一致する意味を有する。一実施形態において、それは要素、例えば、１つ以上のデータ対象に対する入出力操作を制御するプロセッサ及びメモリを含む計算装置である。
【図面の簡単な説明】
【００１０】
【図１】[0010]本発明の１つ以上の実施形態を実施するように構成したコンピュータシステムを例示するブロック図である。
【図２】[0011]２つの異なるデータ対象に対する２つの関連書込みのシーケンスを例示する。
【図３】[0012]本発明の第１実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するためのプロトコルを例示する。
【図４】[0013]本発明の第２実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するためのプロトコルを例示する。
【図５Ａ】[0014]２つの書込み操作間の因果的依存の概念を例示する。
【図５Ｂ】[0015]本発明の第１実施形態による、グループ一貫性のあるスナップショットを作成する前の発行のブロック化を例示する。
【図５Ｃ】[0016]本発明の第２実施形態による、グループ一貫性のあるスナップショットを作成する前の完了のブロック化を例示する。
【図６Ａ】[0017]本発明の第１又は第２の実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するためにコーディネータにより実行される方法ステップのフロー図である。
【図６Ｂ】[0018]本発明の第１実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するために記憶ノードにより実行される方法ステップのフロー図である。
【図６Ｃ】[0019]本発明の第２実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するために記憶ノードにより実行される方法ステップのフロー図である。
【発明を実施するための形態】
【００１１】
[0020]図１は、本発明の１つ以上の実施形態を実施するために構成したコンピュータシステム１００を例示するブロック図である。コンピュータシステム１００は、記憶ノード１１０及び１２０、通信網１３０、並びにアプリケーションホスト１４０、１５０、及び１６０を含む。
【００１２】
[0021]各アプリケーションホスト１４０、１５０、１６０は、物理的コンピュータ、仮想コンピュータ、バーチャル・マシン、又はその他のあらゆる技術的に実現可能な仮想又は物理的計算プラットフォームであってもよい。アプリケーションホスト１４０は、通信網１３０を介して記憶ノード１１０、１２０、及びアプリケーションホスト１５０、１６０と通信するように構成したコーディネータ１４２を含む。アプリケーションホスト１５０は、通信網１３０を介して記憶ノード１１０及び記憶ノード１２０と通信するように構成した記憶クライアント・アプリケーション１５２を含む。同様に、アプリケーションホスト１６０は、通信網１３０を介して記憶ノード１１０及び記憶ノード１２０と通信するように構成した記憶クライアント・アプリケーション１６２を含む。
【００１３】
[0022]通信網１３０は、イーサネット（登録商標）ネットワーク、ファイバーチャネル、インフィニバンドネットワーク、あるいはハードウェア又はソフトウェア構造体によるいかなる通信も含むが、これらに限定されるものではない通信を提供するためのいかなる技術的に実現可能なシステムであってもよい。また、コーディネータ１４２は、独立型ホスト（例えば、ホスト１４０）、記憶クライアント・アプリケーションと同じアプリケーションホスト（例えば、ホスト１５０又はホスト１６０）、又は記憶ノード（例えば、記憶ノード１１０、記憶ノード１２０、又は別の記憶ノード）にあってもよい。
【００１４】
[0023]各記憶ノード１１０、１２０は、記憶ノードにより管理される不揮発性（永続的な）記憶装置へのアクセスを提供する。永続的な記憶装置は、ハードディスク・ドライブ、不揮発性半導体メモリ、ネットワーク接続記憶装置、記憶エリア・ネットワーク記憶装置、又は当該技術分野において公知の他のいかなる永続的な記憶媒体も含む。記憶容量はデータ対象に編成可能であり、そこでは各対象へは独立して参照及びアクセスが可能である。各記憶ノードは、個々のデータ対象スナップショットをグループ一貫性のあるスナップショットと関連させるために、メタデータを永続的に記憶できる。グループ一貫性のあるスナップショットは識別子（本願明細書では「Ｓｘ」として表示される）により確認され、それはデータ対象セットに対して固有である。一実施形態において、コーディネータは識別子を割り当てる。記憶ノード１１０はデータ対象１１２、１１４、１１６を含む。記憶ノード１２０はデータ対象１２２、１２４を含む。一般に、記憶ノードは１つ以上のデータ対象を含む。また、データ対象はいかなる任意の方法でも分類され、当該技術分野において公知の技術のいずれかを使用して管理可能である。例えば、データ対象１１２及び１１４は１つのグループを形成可能であり、又はデータ対象１１６、１２２及び１２４は１つのグループを形成可能である。データ対象のグループ関連は任意であり、特定の記憶ノードとのいかなる物理的な関連からも独立している。このように、記憶ノードは１つ以上のデータ対象を含むことができる。
【００１５】
[0024]図２は、２つの異なるデータ対象（ｄ１及びｄ２）に対する２つの関連書込み（書込み２３０及び書込み２４０）のシーケンスを示す。書込み２３０は書込み２４０の先行オペレーションである。換言すれば、書込み２３０が書込み２４０の前に来なければならないように、書込み２３０と書込み２４０との間に潜在的因果的依存がある。当業者は、この種の因果的依存が異なるホストから発行される書込み操作間にさえ存在できると認めるだろう。データ対象ｄ１及びｄ２への書込み２３０及び２４０の進行を表わす３つの可能な一貫性のある状態がある。期間２２０の間には、書込み２３０も、書込み２４０も完了しなかった。この状態のスナップショットは一貫しているであろう。期間２２２の間に書込み２３０は完了した。この状態のスナップショットも一貫してであろう。期間２２４の間に書込み２３０及び書込み２４０の両方が完了した。この状態のスナップショットも一貫していて、書込み２３０、２４０の両方を反映するであろう。しかしながら、書込み２４０を含むが、書き込む２３０を含まないスナップショットは一貫していないであろう。
【００１６】
[0025]図３は、本発明の第１実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するためのプロトコルを例示する。プロトコルは、コーディネータ、例えば図１のコーディネータ１４２と、少なくとも１つのデータ対象を有する少なくとも１つの記憶ノード、例えば記憶ノード１１０又は１２０との間で実行される。記憶ノードはデータ対象に代わって行う。プロトコルはコーディネータ・アクション３５０及び記憶ノード・アクション３５２を含む。
【００１７】
[0026]コーディネータにより実行される各アクション３１０〜３１８は、下向きの方向に示される時間の増加と共に、垂直時間ラインに沿って示される。各アクション３１０〜３１８は、データ対象のそれぞれのグループの各データ対象に関して実行される。例えば、コーディネータから記憶ノードへの各コマンドは、データ対象のグループ内のデータ対象のセットにわたってインスタンスを生成されて、適当な記憶ノードに送られる。同様に、グループ内の各データ対象に関連した各受取通知は、コーディネータが続けるために受け取られなければならない。
【００１８】
[0027]各アクション３２０〜３２６は、同じ垂直時間ラインに沿って示されて、データ対象を管理する記憶ノードによって単一のデータ対象に関して実行される。より詳しくは、Ｎ個のデータ対象が一群の参加しているデータ対象内にある場合は、アクション３２０〜３２６のＮ個のインスタンスは別々に、及び非同期で実行される。
【００１９】
[0028]プロトコルは、スナップショットを開始して、データ対象のグループ「Ｄ」のための新規なスナップショット識別子「Ｓｘ」を表わすコーディネータから始める。アクション３１０において、コーディネータは、データ対象のグループ「Ｄ」内の各データ対象「ｄｉ」のためのＰＲＥＰＡＲＥコマンド３３０を送る。一実施形態において、ＰＲＥＰＡＲＥコマンド３３０は「ＰＲＥＰＡＲＥ（ｄｉ、Ｓｘ）」の形をとる。コーディネータは、グループ「Ｄ」内の各データ対象のためのＰＲＥＰＡＲＥコマンド３３０を送る。記憶ノードに対する各データ対象のマッピングはこのアクションから独立していてもよいが、所与のＰＲＥＰＡＲＥコマンド３３０は、所与のデータ対象「ｄｉ」のためのそれぞれの記憶ノードに送られなければならない。
【００２０】
[0029]記憶ノードがＰＲＥＰＡＲＥコマンド３３０を受け取ると、記憶ノードはアクション３２０を開始し、それはデータ対象「ｄｉ」に発行される新規な入出力操作をブロック化することを含む。入出力操作をブロック化することは、入出力操作の結果がデータ対象「ｄｉ」に反映されないこと、及び呼び出し側が入出力の完了を知らされないことを保証する。このようにして、データ対象「ｄｉ」に対する書込みのあらゆる因果的連鎖は、記憶される発行段階での進行がブロック化される。新規な入出力操作をブロック化した後に、記憶ノードはＰＲＥＰＡＲＥ受取通知メッセージ３３２をコーディネータに送る。一実施形態において、ＰＲＥＰＡＲＥ受取通知メッセージ３３２は「ＰＲＥＰＡＲＥ（ｄｉ、Ｓｘ）＝ＯＫ」の形をとる。新規な入出力操作をブロック化した後に、記憶ノードもアクション３２２を行い、それによって記憶ノードはデータ対象と関連した全ての保留中の入出力操作（読取り及び書込み）が完了するのを待ち、そこでは保留中の入出力操作はＰＲＥＰＡＲＥコマンドが受け取られる前に発行された入出力操作である。データ対象に関連した全ての保留中の入出力操作（読取り及び書込み）が完了した後に、記憶ノードはアクション３２４を実行し、それによって記憶ノードはデータ対象「ｄｉ」のスナップショットを作成して、スナップショットをＰＲＥＰＡＲＥコマンド３３０内に示される識別子「Ｓｘ」と関連させる。
【００２１】
[0030]アクション３１２では、コーディネータは、グループ「Ｄ」内の各データ対象「ｄｉ」に対する好結果のＰＲＥＰＡＲＥ受取通知メッセージ３３２を待つ。コーディネータが各データ対象「ｄｉ」に対する好結果のＰＲＥＰＡＲＥ受取通知メッセージ３３２を受け取った後に、コーディネータはアクション３１４を実行し、そこにおいてコーディネータは、グループ「Ｄ」内の各データ対象のためのＣＯＭＭＩＴコマンド３３４を送る。一実施形態において、ＣＯＭＭＩＴコマンドは「ＣＯＭＭＩＴ（ｄｉ、Ｓｘ）」の形をとる。
【００２２】
[0031]アクション３２４において、「ｄｉ」のスナップショットを実行した後に、そして時間ライン３４０のどこでもコーディネータからＣＯＭＭＩＴコマンド３３４を受け取った後に、記憶ノードはアクション３２６を実行する。アクション３２６において、入出力操作は記憶対象「ｄｉ」に対して非ブロック化される。アクション３２６の後に、記憶ノードは好結果のＣＯＭＭＩＴ受取通知メッセージ３３６を送る。一実施形態において、好結果のＣＯＭＭＩＴ受取通知メッセージ３３６は「ＣＯＭＭＩＴ（ｄｉ、Ｓｘ）＝ＯＫ」の形をとる。
【００２３】
[0032]アクション３１４を実行した後に、記憶ノードはアクション３１６へ進み、そこでは記憶ノードは、各データ対象「ｄｉ」に対する好結果のＣＯＭＭＩＴ受取通知メッセージ３３６を待つ。コーディネータが各データ対象「ｄｉ」に対する好結果のＣＯＭＭＩＴ受取通知メッセージ３３６を受け取った後に、コーディネータはアクション３１８を実行し、それはグループ「Ｄ」内のデータ対象の調整されたスナップショットをうまく実行することに関連したいかなるアクションも含む。当業者は、グループスナップショットをうまく完了したことに応答してとられる特定のアクションが、本発明の精神を逸脱しない範囲で、アプリケーションによって異なることを認識するだろう。
【００２４】
[0033]図４は、本発明の第２実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するためのプロトコルを例示する。プロトコルは、コーディネータ、例えばコーディネータ１４２と少なくとも１つのデータ対象を有する少なくとも１つの記憶ノード、例えば記憶ノード１１０又は１２０との間で実行される。記憶ノードはデータ対象に代わって行う。プロトコルはコーディネータ・アクション４５０及び記憶ノード・アクション４５２を含む。
【００２５】
[0034]コーディネータによって実行される各アクション４１０〜４１８は、下方へ向かって時間が増大する垂直時間ラインに沿って示される。各アクション４１０〜４１８は、データ対象のそれぞれのグループ内の各データ対象に関して実行される。例えば、コーディネータから記憶ノードへの各コマンドは、データ対象のグループ内のデータ対象のセットにわたってインスタンスを生成されて、適当な記憶ノードに送られる。同様に、グループ内の各データ対象に関連した各受取通知は、コーディネータが続けるために受け取られなければならない。
【００２６】
[0035]各アクション４２０〜４２６は、同じ垂直時間ラインに沿って示されて、データ対象を管理する記憶ノードによって単一のデータ対象に関して実行される。より詳しくは、Ｎ個のデータ対象が一群の参加しているデータ対象内にある場合には、アクション４２０〜４２６のＮ個のインスタンスは別々に、及び非同期で実行される。
【００２７】
[0036]プロトコルは、スナップショットを開始して、データ対象のグループ「Ｄ」のための新規なスナップショット識別子「Ｓｘ」を表わすコーディネータから始める。アクション４１０において、コーディネータは、データ対象のグループ「Ｄ」内の各データ対象「ｄｉ」のためのＰＲＥＰＡＲＥコマンド４３０を送る。一実施形態において、ＰＲＥＰＡＲＥコマンド４３０は「ＰＲＥＰＡＲＥ（ｄｉ、Ｓｘ）」の形をとる。コーディネータは、グループ「Ｄ」内の各データ対象のためのＰＲＥＰＡＲＥコマンド４３０を送る。記憶ノードに対する各データ対象のマッピングはこのアクションから独立していてもよいが、所与のＰＲＥＰＡＲＥコマンド４３０は、所与のデータ対象「ｄｉ」のためのそれぞれの記憶ノードに送られなければならない。
【００２８】
[0037]記憶ノードがＰＲＥＰＡＲＥコマンド４３０を受け取ると、記憶ノードはアクション４２０を開始し、それはデータ対象「ｄｉ」に対する入出力操作（読取り及び書込みの両方）の完了をブロック化することを含む。データ対象「ｄｉ」に発行される次の入出力操作は永続的な記憶装置に書き込み可能であるが、それらの完了はブロック化される。この種の操作に含まれる書込み操作は、データ対象「ｄｉ」のスナップショットに反映されていてもいなくてもよい。この方法は、入出力の完了をブロック化することによって記憶クライアント・アプリケーションが、スナップショットに反映されなかった書込み操作に対する因果的従属であり得るいかなる新規な入出力操作の発行も防止する。これは、データ対象「ｄｉ」のスナップショットに反映されるいかなる書込み操作もグループ内のあるスナップショットに反映されるその因果的先行オペレーションの全てを有することを保証し、それはグループが一貫していることを保証にする。
【００２９】
[0038]入出力完了をブロック化した後に、記憶ノードは更にアクション４２２をとり、それによって記憶ノードはデータ対象「ｄｉ」のスナップショットを作成して、スナップショットをＰＲＥＰＡＲＥコマンド４３０内に示される識別子「Ｓｘ」と関連させる。スナップショットの正確な状態は、スナップショットプロトコル実行に並行して発行される書込み操作のいくつかがスナップショットに反映されるかどうかに関係なく、方法の正確さに関連しない。その理由は、その潜在的因果的先行オペレーションであるすべての書込み操作がグループのあるスナップショットにも反映される場合には、書込み操作はスナップショットに反映されるだけであるということにある。アクション４２２において、スナップショット「Ｓｘ」を実行した後に、記憶ノードはＰＲＥＰＡＲＥ受取通知メッセージ４３２をコーディネータに送る。一実施形態において、ＰＲＥＰＡＲＥ受取通知メッセージ４３２は「ＰＲＥＰＡＲＥ（ｄｉ、Ｓｘ）＝ＯＫ」の形をとる。
【００３０】
[0039]アクション４１２において、コーディネータは、各データ対象「ｄｉ」に対する好結果のＰＲＥＰＡＲＥ受取通知メッセージ４３２を待つ。コーディネータが各データ対象「ｄｉ」に対する好結果のＰＲＥＰＡＲＥ受取通知メッセージ４３２を受け取った後に、コーディネータはアクション４１４を実行し、そこではコーディネータはグループ「Ｄ」内の各データ対象のためのＣＯＭＭＩＴコマンド４３４を送る。一実施形態において、ＣＯＭＭＩＴコマンドは「ＣＯＭＭＩＴ（ｄｉ、Ｓｘ）」の形をとる。
【００３１】
[0040]ＣＯＭＭＩＴコマンド４３４をコーディネータから受け取った後に、記憶ノードはアクション４２６を実行する。アクション４２６において、入出力完了は記憶対象「ｄｉ」に対して非ブロック化される。アクション４２６の後に、記憶ノードは好結果のＣＯＭＭＩＴ受取通知メッセージ４３６を送る。一実施形態において、好結果のＣＯＭＭＩＴ受取通知メッセージ４３６は「ＣＯＭＭＩＴ（ｄｉ、Ｓｘ）＝ＯＫ」の形をとる。
【００３２】
[0041]アクション４１４を実行した後に、記憶ノードはアクション４１６へ進み、そこでは記憶ノードは各データ対象「ｄｉ」に対する好結果のＣＯＭＭＩＴ受取通知メッセージ４３６を待つ。コーディネータが各データ対象「ｄｉ」に対する好結果のＣＯＭＭＩＴ受取通知メッセージ４３６を受け取った後に、コーディネータはアクション４１８を実行し、それはグループ「Ｄ」内のデータ対象の調整スナップショットをうまく実行することに関連したいかなるアクションも含む。当業者は、グループスナップショットをうまく完了したことに応答してとられる特定のアクションが、本発明の精神を逸脱しない範囲で、アプリケーションによって異なることを認識するだろう。
【００３３】
[0042]図５Ａは、２つの書込み操作、書込み５２０と書込み５３０との間の因果的依存の概念を示す。このシナリオにおいて、記憶クライアント・アプリケーション５１０は、２つの異なるデータ対象５１２及び５１４に対する書込み操作を生成する。特定用途向け理由のために、因果的連鎖が書込み操作間に確立され、それによってデータ対象５１２への第１書込み５２０は、第２書込み５３０がデータ対象５１４に開始される前に完了する。第１書込み５２０はデータ対象５１２に対するデータ項目Ａのための書込み入出力操作５２２を含み、入出力完了５２６は記憶クライアント・アプリケーション５１０へ送られる。入出力完了５２６の伝送の後に、記憶クライアント・アプリケーション５１０は第２書込み５３０を生成する。第２書込み５３０はデータ対象５１４に対するデータ項目Ｂのための書込み入出力操作５３２を含み、入出力完了５３６は記憶クライアント・アプリケーション５１０へ送られる。
【００３４】
[0043]書込み５２０及び５３０が完了した後に、データ項目Ａ及びＢは、それぞれ、データ対象５１２及び５１４に永続的に記憶されると推定される。図２において前述した一貫性の原理はこのシナリオにあてはまる。より詳しくは、一貫性があるとみなすことができるデータ対象５１２及び５１４のための３つの状態がある。第１の一貫性のある状態はデータ項目ＡもＢも含まない。第２の一貫性のある状態はデータ項目Ａのみを含む。第３の一貫性のある状態はデータ項目Ａ及びＢの両方を含む。従って、データ項目Ｂがデータ対象５１４に存在するがデータ項目Ａが存在しない場合は、データ対象５１２、５１４のグループは一貫していない。このように、データ対象５１２及び５１４のグループのいかなるスナップショットも、３つの一貫性のある状態の１つに合致しなければならない。
【００３５】
[0044]図５Ｂは、本発明の第１実施形態による、グループ一貫性のあるスナップショットをする前の発行のブロック化を例示する。図５Ａと関連して、記憶クライアント・アプリケーション５１０はデータ対象５１２及び５１４とやりとりして、入出力操作５２２、５３２の発行によって書込み５２０、５３０を実行し、入出力完了５２６、５３６を待つ。しかしながら、図３のアクション３２０が完了した後に受け取られる入出力操作５２２、５３２は、データ対象５１２、５１４に到達することからブロック化されていてもよい。例えば、コマンド待ち行列５６０は入出力操作５２２をブロック化するように構成されていてもよく、コマンド待ち行列５６１は入出力操作５３２をブロック化するように構成されていてもよい。この構成では、アクション３２０が完了した後に入出力操作５２２が受け取られる場合は、書込み５２０も書込み５３０も実施されない。入出力操作５２２が保留中であるがアクション３２０が完了するときに完了しなかった場合は、アクション３２０が完了した後に入出力操作５３２が生成されるので、書込み５２０は完了できるが、書込み５３０は実施されない。アクション３２０が完了する前に書込み５２０が完了した場合は、いつ入出力操作５３２がアクション３２０と関連して生成されるかに依存して、書込み５３０を実施されたりされなかったりする。しかしながら、いずれにせよ、書込み５２０と書込み５３０との間の潜在的因果的依存に関するクラッシュ一貫性は維持される。
【００３６】
[0045]図５Ｃは、本発明の第２実施形態による、グループ一貫性のあるスナップショットをする前の完了のブロック化を例示する。図５Ａと関連して、記憶クライアント・アプリケーション５１０はデータ対象５１２及び５１４とやりとりして、入出力操作５２２、５３２の発行によって書込み５２０、５３０を実行し、入出力完了５２６、５３６を待つ。しかしながら、図４のアクション４２０が完了した後に生成される入出力操作完了５２６は、記憶クライアント・アプリケーション５１０に伝えられることからブロック化される。例えば、コマンド待ち行列５７０は入出力完了５２６をブロック化してキューに入れるように構成されていてもよい。入出力完了５２６がブロック化されると、記憶クライアント・アプリケーション５１０は、入出力操作完了５２６を受け取るまで、書込み５３０を生成しない。このように、書込み５２０と書込み５３０との間の潜在的因果的依存に関するクラッシュ一貫性は維持される。
【００３７】
[0046]図６Ａは、本発明の第１又は第２の実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するために、コーディネータにより実行される方法ステップ６００のフロー図である。方法ステップは図１のシステムに関連して記載されているけれども、当業者は、方法ステップを実行するために構成されるいかなるシステムも本発明の範囲内であると理解するだろう。
【００３８】
[0047]方法はステップ６１０で始まり、そこではコーディネータはデータ対象のグループ「Ｄ」のためのスナップショットを生成するための要求を受け取る。ステップ６１２では、コーディネータはグループ「Ｄ」内の各データ対象のためのＰＲＥＰＡＲＥコマンドを送る。各ＰＲＥＰＡＲＥコマンドは指定されたデータ対象をホストする記憶ノードに送られる。ステップ６１４において、すべてのＰＲＥＰＡＲＥコマンドが「ＯＫ」状態により応答される場合は、方法はステップ６１６へ進み、そこではコーディネータはグループ「Ｄ」内の各データ対象のためのＣＯＭＭＩＴコマンドを送る。ステップ６１８において、すべてのＣＯＭＭＩＴコマンドが「ＯＫ」状態により応答される場合は、方法はステップ６２０へ進み、そこではコーディネータはグループ「Ｄ」のためのスナップショットの好結果の完了に関連したアクションをとる。方法はステップ６３０で終了する。
【００３９】
[0048]ステップ６１４に戻ると、すべてのＰＲＥＰＡＲＥコマンドが「ＯＫ」状態により応答されない場合は、方法はステップ６１４に戻り、待ちループを効果的に実行する。当業者は、特定のタイムアウト条件がこの種類の待ちループに組み込み可能であると認めるだろう。エラー処理は、本発明の範囲を逸脱しない範囲で、このステップで遭遇する待ちループ・タイムアウト及び明確なエラー・メッセージのようなシナリオに応答するために、必要に応じて、この方法に組み込み可能である。
【００４０】
[0049]ステップ６１８に戻ると、すべてのＣＯＭＭＩＴコマンドが「ＯＫ」状態により応答されない場合は、方法はステップ６１８へ戻り、待ちループを効果的に実行する。当業者は、特定のタイムアウト条件がこの種類の待ちループに組み込み可能であると認めるだろう。エラー処理は、本発明の範囲を逸脱しない範囲で、このステップで遭遇する待ちループ・タイムアウト及び明確なエラー・メッセージのようなシナリオに応答するために、必要に応じて、この方法に組み込み可能である。
【００４１】
[0050]図６Ｂは、本発明の第１実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するために記憶ノードによって実行される方法ステップ６０１のフロー図である。方法ステップは図１のシステムに関連して記載されているけれども、当業者は、方法ステップを実行するために構成されるいかなるシステムも本発明の範囲内であると理解するだろう。
【００４２】
[0051]方法はステップ６４０で始まり、そこでは記憶ノードはコーディネータからＰＲＥＰＡＲＥ要求を受け取る。ＰＲＥＰＡＲＥ要求は、どのデータ対象が「ｄｉ」で指定されるかを示し、関連するスナップショット識別子「Ｓｘ」を特定する。ステップ６４２では、記憶ノードは、指定されたデータ対象「ｄｉ」に発行される新規な入出力操作をブロック化する。ステップ６４４では、記憶ノードは、指定されたデータ対象と識別子との組合せがこの状態を報告している埋め込み表示とともに、ＰＲＥＰＡＲＥ  ＯＫメッセージをコーディネータに送る。ステップ６４６では、記憶ノードは、完了するために指定されたデータ対象と関連した全ての保留中の入出力操作を待つ。ステップ６４８では、記憶ノードは、指定されたデータ対象のスナップショットを作成して、識別子をスナップショットと関連させる。
【００４３】
[0052]ステップ６５０において、 ＣＯＭＭＩＴコマンドが受け取られる場合は、方法はステップ６５２へ進み、そこでは記憶ノードは指定されたデータ対象に発行される新規な入出力操作を非ブロック化する。ステップ６５６では、記憶ノードは、指定されたデータ対象と識別子との組合せがこの状態を報告している埋め込み表示と共に、コーディネータのＣＯＭＭＩＴメッセージに応答するためにメッセージを送る。方法はステップ６６０で終了する。
【００４４】
[0053]ステップ６５０に戻ると、ＣＯＭＭＩＴコマンドが受け取られない場合は、方法はステップ６５０へ戻って、待ちループを本質的に形成する。当業者は、特定のタイムアウト条件がこの種類の待ちループに組み込み可能であると認めるだろう。エラー処理は、本発明の範囲を逸脱しない範囲で、このステップで遭遇する待ちループ・タイムアウト及び明確なエラー・メッセージのようなシナリオに応答するために、必要に応じて、この方法に組み込み可能である。例えば、タイムアウト期間が経過した後に、記憶ノードは中止して、ステップ６４０に戻ってもよい。また、グループ一貫性のあるスナップショット作成を中止する必要がある場合は、中止メッセージの結果として、それが作成された場合は、データ対象スナップショットは除去される。
【００４５】
[0054]図６Ｃは、本発明の第２実施形態による、一群のデータ対象のための一貫性のあるスナップショットを生成するために、記憶ノードにより実行される方法ステップ６０２のフロー図である。方法ステップは図１のシステムに関連して記載されているけれども、当業者は、方法ステップを実行するために構成されるいかなるシステムも本発明の範囲内であると理解するだろう。
【００４６】
[0055]方法はステップ６７０で始まり、そこでは記憶ノードはコーディネータからＰＲＥＰＡＲＥ要求を受け取る。ＰＲＥＰＡＲＥ要求は、どのデータ対象が「ｄｉ」で指定されるかを示し、関連するスナップショット識別子「Ｓｘ」を特定する。ステップ６７２で、記憶ノードは、指定されたデータ対象「ｄｉ」に発行されるいかなる入出力操作の完了もブロック化する。ステップ６７４では、記憶ノードは、指定されたデータ対象のスナップショットを作成して、識別子をスナップショットと関連させる。ステップ６７６では、記憶ノードは、指定されたデータ対象と識別子との組合せがこの状態を報告している埋め込み表示とともに、ＰＲＥＰＡＲＥ  ＯＫメッセージをコーディネータに送る。
【００４７】
[0056]ステップ６８０において、 ＣＯＭＭＩＴコマンドが受け取られる場合は、方法はステップ６８２へ進み、そこでは記憶ノードは指定されたデータ対象に発行されるいかなる入出力操作の完了も非ブロック化する。ステップ６８６では、記憶ノードは、指定されたデータ対象と識別子との組合せがこの状態を報告している埋め込み表示とともに、コーディネータのＣＯＭＭＩＴメッセージに応答するためにメッセージを送る。方法はステップ６９０で終了する。
【００４８】
[0057]ステップ６８０に戻ると、ＣＯＭＭＩＴコマンドが受け取られない場合は、方法はステップ６８０へ戻り、待ちループを本質的に形成する。当業者は、特定のタイムアウト条件がこの種類の待ちループに組み込み可能であると認めるだろう。エラー処理は、本発明の範囲を逸脱しない範囲で、このステップで遭遇する待ちループ・タイムアウト及び明確なエラー・メッセージのようなシナリオに応答するために、必要に応じて、この方法に組み込み可能である。例えば、タイムアウト期間が経過した後に、記憶ノードは中止して、ステップ６７０に戻ってもよい。また、グループ一貫性のあるスナップショット作成を中止することが必要な場合は、中止メッセージの結果として、それが作成された場合は、データ対象スナップショットは除去される。
【００４９】
[0058]前述のものが本発明の各種実施形態に導かれる一方、本発明のその他の実施形態はその基本的な範囲を逸脱しないで考案可能である。また、本発明の実施形態は、ハードウェア又はソフトウェアで、あるいはハードウェアとソフトウェアの組合せで実施できる。本発明の一実施形態は、コンピュータシステム用としてのプログラム製品として実施できる。プログラム製品に含まれるプログラムは、実施形態の機能（本願明細書に記載されている方法を含む）を規定し、種々なコンピュータ可読記憶媒体に含ませることができる。図示するコンピュータ可読記憶媒体は、以下を含むが、これらに限定されるものではない：（ｉ）情報が永久に記憶される非書き込み可能記憶媒体（例えば、ＣＤ―ＲＯＭドライブによって読取り可能なＣＤ―ＲＯＭディスクのようなコンピュータ内のＲＯＭデバイス、フラッシュメモリ、ＲＯＭチップ、又はあらゆるタイプのソリッドステート不揮発性半導体メモリ）、及び（ｉｉ）可変情報が記憶される書き込み可能な記憶媒体（例えば、ディスケットドライブ内のフロッピー（登録商標）ディスク又はハードディスクドライブあるいはあらゆるタイプのソリッドステート・ランダムアクセス半導体メモリ）。
【図１】
0005480244.tif 000002
【図２】
0005480244.tif 000003
【図３】
0005480244.tif 000004
【図４】
0005480244.tif 000005
【図５Ａ】
0005480244.tif 000006
【図５Ｂ】
0005480244.tif 000007
【図５Ｃ】
0005480244.tif 000008
【図６Ａ】
0005480244.tif 000009
【図６Ｂ】
0005480244.tif 000010
【図６Ｃ】
0005480244.tif 000011