(57)【特許請求の範囲】
【請求項１】
コンピュータ実施方法であって、
ターゲットデータを求める第１のアクセス要求を受信するステップであって、前記ターゲットデータは、ストレージシステムによって記憶され、前記第１のアクセス要求は、要求識別子に関連付けられている、ステップと、
前記要求識別子を、第１の記憶された識別子として、永続ストレージへ記憶するステップと、
前記ターゲットデータを求める前記第１のアクセス要求を許可するステップと、
不具合後、前記ターゲットデータを求める再開要求を受信するステップであって、前記再開要求は、前記要求識別子に関連付けられている、ステップと、
前記再開要求における前記要求識別子を、永続ストレージにおける１つまたは複数の識別子と比較することによって、前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップと、
前記ターゲットデータが、前記不具合以降、変わっていない場合、前記ターゲットデータを求める前記再開要求を許可するステップと、
前記不具合以降、前記ターゲットデータが変わっている場合、前記再開要求を拒否するステップと、
を備える方法。
【請求項２】
前記ストレージシステムは、サーバクラスタ上における共有ファイルシステムである、請求項１に記載の方法。
【請求項３】
前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップは、前記再開要求が受信される前に、前記記憶された第１の識別子を、永続ストレージから削除するステップを備える、請求項１に記載の方法。
【請求項４】
前記不具合は、接続中断、前記ストレージシステムに関連付けられたファイルシステムのディスマウント、又は前記ストレージシステムのリブートの少なくとも一つである、請求項１に記載の方法。
【請求項５】
前記ターゲットデータをロックするステップと、
前記第１のアクセス要求を許可した後、前記第１の識別子を永続ストレージから削除することなく、前記ターゲットデータにおける前記ロックを解除するステップと、
を更に備える、請求項１に記載の方法。
【請求項６】
前記ターゲットデータにおける前記ロックは、第１の期間持続する、請求項５に記載の方法。
【請求項７】
前記第１の期間はゼロである、請求項６に記載の方法。
【請求項８】
コンピュータシステムであって、
コンピュータ実行可能な命令を実行するように構成された少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによって実行されたとき、
ターゲットデータを求める第１のアクセス要求を受信するステップであって、前記ターゲットデータは、ストレージシステムによって記憶され、前記第１のアクセス要求は、要求識別子を含む、ステップと、
前記要求識別子を、第１の記憶された識別子として、永続ストレージへ記憶するステップと、
前記ターゲットデータを求める前記第１のアクセス要求を許可するステップと、
不具合後、前記ターゲットデータを求める再開要求を受信するステップであって、前記再開要求は、前記要求識別子を含み、再開要求フラグを含む、ステップと、
前記再開要求における前記要求識別子を、永続ストレージにおける１つまたは複数の識別子と比較することによって、前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップと、
前記ターゲットデータが、前記不具合以降、変わっていない場合、前記ターゲットデータを求める前記再開要求を許可するステップと、
前記ターゲットデータが、前記不具合以降、変わっている場合、前記再開要求を拒否するステップと、
を実行するように構成されたストレージシステムを提供する前記コンピュータ実行可能な命令を記憶する少なくとも１つのコンピュータ読取可能なストレージ媒体と、
を備えるコンピュータシステム。
【請求項９】
前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップは、前記再開要求が受信される前に、前記記憶された第１の識別子を、永続ストレージから削除するステップを備える、請求項８に記載のコンピュータシステム。
【請求項１０】
前記不具合は、接続中断、前記ストレージシステムに関連付けられたファイルシステムのディスマウント、又は前記ストレージシステムのリブートの少なくとも一つである、請求項８に記載のコンピュータシステム。
【請求項１１】
前記ストレージシステムは、サーバクラスタ上における共有ファイルシステムである、請求項８に記載のコンピュータシステム。
【請求項１２】
前記ターゲットデータにおける前記ロックは、第１の期間持続する、請求項８に記載のコンピュータシステム。
【請求項１３】
前記第１の期間はゼロである、請求項８に記載のコンピュータシステム。
【請求項１４】
少なくとも１つのプロセッサによって実行されたとき、方法を実行する命令を含むコンピュータ読取可能な媒体であって、前記方法は、
ターゲットデータを求める第１のアクセス要求を受信するステップであって、前記ターゲットデータは、ストレージシステムによって記憶され、前記第１のアクセス要求は、要求識別子に関連付けられている、ステップと、
前記要求識別子を、第１の記憶された識別子として、永続ストレージへ記憶するステップと、
前記ターゲットデータを求める前記第１のアクセス要求を許可するステップと、
不具合後、前記ターゲットデータを求める再開要求を受信するステップであって、前記再開要求は、前記要求識別子に関連付けられている、ステップと、
前記再開要求における前記要求識別子を、永続ストレージにおける１つまたは複数の識別子と比較することによって、前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップと、
前記ターゲットデータが、前記不具合以降、変わっていない場合、前記ターゲットデータを求める前記再開要求を許可するステップと、
前記不具合以降、前記ターゲットデータが変わっている場合、前記再開要求を拒否するステップと、
を備える、コンピュータ読取可能な媒体。
【請求項１５】
前記ストレージシステムは、サーバクラスタ上における共有ファイルシステムである、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１６】
前記ターゲットデータが、前記不具合以降、変わっているか否かを決定するステップは、前記再開要求が受信される前に、前記記憶された第１の識別子を、永続ストレージから削除するステップを備える、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１７】
前記不具合は、接続中断、前記ストレージシステムに関連付けられたファイルシステムのディスマウント、又は前記ストレージシステムのリブートの少なくとも一つである、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１８】
前記ターゲットデータをロックするステップと、
前記第１のアクセス要求を許可した後、前記第１の識別子を永続ストレージから削除することなく、前記ターゲットデータにおける前記ロックを解除するステップと、
を更に備える、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１９】
前記ターゲットデータにおける前記ロックは、第１の期間持続する、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２０】
前記第１の期間はゼロである、請求項１９に記載のコンピュータ読取可能な媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  クラスタ化された環境、たとえば、作業負荷が多数のマシンにわたって分散される環境は、情報のフェイルオーバおよび高い利用可能性をクライアントへ提供するために一般に使用される。クラスタ化された環境は、クライアントが、この環境の一部である１つまたは複数のノードを介してリソースへアクセスすることを可能にする。クラスタ化された環境は、クライアント、サーバ、または両方の役割をし得る。クライアントクラスタサーバでは、アプリケーションは、クラスタを構築するノードのうちのいずれかに存在し得る。このアプリケーションは、ストレージシステムによって記憶されているターゲットデータを求めるアクセス要求を発行し得る。アクセス要求中にエラーが生じた場合、アプリケーションは、実行にインパクトを与える遅延を経験し得る。
【０００２】
[0002]  これらおよび他の考慮に関して例が挙げられている。また、比較的具体的な問題が議論されたが、これら例は、背景技術において特定された具体的な問題を解決することに限定されるべきではないことが理解されるべきである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  本概要は、発明を実施するための形態のセクションにおいて以下にさらに記載される概念の選択を、簡単な形式で紹介するために提供される。本概要は、特許請求された主題の重要な特徴または本質的な特徴を特定することは意図されておらず、特許請求された主題の範囲を判断する際における支援として使用されることも意図されていない。
【課題を解決するための手段】
【０００４】
[0004]  本明細書では、アプリケーションに対して、不具合中、実行を休止し、不具合が解決されると、その後、実行およびストレージシステムとの通信を再開することを可能にするシステムおよび方法が開示される。いくつかの態様に従って、クライアントクラスタにおけるノードに存在するアプリケーションが、ターゲットデータへアクセスするために、サーバクラスタ内のノードへ、アクセス要求を送信する。例において、リソースを要求するアプリケーションおよび／または関連する作業負荷を識別するために要求識別子が使用される。要求識別子が、この要求とともに提供され得る。クライアントがターゲットデータにアクセスした場合、要求識別子は、永続ストレージに記憶され、要求されたターゲットデータに関連付けられる。
【０００５】
[0005]  アプリケーションが、ターゲットデータにおける動作を完了する前に、アプリケーションに対して、ストレージシステムとの通信を喪失させる不具合が生じ得る。たとえば、ストレージシステムにおけるサーバがリブートし得、関連するファイルシステムがディスマウントされ得、通信リンクが不具合となり得る等である。そのような環境では、ストレージシステムによって記憶されるターゲットデータを求めて、アプリケーションによって発行されるアクセス要求は、遅延または不具合をともに経験するであろう。しかしながら、ターゲットデータにおけるアプリケーションのロックが、不具合中に終了しても、記憶された識別子は、永続ストレージから削除されないことがあり得る。不具合中、アプリケーションは、ストレージシステムとの通信を喪失した通知を受信し得、実行を休止し得る。ストレージシステムとの通信を再確立すると、アプリケーションは、解決通知を受信し、実行を再開することを試み得る。さらに、ターゲットデータへのアクセスを回復するために、アプリケーションは、ストレージシステムへ再開要求を送信し得る。再開要求は、要求識別子を含み得るか、または、参照し得る。要求識別子は、以前にリソースにアクセスした同じアプリケーションに再開要求が属すると、この要求を管理しているストレージシステムが決定することを可能にする。そうすることによって、サーバは、ターゲットデータへアクセスするために、アプリケーションの再開要求を許可できるようになる。ターゲットデータが、再開要求前に修正されるイベントでは、ストレージシステムは、アプリケーションが、ストレージシステムとの前の通信を再開しないように、（たとえば、記憶された識別子を永続ストレージから削除することによって、）要求識別子をターゲットデータから分離する。その結果、アプリケーションは、再開要求とオリジナルの要求識別子を使用して通信を再確立できるのであれば、通信不具合以降、ターゲットデータが修正されていないことが保証される。そうではない場合、アプリケーションは、ターゲットデータが変更されたことを警告され、アプリケーションは、他のアクションを講じるか否かを判断し得る。
【０００６】
[0006]  例は、コンピュータ処理、コンピューティングシステム、または、コンピュータプログラム製品またはコンピュータ読取可能な媒体のような製造物品として実施され得る。コンピュータプログラム製品は、コンピュータシステムによって読取可能なコンピュータストレージ媒体であり得、コンピュータ処理を実行するための命令のコンピュータプログラムをエンコードし得る。
【０００７】
[0007]  非限定的かつ非網羅的な例が、以下の図面を参照して記載される。
【図面の簡単な説明】
【０００８】
【図１】[0008]本明細書に記載された例を実施するために使用され得るシステムを例示する図である。
【図２】[0009]本明細書に記載された例を実施するために使用され得るシステムを例示する図である。
【図３】[0010]ストレージシステムと通信するアプリケーションのための動作フローである。
【図４】[0011]アプリケーションと通信するストレージシステムのための動作フローである。
【図５】[0012]本発明の態様を実施することができるコンピューティングデバイスの例を例示するブロック図である。
【図６Ａ】[0013]本発明の態様を実施することができるモバイルコンピューティングデバイスの簡略ブロック図である。
【図６Ｂ】本発明の態様を実施することができるモバイルコンピューティングデバイスの簡略ブロック図である。
【図７】[0014]本発明の態様が実施され得る分散型コンピューティングシステムの簡略ブロック図である。
【発明を実施するための形態】
【０００９】
[0015]  様々な態様が、その一部を形成し特定の典型的な態様を図示する添付図面を参照して、以下により十分に記載される。しかしながら、例は、多くの異なる形式で実施され得、本明細書で述べられた例に限定されるとして解釈されるべきではない。したがって、例は、ハードウェア実施、または、全体的なソフトウェア実施、または、ソフトウェア態様とハードウェア態様とを組み合わせた実施の形式を講じ得る。したがって、以下の詳細説明は、限定的な意味で捉えられるべきでない。
【００１０】
[0016]  本開示の例は、ストレージシステムにおけるターゲットデータへ確実にアクセスし、通信不具合を取り扱うための機構をアプリケーションへ提供することに関する。例において、ストレージシステムは、ローカルデバイス、ネットワーク付属のストレージデバイス、分散型ファイルサーバ、または、コンピューティング環境における他の任意のタイプのストレージシステムであり得る。ターゲットデータは、スタンドアロンサーバに存在し得るか、または、クラスタ化された環境に存在し得る。本明細書で開示された例において、クラスタ化された環境は、１つまたは複数のノード（たとえば、クライアントおよび／またはサーバデバイス）を含み得る。
【００１１】
[0017]  例において、アプリケーションは、ターゲットデータへのアクセスを要求し得る。ターゲットデータは、（たとえば、クライアントノードにおいて）ローカルに、（たとえば、遠隔サーバ、または、クライアントクラスタ化された環境における異なるノードのような）遠隔デバイス内に、または、クライアントクラスタ化された環境とは異なるクラスタ化された環境（たとえば、多数のノードを含む環境）内に記憶され得る。たとえば、例において、クラスタ化された環境は、クライアントまたはサーバクラスタであり得る。しかしながら、当業者であれば、本明細書で開示されたシステムおよび方法は、限定される訳ではないが、仮想ネットワークのような他の任意のタイプの環境に使用され得ることを認識するであろう。
【００１２】
[0018]  データは、複数の要求側間で共有され得る。本明細書で使用されるように、要求側は、任意のアプリケーション、作業負荷、スレッド、または、ターゲットデータへのアクセスを要求する他の処理またはエンティティを備え得る。本明細書に記載された例は、要求側として動作する「アプリケーション」または「クライアント」または「処理」または「作業負荷」に関して記載され得るが、本開示はそのように限定されない。要求側が、ターゲットデータへアクセスした場合、ターゲットデータはロックされ得、これによって、ロックが解除されるまで、他の要求側がそれにアクセスすることを阻止する。ターゲットデータをロックするステップは、コンフリクトに対して保護するため、すなわち、アクセスしている要求側がその動作を実行する前に、別の要求側によるターゲットデータの修正に対して保護するために使用され得る。典型的には、ロックが解除された場合、ストレージシステムはもはやターゲットデータと要求側との間にいずれの関連性をも保持しない。
【００１３】
[0019]  いくつかの事例では、不具合が生じ、ストレージシステムとの要求側の通信に影響を及ぼす場合、要求側は、ターゲットデータにおけるロックが解除される前に、ストレージシステムへ再接続することは不可能であり得る。その結果、要求側は、ターゲットデータと分離される。たとえば、ストレージシステムが、アクセス要求において要求側によって提示、または参照された作業負荷インスタンス識別子を使用してロックを維持するのであれば、ロックが解除された場合、作業負荷インスタンス識別子は、典型的は、ターゲットデータから削除および／または分離され得る。さらに、ロックが解除されたので、新たな接続が確立されると、要求側は、ターゲットデータが、要求側によって最後にアクセスされて以降、修正されていないと仮定することができない。したがって、要求側は、実行およびストレージシステムとの通信を再開するのではなく、新たな通信セッションを確立し、ターゲットデータが未知の状態にあると仮定しなくてはならない。
【００１４】
[0020]  さらに、要求側がストレージシステムと通信する場合、要求側は、通信遅延または不具合を示すインジケーションを受信することを期待せず、代わりに、ストレージシステム（および／または、要求側をホストするクライアント上の入力／出力（IO）マネジャ）との契約が、アクセス要求が成功するまでリトライされることを保証すると仮定し得る。その結果、通信不具合は、要求側に対して、ストレージシステムからの応答を待ち続けさせるであろう。これは、要求側の振る舞いにインパクトを与え、実行遅延を引き起こし得る。たとえば、要求側は、「固まって」おり、不具合が解決されるまでいかなる処理をも実行できないことがあり得る。本明細書で開示されたシステムおよび方法は、要求側がストレージシステムとの通信の再開を試みる状況を識別するための機構のみならず、要求側に対して通信遅延または不具合を通知するための機構をも提供し、したがって、実行におけるインパクトを緩和し、要求側が、不具合後に実行および通信を再開することを可能にする。
【００１５】
[0021]  図１は、いくつかの例を実施するために使用され得るシステム１００を例示する。システム１００は、クライアント１０２およびストレージシステム１０８を含む。例示された例において、クライアント１０２は、物理的または仮想的なコンピューティングデバイスによってホストされたアプリケーション１０４および入力／出力（IO）マネジャ１０６のような要求側で構成される。ＩＯマネジャ１０６は、アプリケーション１０４とストレージシステム１０８との間の通信を中継および管理する。ストレージシステム１０８は、アプリケーション１０４によってアクセスされる情報を記憶する。図１では、ストレージシステム１０８と通信するクライアント１０２上のアプリケーション１０４のみが図示されているが、別の例では、ストレージシステム１０８からの情報にアクセスする、１つよりも多くのアプリケーションおよび１つよりも多くのクライアントが存在し得る。いくつかの例において、ストレージシステム１０８は、クライアント１０２へローカルに接続されたストレージ、ネットワークを介してアクセス可能な、クライアント１０２から離れたストレージ、または、クラスタ化されたファイルサーバ間で共有されるストレージを備え得る。
【００１６】
[0022]  １つの例に従って、ストレージシステム１０８は、アプリケーション１０４へ一貫した利用可能性を提供するために利用される。これは、通信不具合、ファイルシステムのディスマウント、リブート、または、他の任意のタイプの不具合が存在するのであれば、クライアント１０２とストレージシステム１０８との間の通信を再確立するために使用され得る情報を記憶するために、クライアント１０２およびストレージシステム１０８上の構成要素を利用することによってなされる。以下により詳細に記載されるように、記憶された情報および通信不具合通知によって、クライアント１０２は、一貫したファイルアクセスを有し、生じ得る通信不具合を取り扱うためにクライアント１０２上で動作するアプリケーションを有効にすることが可能となる。例において、クライアント１０２は、サーバメッセージブロック（SMB）２．０／３．０プロトコルを使用して、ストレージシステム１０８と通信し得る。
【００１７】
[0023]  １つの例を例示するために、アプリケーション１０４は、ストレージシステム１０８との通信セッション中、通信不具合が報告されるべきであることをＩＯマネジャ１０６へ示し得る。いくつかの例において、このインジケーションは、要求が成功することを待つための指定された期間を指定し得、その後、要求は、不具合があったとして報告されるべきである。例において、そのようなインジケーションなしで、アプリケーション１０４は、ストレージシステム１０８へのアクセス要求をリトライするためにＩＯマネジャ１０６に依存し得る。これによって、アプリケーション１０４は、遅延の性質または長さに関する情報なく、無期限に待たされるようになり得る。
【００１８】
[0024]  アプリケーション１０４は、ターゲットデータを求めるアクセス要求を、ストレージシステム１０８へ送信し得る。ターゲットデータを求めるアクセス要求は、ターゲットデータにおいて実行するための多くのファイル動作を含み得る。たとえば、これら動作は、データのローカルなキャッシュ、または、他のファイルアクセス動作を可能にするために、データをリード／ライト、属性を列挙、要求をリースするために開くことであり得る。いくつかの例において、アクセス要求は、作業負荷インスタンス識別子のような要求識別子を含み得るかまたは参照し得る。
【００１９】
[0025]  ストレージシステム１０８は、ターゲットデータを求めるアクセス要求を受信する。いくつかの例において、ストレージシステム１０８は、ターゲットデータがロックされているか否か、したがって、たとえば、クライアント１０２、または、異なるクライアント上で動作している別のアプリケーションのような異なる要求側のための異なる要求識別子に関連付けられているか否かを決定し得る。ターゲットデータがロックされているのであれば、ストレージシステム１０８は、ファイルアクセス要求を拒否し得、ロックを中断し得、または、使用されているプロトコルに依存して他のアクションを講じ得る。
【００２０】
[0026]  アクセス要求が許可されるべきであると決定されると、ストレージシステム１０８は、ターゲットデータへのアクセスを許可する応答をクライアント１０２へ送信する。要求識別子は、ストレージシステム１０８によって、永続ストレージへ記憶され得る。要求識別子がストレージシステム１０８によって記憶されている場合、それは、本明細書では、記憶された識別子として称され得る。いくつかの例において、ターゲットデータは、アクセス要求を許可する前または後にロックされ得る。いくつかの例において、ロックは、要求におけるすべての動作が完了すると、解除される（これによって、他の要求側が、ターゲットデータへのアクセスを有することが可能になる）ように構成され得る。さらに、ロックは、指定された期間後、または、指定された期間、およびこの要求におけるすべての動作が完了した時間のうちの短い方に達したとき終了し得る。さらに他の例において、ロックは、クライアントがロックを解除するまで、または、ロックを中断するイベントが生じるまで、ターゲットデータへクライアント排他的なアクセスを提供し得る。たとえば、ＳＭＢプロトコルに準拠して、ストレージシステム１０８からの排他的ＯｐＬｏｃｋが、クライアント１０２へ提供され得る。クライアント１０２は、それが、ターゲットデータへのアクセスを伴う唯一の処理であると仮定し得、クライアント１０２は、ストレージシステム１０８へ変更をコミットする前に、ターゲットデータへのすべての変更をキャッシュし得る。別のクライアント／処理が、同じターゲットデータを開くことを試みると、ストレージシステム１０８は、（中断または取消と呼ばれる）メッセージをクライアント１０２へ送信する。これは、クライアント１０２へ以前に与えられた排他的ＯｐＬｏｃｋを無効にする。クライアント１０２は、その後、すべての変更をターゲットデータへフラッシュし、これらをストレージシステム１０８へコミットする。
【００２１】
[0027]  いくつかのポイントでは、クライアント１０２は、ストレージシステム１０８との通信不具合を経験し得る。不具合は、いくつかの例において、切断、ファイルシステムのディスマウント、またはリブートの結果生じ得る。通信不具合の結果、ＩＯマネジャ１０６は、アプリケーション１０４へ、不具合の通知を提供する。例において、そのような通知は、アプリケーション１０４が「オプトイン」し、ストレージシステム１０８との通信不具合のケースにおいてアプリケーション１０４が通知されるべきというインジケーションをＩＯマネジャ１０６へ提供した場合にのみ生じる。例において、不具合の通知は、不具合の性質および／または期待される長さを記載する追加の不具合情報を含み得る。アプリケーション１０４は、待機し続けること、特定の要求を放棄すること、要求をリトライすること、アプリケーション１０４を再開すること等を含む、どのアクションを講じるべきであるかを判断するために、追加の不具合情報を使用し得る。他のオプションの中には、この通知を受信すると、アプリケーション１０４が、実行を休止し得る。他の例において、アプリケーション１０４はまた、（または代わりに、）ＩＯ動作または関連する処理を休止させ得る。例では、この不具合はまた、ストレージシステム１０８に対して、ターゲットデータにおけるアプリケーション１０４のロックを解除させ得るか、または、ロックが、不具合中に終了し得る。
【００２２】
[0028]  結局、不具合が解決され得、クライアント１０２とストレージシステム１０８との間の接続が再確立され得る。ＩＯマネジャ１０６は、不具合が解決されたか否かを決定し、解決されていると決定すると、解決通知をアプリケーション１０４へ提供する。例において、アプリケーション１０４はまた、たとえば、アクセス要求をリトライすることによって、不具合が解決されたか否かを決定し得る。解決通知を受信した後、アプリケーション１０４は、実行を再開し得る。ＩＯ動作のみが休止されるいくつかの例では、アプリケーション１０４はまた、ＩＯ動作または関連する処理を再開し得る。アプリケーション１０４は、ターゲットデータを求めて、ストレージシステム１０８との通信を再開するための再開要求を送信する。例において、再開要求は、ＩＯマネジャ１０６によって、またはＩＯマネジャ１０６を介して送信され得る。再開要求は、不具合前に使用されていた要求識別子を含む（または、参照する）アクセス要求を備え得、アクセス要求が再開要求であることをストレージシステムへ示すフラグを含み得る。ストレージシステム１０８は、この再開要求を受信する。ストレージシステム１０８は、不具合以降、ターゲットデータが変わったか否かを決定する。ターゲットデータが変わったか否かの決定はまた、再開要求を受信する前に部分的に行われ得る。
【００２３】
[0029]  ターゲットデータが変わっていないとストレージシステム１０８が決定すると、ストレージシステム１０８は、再開要求を許可する。例において、ストレージシステム１０８は、再開要求における要求識別子を、ターゲットデータを求めるクライアントの直近のアクセス要求からの記憶された識別子と比較することによって、ターゲットデータが変わったか否かを決定する。別の処理またはアプリケーションが、不具合の時間と、再開要求の時間との間に、ターゲットデータを変更したのであれば、ストレージシステム１０８は、クライアント１０２の直近のアクセス要求から、記憶された識別子を削除しているであろう。それゆえ、記憶された識別子が、再開要求に含まれている、または、そうではない場合には再開要求に関連付けられている識別子と一致するのであれば、ストレージシステムは、再開要求を許可する。再開要求を許可することは、記憶された識別子が元々記憶されていたアクセス要求以降、ターゲットデータが変わっていないことをアプリケーションに対して効率的に保証する。したがって、クライアント１０２は、前の動作を継続しながら、データ保全性を保証される。たとえば、クライアント１０２が、不具合前に完了されていないターゲットデータへのライトをキャッシュしたのであれば、そのようなライトは、完了され得る。ストレージシステム１０８が、ターゲットデータが変わっている（たとえば、再開要求における要求識別子が、永続ストレージに記憶された識別子と一致しない）と決定したのであれば、ストレージシステム１０８は、再開要求を拒否する。本明細書で使用されるように、「一致」は、正確な複製を含む必要はない。むしろ、識別子の一致は、識別子を比較するエンティティが、２つの識別子が同じ要求および／または要求側を指すという、所与の特定性レベルで十分に満足することを必要とするだけである。
【００２４】
[0030]  例において、クライアント１０２は、ストレージシステム１０８において１つまたは複数の仮想ハードドライブを利用する１つまたは複数の仮想マシンをホストし得る。ストレージシステム１０８に不具合が生じた場合、（SMB Continuous Availabilityのような）信頼性レイヤは、復元する試みを諦め得る。これは、ストレージシステム１０８においてオープンであるターゲットデータを有する仮想マシンを効率的に「フリーズ」させるＩＯ不具合を、アプリケーション１０４に対して受信させる。典型的には、仮想マシンは、不具合を取り扱うために、リブート処理を経験することを要求される。しかしながら、本開示は、仮想マシンが、休止され、不具合が解決されると、再開されることを可能にする。このように、仮想マシン内のオペレーティングシステムリブートが回避され得る。しかしながら、これを達成するために、データ保全性が維持される必要がある。
【００２５】
[0031]  仮想マシンが休止されている間、その仮想マシンのためのストレージシステム１０８におけるすべての取り扱いがクローズされ得るが、仮想マシン内のオペレーティングシステム状態が保存され得る。たとえば、仮想ハードドライブに搭載されたニューテクノロジーファイルシステム（NTFS）は、仮想マシンの再開において、仮想ハードドライブのすべてのコンテンツが同じであると仮定する。仮想マシンが休止されている間に、仮想ハードドライブのコンテンツが変わったのであれば、仮想ハードドライブは破壊され得る。本開示は、仮想マシンが休止された後に仮想マシンを再開することと同じであるか否かを効率的に決定することを可能にする。
【００２６】
[0032]  前述の記載は、単に、図１に図示された例がどのように動作し得るのかの１つの例である。以下により詳細に記載されるように、例は、異なるステップまたは動作を含み得る。これらは、任意の適切なソフトウェアまたはハードウェア構成要素またはモジュールを使用して実施され得る。
【００２７】
[0033]  図２は、いくつかの例を実施するために使用され得るシステム２００を例示する。システム２００は、ノード２０２および２０８を含む。ノード２０２は、物理的または仮想的なコンピューティングデバイスによってホストされたアプリケーション２０４およびＩＯマネジャ２０６から構成される。アプリケーション２０４は、仮想化アプリケーションであり得る。ノード２０８は、他のユーティリティ２１０から構成され、また、１つまたは複数のアプリケーションおよびＩＯマネジャ（図示せず）をも含み得る。ノード２０２および２０８は、物理的および／または仮想的なコンピューティングデバイスのクライアントクラスタの一部であり得る。ノード２０２および２０８は、たとえばＳＭＢプロトコルを使用して、ネットワーク２１２を通じてストレージシステム２１４と通信する。ストレージシステム２１４は、ノード２０２および２０８上の１つまたは複数のアプリケーションによってアクセスされる情報を記憶する。例において、本明細書で記載されるように、ノード２０２および２０８は、要求側と考慮され得る。ノード２０２および２０８は、スケーラブルファイルサーバ２１６からの情報へアクセスするために、ストレージシステム２１４との接続を確立する。図２では、クライアント２０２および２０８のみがストレージシステム２１４と通信しているとして図示されているが、他の例では、ストレージシステム２１４からの情報にアクセスする２つよりも多い（または少ない）クライアントが存在し得る。
【００２８】
[0034]  図２に図示されるように、ストレージシステム２１４は、ノード２１４Ａおよび２１４Ｂを含む。これは、スケーラブルファイルサーバ２１６のために、高い利用可能性と冗長性との両方を提供する。例において、ストレージシステム２１４は、クライアント２０２および２０８によってアクセスされる、スケーラブルファイルサーバ２１６を提供する。スケーラブルファイルサーバ２１６は、分散ファイルシステム２１８からのファイル情報を提供するように動作し得る多数のクラスタ化されたサーバを備え得る。分散ファイルシステム２１８は、物理的ストレージ２２６に記憶されたファイル情報を備える。物理的ストレージ２２６のファイルシステム２２２は、ノード２１４Ｂに搭載される。いくつかの例において、ファイルシステム２２２のフォーマットは、ニューテクノロジーファイルシステム（NTFS）またはレジリエントファイルシステム（ReFS）であり得る。ノード２１４Ｂは、分散ファイルシステム２１８のコーディネータとして動作し、たとえばリード、ライト、およびメタデータ動作のようなファイル動作を、分散ファイルシステム２１８からファイルシステム２２２へ中継する。いくつかの例において、ノード２１４Ａは、物理的ストレージ２２６において直接的にファイル動作を実行し得るが、ノード２１４Ｂは、ライト要求が、物理的ストレージ２２６へ直接的に送信されるのではなく、ノード２１４Ａによってノード２１４Ｂへ転送されることができるように、排他的なライトアクセスを有し得る。それに加えて、要求識別子フィルタ２２０は、アクセス要求を、その後、永続ストレージ２２４へ記憶される識別子に関連付ける。たとえば、永続ストレージ２２４は、ＮＴＦＳファイルシステムに付属された再開キーフィルタによって利用される再開キーフィルタデータベースを備え得る。図２には２つのノードが図示されているが、他の例では、ストレージシステム２１４は、２つよりも多くのノード、または、２つよりも少ないノードを含み得る。
【００２９】
[0035]  例に従って、ノード２１４Ａおよび２１４Ｂは、スケーラブルファイルサーバ２１６の一貫した利用可能性を提供するために利用される。これは、ネットワーク２１２の不具合、分散ファイルシステム２１８またはファイルシステム２２２のディスマウント、またはノード２１４Ａおよび２１４Ｂのうちの１つの不具合またはリブートのような不具合が存在するのであれば、ノード２０２および２０８におけるアプリケーションと、ノード２１４Ａおよび２１４Ｂにおけるスケーラブルファイルサーバ２１６との間の通信を再確立するために使用され得る情報を記憶するためにノード２０２、２０８、２１４Ａ、および２１４Ｂにおける構成要素を利用することによってなされる。さらに、アプリケーション２０４は、ストレージシステム２１４との通信に影響を与える不具合をアプリケーション２０４が通知されることをＩＯマネジャ２０６へ示し得る。以下により詳細に記載されるように、記憶された情報および通信不具合通知によって、ノード２０２および２０８は、一貫したファイルアクセスを有することを可能にし、ノード２０２および２０８上で動作しているアプリケーションは、生じ得る通信不具合を取り扱うことができるようになる。
【００３０】
[0036]  例において、たとえば２１４Ａおよび２１４Ｂのようなノードはおのおの、クライアントのためファイルデータへのアクセスを提供し、ファイルデータの一貫した利用可能性をクライアントへ提供するように構成される。１つの例を例示するために、アプリケーション２０４は、ストレージシステム２１４との通信セッション中の不具合が、アプリケーション２０４へ報告されるべきであることをＩＯマネジャ２０６へ示し得る。例において、アプリケーションは、不具合を示すインジケーションを受信するために「オプトイン」する必要があり得る。いくつかの例において、このインジケーションは、要求が成功することを待つための期間を指定し得、この後、この要求は、不具合となったとして報告されるべきである。アプリケーション２０４は、ターゲットデータを求めるアクセス要求をノード２１４Ａへ送信し得る。アクセス要求は、作業負荷インスタンス識別子のような要求識別子に関連付けられ得るか、または、含み得る。たとえば、新たな作業負荷が開始された場合、＜WorkoadPlacementId、WorkloadId、WorkloadInstanceId＞を備えるタプルが生成され得る。ターゲットデータを求めるアクセス要求は、ターゲットデータにおいて実行するための多くのファイル動作を含み得る。たとえば、これら動作は、データのローカルなキャッシュ、または、他のファイルアクセス動作を可能にするために、データをリード／ライト、属性を列挙、要求をリースするために開くことであり得る。例において、要求されたターゲットデータは、ゲスト仮想マシンを備える仮想的なハードドライブ画像を備え得る。
【００３１】
[0037]  ノード２１４Ａは、ターゲットデータを求めるアクセス要求を受信する。いくつかの例において、スケーラブルファイルサーバ２１６は、ターゲットデータがロックされる（たとえば、異なるアプリケーションまたは処理によってアクセスされる）か否かを決定し得る。ターゲットデータがロックされているのであれば、スケーラブルファイルサーバ１０８は、ファイルアクセス要求を拒否し得るか、または、使用されている特定のプロトコルによって指示された他のアクションを講じ得る。
【００３２】
[0038]  この要求が許可されるべきであると決定されると、ノード２１４Ａは、ターゲットデータへのアクセスを許可する応答をノード２０２へ送信する。要求識別子フィルタ２２０は、ノード２０２からのアクセス要求に含まれた、または、関連付けられた要求識別子を、永続ストレージ２２４へ記憶する。いくつかの例において、ターゲットデータはその後ロックされ得る。ターゲットデータにおけるロックは最終的には、（たとえば、不具合によって）アプリケーション２０４からのすべての動作が完了する前に解除され得るが、記憶された識別子は、永続ストレージ２２４によって保持され続け得る。さらに、ロックは、指定された期間後に終了し得る。
【００３３】
[0039]  あるポイントにおいて、ノード２０２は、ストレージシステム２１４との通信不具合を経験し得る。不具合は、たとえば、切断、ファイルシステムのディスマウント、またはリブートから生じ得る。通信不具合の結果、ＩＯマネジャ２０６は、不具合の通知をアプリケーション２０４へ提供する。この通知を受信すると、アプリケーション２０４は、１つまたは複数のゲスト仮想マシンの実行を休止し得る。ゲスト仮想マシンを休止することに加えて、または、その代わりに、アプリケーション２０４はまた、ＩＯ動作または関連する処理を休止し得る。
【００３４】
[0040]  結局、ノード２０２とストレージシステム２１４との間の接続が回復され得る。ＩＯマネジャ２０６は、不具合が解決されたと決定した場合、アプリケーション２０４へ解決通知を提供する。例において、アプリケーション２０４は、不具合が、他の方法によって解決されたことを決定し得る。解決通知を受信した後に、アプリケーション２０４は、１つまたは複数のゲスト仮想マシンの実行を再開することを含む実行を再開し得る。例において、アプリケーション２０４はまた、ＩＯ動作または関連する処理を再開し得る。アプリケーション２０４は、ストレージシステム２１４との通信を再開し、ターゲットデータへのアクセスを求める再開要求を送信する。アプリケーション２０４からの再開要求は、不具合前に第１のアクセス要求において使用されていたものと同じ識別子であり得る再開要求識別子を含むか、または、関連付けられる。それに加えて、再開要求は、要求が再開要求であることをストレージシステム２１４へ示すフラグを含み得る。この例において、ノード２１４Ｂは、再開要求を受信し、ノード２１４Ｂは、不具合以降、ターゲットデータが変わったか否かを決定する。
【００３５】
[0041]  ターゲットデータが変わっていないとノード２１４Ｂが決定すると、ノード２１４Ｂは、再開要求を許可し、ターゲットデータへのアクセスをアプリケーション２０４へ提供する。いくつかの例において、そして、以下にさらに説明されるように、アプリケーション２０４の以前のアクセス要求以降、ターゲットデータが変わっていないとの決定は、再開要求とともに含まれた（または、関連付けられた）識別子が、永続ストレージ２２４へ記憶され続けている（そして、永続ストレージ２２４から削除されていない）ことを決定することによってなされ得る。再開要求が許可された場合、アプリケーション２０４およびノード２１４Ｂは、不具合前に中断され、完了されていない任意の動作を完了し得る。再開要求が許可された場合、ターゲットデータは、アプリケーション２０４の代わりにノード２１４Ｂによって再びロックされ得る。結局、ターゲットデータにおけるロックは、（たとえば、追加の不具合、アプリケーション２０４による動作の完了等によって）再び解除され得るが、記憶された識別子は、永続ストレージ２２４によって保持され続け得る。さらに、ロックは、指定された期間後に終了し得る。
【００３６】
[0042]  いくつかの例において、ノード２１４Ｂは、アプリケーション２０４の直近のアクセス要求と、再開要求との間で、ターゲットデータが変わったことを決定し得る。たとえば、あるポイントでは、ノード２０２上のアプリケーション２０４が、ストレージシステム２１４との接続を再確立する前に、ノード２０８上の他のユーティリティ２１０が、ターゲットデータを変更し得る。これは、たとえば、アプリケーション２０４が、直近のアクセス要求の結果としてターゲットデータにおけるロックを有するのであれば生じ得るが、不具合が生じた後であるが、ターゲットデータにおけるアプリケーション２０４のすべての動作が完了する前に、ロックが終了するか、解除される。ロックの終了によって、他のユーティリティ２１０は、再開要求が、アプリケーション２０４から受信される前にターゲットデータを変更することが可能となり得る。ターゲットデータが変わっているのであれば、ノード２１４Ｂは、永続ストレージ２２４から要求識別子を除去し得る。例において、他のユーティリィティ２１０がターゲットデータを変更した場合（たとえ、再開要求が生じる前であっても）、ターゲットデータのために、アプリケーション２０４の直近のアクセス要求からの記憶された識別子が、永続ストレージから削除され得る。たとえば、記憶された識別子を、ストレージシステム２１４が、永続ストレージ２２４に現在記憶するためのターゲットデータへの変更を、ストレージシステム２１４が、連続的または定期的にモニタし得、変更がなされた場合、記憶されたそのような識別子を削除し得る。そのケースでは、ターゲットデータが変わったか否かの決定は、再開要求とともに含まれる（または、関連付けられた）識別子が、永続ストレージ２２４におけるターゲットデータのための記憶された識別子に一致するか否かを単にチェックすることを必要とする。例において、ターゲットデータへの修正または変更を構成しない動作は、読取、収縮、圧縮、重複排除、またはスナップショット動作を含み得、別のアプリケーションまたは他のユーティリティ２１０の代わりのそのような動作は、ターゲットデータのためのアプリケーション２０４の記憶された識別子が、永続ストレージ２２４から削除されるという結果にならないであろう。ターゲットデータが変わると、ストレージシステム２１４は、再開要求を拒否し得、アプリケーションはさらなるアクションを講じ得る。たとえば、仮想マシンが、不具合中に休止され、不具合後の再開要求が、ストレージシステム２１４によって拒否されるのであれば、仮想マシン内のオペレーティングシステムは、再び休止され得、このポイントにおいて、仮想マシンをリブートする決定がなされ得る。
【００３７】
[0043]  認識され得るように、システム２００の上記記載は、本明細書に記載された例を限定することは意図されていない。図２およびその記載は単に、いくつかの例の実施を例示することが意図されている。他の例において、異なるタイプの情報は、システム２００における異なる構成要素に記憶され得る。したがって、例は、図２に図示され記載されているものに限定されない。
【００３８】
[0044]  図３および図４は、例に従う動作フロー３００および４００を例示する。動作フロー３００および４００は、任意の適切なコンピューティング環境において実行され得る。たとえば、動作フローは、図１および図２に例示されるような環境によって実行され得る。したがって、動作フロー３００および４００の記載は、図１および図２の構成要素のうちの少なくとも１つを指し得る。しかしながら、図１および図２の実施は、動作フロー３００および４００のための非限定的な環境であると理解されるべきである。
【００３９】
[0045]  さらに、動作フロー３００および４００は、特定の順序で連続的に例示および記載されているが、他の例では、これら動作は、異なる順序で、複数回数、および／または、並行して実行され得る。さらに、いくつかの例において、１つまたは複数の動作が省略または組み合わされ得る。それに加えて、「第１の」のような序数は、別段明記されていない限り、順序またはシーケンスを意味するように意図されず、類似の要素間を区別するために使用されないことが理解されるべきである。たとえば、「第１のアクセス要求」は、最初のアクセス要求である必要はないが、「第２のアクセス要求」または「再開要求」とは異なるように理解されるべきである。
【００４０】
[0046]  動作フロー３００は、ストレージシステムと通信するアプリケーションのための動作を例示する。例において、図３に例示されたフロー３００は、たとえばノード２０２におけるアプリケーション２０４（図２）のような、クライアント上で動作するアプリケーションによって実行され得る。
【００４１】
[0047]  フロー３００は、動作３０２において開始する。ここでは、ストレージシステム不具合が、アプリケーションへ報告されるべきであるインジケーションが通信される。このインジケーションは、ＩＯマネジャ２０６（図２）のようなＩＯマネジャへなされ得る。いくつかの例において、このインジケーションは、アクセス要求が成功するのを待つための指定された期間を指定し得る。その後、アクセス要求が、不具合があったと報告されるべきである。
【００４２】
[0048]  フローは、動作３０２から動作３０４へ進み、ここでは、ターゲットデータを求める第１のアクセス要求が送信される。第１のアクセス要求は、第１の識別子に関連付けられる。いくつかの例において、第１の識別子は、第１のアクセス要求の一部として含まれ得る。ターゲットデータを求めるアクセス要求は、ターゲットデータにおいて実行するための多くのファイル動作を含み得る。たとえば、これら動作は、データのローカルなキャッシュ、または、他のファイルアクセス動作を可能にするために、データをリード／ライト、属性を列挙、要求をリースするために開くことであり得る。
【００４３】
[0049]  動作３０６では、要求されたターゲットデータへのアクセスを許可する応答が受信される。動作３０８に移動して、第１の不具合の通知が受信される。不具合は、たとえば、通信不具合、ファイルシステムのディスマウント、またはリブートの結果生じ得る。フロー３００は、その後、動作３１０へ移動し、ここでは、不具合通知を受信した後、アプリケーションを休止する決定がなされる。他の例において、動作３１０はまた、ＩＯ動作および関連する処理を休止することを含み得る。たとえば、アプリケーション２０４は、不具合通知を受信した後、ゲスト仮想マシン（図２）を休止し得る。いくつかの例において、不具合通知は、不具合が、特定の期間内で解決されることが期待されるか否かを示すインジケーションを含み得る。そのような情報は、ＩＯ動作を休止するか、リブートするか、または他のアクションを講じるか否かをアプリケーションが判断することを可能にする。
【００４４】
[0050]  動作３１２では、第１の不具合が解決されたというインジケーションが受信される。動作３１４に移動して、このアプリケーションが再開される。他の例において、動作３１４はまた、ＩＯ動作および関連する処理を再開することを含み得る。たとえば、アプリケーション２０４は、第１の不具合が解決されたことを示すインジケーションを受信した後に、ゲスト仮想マシン（図２）を再開し得る。例において、動作３１４は、不具合が解決されたことを示すインジケーションを最初に受信することなく進み得る。
【００４５】
[0051]  フロー３００はその後、動作３１６へ移動し、ここでは、ターゲットデータを求める再開要求が送信される。この再開要求は、第１の識別子に関連付けられ、この要求が再開要求であることを示す（フラグのような）インジケーションを含む。いくつかの例において、第１の識別子は、再開要求の一部として含まれ得る。動作３１６の後、フロー３００は動作３１８へ変わり、ここでは、再開要求が許可されたか否かが決定される。再開要求が許可されると、要求されたターゲットデータへのアクセスを許可する応答が受信される３２０。再開要求を許可する応答を受信するアプリケーションは、ターゲットデータを求めるアプリケーションの直近のアクセス要求と、再開要求との間で、ターゲットデータが変わっていないことの確認として、この要求の許可を考慮し得る。アプリケーションは、その後、ターゲットデータにおける、完了していないいずれかの動作を継続し得る。再開要求が拒否されると、さらなるアクションが講じられる３２２。たとえば、再開要求の拒否を受信するアプリケーションは、再開することを選択し得る。例において、アプリケーションはまた、ユーザインターフェースを介して、不具合を示すインジケーションをユーザへ提供し得、さらなるアクションを講じるオプションをユーザへ提供し得る。
【００４６】
[0052]  動作フロー４００は、ストレージシステムがアプリケーションと通信するためのステップを例示する。例において、フロー４００は、たとえばノード２１４Ａおよび／または２１４Ｂ（図２）のような１つまたは複数のファイルサーバのようなストレージシステムによって実行され得る。
【００４７】
[0053]  フロー４００は、動作４０２において開始し、ここでは、ターゲットデータを求める第１のアクセス要求が受信される。第１のアクセス要求は、要求識別子に関連付けられる。いくつかの例において、要求識別子は、第１のアクセス要求の一部として含まれ得る。ターゲットデータを求めるアクセス要求は、ターゲットデータにおいて実行するための多くのファイル動作を含み得る。たとえば、これら動作は、データのローカルなキャッシュ、または、他のファイルアクセス動作を可能にするために、データをリード／ライト、属性を列挙、要求をリースするために開くことであり得る。動作４０２の後、フロー４００は、判断４０４へ変わり、ここでは、ターゲットデータがロックされているか否かに関する判断がなされる。
【００４８】
[0054]  判断４０４では、ターゲットデータがロックされていると決定されると、フローは動作４０６へ変わり、ここでは、第１のアクセス要求が拒否される。他の例において、動作４０６は、ロックを中断するステップを備え得、このケースでは、フローは、動作４０８へ進むであろう。
【００４９】
[0055]  判断４０４において、ターゲットデータがロックされていないと決定されると、フローは動作４０８へ続き、ここでは、要求側のためのターゲットデータに、ロックがなされる。ロックは、指定された期間後に終了し得るか、または、特定のプロトコルに従って終了され得る。動作４１０へ移動し、要求されたターゲットデータへのアクセスが許可される。その後、フローは、動作４１２へ続き、ここでは、永続ストレージに要求識別子が記憶される。
【００５０】
[0056]  フローは動作４１４へ変わり、ここでは、不具合が生じる。不具合は、たとえば、接続中断、ストレージシステムに関連付けられたファイルシステムのディスマウント、または、ストレージシステムのリブート等からの結果であり得る。例において、フロー４００は、動作４１６を含み、ここでは、動作４０８において生成されたロックが解除され、要求識別子が、永続ストレージに保持される。たとえば、要求側は、不具合前に、ターゲットデータにおけるすべての動作を完了していないことがあり得るが、期間の終了によって、不具合自体によって、または、他の要因によって、ロックが解除される。フローはその後、判断４１８へ続き、ここでは、ターゲットデータが、動作４１０において最後にアクセスされて以降、修正されたか否かに関する判断がなされる。
【００５１】
[0057]  判断４１８では、ターゲットデータが修正されたと決定されると、フローは動作４２０へ変わり、ここでは、記憶された要求識別子が、永続ストレージから除去される。たとえば、動作４１６においてロックが解除された後、ターゲットデータが別の処理によって変更されたのであれば、ターゲットデータを要求側に関連付ける記憶された識別子が、永続ストレージから削除され得る。
【００５２】
[0058]  フロー４００はその後、（判断動作４１８または動作４２０のいずれかから）動作４２２へ続き、ここでは、再開要求が受信される。再開要求は、動作４０２において受信された要求識別子と同じであり得る再開要求識別子に関連付けられる。いくつかの例において、再開要求識別子は、再開要求の一部として含まれ得る。さらに、例において、再開要求を受信した後に判断４１８が生じ得る。動作４２２の後、フロー４００は判断４２４へ変わり、ここでは、要求識別子が、永続ストレージに記憶された識別子に一致するか否かの決定がなされる。
【００５３】
[0059]  判断４２４では、要求識別子が一致しないと決定されると、フローは動作４２６へ変わり、ここでは、再開要求が拒否される。
【００５４】
[0060]  判断４２４において、要求識別子が一致すると決定されると、いくつかの例では、フローは動作４２８へ続き、ここでは、要求側のためのターゲットデータにロックがなされる。ロックは、指定された期間後に終了し得るか、または、特定のプロトコルに従って終了され得る。動作４３０に移動して、要求されたターゲットデータへのアクセスが許可される。他の例において、フロー４００は、動作４３２を含み、ここでは、動作４２８において生成されたロックが、最終的に解除され、要求識別子が、永続ストレージに保持される。他の例では、動作４３０または４３２の後、動作フローが終了する。
【００５５】
[0061]  図５〜図７と、関連付けられた記載は、本発明の例が実施され得る様々な動作環境の議論を提供する。しかしながら、図５〜図７に関して例示および議論されたデバイスおよびシステムは、例および例示の目的のためであり、本明細書に記載された本発明の例を実現するために利用され得る膨大な数のコンピューティングデバイス構成の限定ではない。
【００５６】
[0062]  図５は、たとえばノード２０２、２０８、２１４Ａ、および２１４Ｂのようなコンピューティングデバイス５０２の物理的な構成要素を例示するブロック図であり、これらを用いて、本開示の例が実施され得る。以下に記載されるコンピューティングデバイス構成要素は、上述されたコンピューティングデバイスのために適切であり得る。基本的な構成では、コンピューティングデバイス５０２は、少なくとも１つの処理ユニット５０４およびシステムメモリ５０６を含み得る。コンピューティングデバイスの構成およびタイプに依存して、システムメモリ５０６は、限定されないが、揮発性ストレージ（たとえば、ランダムアクセスメモリ）、不揮発性ストレージ（たとえば、読取専用メモリ）、フラッシュメモリ、またはそのようなメモリの任意の組合せを備え得る。システムメモリ５０６は、オペレーティングシステム５０７と、アプリケーション２０４、ＩＯマネジャ２０６、および他のユーティリティ２１０のようなソフトウェアアプリケーション５２０を実行するために適切な１つまたは複数のプログラムモジュール５０８とを含み得る。オペレーティングシステム５０７は、たとえば、コンピューティングデバイス５０２の動作を制御するために適切であり得る。さらに、本発明の例は、グラフィックスライブラリ、他のオペレーティングシステム、または、他の任意のアプリケーションプログラムと連携して実現され得、任意の特定のアプリケーションまたはシステムへ限定されない。この基本的な構成は、図５において、破線５２２内のこれら構成要素によって例示される。コンピューティングデバイス５０２は、追加の特徴または機能を有し得る。たとえば、コンピューティングデバイス５０２はまた、たとえば磁気ディスク、光ディスク、またはテープのような追加のデータストレージデバイス（取外し式および／または非取外し式）を含み得る。そのような追加のストレージは、取外し式ストレージデバイス５０９および非取外し式ストレージデバイス５１０によって図５に例示される。
【００５７】
[0063]  上述されたように、多くのプログラムモジュールおよびデータファイルが、システムメモリ５０６に記憶され得る。処理ユニット５０４上で実行している間、プログラムモジュール５０８（たとえば、アプリケーション２０４、IOマネジャ２０６、および他のユーティリィティ２１０）は、限定されないが、図３および図４に例示される動作フロー３００および４００のステージのうちの１つまたは複数を含む処理を実行し得る。本発明の例に従って使用され得る他のプログラムモジュールは、電子メールおよびコンタクトアプリケーション、ワードプロセシングアプリケーション、スプレッドシートアプリケーション、データベースアプリケーション、スライドプレゼンテーションアプリケーション、図面またはコンピュータ支援アプリケーションプログラム等を含み得る。
【００５８】
[0064]  さらに、本発明の例は、ディスクリート電子素子を備える電気回路、論理ゲートを含むパッケージ化されたまたは集積された電子チップ、マイクロプロセッサを利用する回路において実施され得るか、または、電子素子またはマイクロプロセッサを含む単一のチップにおいて実施され得る。たとえば、本発明の例は、システムオンチップ（SOC）によって実施され得、ここでは、図５に例示される構成要素のおのおのまたは多くは、単一の集積回路に統合され得る。そのようなＳＯＣデバイスは、１つまたは複数の処理ユニット、グラフィックスユニット、通信ユニット、システム仮想化ユニット、および、そのすべてが単一の集積回路としてチップ基板へ統合された（または「焼き付けられた」）様々なアプリケーション機能を含み得る。ＳＯＣを介して動作している場合、本明細書に記載された機能は、単一の集積回路（チップ）上のコンピューティングデバイス５０２の他の構成要素と統合されたアプリケーション特有のロジックを介して動作され得る。本開示の例はまた、限定される訳ではないが、機械的、光学的、流体的、および量子的な技術を含む、たとえば、ＡＮＤ、ＯＲ、およびＮＯＴのような論理演算を実行することが可能な他の技術を使用して実施され得る。それに加えて、本発明の例は、汎用コンピュータ内で、または、他の任意の回路またはシステム内において実施され得る。
【００５９】
[0065]  コンピューティングデバイス５０２はまた、キーボード、マウス、ペン、音入力デバイス、タッチ入力デバイス等のような１つまたは複数の入力デバイス５１２を有し得る。ディスプレイ、スピーカ、プリンタ等のような出力デバイス５１４もまた含まれ得る。前述されたデバイスは例であり、他が使用され得る。コンピューティングデバイス５０４は、他のコンピューティングデバイス５１８との通信を可能にする１つまたは複数の通信接続５１６を含み得る。適切な通信接続５１６の例は、限定されないが、ＲＦ送信機、受信機、および／またはトランシーバ回路、ユニバーサルシリアルバス（USB）、パラレルおよび／またはシリアルポートを含む。
【００６０】
[0066]  本明細書で使用されるようなコンピュータ読取可能な媒体という用語は、コンピュータストレージ媒体を含み得る。コンピュータストレージ媒体は、コンピュータ読取可能な命令、データ構造、またはプログラムモジュールのような情報の記憶のための任意の方法または技術において実施される揮発性および不揮発性、取外し式および非取外し式媒体を含み得る。システムメモリ５０６、取外し式ストレージデバイス５０９、および非取外し式ストレージデバイス５１０はすべて、コンピュータストレージ媒体の例（すなわち、メモリストレージ）である。コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、電気的に消去可能な読取専用メモリ（EEPROM）、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（DVD）もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、情報を記憶するために使用され得、コンピューティングデバイス５０２によってアクセス可能であり得る他の任意の製造物品を含み得る。そのような任意のコンピュータストレージ媒体は、コンピューティングデバイス５０２の一部であり得る。コンピュータストレージ媒体は、搬送波、または、他の伝搬または変調されたデータ信号を含まない。
【００６１】
[0067]  通信媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュール、または、搬送波または他の伝送機構のような変調されたデータ信号における他のデータによって具体化され得、任意の情報配信媒体を含む。「変調されたデータ信号」という用語は、１つまたは複数の特性が信号内で情報を符号化するように設定または変更された信号を記載し得る。例として、限定することなく、通信媒体は、ワイヤネットワークまたはダイレクトワイヤ接続のようなワイヤ媒体と、音響、無線周波数（RF）、赤外線、および他のワイヤレス媒体のようなワイヤレス媒体を含み得る。
【００６２】
[0068]  図６Ａおよび図６Ｂは、たとえば、モバイル電話、スマートフォン、タブレットパーソナルコンピュータ、ラップトップコンピュータ等のようなモバイルコンピューティングデバイス６００を例示し、これらを用いて、本発明の例が実施され得る。たとえば、モバイルコンピューティングデバイス６００は、クライアントノード２０２および２０８を実施するために使用され得る。図６Ａを参照して、例を実施するためのモバイルコンピューティングデバイス６００の１つの例が、例示される。基本的な構成において、モバイルコンピューティングデバイス６００は、入力要素と出力要素との両方を有するハンドヘルドコンピュータである。モバイルコンピューティングデバイス６００は、典型的に、モバイルコンピューティングデバイス６００へユーザが情報を入力することを可能にするディスプレイ６０５および１つまたは複数の入力ボタン６１０を含む。モバイルコンピューティングデバイス６００のディスプレイ６０５はまた、入力デバイス（たとえば、タッチスクリーンディスプレイ）として機能し得る。もし含まれているのであれば、オプションのサイド入力要素６１５が、さらなるユーザ入力を可能にする。サイド入力要素６１５は、回転式スイッチ、ボタン、他の任意のタイプのマニュアル入力要素であり得る。代替例において、モバイルコンピューティングデバイス６００は、多かれ少なかれ入力要素を組み込み得る。たとえば、ディスプレイ６０５は、いくつかの例において、タッチスクリーンではないことがあり得る。さらに別の代替例において、モバイルコンピューティングデバイス６００は、セルラ電話のようなポータブル電話システムである。モバイルコンピューティングデバイス６００はまた、オプションのキーパッド６３５を含み得る。オプションのキーパッド６３５は、物理的なキーバッド、または、タッチスクリーンディスプレイ上において生成される「ソフト」キーパッドであり得る。様々な例において、出力要素は、グラフィカルユーザインターフェース（GUI）を示すためのディスプレイ６０５、視覚的なインジケータ６２０（たとえば、発光ダイオード）、および／またはオーディオトランスデューサ６２５（たとえば、スピーカ）を含む。いくつかの例において、モバイルコンピューティングデバイス６００は、ユーザに触覚的なフィードバックを提供するための振動トランスデューサを組み込む。さらに別の例において、モバイルコンピューティングデバイス６００は、外部デバイスへ信号を送信するため、または、外部デバイスから信号を受信するために、オーディオ入力（たとえば、マイクロホンジャック）、オーディオ出力（たとえば、ヘッドホンジャック）、およびビデオ出力（たとえば、HDMIポート）のような入力および／または出力ポートを組み込む。
【００６３】
[0069]  図６Ｂは、モバイルコンピューティングデバイスの１つの例のアーキテクチャを例示するブロック図である。すなわち、モバイルコンピューティングデバイス６００は、いくつかの例を実施するためにシステム（すなわち、アーキテクチャ）６０２を組み込み得る。１つの例において、システム６０２は、１つまたは複数のアプリケーション（たとえば、ブラウザ、電子メール、カレンダ、コンタクトマネジャ、メッセージングクライアント、ゲーム、およびメディアクライアント／プレーヤ）を実行することが可能な「スマートフォン」として実施される。いくつかの例において、システム６０２は、統合携帯情報端末（PDA）およびワイヤレス電話のようなコンピューティングデバイスとして統合される。
【００６４】
[0070]  １つまたは複数のアプリケーションプログラム６６６が、メモリ６６２にロードされ得、オペレーティングシステム６６４において、または、オペレーティングシステム６６４に関連して実行され得る。アプリケーションプログラムの例は、電話ダイヤラプログラム、電子メールプログラム、個人情報管理（PIM）プログラム、ワードプロセシングプログラム、スプレッドシートプログラム、インターネットブラウザプログラム、メッセージングプログラム等を含む。システム６０２はまた、メモリ６６２内の不揮発性ストレージエリア６６８を含む。不揮発性ストレージエリア６６８は、システム６０２が電源を落とされたのであれば、喪失されるべきではない持続的な情報を記憶するために使用され得る。アプリケーションプログラム６６６は、電子メールアプリケーション等によって使用される電子メールまたは他のメッセージのような情報を使用および不揮発性ストレージエリア６６８に記憶し得る。また同期アプリケーション（図示せず）がシステム６０２に存在し、ホストコンピュータに記憶された対応する情報と同期された不揮発性ストレージエリア６６８に記憶された情報を維持するために、ホストコンピュータに存在する対応する同期アプリケーションとインタラクションするようにプログラムされる。認識されるように、他のアプリケーションがメモリ６６２にロードされ得、本明細書に記載されたアプリケーション２０４、ＩＯマネジャ２０６、他のユーティリティ２１０を含むモバイルコンピューティングデバイス６００上で実行され得る。
【００６５】
[0071]  システム６０２は、１つまたは複数のバッテリとして実施され得る電源６７０を有する。電源６７０はさらに、バッテリを補足または充電するＡＣアダプタまたは電源ドッキングクレードルのような外部電源を含み得る。
【００６６】
[0072]  システム６０２は、システム６０２と、１つまたは複数の周辺デバイスとの間の接続を容易にする機能を実行する周辺デバイスポート６７８を含み得る。周辺デバイスポート６７２への送信および周辺デバイスポート６７２からの送信は、オペレーティングシステム６６４の制御下で進められる。言い換えれば、周辺デバイスポート６７８によって受信された通信は、オペレーティングシステム６６４を介してアプリケーションプログラム６６６へ、および、その逆へ発信され得る。
【００６７】
[0073]  システム６０２はまた、無線周波数通信を送信および受信する機能を実行する無線６７２を含み得る。無線６７２は、通信キャリアまたはサービスプロバイダを介してシステム６０２と「外界」との間のワイヤレス接続を容易にする。無線６７２への送信および無線６７２からの送信は、オペレーティングシステム６６４の制御下で進められる。言い換えれば、無線６７２によって受信された通信は、オペレーティングシステム６６４を介してアプリケーションプログラム６６６へ、および、その逆へ発信され得る。
【００６８】
[0074]  視覚的なインジケータ６２０が、視覚的な通知を提供するために使用され得、および／または、オーディオインターフェース６７４が、オーディオトランスデューサ６２５を介して可聴な通知を生成するために使用され得る。例示された例において、視覚的なインジケータ６２０は、発光ダイオード（LED）であり、オーディオトランスデューサ６２５は、スピーカである。これらのデバイスは、活性化された場合に、プロセッサ６６０および他の構成要素が、電源を節約するためにシャットダウンされても、通知機構によって指示された持続期間、とどまるように、電源６７０へ直接的に結合され得る。ＬＥＤは、ユーザがデバイスの電源オン状態を示すためのアクションを講じるまで、無期限にとどまるようにプログラムされ得る。オーディオインターフェース６７４は、可聴信号をユーザへ提供し、可聴信号をユーザから受信するために使用される。たとえば、オーディオインターフェース６７４はオーディオトランスデューサ６２５へ結合されていることに加えて、通話を容易にするためのように、可聴入力を受信するためにマイクロホンへも結合され得る。本発明の例に従って、マイクロホンはまた、以下に記載されるように、通知の制御を容易にするために、オーディオセンサとしても機能し得る。システム６０２はさらに、静止画像、ビデオストリーム等を記録するために、車載カメラ６３０の動作を可能にするビデオインターフェース６７６を含み得る。
【００６９】
[0075]  システム６０２を実施するモバイルコンピューティングデバイス６００は、追加の特徴または機能を有し得る。たとえば、モバイルコンピューティングデバイス６００はまた、磁気ディスク、光ディスク、またはテープのような追加のデータストレージデバイス（取外し式および／または非取外し式）をも含み得る。そのような追加のストレージは、不揮発性ストレージエリア６６８によって図６Ｂに例示される。
【００７０】
[0076]  モバイルコンピューティングデバイス６００によって生成またはキャプチャされ、システム６０２を介して記憶されたデータ／情報は、上述されたようにモバイルコンピューティングデバイス６００上にローカルに記憶され得るか、または、データは、無線６７２を介して、または、モバイルコンピューティングデバイス６００と、たとえば、インターネットのような分散型コンピューティングネットワークにおけるサーバコンピュータのようなモバイルコンピューティングデバイス６００に関連付けられた分離されたコンピューティングデバイスとの間のワイヤ接続を介して、デバイスによってアクセスされ得る任意の数の記憶媒体上に記憶され得る。認識されるように、そのようなデータ／情報は、無線６７２を介して、または、分散型コンピューティングネットワークを介して、モバイルコンピューティングデバイス６００を介してアクセスされ得る。同様に、そのようなデータ／情報は、電子メールおよび協調データ／情報共有システムを含む周知のデータ／情報転送およびストレージ手段に従う記憶および使用のために、コンピューティングデバイス間で容易に転送され得る。
【００７１】
[0077]  図７は、上述されたように、ストレージシステム上のターゲットデータへ確実にアクセスし、１つまたは複数のクライアントデバイスへの通信不具合を取り扱うアプリケーションを提供するためのシステムのアーキテクチャの１つの例を例示する。アプリケーション２０４、ＩＯマネジャ２０６、他のユーティリティ２１０、およびストレージシステム２１４に関連付けられてアクセスされ、インタラクションされ、または編集されたターゲットデータは、異なる通信チャネルまたは他のストレージタイプにおいて記憶され得る。たとえば、様々なドキュメントは、ディレクトリサービス７２２、ウェブポータル７２４、メールボックスサービス７２６、インスタントメッセージングストア７２８、またはソーシャルネットワーキングサイト７３０を使用して記憶され得る。アプリケーション２０４、ＩＯマネジャ２０６、他のユーティリティ２１０、およびストレージシステム２１４は、本明細書に記載されるように、データ利用を可能にするためのこれらタイプのシステム等のうちのいずれかを使用し得る。サーバ７２０は、ネットワーク７１５を介した一般的なコンピューティングデバイス５０２およびモバイルデバイス６００上で動作しているクライアントノード２０２および２０８による使用のために、ストレージシステム２１４を提供し得る。例として、ネットワーク７１５は、インターネット、または、ローカルまたは広域ネットワークの他の任意のタイプを備え得、クライアントノード２０２および２０８は、パーソナルコンピュータ、タブレットコンピューティングデバイスにおいて、および／または、モバイルコンピューティングデバイス６００（たとえば、スマートフォン）によって具体化されるコンピューティングデバイス５０２として実施され得る。クライアントコンピューティングデバイス５０２または６００のこれら実施形態のいずれかは、ストア７１６からコンテンツを取得し得る。
【００７２】
[0078]  他の例の中でも、本開示は、セッション中に不具合がアプリケーションへ報告されるべきことをアプリケーションによって示すステップと、ターゲットデータを求める第１のアクセス要求をストレージシステムへ送信するステップであって、第１のアクセス要求は、第１の識別子に関連付けられた、送信するステップと、ターゲットデータへのアクセスを許可する第１のアクセス応答を受信するステップと、第１の不具合の通知を受信するステップと、第１の不具合の通知に基づいて、アプリケーションを休止するステップと、アプリケーションを再開するステップと、ターゲットデータを求める再開要求をストレージシステムへ送信するステップであって、再開要求は、第１の識別子に関連付けられた、送信するステップと、ターゲットデータへのアクセスを許可する再開応答を受信するステップとのためのシステムおよび方法を提示する。例において、不具合は、ストレージシステムからの切断、ストレージシステムに関連付けられたファイルシステムのディスマウント、または、ストレージシステムのリブートのうちの少なくとも１つを備える。さらなる例において、第１の識別子は、第１のアクセス要求に含まれる。さらなる例において、示すステップは、指定された期間内に完了していないのであれば、セッション中に不具合によって遅延された入力／出力（IO）要求がアプリケーションへ報告されるべきであるということを示すインジケーションをＩＯマネジャへ提供するステップを備える。それに加えて、第１の不具合の通知を受信するステップは、第２のアクセス要求が完了していないという通知を受信するステップを含み得る。さらに、アプリケーションを休止するステップは、ＩＯ動作および関連する処理を休止するステップを含み得る。さらに、システムおよび方法は、不具合前に完了していないキャッシュライト要求を完了させるステップを含み得る。
【００７３】
[0079]  本明細書におけるさらなる記載は、ターゲットデータを求める第１のアクセス要求を受信するステップであって、ターゲットデータは、ストレージシステムによって記憶され、第１のアクセス要求は、要求識別子に関連付けられた、受信するステップと、要求識別子を、第１の記憶された識別子として、永続ストレージへ記憶するステップと、ターゲットデータを求める第１のアクセス要求を許可するステップと、不具合後、ターゲットデータを求める再開要求を受信するステップであって、再開要求は、要求識別子に関連付けられた、受信するステップと、再開要求における要求識別子を、永続ストレージにおける１つまたは複数の識別子と比較することによって、ターゲットデータが、不具合以降、変更されているか否かを決定するステップと、ターゲットデータが、不具合以降、変更されていない場合、ターゲットデータを求める再開要求を許可するステップと、ターゲットデータが、不具合以降、変更されている場合、再開要求を拒否するステップとのためのシステムおよび方法を開示する。例において、ストレージシステムは、サーバクラスタ上における共有ファイルシステムであり、ターゲットデータが、不具合以降、変更されたか否かを決定するステップは、再開要求が受信される前に、永続ストレージから、記憶されている第１の識別子を削除するステップを備える。さらに、例において、不具合は、接続中断、ストレージシステムに関連付けられたファイルシステムのディスマウント、または、ストレージシステムのリブートのうちの少なくとも１つを備える。追加の例において、システムおよび方法は、ターゲットデータをロックするステップと、第１のアクセス要求を許可するステップの後、永続ストレージから第１の識別子を削除することなく、ターゲットデータにおけるロックを解除するステップと、を備える。それに加えて、例において、ターゲットデータにおけるロックは、第１の期間持続し、第１の期間はゼロであり得る。
【００７４】
[0080]  本開示はまた、コンピュータ実行可能な命令を実行するように構成された少なくとも１つのプロセッサを含むシステムを含み、少なくとも１つのコンピュータ読取可能な記憶媒体は、少なくとも１つのプロセッサによって実行されたとき、ターゲットデータを求める第１のアクセス要求を受信するステップであって、ターゲットデータは、ストレージシステムによって記憶され、第１のアクセス要求は、要求識別子を含む、受信するステップと、要求識別子を、第１の記憶された識別子として、永続ストレージへ記憶するステップと、ターゲットデータを求める第１のアクセス要求を許可するステップと、不具合後、ターゲットデータを求める再開要求を受信するステップであって、再開要求は、要求識別子を含み、再開要求フラグを含む、受信するステップと、再開要求における要求識別子を、永続ストレージにおける１つまたは複数の識別子と比較することによって、ターゲットデータが、不具合以降、変更されているか否かを決定するステップと、ターゲットデータが、不具合以降、変更されていない場合、ターゲットデータを求める再開要求を許可するステップと、ターゲットデータが、不具合以降、変更されている場合、再開要求を拒否するステップと、を実行するように構成されたストレージシステムを提供するコンピュータ実行可能な命令を記憶する。例において、ターゲットデータが、不具合以降、変更されているか否かを決定するステップは、再開要求が受信される前に、永続ストレージから、記憶されている第１の識別子を削除するステップを備える。それに加えて、不具合は、接続中断、ストレージシステムに関連付けられたファイルシステムのディスマウント、または、ストレージシステムのリブートのうちの少なくとも１つを備え得る。さらに、ストレージシステムは、サーバクラスタ上における共有ファイルシステムであり得る。それに加えて、ターゲットデータにおけるロックは、第１の期間持続し、第１の期間はゼロであり得る。
【００７５】
[0081]  本明細書を通じて「１つの例」または「例」に対する参照がなされる。これは、記載された特定の特徴、構造、または特性が、少なくとも１つの例に含まれることを意味する。したがって、そのようなフレーズの用法は、単に１つよりも多くの例を指し得る。さらに、記載された特徴、構造、または特性は、１つまたは複数の例において適切な任意の方式で組み合わされ得る。
【００７６】
[0082]  しかしながら、当業者であれば、これら例は、特定の詳細のうちの１つまたは複数なしで、または他の方法、リソース、材料等を用いて実施され得ることを認識し得る。他の事例では、周知の構造、リソース、または動作が、単に、例の態様を不明確にすることを観察するように詳細には図示または記載されていない。
【００７７】
[0083]  例示的な例およびアプリケーションが例示され記載されているが、これら例は、上述された正確な構成およびリソースに限定されないことが理解されるべきである。当業者に対して明らかな様々な修正、変更、および変形が、特許請求された例の範囲から逸脱することなく本明細書に開示された方法およびシステムの配置、動作、および詳細においてなされ得る。
【図１】
0006602369.tif 000002
【図２】
0006602369.tif 000003
【図３】
0006602369.tif 000004
【図４】
0006602369.tif 000005
【図５】
0006602369.tif 000006
【図６Ａ】
0006602369.tif 000007
【図６Ｂ】
0006602369.tif 000008
【図７】
0006602369.tif 000009