(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
添付図面を参照して様々な諸実施形態を以下でより完全に説明する。添付図面は本明細書の一部を構成し、本発明を実施するための具体的で例示的な諸実施形態を示す。しかし、諸実施形態を多数の様々な形態で実装してもよく、本明細書で説明した諸実施形態に限定されると解釈すべきではない。寧ろ、本開示が徹底的で完全であり、本発明の範囲を当業者に完全に伝達するように、これらの諸実施形態を提供するものである。諸実施形態を、方法、システム、または装置として実施してもよい。したがって、諸実施形態が、ハードウェア実装の形態、専らソフトウェア実装の形態、またはソフトウェアおよびハードウェアの態様を組み合わせた実装の形態をとってもよい。したがって、以下の詳細な説明は限定的な意味で捉えるべきではない。
【0009】
図1は、諸実施形態を実装する分散ファイル・システム100の一実施形態を示す。システム100は、ファイルおよびファイル情報へのアクセスを必要とする様々なアプリケーションを実行する、クライアント102および104を含む。ファイル・サーバ106はファイルおよびファイル情報を、例えばデータ・ストア108に格納する。クライアント102および104は、ネットワーク、例えばネットワーク110を介してファイル・サーバ106にアクセスすることができる。当業者が理解するように、ネットワーク110はLAN、WAN(例えば、インターネット)、記憶領域ネットワーク、またはクライアント102および104がファイル・サーバ106と通信できるようにする他のネットワークであってもよい。
【0010】
分散ファイル・システム100は、クライアント102および104がファイル・サーバ106にアクセスできるようにするためのプロトコルを実装してもよい。プロトコルの幾つかの非限定的な例には、SMB(Server Message Block)、SMB2、およびNFSがある。当業者が理解するように、ファイル・アクセス・プロトコルは、ファイル・サーバにファイルを要求するための様々なフォーマットをクライアントに提供する。諸実施形態はどの特定のファイル・アクセス・プロトコルにも限定されない。寧ろ、説明する諸実施形態の特徴を任意のファイル・アクセス・プロトコルを用いて実装してもよい。当該ファイル・アクセス・プロトコルには、上で列挙したものが含まれるがこれらに限らない。
【0011】
一実施形態では、クライアント102および104がファイル・サーバ106にリースを要求してもよい。当該リースにより、クライアント102および104はディレクトリ・メタデータをローカルにキャッシュすることができる。当業者が理解できるように、ファイル・サーバ106が、実際のファイル・データを格納することに加えて、ディレクトリ内のファイルの特徴を記述するディレクトリ・メタデータを格納してもよい。例えば、ディレクトリ・メタデータとして、ディレクトリ内のファイルごとに、最終更新日付、作成日、ファイル・サイズ、ファイル・タイプ、および作成者名を含めてもよいがこれらに限らない。本実施形態を、リース機構を提供することによって実装することができる。
【0012】
図1に示すように、幾つかの実施形態では、クライアント102のようなクライアントが、メタデータ・リース要求を有するパケット112をファイル・サーバ106に送信する。諸実施形態では、パケット112がリース要求に加えてメタデータの要求を含んでもよい。例えば、ブラウザ・アプリケーションのようなアプリケーションが、特定のディレクトリに対するディレクトリ・メタデータを要求してもよい。当該要求に応答して、クライアント102がパケット112を送信してもよい。当該パケット112は、特定のディレクトリのメタデータの要求ならびにメタデータ・リース要求を含む。
【0013】
図1に示すように、パケット112が読取リース、書込みリース、および/またはハンドル・リースを指定してもよい。読取リースにより、クライアント102はディレクトリのメタデータをローカルのキャッシュに格納することができ、ブラウザ・アプリケーションがディレクトリ・メタデータを要求するたびにクライアントは当該要求をローカルのキャッシュから処理することができる。ハンドル・リースにより、クライアント102は、ディレクトリ・ハンドルを閉じるのを遅延させ、クライアント102がディレクトリ・ハンドルを使用して、ブラウザ・アプリケーションならびにディレクトリに対するディレクトリ・メタデータを要求できる他のアプリケーションからの後の要求を処理できるようにすることができる。書込みリースにより、クライアントはアプリケーションがディレクトリ・メタデータに対して行った変更をキャッシュすることができる。
【0014】
図1に示す実施形態では、ファイル・サーバ106が応答パケット114を送信する。当該応答パケット114は、要求されたディレクトリ・メタデータ、および要求されたリースが与えられたかどうかの指示を含む。応答パケットに基づいて、クライアント102はリース要求が与えられた場合はディレクトリ・メタデータをキャッシュし、当該ディレクトリ・メタデータをブラウザ・アプリケーションに提供する。リースが与えられなかったと応答パケットが示す場合は、クライアント102はディレクトリ・メタデータをキャッシュせず、単に当該ディレクトリ・メタデータをブラウザ・アプリケーションに提供する。クライアント102にリースが与えられなかった場合は、ディレクトリ・メタデータに対するブラウザ・アプリケーションからの任意の後の要求により、クライアントはディレクトリ・メタデータをファイル・サーバ106に要求することとなる。
【0015】
下記でさらに詳細に説明するように、リースをクライアントに与えることにより、アプリケーションからの要求を処理する効率性がもたらされ、クライアントが複数の要求をファイル・サーバ106に送信する必要性が減る。したがって、幾つかの実施形態では、ファイル・サーバ106は一般に、衝突するリースを別のクライアントが現在保持していない限り、リースをクライアントに与える。ディレクトリ・メタデータの一貫性を保証するために、ファイル・サーバ106は、特定のディレクトリ・メタデータに関して衝突するリースが別のクライアントに付与されないことを保証する。
【0016】
図1の説明は幾つかの実施形態の幾つかの特徴を導入するために与えたにすぎない。下記でさらに詳細に説明するように、他の実施形態では追加の特徴を提供してもよい。
図1の説明は、他の任意の実施形態の範囲を限定するために使用されるべきではない。
【0017】
図2は、幾つかの実施形態で使用できるクライアントおよびサーバのブロック図を示す。上述のように、様々なファイル・アクセス・プロトコルを使用して、説明する実施形態の機能を実装することができる。以下の
図2の説明のうち幾つかは、幾つかのSMB2の機能説明を含む。しかし、これは他の実施形態を限定するために使用されるべきではない。なぜならば、任意のファイル・アクセス・プロトコルを使用して、説明する機能を実装できるからである。SMB2の使用は一例にすぎず、例示の目的にのみ使用される。
【0018】
図2は、分散ファイル・システム200の一部であるクライアント202およびファイル・サーバ204のブロック図を示す。幾つかの実施形態では、クライアント202をシステム100(
図1)においてクライアント102および104として実装してもよく、ファイル・サーバ204をシステム100(
図1)においてファイル・サーバ106として実装してもよい。
【0019】
図2に示すように、クライアント202は、サーバ204のファイル・システム208に格納されたファイル・データおよびメタデータへのアクセスを要求する、幾つかのアプリケーション206A乃至Cを含む。クライアント202はまた、リダイレクタ210を含む。一実施形態では、リダイレクタ210をSMB2リダイレクタとして構成してもよく、クライアント202およびサーバ204はSMB2プロトコルに従ってフォーマットされたパケットを用いて通信する。アプリケーション206A乃至Cのうち1つがサーバ204上に置かれたファイルを要求すると、リダイレクタ210がその要求を処理する。リダイレクタ210は、ファイル・データおよびメタデータに対する要求を有する、SMB2プロトコルに従ってフォーマットされたパケットを生成する。下記でさらに詳細に説明するように、諸実施形態では、SMB2プロトコルを拡張して、クライアント202がディレクトリ・メタデータをクライアント202上のローカルのキャッシュ212に格納できるようにするリース機構を提供する。当該リース機構は、サーバ204が与えるリースに関連付けられたリース鍵(ディレクトリ鍵/ファイル鍵)を格納する、クライアント202上の検索テーブル214を利用する。サーバ204はまた、リースを要求し当該リースを与えられるクライアントに対してリース鍵を格納する。サーバ204は、リース・テーブル216を用いてリース鍵を格納する。
【0020】
システム200の動作の一例として、アプリケーション206Aはファイル・システム208のディレクトリ、例えばディレクトリ1に格納されたファイルに関するメタデータを要求することができる。その結果、アプリケーション206Aはリダイレクタ210が受け取る要求を発行する。当該要求を受け取ったことに応答して、リダイレクタ210は、ネゴシエート要求パケット218を送信することにより、サーバ204とのセッションを開始する。当業者が理解するように、ネゴシエート要求パケット218は、クライアントとサーバとの間でのセッションのネゴシエートを提供するSMB2プロトコルに従ってフォーマットされる。ネゴシエート要求パケット218は、クライアントがディレクトリ・メタデータのリースを処理できるか否かを示す情報を含む。一実施形態では、ディレクトリ・メタデータのリースを何らかのバージョンのSMB2プロトコルによってのみサポートしてもよく、ネゴシエート要求パケット218が、クライアントはメタデータのリースをサポートする或るバージョンのSMB2プロトコルをサポートしており、そのバージョンのSMB2プロトコルを用いてサーバと通信することを望むという指示を提供してもよい。
【0021】
ネゴシエート要求パケット218に応答して、サーバ204はネゴシエート応答パケット220を送信する。当該ネゴシエート応答パケット220は、サーバが当該バージョンのSMB2プロトコルをサポートするか否かの指示を含むことができる。現在の例では、ネゴシエート応答パケット220は、ディレクトリ・メタデータのリースをサポートする或るバージョンのSMB2プロトコルを用いて通信することにサーバが同意したことを示す。
【0022】
クライアント202とサーバ204との間のネゴシエーションが完了した後、リダイレクタ210は、アプリケーション206Aが要求しているディレクトリ・メタデータを要求することができる。一実施形態では、リダイレクタ210は先ず、要求されているディレクトリ・メタデータに関連付けられたディレクトリ鍵、例えば、ディレクトリ2鍵を生成する。さらに、リダイレクタ210はまた、要求されているディレクトリ・メタデータを含む親ディレクトリ、この場合はディレクトリ1に対する鍵を生成する。これらの鍵を検索テーブル214に格納する。
図2の実施形態で示すように、検索テーブル214はディレクトリ鍵を、ディレクトリ内に格納されたファイルに対する様々なファイル鍵ならびにディレクトリ内のサブディレクトリに対するディレクトリ鍵に関連付ける。リース鍵は幾つかの実施形態ではGUID(globally unique identifier)である。しかし、当該リース鍵はGUIDには限定されない。
【0023】
リダイレクタ210は次に、ディレクトリ2内のディレクトリ・メタデータに対する要求を含み、ディレクトリ2内のディレクトリ・メタデータに対するリースもまた要求する、パケット222を送信する。リース要求の一部として、リダイレクタ210は、生成したリース鍵(即ち、ディレクトリ1に対するディレクトリ鍵およびディレクトリ2に対するディレクトリ鍵)を含む。別の実施形態では、リダイレクタ210は何らディレクトリ鍵を生成しない。その代わり、パケット222が、サーバがリース鍵を生成すべきであるとリダイレクタ210が示すことを規定する。
【0024】
サーバ204がディレクトリ・リース要求パケット222を受け取ると、サーバ204はディレクトリ・メタデータをディレクトリ2から取り出す。サーバ204はまた、サーバ204が要求されたリースをクライアント202に与えることができるか否かを判定する。具体的には、当該サーバは、自身が与えた他のリースに対するリース鍵(ディレクトリ鍵およびファイル鍵)を格納するリース・テーブル216を参照することができる。本例では、以前にディレクトリ2に対するリースを要求したクライアントは存在せず、その結果、サーバ204は、ディレクトリ1に対するディレクトリ鍵およびディレクトリ2に対するディレクトリ鍵をディレクトリ・リース要求パケット222からリース・テーブル216に格納する。
【0025】
当該サーバは、ディレクトリ・メタデータ、および要求されたリースが与えられたことの指示を有する、ディレクトリ・リース応答パケット224を送信する。この場合、要求されたリースが読取リース、書込みリース、および/またはハンドル・リースを含んでもよい。リースが読取リースである場合、クライアント202はディレクトリ2のディレクトリ・メタデータに対するアプリケーション206Aからの要求を、キャッシュ212から処理することができる。リースが書込みリースである場合は、ディレクトリ2のディレクトリ・メタデータに対する任意の変更をキャッシュ212に格納することができる。リースがハンドル・リースを含む場合は、クライアント202はアプリケーション206Aがハンドルを閉じるときにディレクトリ2に対するハンドルを閉じるのを遅延させることができる。次いで当該ハンドルを再利用して、アプリケーション206Aならびに他のアプリケーション206Bおよび206Cからの後の要求を処理することができる。リダイレクタ210はディレクトリ・メタデータをアプリケーション206Aに提供し、また当該ディレクトリ・メタデータをキャッシュ212に格納する。
【0026】
後の時点で、第2のクライアントがディレクトリ2に格納された同一のディレクトリ・メタデータに対するアクセスを要求した場合、サーバ204は、クライアント202に与えたハンドル・リースと非互換のアクセスを第2のクライアントが要求した場合にクライアント202からのハンドル・リースを失効することができる。サーバ204は、ハンドル・リースが失効されていることを示す失効通知226をクライアント202に送信する。失効の後、アプリケーション206A、206B、および206Cからのディレクトリ・メタデータに対する任意の要求により、クライアント202は、新たなディレクトリ・ハンドルを直接サーバ204に要求する必要があるはずである。幾つかの実施形態では、リースの失効が同期的に発生し、クライアント202は、失効通知を受け取ったという受理(acknowledgment)228を送信しなければならない。後の時点で第2のクライアントがディレクトリ2に格納されたディレクトリ・メタデータを修正すると、サーバ204は、クライアント202からの読取リースを失効することができ、これによりキャッシュ212に格納されたデータが無効(invalid)になる。失効の後は、アプリケーション206A、206B、および206Cからのディレクトリ・メタデータに対する任意の要求を、情報を直接サーバ204に要求することで処理しなければならない。
【0027】
当業者が理解するように、クライアント202はキャッシュ212内の情報を、さらにディレクトリ・メタデータをアプリケーション206A、206B、および206Cに提供する目的で使用することができる。一例として、ファイルがディレクトリに存在しない場合、アプリケーション206A、206B、および206Cからの見当たらないファイルに対する要求を、サーバ204に当該要求をリダイレクトする必要なしに失敗させることができる。これにより、存在しないファイルを対象としたオープンな要求に関するネットワーク・トラフィックを削減することを支援する。
【0028】
一実施形態では、上述のリース機能は過渡的である。即ち、リダイレクタ210はリースの取得と失効をローカルのアプリケーションに渡すことができる。次いで当該ローカルのアプリケーションを使用して他のリモート・クライアントを処理することができる。このように、リースの付与および失効は原則として最終的なピアに対して過渡的である。
【0029】
図3乃至
図6は、諸実施形態に従う動作フロー300、400、500、および600を示す。動作フロー300、400、500、および600を任意の適切なコンピューティング環境で実施してもよい。例えば、動作フローを、
図1および
図2に示すようなシステムにより実行してもよい。したがって、動作フロー300、400、500、および600の説明では、
図1および
図2のコンポーネントのうち少なくとも1つを参照することができる。しかし、
図1および
図2のコンポーネントに対する任意のかかる参照は説明の目的のためにすぎず、
図1および
図2の実装形態は動作フロー300、400、500、および600に関して非限定的な環境であることは理解されよう。
【0030】
さらに、動作フロー300、400、500、および600を逐次的に特定の順序で例示および説明するが、他の実施形態では、当該動作を異なる順序で、複数回、および/または並行して実施してもよい。さらに、幾つかの実施形態では1つまたは複数の動作を省略または組み合わせてもよい。
【0031】
図3は、幾つかの実施形態と整合する、ディレクトリ・メタデータをローカルにキャッシュするための動作フロー300を示す。フロー300は動作302で開始し、ディレクトリ・メタデータに対する要求(ディレクトリ・メタデータの一部を含む)をアプリケーションから受け取る。幾つかの実施形態では、動作302をクライアント上のリダイレクタが受け取る。当該リダイレクタは、システム100(
図1)またはシステム200(
図2)のような分散ファイル・システムの一部である。フロー300は、どの特定のファイル・アクセス・プロトコルを用いて実装することにも限定されない。任意の適切なファイル・アクセス・プロトコルを用いてフロー300の実施形態を実装してもよい。
【0032】
フローは動作302から判定304に移り、要求されたメタデータがローカルのキャッシュ内に格納されているか否かを判定する。判定304で、要求されたメタデータがローカルのキャッシュに格納されていると判定した場合は、フローは動作306に移り、当該メタデータを当該ローカルのキャッシュから取り出す。動作308で、当該ローカルのキャッシュから取り出した当該メタデータをアプリケーションに提供する。フロー300は310で終了する。
【0033】
一方、動作304で、ディレクトリ・メタデータがローカルのキャッシュに格納されていないと判定した場合は、制御は判定304から動作312に移り、当該ディレクトリ・メタデータにより特定されたファイルに対するディレクトリ鍵を生成する。幾つかの実施形態では、ディレクトリ鍵は、リダイレクタがフロー300を実行することにより生成したGUIDである。動作312の後、ディレクトリ・メタデータにより特定されたディレクトリの親ディレクトリに対するディレクトリ鍵を動作314で生成する。幾つかの実施形態では、動作314が当該ディレクトリの全ての先祖に対する鍵を生成することを含んでもよい。次いで当該鍵をローカルにキャッシュすることができる。
【0034】
動作316で、要求をファイル・サーバに送信する。当該要求は、メタデータならびに、当該メタデータのローカルなキャッシュを可能とするリースに対するものである。動作318で、応答をファイル・サーバから受け取る。当該応答は、諸実施形態では、要求されたリースがファイル・サーバにより与えられたか否かの指示を含む。動作318からフローは動作320に移り、当該応答からのメタデータをアプリケーションに提供する。動作320に続いて、判定322で、サーバがディレクトリ・メタデータに関する要求されたリースを与えたか否かを判定する。判定322で、当該リースが承認されなかったと判定した場合は、メタデータをローカルにキャッシュすることはできず、フローは310で終了する。判定322で、リースがファイル・サーバにより承認されたと判定した場合は、動作324でメタデータをローカルのキャッシュに格納する。動作324の後、フローは310で終了する。
【0035】
次に
図4を参照すると、幾つかの実施形態と整合する、ディレクトリ・メタデータに関するハンドル・リースを保持する(分散ファイル・システムにアクセスする)クライアントによりディレクトリ・メタデータを修正する要求を処理するためのフロー400が示されている。諸実施形態では、フロー400を、フロー300を実行した後に実行することができる。したがって、フロー400は、ハンドル・リースがディレクトリ・メタデータをキャッシュするために与えられている諸実施形態において実施される。
【0036】
フロー400は動作402で開始し、ディレクトリ・メタデータを修正する要求を受け取る。当該要求は例えば、情報をファイルに書き込むための書込み要求であってもよく、これによりメタデータが変更される。非限定的な例では、当該メタデータには修正日、およびファイル・サイズが含まれる。ディレクトリ・メタデータをキャッシュするためのハンドル・リースを、ファイル・サーバがフロー400を実行しているクライアントに予め与えている。
【0037】
動作404で、当該要求からの情報、即ちディレクトリ・メタデータ、例えばファイルへ書き込むべきデータを修正している情報を有するパケットを生成する。リースが予め与えられているので、第1のディレクトリ鍵および当該リースに関連付けられた親のディレクトリ鍵が存在する。したがって、動作406でディレクトリ鍵を当該パケットに含め、動作408で当該ディレクトリ鍵をパケットに含める。次いで410で当該パケットをサーバに送信する。幾つかの実施形態では、クライアントが最初に当該要求においてディレクトリ鍵および親のディレクトリ鍵を、オープンのために送信する。次いでサーバは、当該オープンに関する全ての後の動作に対して、当該鍵を使用する。しかし、他の実施形態では、クライアントが動作ごとに当該ディレクトリ鍵および親のディレクトリ鍵を提供してもよい。
【0038】
動作410の後、フローは動作412に移り、ローカルのキャッシュを更新して変更されたメタデータを反映する。換言すれば、ローカルのキャッシュを更新して、直近の修正日、ファイル・サイズ等の変更を反映する。フロー400は414で終了する。
【0039】
図5は、ディレクトリ・メタデータに関する読取リースを失効する通知を処理するためのフロー500を示す。フロー500を、クライアントに読取リースがサーバ204(
図2)のようなサーバから与えられた後に実行することができる。フロー500は動作502で開始し、ディレクトリ・メタデータに関して予め与えられた読取リースが失効していることを示す失効通知をサーバから受け取る。幾つかの実施形態では、キャッシュされたディレクトリ・メタデータ、例えば、ディレクトリ内のファイルの修正の一貫性に影響を及ぼす別のクライアントが実施した動作を理由として、失効通知をサーバが送信する。失効通知を受け取ったことに応答して、フロー500は動作504に移り、任意のキャッシュしたディレクトリ・メタデータを無効にする。幾つかの実施形態では、動作504は、ディレクトリ・メタデータを要求したアプリケーションに当該ディレクトリ・メタデータを提供するためにキャッシュを使用することがもはやできないことを示すための、クライアントが実施する幾つかのステップを含む。
【0040】
動作504の後、フローは動作506に移り、失効通知を成功裏に受け取ったという受理をサーバに送信する。幾つかの実施形態では、フロー500が動作506を含まなくともよい。これらの実施形態では、クライアントは失効通知を受け取り、サーバに受理を送信しない。次いでフローは動作508に移り、ディレクトリ・メタデータに対する任意の要求を、ディレクトリ・メタデータをサーバに要求することにより処理する。次いでフロー500は510で終了する。
【0041】
図6は、幾つかの実施形態と整合する、ディレクトリ・メタデータをローカルにキャッシュできるようにするための動作フロー600を示す。幾つかの実施形態では、フロー600を、分散ファイル・システムの一部であるファイル・サーバにより実行することができる。
【0042】
フロー600は動作602で開始し、ディレクトリ・メタデータおよびリースに対する要求を受け取る。幾つかの実施形態では当該要求を、クライアント、または分散ファイル・システムの一部であるクライアント上のリダイレクタが送信する。動作602の後、フロー600は判定604に移り、動作602で受け取った要求において要求されたようにリースを与えるか否かの判定を行う。判定604が幾つかの要因に基づいてもよい。当該要因には、例えばリースが当該ディレクトリ・メタデータに対して既に与えられたか否かが含まれる。判定604で、リースを与えないと判定した場合は、フローは動作606に移り、ディレクトリ・メタデータを有するパケットを送信する。当該パケットは、要求されたリースが与えられなかったという指示を含む。次いでフローは動作608で終了する。
【0043】
判定604で、リースを与えることができると判定した場合、フロー600は動作610に移り、ディレクトリ鍵および親のディレクトリ鍵を格納する。幾つかの実施形態では、ディレクトリ鍵および親のディレクトリ鍵は、クライアントに与えたリースを追跡し続けるためのリース鍵として使用されるGUIDである。幾つかの実施形態では、動作602で、ディレクトリ鍵および親のディレクトリ鍵を、ディレクトリ・メタデータおよびリース要求とともに受け取る。本実施形態では、ディレクトリ鍵および親のディレクトリ鍵は、動作602で要求を送信したクライアントが生成している。他の実施形態では、動作610で、ディレクトリ鍵および親のディレクトリ鍵を当該サーバが生成して、これらをリース・テーブルに格納してもよい。
【0044】
幾つかの実施形態では、ディレクトリ鍵および親のディレクトリ鍵は2つ以上のオープンなハンドルの間のコンテナと子の関係を表現する。同じことがファイル鍵およびディレクトリ鍵に当てはまる。当該ファイル鍵は、ディレクトリ内のファイルに関連付けられている。例えば、2つのオープンなハンドルH1およびH2が存在すると仮定する。H1をファイル鍵=K1およびディレクトリ鍵=Dに関連付けてもよい。H2をファイル鍵=K2およびディレクトリ鍵=Dに関連付けてもよい。これらの鍵は、これらのハンドルが参照するファイルが同一のディレクトリ内に存在することを示す。
【0045】
図6を再度参照すると、動作612で、要求されたディレクトリ・メタデータ、およびリースの承認の指示を有する応答パケットをクライアントに送信する。次いでクライアントは、与えられたリースと整合するディレクトリ・メタデータをローカルにキャッシュすることができる。
【0046】
動作614で、ディレクトリ・メタデータを修正する要求を受け取る。当該要求は例えば、追加の情報をファイルに書き込むためのものであってもよい。これにより、例えば最終更新時刻、またはファイル・サイズを変更することでディレクトリ・メタデータが修正される。フローは動作614から判定616に移り、ディレクトリ・メタデータを修正する要求がリース保持者(lease holder)からのものであるか否かを判定する。
【0047】
一実施形態では、判定616で行う判定が、ディレクトリ・メタデータを修正する動作が行われたハンドルに関連付けられたリース鍵と、予めクライアントに提供されたハンドルに関連付けられたリース鍵とを比較することによって行われる。上述のように、幾つかの実施形態では、クライアントがファイル・ハンドル(またはディレクトリ・ハンドル)に関連付けられたリース鍵を生成し、したがって、各鍵は特定のクライアントに対して一意である。一例では、クライアントに提供されたハンドルH1はファイル鍵=K1およびディレクトリ鍵=Dに関連付けられる。後にサーバが、ハンドルH2に関連付けられたメタデータを修正する動作を受け取った場合、当該サーバはハンドルH2に関連付けられたリース鍵をハンドルH1に関連付けられたリース鍵と比較する。例えばH2がファイル鍵=K2およびディレクトリ鍵=Dに関連付けられている場合、当該サーバは、H1およびH2に対するディレクトリ鍵が同一であるため、ディレクトリDに関するリースを有する同一のクライアントが当該修正を行い、したがって当該リースを失効する必要がないと判定する。一方、H2がファイル鍵=K2およびディレクトリ鍵=D1に関連付けられている場合は、サーバは、ハンドルH1およびとH2に関連付けられたディレクトリ鍵が異なるので、リースを失効しなければならないと判定する。
【0048】
リース保持者がディレクトリ・メタデータに対する修正を行ったものであると判定した場合は、フローは動作618に移り、ファイル・システムを更新して修正されたディレクトリ・メタデータを反映する。次いでフロー600は608で終了する。
【0049】
動作616で、要求がリース保持者からのものでないと判定した場合は、フローは判定620に移り、要求された修正が、別のクライアントに与えたリースと不整合であるかどうかを判定する。当該要求が不整合でない場合は、フローは動作618に移り、608で終了する。
【0050】
判定620で、要求がリースと不整合であると判定した場合は、フローは動作622に移り、ディレクトリ・メタデータに関するリースを現在保持しているクライアントに失効通知を送信する。当該失効は、当該ディレクトリ・メタデータにアクセスする全てのクライアントの間でディレクトリ・メタデータの一貫性を保持するために送信されるものである。動作624で失効通知の受理を受け取り、その後、フローは動作618に移り608で終了する。
【0051】
図7は一般的なコンピュータ・システム700を示す。当該コンピュータ・システム700を使用して本明細書に記載の諸実施形態を実装することができる。コンピュータ・システム700はコンピューティング環境の一例にすぎず、コンピュータおよびネットワーク・アーキテクチャの使用範囲または機能範囲に関して何ら限定を示唆しようとするものではない。また、コンピュータ・システム700が、例示的なコンピュータ・システム700で示したコンポーネントのどの1つまたは組合せに関してどのような依存性または要件も有すると解するべきではない。幾つかの実施形態では、システム700を、
図1および
図2に関して上述したクライアントおよび/またはサーバとして使用してもよい。
【0052】
その最も基本的な構成では、システム700は一般に少なくとも1つの処理装置702およびメモリ704を備える。コンピューティング装置の厳密な構成および種類に応じて、メモリ704は(RAMのような)揮発性、(ROM、フラッシュ・メモリ等のような)不揮発性、またはこれらの何らかの組合せであってもよい。この最も基本的な構成を
図7で点線706により示す。システム・メモリ704は、システム700上で実行されているアプリケーションを格納する。例えば、メモリ704は
図2に関して上述したレポート検索テーブル214を格納してもよい。
【0053】
本明細書で使用するコンピュータ読取可能媒体という用語には、コンピュータ記憶媒体を含めてもよい。コンピュータ記憶媒体には、コンピュータ読取可能命令、データ構造、プログラム・モジュール、または他のデータのような情報を記憶するための任意の方法または技術で実装した、揮発性および不揮発性、取外し可能および取外し不能な媒体を含めてもよい。システム・メモリ704、取外し可能記憶装置および取外し不能記憶装置708は全て、コンピュータ記憶媒体の例である(即ち、メモリ記憶装置)。コンピュータ記憶媒体には、RAM、ROM、EEPROM(electrically erasable read−only memory)、フラッシュ・メモリもしくは他のメモリ技術、CD−ROM、DVD(digital versatile disk)もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または情報の格納に使用できコンピューティング装置700がアクセス可能な他の任意の媒体を含めてもよいが、これらに限らない。任意のかかるコンピュータ記憶媒体が装置700の一部であってもよい。コンピューティング装置700はまた、キーボード、マウス、ペン、音声入力装置、タッチ入力装置等のような入力装置(複数可)714を有してもよい。ディスプレイ、スピーカ、プリンタ等のような出力装置(複数可)716を含めてもよい。上述の装置は例であり、他のものを使用してもよい。
【0054】
本明細書で使用するコンピュータ読取可能媒体という用語には、通信媒体を含めてもよい。通信媒体を、コンピュータ読取可能命令、データ構造、プログラム・モジュール、または、搬送波もしくは他の伝送機構のような変調データ信号における他のデータで具体化してもよく、また通信媒体には任意の情報伝達媒体を含む。「変調データ信号」という用語は、1つまたは複数の特性集合を有するかまたは当該信号内の情報をエンコードするように変化した信号を言い表すことができる。限定ではなく例として、通信媒体には、有線ネットワークまたは直接配線接続のような有線媒体、ならびに、音響、RF(radio frequency)、赤外線、および他の無線媒体のような無線媒体を含んでもよい。
【0055】
本明細書では「一実施形態」または「実施形態」と言及するが、これは、説明した具体的な機能、構造、または特徴が少なくとも1つの実施形態に含まれることを意味する。したがって、かかる語句を使用することで、単に1つの実施形態より多くの実施形態に言及することができる。さらに、説明した機能、構造、または特徴を1つまたは複数の実施形態において任意の適切な方法で組み合わせてもよい。
【0056】
しかし、本発明を1つまたは複数の具体的な詳細なしに、または、他の方法、リソース、材料等を用いて実施してもよいことは当業者には理解されよう。他の事例では、公知の構造、リソース、または動作については詳細に図示も説明もしていないが、これは本発明の諸態様を不明瞭にするのを避けるためにすぎない。
【0057】
例示的な諸実施形態および適用事例を例示および説明したが、本発明は上述の厳密な構成およびリソースに限定されないことは理解されよう。特許請求する発明の範囲から逸脱しない当業者に明らかな様々な修正、変更、および変形を、本明細書で開示した方法およびシステムの配置構成、動作、および詳細において行ってもよい。