(57)【要約】どの特定のプラットフォームまたはストレージサブシステムにもそのユーザを限定しないアーキテクチャを用いてキーと値のペアを管理するためのシステムおよび手法が提供される。この発明の一局面によれば、リポジトリは、リポジトリが使用される環境およびプラットフォームに基づいてアーキテクチャが変わる必要がないことから、移殖性がある。むしろ、プラットフォームに特有のアーキテクチャの部分は、リポジトリのストレージ抽象層にあるプラグインに限定されている。プラグインはリポジトリの他の層に同じストレージ抽象インターフェイスを公開するが、異なるプラットフォームまたはストレージサブシステムと相互作用するよう実現される。したがって、１つのプラットフォームから別のプラットフォームへ移殖されるのに応答して、リポジトリは、単にプラグインを変更してパーシステントなストレージ動作を呼び出してもよい。
2005522787.tif 000002
【特許請求の範囲】
【請求項１】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを、アプリケーションプログラミング層で公開するステップと、
共通のストレージ抽象インターフェイスを介して複数のプラグインのうちの１つを呼び出すことによって、前記リポジトリインターフェイスを介して行なわれた呼び出しに応じるステップとを含み、
前記複数のプラグインの各プラグインは、永続的に記憶されたキーと値のペア情報にアクセスするために前記共通のストレージ抽象インターフェイスを公開し、
前記複数のプラグインの各プラグインは、前記共通のストレージ抽象インターフェイスを介して行なわれた呼び出しに応答して、ある特定の種類のストレージサブシステムと相互作用するよう設計されており、
各プラグインが相互作用するストレージサブシステムは、前記複数のプラグインの他の各々が相互作用するストレージサブシステムとは異なる種類のストレージサブシステムである、方法。
【請求項２】
前記リポジトリの単一の構成要素をマスタ構成要素として指定するステップと、
クラスタの複数のノードにわたって広がっている構成要素において、前記複数のノード上に存在するクライアントから前記リポジトリインターフェイスを介して呼び出しを受取るステップと、
パーシステントなストレージへのアクセスを要求するすべての呼び出しを前記マスタ構成要素に向けるステップとをさらに含み、
マスタ構成要素は、前記共通のストレージ抽象インターフェイスを介してプラグインを呼び出すステップを行なうことが許可された前記リポジトリの唯一の構成要素である、請求項１に記載の方法。
【請求項３】
動作を実行する要求を受取るステップと、
前記動作の実行中にアクセスするために、前記複数のプラグインのうちのどの特定のプラグインが、ストレージサブシステムの種類に対応するかを判断するステップと、
ストレージサブシステムの前記種類に対応する特定のプラグインを動的にロードするステップと、
前記共通のインターフェイスを介して前記特定のプラグインに１つ以上の呼び出しを行なうことによって前記動作を実行するステップとをさらに含む、請求項１に記載の方法。
【請求項４】
クライアントから前記リポジトリインターフェイスを介して要求を受取るステップと、
前記共通のストレージ抽象インターフェイスを介して、前記要求により必要とされる情報について呼び出しを行なう前に、マスタキャッシュにおいて前記情報を検索するステップとをさらに含む、請求項１に記載の方法。
【請求項５】
クライアントは第１のノード上に存在し、マスタキャッシュは第２のノード上に存在し、
前記方法は、前記マスタキャッシュにおいて前記情報を検索するステップの前に、前記第１のノード上のローカルキャッシュ上で前記情報を検索するステップをさらに含む、請求項４に記載の方法。
【請求項６】
第１のノードは前記リポジトリの複数の構成要素を含み、
クライアントは前記複数の構成要素の第１の構成要素に関連付けられており、
前記方法はさらに、
前記複数の構成要素の１つの構成要素のみをキャッシング構成要素として確立するステップと、
前記第１の構成要素が前記キャッシング構成要素ではない場合、前記第１の構成要素から前記キャッシング構成要素にメッセージが送られるようにして、前記キャッシング構成要素に前記情報について前記ローカルキャッシュを検索させるステップとを含む、請求項５に記載の方法。
【請求項７】
前記リポジトリインターフェイスを実現するルーチンを含むコードライブラリを作成するステップと、
前記コードライブラリをクライアントコードにリンクさせて、前記クライアントコードにおけるルーチンが、前記コードライブラリの前記ルーチンを呼び出すことによって前記リポジトリを使用できるようにするステップとをさらに含む、請求項１に記載の方法。
【請求項８】
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しにおけるパラメータの値に基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとをさらに含む、請求項１に記載の方法。
【請求項９】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しに基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを含む、方法。
【請求項１０】
リポジトリは、キャッシングアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
呼び出しを受取るステップは、キャッシングアクセスモードおよびデフォルトアクセスモードのうちの１つを特定する呼び出しを受取るステップを含み、
前記方法は、前記呼び出しが前記キャッシングアクセスモードを特定する場合に、前記クライアントに関連する前記リポジトリの構成要素をキャッシング構成要素として確立するステップを含む、請求項９に記載の方法。
【請求項１１】
前記呼び出しが前記デフォルトアクセスモードを特定すると判断することに応答して、前記構成要素により受取られた前記リポジトリからの情報を読出す要求を、前記クライアントから第２のクライアントに関連する第２のキャッシング構成要素にわたすステップと、
前記第２の構成要素によって管理される前記リポジトリからの情報のキャッシュを検査することによって、前記要求に対して前記第２の構成要素に応答させるステップとをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記構成要素と前記第２のキャッシング構成要素とは単一のノード上に存在する、請求項１１に記載の方法。
【請求項１３】
第２のキャッシング構成要素により管理されるキャッシュが前記クライアントからの特定の要求により必要とされる情報を含んでいない場合、前記第２のキャッシング構成要素
は、前記要求を、前記ノードに対して遠隔にある第２のノード上に存在する第３の構成要素に送るステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
複数のアクセスモードは、インストールアクセスモードおよび読出し専用アクセスモードをさらに含み、
クライアントは、前記リポジトリを最初に作成する際に前記インストールアクセスモードを使用し、
クライアントは、前記リポジトリから立上がる際に前記読出し専用アクセスモードを使用する、請求項１０に記載の方法。
【請求項１５】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報を、キーと値のペア情報用に特に設計されたリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
クライアントから前記リポジトリインターフェイスを介して１つ以上の呼び出しを受取るステップとを含み、
前記キーと値のペア情報をパーシステントに記憶するために、前記リポジトリ用の任意の構造をパーシステントなストレージ上に割当てる前に、前記１つ以上の呼び出しは前記リポジトリインターフェイスで受取られ、前記方法はさらに、
前記１つ以上の呼び出しに基づいて、前記キーと値のペア情報を前記パーシステントなストレージ上にパーシステントに記憶するための構造を作成するステップを含む、方法。
【請求項１６】
前記リポジトリは、インストールアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
１つ以上の呼び出しを受取るステップは、インストールアクセスモードを特定する少なくとも１つの呼び出しを受取るステップを含み、
前記方法は、前記クライアントが前記インストールアクセスモードにとどまっている間、前記インストールアクセスモードと前記リポジトリの独占使用とを前記クライアントに与えるステップを含む、請求項１５に記載の方法。
【請求項１７】
前記複数のアクセスモードは読出し専用アクセスモードを含み、
前記方法は、
読出し専用アクセスモードを用いて動作を実行する要求を第２のクライアントから受取るステップと、
前記動作の実行中、前記リポジトリの並行処理メカニズムを回避するステップとを含む、請求項１６に記載の方法。
【請求項１８】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、前記命令は、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを、アプリケーションプログラミング層で公開するステップと、
共通のストレージ抽象インターフェイスを介して複数のプラグインのうちの１つを呼び出すことによって、前記リポジトリインターフェイスを介して行なわれた呼び出しに応じるステップとを行なうための命令を含み、
前記複数のプラグインの各プラグインは、永続的に記憶されたキーと値のペア情報にアクセスするために前記共通のストレージ抽象インターフェイスを公開し、
前記複数のプラグインの各プラグインは、前記共通のストレージ抽象インターフェイスを介して行なわれた呼び出しに応答して、ある特定の種類のストレージサブシステムと相互作用するよう設計されており、
各プラグインが相互作用するストレージサブシステムは、前記複数のプラグインの他の各々が相互作用するストレージサブシステムとは異なる種類のストレージサブシステムである、コンピュータ読取可能な媒体。
【請求項１９】
前記リポジトリの単一の構成要素をマスタ構成要素として指定するステップと、
クラスタの複数のノードにわたって広がっている構成要素において、前記複数のノード上に存在するクライアントから前記リポジトリインターフェイスを介して呼び出しを受取るステップと、
パーシステントなストレージへのアクセスを要求するすべての呼び出しを前記マスタ構成要素に向けるステップとを行なうための命令をさらに含み、
マスタ構成要素は、前記共通のストレージ抽象インターフェイスを介してプラグインを呼び出すステップを行なうことが許可された前記リポジトリの唯一の構成要素である、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２０】
動作を実行する要求を受取るステップと、
前記動作の実行中にアクセスするために、前記複数のプラグインのうちのどの特定のプラグインが、ストレージサブシステムの種類に対応するかを判断するステップと、
ストレージサブシステムの前記種類に対応する特定のプラグインを動的にロードするステップと、
前記共通のインターフェイスを介して前記特定のプラグインに１つ以上の呼び出しを行なうことによって前記動作を実行するステップとを行なうための命令をさらに含む、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２１】
クライアントから前記リポジトリインターフェイスを介して要求を受取るステップと、
前記共通のストレージ抽象インターフェイスを介して、前記要求により必要とされる情報について呼び出しを行なう前に、マスタキャッシュにおいて前記情報を検索するステップとを行なうための命令をさらに含む、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２２】
クライアントは第１のノード上に存在し、マスタキャッシュは第２のノード上に存在し、
前記コンピュータ読取可能な媒体は、前記マスタキャッシュにおいて前記情報を検索するステップの前に、前記第１のノード上のローカルキャッシュ上で前記情報を検索するステップを行なうための命令をさらに含む、請求項２１に記載のコンピュータ読取可能な媒体。
【請求項２３】
第１のノードは前記リポジトリの複数の構成要素を含み、
クライアントは前記複数の構成要素の第１の構成要素に関連付けられており、
前記コンピュータ読取可能な媒体はさらに、
前記複数の構成要素の１つの構成要素のみをキャッシング構成要素として確立するステップと、
前記第１の構成要素が前記キャッシング構成要素ではない場合、前記第１の構成要素から前記キャッシング構成要素にメッセージが送られるようにして、前記キャッシング構成要素に前記情報について前記ローカルキャッシュを検索させるステップとを行なうための命令を含む、請求項２２に記載のコンピュータ読取可能な媒体。
【請求項２４】
前記リポジトリインターフェイスを実現するルーチンを含むコードライブラリを作成するステップと、
前記コードライブラリをクライアントコードにリンクさせて、前記クライアントコードにおけるルーチンが、前記コードライブラリの前記ルーチンを呼び出すことによって前記
リポジトリを使用できるようにするステップとを行なうための命令をさらに含む、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２５】
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しにおけるパラメータの値に基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを行なうための命令をさらに含む、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２６】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しに基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを行なうための命令を含む、コンピュータ読取可能な媒体。
【請求項２７】
リポジトリは、キャッシングアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
呼び出しを受取るステップは、キャッシングアクセスモードおよびデフォルトアクセスモードのうちの１つを特定する呼び出しを受取るステップを含み、
前記コンピュータ読取可能な媒体は、前記呼び出しが前記キャッシングアクセスモードを特定する場合に、前記クライアントに関連する前記リポジトリの構成要素をキャッシング構成要素として確立するステップを行なうための命令を含む、請求項２６に記載のコンピュータ読取可能な媒体。
【請求項２８】
前記呼び出しが前記デフォルトアクセスモードを特定すると判断することに応答して、前記構成要素により受取られた前記リポジトリからの情報を読出す要求を、前記クライアントから第２のクライアントに関連する第２のキャッシング構成要素にわたすステップと、
前記第２のキャッシング構成要素によって管理される前記リポジトリからの情報のキャッシュを検査することによって、前記要求に対して前記第２の構成要素に応答させるステップとを行なうための命令をさらに含む、請求項２７に記載のコンピュータ読取可能な媒体。
【請求項２９】
前記構成要素と前記第２のキャッシング構成要素とは単一のノード上に存在する、請求項２８に記載のコンピュータ読取可能な媒体。
【請求項３０】
第２のキャッシング構成要素により管理されるキャッシュが前記クライアントからの特定の要求により必要とされる情報を含んでいない場合、前記第２のキャッシング構成要素は、前記要求を、前記ノードに対して遠隔にある第２のノード上に存在する第３の構成要素に送るステップを行なうための命令をさらに含む、請求項２９に記載のコンピュータ読取可能な媒体。
【請求項３１】
複数のアクセスモードは、インストールアクセスモードおよび読出し専用アクセスモードをさらに含み、
クライアントは、前記リポジトリを最初に作成する際に前記インストールアクセスモードを使用し、
クライアントは、前記リポジトリから立上がる際に前記読出し専用アクセスモードを使用する、請求項２７に記載のコンピュータ読取可能な媒体。
【請求項３２】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、
キーと値のペア情報を、キーと値のペア情報用に特に設計されたリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
クライアントから前記リポジトリインターフェイスを介して１つ以上の呼び出しを受取るステップとを行なうための命令を含み、
前記キーと値のペア情報をパーシステントに記憶するために、前記リポジトリ用の任意の構造をパーシステントなストレージ上に割当てる前に、前記１つ以上の呼び出しは前記リポジトリインターフェイスで受取られ、前記コンピュータ読取可能な媒体はさらに、
前記１つ以上の呼び出しに基づいて、前記キーと値のペア情報を前記パーシステントなストレージ上にパーシステントに記憶するための構造を作成するステップを含む、コンピュータ読取可能な媒体。
【請求項３３】
前記リポジトリは、インストールアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
１つ以上の呼び出しを受取るステップは、インストールアクセスモードを特定する少なくとも１つの呼び出しを受取るステップを含み、
前記コンピュータ読取可能な媒体は、前記クライアントが前記インストールアクセスモードにとどまっている間、前記インストールアクセスモードと前記リポジトリの独占使用とを前記クライアントに与えるステップを行なうための命令を含む、請求項３２に記載のコンピュータ読取可能な媒体。
【請求項３４】
前記複数のアクセスモードは読出し専用アクセスモードを含み、
前記コンピュータ読取可能な媒体は、
読出し専用アクセスモードを用いて動作を実行する要求を第２のクライアントから受取るステップと、
前記動作の実行中、前記リポジトリの並行処理メカニズムを回避するステップとを行なう命令を含む、請求項３３に記載のコンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
この出願は、その内容全体がすべての目的のためにここに援用される以下の米国仮特許出願の優先権を主張する。
【０００２】
米国仮特許出願第６０／３７０，９６３号、「グローバル名前空間内の個人化された内容」（Personalized Content Within a Global Namespace）、２００２年４月８日出願
米国仮特許出願第６０／３７２，１８６号、「グローバル名前空間内の個人化された内容に対するアプローチ」（Approach for Personalized Content Within a Global Namespace）、２００２年４月１２日出願。
【０００３】
発明の分野
この発明はデータリポジトリに関し、より具体的には、キーと値のペアを記憶するためのリポジトリに関する。
【背景技術】
【０００４】
発明の背景
多くの種類の情報は一般にキーと値のペアの形で記憶され、このペアの「キー」部分はラベルであり、ペアの「値」部分はそのラベルに関連する値を提供する。たとえば、コンピュータシステムのコンフィギュレーションについての情報は、そのコンピュータシステムにおけるダイナミックメモリの量が５１２メガバイトであることを示すために以下のキーと値のペア、つまり（“メモリ”，５１２Ｍ）を含むかもしれない。
【０００５】
通常、大量のキーと値のペアを記憶する必要があるソフトウェアプログラムまたはシステムは、その情報を記憶するためのリポジトリを含み、そのリポジトリを管理するための論理を含む。そのようなリポジトリがコンフィギュレーションデータを記憶するために使用される場合、リポジトリはしばしばレジストリと呼ばれる。
【０００６】
キーと値のペアのリポジトリを必要とする各プログラムまたはシステムがそれ自体のリポジトリを実現し、管理する場合、結果として、専用リポジトリの急増と作業の莫大な複写とが生じる。この問題に対処するため、キーと値のペアのリポジトリの設計者たちは、自身のリポジトリにアプリケーションプログラムインターフェイス（ＡＰＩ）を公開して、あるサードパーティのアプリケーションが自身のリポジトリを利用できるようにし得る。たとえば、オペレーティングシステムが、そのオペレーティングシステム用に設計されたサードパーティのアプリケーションに、そのオペレーティングシステムによって管理されるリポジトリにキーと値のペアを記憶させるようにしてもよい。
【０００７】
残念ながら、そのような「開放された」リポジトリは一般的な解決策を提供しない。なぜなら、それらは通常、特定のプラットフォームまたはストレージサブシステムに結合されており、したがって汎用のキーと値のペアのリポジトリとして移植または使用できないためである。それらはそれらが使用される環境およびプラットフォームについてのある仮定を用いて設計されているため、それらは一般に、それらの仮定に準拠しないアプリケーションまたはシステムによる使用には利用できない。
【発明の開示】
【課題を解決するための手段】
【０００８】
この発明を、限定のためではなく例示のために、添付図面の図に示す。図中、同様の参照番号は同様の要素を指す。
【発明を実施するための最良の形態】
【０００９】
発明の詳細な説明
キーと値のペアの共有リポジトリにクラスタ幅のアクセスを提供するための方法およびシステムが説明される。以下の記載では、説明の目的のため、この発明の完全な理解を提供するために多くの特定の詳細が述べられる。しかしながら、この発明がこれらの特定の詳細なしで実践されてもよいことは明らかである。他の点では、この発明を不必要に不明瞭にしないよう、周知の構造および装置はブロック図の形で示される。
【００１０】
機能的概要
どの特定のプラットフォームまたはストレージサブシステムにもそのユーザを限定しないアーキテクチャを用いてキーと値のペアを管理するための手法が提供される。一局面によれば、リポジトリは、リポジトリが使用される環境およびプラットフォームに基づいてアーキテクチャが変わる必要がないことから、移殖性がある（ポータブルである）。むしろ、プラットフォームに特有のアーキテクチャの部分は、リポジトリのストレージ抽象層にあるプラグインに限定されている。プラグインの各々はリポジトリの他の層に同じストレージ抽象インターフェイスを公開するが、他のプラグインとは異なるプラットフォームまたはストレージサブシステムと相互作用するよう実現される。
【００１１】
加えて、アーキテクチャのプラグ可能な性質は、プラットフォーム間共通のポータビリティをもたらす。たとえば、リポジトリは、ソラリス／サン（Solaris/Sun）、ＡＩＸ／ＩＢＭ、ＨＰＵＸ／ＨＰ、ウィンドウズ（登録商標）／デル（Windows（登録商標）/Dell）といったかなり多数の普及オペレーティングシステム／ハードウェアの組合せにおいて使用される場合がある。したがって、１つのプラットフォームから別のプラットフォームへ移殖されるのに応答して、リポジトリは、単にプラグインを変更してパーシステントなストレージ動作を呼び出してもよい。
【００１２】
一局面によれば、リポジトリの性能は、キーと値のペア情報のマスタキャッシュおよびキーと値のペア情報のローカルキャッシュを保持することによって高まる。一実施例によれば、単一のローカルキャッシュが各ノード上で管理され、任意の所与のノード上のキャッシュに関連するクライアントはリポジトリによって命令されない。たとえば、あるノード用のキャッシュが、リポジトリを最もよく使用するそのノード上のクライアントに、そのクライアントにリポジトリへの適切な呼び出しを行なわせることによって関連付けられてもよい。
【００１３】
システム概要
図１を参照すると、それは、この発明の一実施例に従った、キーと値のペアの共有リポジトリ１１８へのクラスタ幅のアクセスを提供するためのシステムを示すブロック図である。具体的には、図１は、２つのノード１０２および１０４を含むクラスタ１００を示している。このシステムの説明を簡略化するために、２ノードクラスタ実施例を示す。しかしながら、ここに説明されるこの発明および手法は、どの特定数のノードを有するクラスタにも限定されない。
【００１４】
「クラスタ」という用語はここでは、互いに通信可能なノードの任意の組を指すために使用されている。クラスタは、たとえば、ネットワーク化されたコンピュータのグループを含み得る。状況によっては、クラスタはクラスタ管理ソフトウェアによってユニットとして管理される。クラスタ管理ソフトウェアは、キーと値のペアのリポジトリ１１８を利用可能なソフトウェアシステムの一例である。具体的には、クラスタ管理ソフトウェアは
、クラスタ管理ソフトウェアによって管理されるクラスタのコンフィギュレーションについての情報を記憶するために、キーと値のペアのリポジトリ１１８をクラスタレジストリとして使用してもよい。しかしながら、クラスタ管理ソフトウェアは、リポジトリ１１８を利用するかもしれないクライアントのほんの一例である。この発明はどの特定数のクライアントにも限定されない。むしろ、多くの状況では、多数の異なるタイプのクライアントがリポジトリ１１８を使用する。
【００１５】
再度図１を参照すると、ノード１０２はリポジトリ１１８の２つのクライアント１０６、１０８を含み、一方、ノード１０４はリポジトリ１１８の１つのクライアント１１０を含んでいる。クライアント１０６、１０８および１１０は、それらが関与しているキーと値のペアを管理するためにリポジトリ１１８のサービスを要求するため、「クライアント」と呼ばれる。クライアント１０６、１０８および１１０は一般に、キーと値のペアのストレージを要求する任意の形のソフトウェアプログラムを表わしており、どの特定の種類のソフトウェアプログラムにも限定されない。
【００１６】
図１に示す実施例では、リポジトリ１１８は数層の機能性を含んでいる。具体的には、リポジトリ１１８は、ＡＰＩ層１１２、サービス抽象層１１４、メッセージングおよびキャッシュ層１１６、ストレージ抽象層１５０、およびストレージサブシステム１６０を含んでいる。一般に、ＡＰＩ層１１２は、クライアントがリポジトリ１１８のキーと値のペアを記憶、アクセスおよび管理する呼び出しを行なえるようにする、全クライアント１０６、１０８および１１０への共通インターフェイスを提示する。以下により詳細に説明されるように、ＡＰＩ層１１２内のルーチンは、キーと値のペアを永続的に記憶するために最終的に使用される実際のストレージサブシステム１６０とは独立したインターフェイスを、クライアント１０６、１０８および１１０に公開する。
【００１７】
サービス抽象層１１４は、ＡＰＩ層１１２でのルーチンによって受取られた呼び出しをいかに処理するかを決定するルーチンを含んでいる。メッセージングおよびキャッシュ層１１６は、リポジトリ１１８の構成要素によってリポジトリ１１８の他の構成要素と通信するために呼び出され得るルーチンを含んでいる。加えて、メッセージングおよびキャッシュ層１１６は、クライアントが出した要求すべてがストレージサブシステム１６０へのアクセスをもたらすことにはならないように、キーと値のペアのキャッシュを管理するためのルーチンを含んでいる。
【００１８】
ストレージ抽象層１５０はプラグイン１５２および１５４を含む。各プラグインは、層１１４および１１６のルーチンに、同じストレージアクセスＡＰＩを公開する。しかしながら、共通のストレージＡＰＩを実現するルーチンは、プラグインに関連するストレージサブシステムの種類に基づき、プラグインにより異なる。ストレージサブシステム１６０は、キーと値のペアを記憶可能な任意の形の永続的ストレージシステムを表わしている。これらの層の各々を、以下により詳細に説明する。
【００１９】
マスタ構成要素およびキャッシング構成要素
一実施例によれば、リポジトリ１１８の一構成要素は、マスタ構成要素として指定される。マスタ構成要素のメッセージングおよびキャッシュ層１１６におけるルーチンは、ストレージ抽象層１５０に独占的にアクセスする。マスタ構成要素は、リポジトリ１１８からの情報のマスタキャッシュも管理する。図１に示す実施例では、構成要素１７４がマスタ構成要素である。したがって、構成要素１７４のメッセージングおよびキャッシュ層１１６におけるルーチンはマスタキャッシュ１４８を管理し、ストレージ抽象層１５０に存在するプラグイン１５２および１５４に独占的にアクセスする。
【００２０】
クラスタの各ノードは、単一の「キャッシング構成要素」も含む。あるノード用のキャ
ッシング構成要素は、リポジトリ１１８からの情報のキャッシュを保持する。キャッシング構成要素に関連するクライアントは、ここでは「キャッシングレベルクライアント」と呼ばれる。一実施例によれば、マスタ構成要素は、マスタ構成要素が存在するノード用のキャッシング構成要素である。
【００２１】
図示された実施例では、構成要素１７２はノード１０２用のキャッシング構成要素であり、そのようなものとしてキャッシュ１３８を管理する。構成要素１７２に関連するクライアント１０８は、ノード１０２用のキャッシングレベルクライアントである。ノード１０２上に同様に存在する構成要素１７０はキャッシング構成要素ではなく、したがって、リポジトリ１１８からの情報のそれ自体のキャッシュを保持していない。
【００２２】
一実施例によれば、クライアントは、クライアントが行なったＡＰＩ層１１２のルーチンへの呼び出しを介してリポジトリ１１８に渡された情報に基づいて、その関連する構成要素をキャッシング構成要素として確立する。たとえば、クライアント１０８は、適切な呼び出しをＡＰＩ１３０に行なうことによって、それ自体をノード１０２用のキャッシングレベルクライアントとして確立してもよい。呼び出しは、構成要素１７２がノード１０２用のキャッシング構成要素となるべきであることを示す値をＡＰＩ１３０に渡してもよい。
【００２３】
キャッシングレベルクライアントは通常、キャッシング構成要素によって管理されるキャッシュにより速くアクセスするので、特定のノード上のキャッシングレベルクライアントは、リポジトリを最もよく使用するクライアントであることが好ましい。たとえば、クライアント１０６およびクライアント１０８は２つの異なる種類のクライアントを表わし、クライアント１０８はリポジトリ１１８をよく使用し、クライアント１０６はリポジトリ１１８をほとんど使用しない、といった状況では、クライアント１０８がキャッシングレベルクライアントとして選択される。クライアント１０８はその場合、構成要素１７２がノード１０２用のキャッシング構成要素となるように構成要素１７２に適切な呼び出しを行なうよう設計され得る。
【００２４】
代替的な一実施例によれば、ノード１０２上のクライアントの実際のリポジトリの使用がモニターされて、リポジトリ１１８を最もよく使用している構成要素がキャッシング構成要素として動的に選択されてもよい。そのような実施例では、ルーチンは、構成要素に関連するクライアントの変化するアクセスパターンに基づいて、キャッシング責任を一構成要素から別の構成要素へ動的に渡すためにさえ提供され得る。
【００２５】
書込動作がリポジトリに対して行なわれる際にキャッシュを管理するためにさまざまな手法が使用され得る。たとえば、ある実施例は書込動作中にキャッシュを保持する「ライトスルー」アプローチを用いるかもしれない。この発明は、書込動作中にキャッシュを管理するどの特定のアプローチにも限定されない。
【００２６】
図１に示す実施例では、クラスタ１００は、ストレージ抽象層１５０と相互作用する権利を有する単一のマスタ構成要素１７４を有する。抽象層１５０は単一のマスタ構成要素１７４からアクセスされるため、リソース共有および並行処理制御に関連するさまざまな問題が回避され得る。しかしながら、代替的な実施例は、ストレージ抽象層１５０と直接相互作用する権利を有する複数のマスタ構成要素を含むかもしれない。そのようなシステムにおける潜在的に有害な相互作用を回避するために、さまざまな並行処理制御手法が使用されてもよい。たとえば、キーの名前空間は区分化されてもよく、各マスタ構成要素は名前空間の区画のうちの１つに割当てられる。そのような実施例では、各マスタ構成要素は、マスタ構成要素に割当てられた名前空間区画内に当てはまるキーに関与する動作についてのみ、ストレージ抽象層１５０へのアクセスが許可されてもよい。
【００２７】
ＡＰＩ層
キーと値のペアを管理するためにリポジトリ１１８を使用したいクライアントは、ＡＰＩ層１１２におけるルーチンを呼び出すことによってそれを行なう。一実施例によれば、ＡＰＩ層１１２のルーチンは、リポジトリ１１８によってサポートされる全動作のためにインターフェイスを公開する。一実施例では、ＡＰＩ層１１２のルーチンはパラメータ検証およびエラーチェックを行なう。ＡＰＩ層１１２のルーチンになされた呼び出しがＡＰＩ層１１２で行なわれる試験に通ると、呼び出しはサービス抽象層１１４の適切なルーチンに渡される。
【００２８】
ＡＰＩ層１１２のルーチンは、そのようなクライアントの開発者たちにコードライブラリの形で提供されてもよい。開発者たちはその場合、自身のクライアントに、コードライブラリ内のルーチンを呼び出すコードを含めてもよい。コードライブラリは次に、クライアントコードがコンパイルされる時点でクライアントコードと静的にリンクされるか、または実行時にクライアントコードに動的にリンクされてもよい。
【００２９】
一実施例によれば、ＡＰＩ層１１２によって公開されるインターフェイスは、多数のプログラミング言語用のインターフェイスを含んでいてもよい。たとえば、ＡＰＩ層１１２は、ＪＡＶＡ（登録商標）プログラミング言語で書かれた、またはＪＡＶＡ（登録商標）プログラミング言語と互換性のあるクライアントによって使用されるＪＡＶＡ（登録商標）ＡＰＩと、Ｃプログラミング言語で書かれた、またはＣプログラミング言語と互換性があるクライアントによって使用される「Ｃ」言語ＡＰＩとの双方を公開してもよい。
【００３０】
代替的な一実施例によれば、ＡＰＩ層１１２はＣ言語インターフェイスのみを公開し、リポジトリ１１８は、他の言語で書かれたクライアントから受取られた呼び出しに基づいてＡＰＩ層１１２へ呼び出しを行なうための１つ以上の追加モジュールを含む。そのようなモジュールは、ある言語のクライアントからの呼び出しを、ＡＰＩ層１１２によって公開されたインターフェイスにサポートされる言語での呼び出しに、効果的に変換する。たとえば、そのようなモジュールは、Ｊａｖａ（登録商標）ベースのクライアントにＪＡＶＡ（登録商標）ベースのリポジトリＡＰＩを公開し、次にＪＮＩラッパーを用いて、ＪＡＶＡ（登録商標）ベースのリポジトリＡＰＩを介してなされた呼び出しを、ＡＰＩ層１１２によって公開された「Ｃ」ベースのリポジトリインターフェイスへの、モジュールによる呼び出しに変換してもよい。
【００３１】
サービス抽象層
サービス抽象層１１４は、クライアントからなされた呼び出しをいかに処理するかを決定する。さまざまな要因が、任意の所与の呼び出しがいかに扱われるかを決定し得る。そのような要因は、たとえば、呼び出しを行なうクライアントの識別情報、呼び出しに適用可能なアクセスモード、呼び出しによって要求される動作の種類を含む。アクセスモードを、以下により詳細に説明する。
【００３２】
これらの要因に依存して、サービス抽象層１１４のルーチンは、リポジトリ１１８の異なる構成要素に要求を送るために、ローカルキャッシュにアクセスし、マスタキャッシュにアクセスし、または、メッセージングおよびキャッシュ層１１６のメッセージングルーチンに呼び出しを行なう。サービス抽象層１１４の呼び出されたルーチンがキャッシング構成要素またはマスタ構成要素内にない場合、サービス抽象層１１４の呼び出されたルーチンは、メッセージングおよびキャッシュ層１１６のルーチンを呼び出して、要求をローカルキャッシング構成要素に渡す。
【００３３】
サービス抽象層１１４の呼び出されたルーチンがキャッシング構成要素内にある場合、
サービス抽象層１１４の呼び出されたルーチンはローカルキャッシュをチェックして、キャッシュが要求に返答するための情報を含んでいるかどうかを確かめる。ローカルキャッシュが要求に返答するための情報を含んでいない場合、サービス抽象層１１４の呼び出されたルーチンは、メッセージングおよびキャッシュ層１１６のルーチンを呼び出して、要求をマスタ構成要素に渡す。
【００３４】
サービス抽象層１１４の呼び出されたルーチンがマスタ構成要素内にある場合、サービス抽象層１１４の呼び出されたルーチンはマスタキャッシュをチェックして、キャッシュが要求に返答するための情報を含んでいるかどうかを確かめる。マスタキャッシュが要求に返答するための情報を含んでいない場合、サービス抽象層１１４の呼び出されたルーチンは、メッセージングおよびキャッシュ層１１６のルーチンを呼び出し、ストレージサブシステム１６０のうちの１つの永続的なストレージから情報を検索するためにストレージ抽象層１５０の適切なプラグインを呼び出す。
【００３５】
一実施例によれば、サービス抽象層１１４のルーチンからメッセージングおよびキャッシュ層１１６のメッセージングルーチンになされた呼び出しはすべて、処理状態を把握していない。そのような実施例では、サービス抽象層１１４がメッセージングおよびキャッシュ層１１６内のメッセージングルーチンを介して送る各メッセージは、所望の動作を行なうのに必要な情報をすべて含んでいる。
【００３６】
一実施例によれば、キャッシング構成要素およびマスタ構成要素のサービス抽象層１１４のルーチンは、クライアントを認証する責任を有する。認証動作中、ルーチンはクライアントが「信頼できる」かどうかを判断する。「信頼できる」とされなかったクライアントは、ある種の動作を行なうことを許可されない。
【００３７】
メッセージングおよびキャッシュ層
メッセージングおよびキャッシュ層１１６は、キャッシュにアクセスしてキャッシュを管理するためのルーチンと、リポジトリ１１８の他の構成要素と通信するためのルーチンとを含む。一実施例によれば、キャッシングルーチンは各ノードの一構成要素にしか使用されない。ノード上の他の構成要素は、キャッシュを管理している構成要素に要求を送ることによって間接的にキャッシュを使用する。
【００３８】
一実施例によれば、キャッシングルーチンがいかにして要求を満たすかは、キャッシングルーチンを呼び出すルーチンには完全にトランスペアレントである。具体的には、要求を受取ると、キャッシングルーチンは、それが管理するキャッシュをチェックする。キャッシュが要求を満たすのに必要な情報を含んでいる場合、キャッシングルーチンはその情報をキャッシュから検索して、その情報を呼び出しルーチンに提供する。しかしながら、キャッシュが要求を満たすのに必要な情報を含んでいない場合、キャッシングルーチンは必要な情報を他の手段で獲得する。たとえば、キャッシングルーチンがキャッシング構成要素に属している場合、キャッシングルーチンは、メッセージングルーチンを呼び出して、必要な情報をマスタ構成要素から要求してもよい。キャッシングルーチンがマスタ構成要素に属している場合、キャッシングルーチンは適切なストレージ抽象層のプラグインを呼び出して、要求された情報をストレージサブシステムから検索してもよい。キャッシングルーチンは、それが管理するキャッシュに情報を記憶させてもよく、加えて、要求された情報を呼び出しルーチンに戻してもよい。
【００３９】
一実施例によれば、メッセージングおよびキャッシュ層１１６のメッセージングルーチンは、少なくともメッセージがクラスタ内のプラットフォーム境界を横断しなければならない場合に、要求をネットワークバイトオーダで送信するよう構成されている。たとえば、ノード１０２が第１のプラットフォーム上で起動し、ノード１０４が第２のプラットフ
ォーム上で起動していると仮定する。そのような筋書きでは、ノード１０２のメッセージングルーチンは、ノード１０４上のメッセージングルーチンに、メッセージをネットワークバイトオーダで送信する。同様に、ノード１０４上のメッセージングルーチンは、ノード１０２上のメッセージングルーチンに、メッセージをネットワークバイトオーダで送信する。プラットフォーム境界を越えてメッセージをネットワークバイトオーダで送信することにより、送信側によって送信されるメッセージは、送信側とは異なるプラットフォーム上に存在する受信側によって正確に再構築され得る。
【００４０】
ストレージ抽象層
一実施例によれば、ストレージ抽象層１５０に設けられたルーチンは、どの種類のバックエンドストレージが、リポジトリ１１８により管理されるキーと値のペア情報を永続的に記憶するために使用されているかを完全に抽象する。たとえば、プラグイン１５２がプラグイン１５４とはまったく異なるストレージサブシステムで動作するよう設計されていても、プラグイン１５２およびプラグイン１５４は双方とも、マスタ構成要素１７４のメッセージングおよびキャッシュ層１１６のキャッシングルーチンに、同一のインターフェイスを公開する。プラグイン１５２および１５４が同じインターフェイスをキャッシングルーチンに公開する一方、そのインターフェイスを実現するルーチンの論理は、プラグインがどの種類のバックエンドストレージと相互作用するよう設計されているかに基づいて、まったく異なっていてもよい。
【００４１】
重大なことに、プラットフォームに特有の論理はすべて、ストレージ抽象層１５０のプラグインに含まれているため、リポジトリ１１８の他のすべての層でのルーチンはプラットフォームに特有のものでも、ストレージサブシステムに特有のものでもない。したがって、リポジトリ１１８を使用するクライアントはプラットフォームに特有の設計詳細から効果的に隔離され、クライアントおよびリポジトリ１１８の上層構成要素が双方ともプラットフォーム間でポータブルであるようにする。
【００４２】
ストレージ抽象層１５０は共通のインターフェイスを公開する１つ以上のプラグインを用いて実現されているため、リポジトリ１１８は、どの特定のバックエンドサブシステムまたはプラットフォームにも限定されない。公開された共通インターフェイスに関連する機能性を提供できる任意のサブシステムおよびプラットフォームが使用されてもよい。そのようなバックエンドプラットフォームは、ＬＤＡＰ、ＭＳＣＳ、共有ロウデバイス、ロウデバイス、および／または、何も共有しないクラスタ、クラスタファイルシステム（ＣＦＳ）および分散型コンフィギュレーションリポジトリ内のプライベートファイルシステムファイルを含んでいてもよいが、それらに限定されない。
【００４３】
リポジトリ１１８が、パーシステントなストレージ上のキーと値のペアへのアクセスを必要とする動作を実行するよう要求されると、ストレージ抽象層１５０へ呼び出しが（通常、マスタ構成要素のメッセージングおよびキャッシュ層のキャッシングルーチンから）なされる。一実施例によれば、リポジトリ１１８は、さまざまな可能な要因の１つ以上に基づいて、呼び出すべき特定のプラグインを選択する。たとえば、リポジトリ１１８は、アドミニストレータによって値が設定可能な環境変数を含んでいてもよく、環境変数の値は、リポジトリ１１８により管理されるデータをパーシステントに記憶するためにどの種類のストレージサブシステムが使用されるべきかを示す。また、これに代えて、リポジトリ１１８は、リポジトリ１１８の特定のインストールにどのストレージサブシステムが利用できるかを検出する発見論理を含んでいてもよい。１種類のサブシステムしか利用できない場合には、その種類のサブシステムに関連するプラグインが選択される。いくつかの種類が利用できる場合には、リポジトリ１１８は、さまざまな他の考慮事項に基づいて、利用できる種類の中から選択してもよい。これらの考慮事項は、ストレージサブシステム１６０におけるストレージ容量または利用可能な自由空間を含み得るが、それらに限定さ
れない。一旦選択されると、適切なプラグインが揮発性メモリに動的にロードされてもよく、プラグイン内のルーチンが呼び出されてもよい。
【００４４】
各プラグインは異なる種類のバックエンドストレージシステムと相互作用するよう設計されているため、プラグインの選択は、リポジトリ１１８によって管理されるキーと値のペアがパーシステントに記憶されるバックエンドプラットフォームの性質を決定する。たとえば、対象となるキーと値のペアが、共有されたストレージ装置上に配置されるべきである場合、プラグイン１５２のルーチンが呼び出されてもよい。対象となるキーと値のペアが、ＬＤＡＰサーバによって管理されるストレージサブシステム内で管理されるべきである場合、プラグイン１５４の対応するルーチンが呼び出されてもよい。一実施例によれば、プラグイン１５２および１５４によって公開されるインターフェイスが同一であるため、呼び出されたルーチン名および呼び出しのパラメータは、双方の場合において同じであり、それにより、ストレージサブシステム１６０の性質を、クライアント１０６、１０８および１１０、ならびにリポジトリ１１８の上層のルーチンにトランスペアレントにしている。
【００４５】
ストレージ抽象層１５０によって公開されるインターフェイスにより、ストレージ抽象層１５０の外部の処理は、インターフェイスを介してストレージ抽象層１５０のルーチンに呼び出しを行ない、リポジトリ１１８に求められるさまざまな機能を行なうようになる。一実施例では、リポジトリ１１８は、ノードに依存したキーをサポートする。具体的には、リポジトリ１１８の多数のクライアント（ノード１０２上のクライアント１０６および１０８、ならびにノード１０４上のクライアント１１０）は各々、キーと値のペアを記憶することを望んでいるかもしれず、この場合、各クライアントが使用するキーネームは同じであるが、そのキーネームについて異なるノード上で各クライアントが使用する値は異なっていてもよい。たとえば、各クライアントは、“背景色”＝Ｘ（ここで、Ｘは青、緑または紫のうちのいずれか１つであればよい）というキーと値のペアを記憶することを望んでいるかもしれない。ノードに依存したキーを使用して、リポジトリ１１８は、各クライアントに対し、クライアントがたまたま起動しているノードに依存して「背景色」用の値を別個に記憶する。この例については、ノード１０２上のクライアント１０６および１０８は背景色キーに対して同じ値を認めるが、ノード１０４上のクライアント１１０は同じ背景色キーに対して異なる値を認める。
【００４６】
例示的な要求シーケンス
一実施例によれば、リポジトリ１１８によって管理される情報についての要求は、まず、同じノード上に存在するキャッシュを要求元としてチェックすることにより処理される。情報がローカルノードキャッシュにない場合、マスタキャッシュがチェックされる。情報がマスタキャッシュにない場合、永続的なストレージから情報を検索するようストレージ抽象層１５０に呼び出しがなされる。
【００４７】
たとえば、リポジトリ１１８によって管理され、かつ現在どのキャッシュにも存在していないあるキーと値のペアをクライアント１０６が要求していると仮定する。一実施例によれば、クライアント１０６のためにそのキーと値のペアを検索する動作は、以下のように進行する。
【００４８】
まず、クライアント１０６は、ＡＰＩ層１１２のルーチン（ＡＰＩ１２０）を呼び出して、所望のキーと値のペアの読出しを要求する。ＡＰＩ１２０はその要求をサービス抽象層１１４のルーチン（ＳＶＣ  ＡＢＳＴ１２２）に送る。ＳＶＣ  ＡＢＳＴ１２２はこの要求をどう取扱うかを判断する。この例では、ＳＶＣ  ＡＢＳＴ１２２は、この要求をノード１０２にとってローカルなキャッシュに送るべきであると判断する。構成要素１７０はノード１０２のキャッシング構成要素ではないため、要求をキャッシュに送ることは、
構成要素１７０が別の構成要素１７２と通信することを伴う。この通信を達成するため、要求は構成要素１７０のメッセージングおよびキャッシュ層１１６のルーチン（ＭＳＧ１２４）に渡される。
【００４９】
ＭＳＧ１２４は、キャッシング構成要素１７２のメッセージングおよびキャッシュ層１１６のルーチン（ＭＳＧ１３４）に要求を通信する。ＭＳＧ１３４は、キャッシング構成要素１７２のサービス抽象層１１４のルーチン（ＳＶＣ  ＡＢＳＴ１３２）まで要求を渡す。ＳＶＣ  ＡＢＳＴ１３２は、キャッシュ１３８が要求された情報を含むかどうかを判断するためにキャッシュ１３８を検査すべきであると判断する。ＳＶＣ  ＡＢＳＴ１３２は、メッセージングおよびキャッシュ層１１６のルーチンに適切な呼び出しを行なう。
【００５０】
情報がローカルキャッシュ１３８内で見つからない場合、ＭＳＧ１３４からマスタ構成要素１７４のメッセージングおよびキャッシュ層１１６のルーチン（ＭＳＧ１４４）にメッセージが送られる。ＭＳＧ１４４は要求をマスタ構成要素１７４のサービス抽象層１１４のルーチン（ＳＶＣ  ＡＢＳＴ１４２）まで渡す。ＳＶＣ  ＡＢＳＴ１４２は、キャッシュ１４８が要求された情報を含むかどうかを判断するためにマスタキャッシュ１４８を検査すべきであると判断する。ＳＶＣ  ＡＢＳＴ１４２は、メッセージングおよびキャッシュ層１１６のルーチンに適切な呼び出しを行なう。
【００５１】
情報がマスタキャッシュ１４８内で見つからない場合、ストレージ抽象層１５０の適切なプラグイン（たとえばプラグイン１５２）にメッセージが送られる。プラグイン１５２は、要求された情報が、ストレージサブシステム１６０のうちの１つのパーシステントなストレージからキャッシュ１４８へと検索されるようにする。ＭＳＧ１４４は次に、要求された情報を戻すことによってＭＳＧ１３４からの呼び出しを戻す。ＭＳＧ１３４は、情報がキャッシュ１３８に記憶されるようにし、要求された情報を戻すことによってＭＳＧ１２４からの呼び出しを戻す。
【００５２】
ＭＳＧ１２４は情報をＳＶＣ  ＡＢＳＴ１２２に戻し、それは次に情報をＡＰＩ１２０に戻す。最後に、ＡＰＩ１２０は要求された情報をクライアント１０６へ送る。
【００５３】
要求された情報がキャッシュ１３８に記憶されたため、ノード１０２上の任意のクライアントによる同じ情報に対するその後の要求は、データをキャッシュ１３８から検索することによって取扱われてもよい。要求された情報がマスタキャッシュ１４８に記憶されたため、ローカルにキャッシュされた情報を持たないノード上のクライアントによる同じ情報に対するその後の要求は、データをマスタキャッシュ１４８から検索することによって取扱われてもよい。
【００５４】
アクセスモード
一実施例によれば、ＡＰＩ層１１２に提供されたルーチンは、４つのアクセスモードのうちのいずれか１つでアクセスされてもよい。クライアントは、たとえば、モードを示すパラメータ値をルーチンに渡すことによって、ある特定のアクセスモードをＡＰＩ層１１２のルーチンに示してもよい。そのようなパラメータを各呼び出しでＡＰＩ層１１２に渡すよりもむしろ、クライアントがＡＰＩ層１１２に行なう最初の呼び出しが「初期化ルーチン」への所望のモードを特定してもよい。初期化ルーチンはハンドルをクライアントに戻してもよく、それをクライアントは次に用いて、ＡＰＩ層１１２への将来の呼び出しすべてを行なう。ハンドルは、クライアントのアクセスモードを示すデータに関連付けられてもよい。したがって、その後の呼び出しすべてにおいてハンドルを渡すことは、その後の呼び出しを処理するルーチンに、それらの呼び出しに応じるために使用すべきアクセスモードについて効果的に知らせる。
【００５５】
一実施例によれば、同じクライアントの異なるモジュールは、リポジトリ１１８に異なるアクセスモードでアクセスしてもよい。たとえば、クライアント１０８内の第１のモジュールはリポジトリ１１８に読出し専用モードでアクセスし、一方、クライアント１０８内の別のモジュールはリポジトリ１１８にキャッシングアクセスモードでアクセスしてもよい。同様に、クライアントは、ＡＰＩ層１１２に適切な呼び出しを行なうことによって、あるアクセスモードから別のアクセスモードへ遷移してもよい。
【００５６】
ある特定のクライアントが要求するアクセスモードは、クライアントの役割、および／またはクライアントが実行を意図する動作の種類によって命令される。一実施例によれば、リポジトリ１１８によってサポートされるモードは、インストールモード、読出し専用アクセスモード、キャッシングアクセスモード、およびデフォルトアクセスモードを含む。
【００５７】
インストールモード：インストールモードは、クライアント（通常、リポジトリインストールプログラム）がリポジトリを作成または再作成する動作を行なうために使用するモードである。一実施例によれば、インストールモードは一度に１つのクライアントにしか保持されず、他のすべてのクライアントが任意のリポジトリ動作を行なわないようにする。
【００５８】
読出し専用アクセスモード：読出し専用アクセスモードを要求することにより、クライアントは、それが読出し専用動作のみを行なっていることを示す。クライアントに対して読出し専用アクセスモードで動作を行なう場合、リポジトリ１１８内の並行処理制御論理はすべて無効にされる／回避される。したがって、動作は一般に、書込動作を可能とするモードで実行される場合よりも速く、かつより少ないオーバーヘッドで実行され得る。読出し動作は概して他の読出し動作とのアクセス競合を引起こさないため、読出し専用アクセスモードは多数のクライアントによって並行して共有されてもよい。
【００５９】
一実施例によれば、リポジトリ１１８は、リポジトリ１１８内での動作中、クラスタコンフィギュレーションソフトウェアを用いて並行処理制御のうちの一部を行なう。そのようなクラスタコンフィギュレーションソフトウェアはまた、リポジトリ１１８を用いてクラスタ１００用の立上げ情報を記憶してもよい。そのような実施例では、クラスタコンフィギュレーションソフトウェアは、読出し専用アクセスモードを用いて、クラスタ１００が立上げられている間にクラスタコンフィギュレーション情報にアクセスし、クラスタコンフィギュレーションソフトウェアがそれ自体十分に初期化されるまで、クラスタコンフィギュレーションソフトウェアの並行処理制御ルーチンが確実に実行されないようにする。
【００６０】
キャッシングアクセスモード：キャッシングアクセスモードは、クライアントが使用する構成要素を、あるノード用のキャッシング構成要素として確立するために、クライアントが使用するモードである。たとえば、構成要素１７２は、クライアント１０８が構成要素１７２をキャッシングアクセスモードで初期化することに応答して、ノード１０２のキャッシング構成要素として確立される。クライアント１０８が構成要素１７２を初期化する呼び出しを行なうと、リソースがキャッシュ１３８用に割当てられてもよい。読出し動作がキャッシングアクセスモードで行なわれると、サービス抽象層１１４内のルーチンはメッセージングおよびキャッシュ層１１６のキャッシングルーチンを呼び出して、キャッシュ１３８内で要求された情報を検索する。
【００６１】
デフォルトアクセスモード：デフォルトアクセスモードは、（１）キャッシング構成要素に関連付けられていないクライアント、および（２）インストールモードまたは読出し専用アクセスモードを必要とする動作を実行していないクライアントによって使用される
モードである。デフォルトアクセスモードで動作を行なうと、サービス抽象層１１４のルーチンは、メッセージングおよびキャッシュ層１１６のメッセージングルーチンを用いて、読出された要求をローカルキャッシング構成要素へ送る。
【００６２】
一実施例によれば、クライアントはあるモードから別のモードへと遷移可能である。そのような遷移は、たとえば、前の呼び出しでＡＰＩ層のルーチンへ渡されたものとは異なるアクセスモードパラメータ値をその後の呼び出しでＡＰＩ層のルーチンに渡すことによって開始されてもよい。さらに別の実施例によれば、単一のクライアント処理の異なるスレッドまたはモジュールは、異なるアクセスモードを使用してもよい。たとえば、あるクライアントの第１のモジュールにおけるすべての呼び出しが、あるアクセスモード値をＡＰＩ層ルーチンに渡してあるアクセスモードを獲得し、一方、同じクライアントの第２のモジュールにおけるすべての呼び出しが、異なるアクセスモード値をＡＰＩ層ルーチンに渡して異なるアクセスモードを獲得してもよい。
【００６３】
ハードウェア概要
図２は、この発明の一実施例が実現され得るコンピュータシステム２００を示すブロック図である。コンピュータシステム２００は、情報を通信するためのバス２０２または他の通信メカニズムと、情報を処理するためにバス２０２と結合されたプロセッサ２０４とを含む。コンピュータシステム２００はまた、プロセッサ２０４により実行されるべき命令および情報を記憶するためにバス２０２に結合される、ランダムアクセスメモリ（ＲＡＭ）または他のダイナミックストレージ装置などのメインメモリ２０６を含む。メインメモリ２０６は、プロセッサ２０４により実行されるべき命令の実行中に、一時的な変数または他の中間情報を記憶するためにも使用されてもよい。コンピュータシステム２００はさらに、プロセッサ２０４用の命令およびスタティック情報を記憶するためにバス２０２に結合された読出し専用メモリ（ＲＯＭ）２０８または他のスタティックストレージ装置を含む。磁気ディスクまたは光ディスクなどのストレージ装置２１０が、情報および命令を記憶するために提供され、バス２０２に結合されている。
【００６４】
コンピュータシステム２００は、バス２０２を介して、情報をコンピュータユーザに表示するためのブラウン管（ＣＲＴ）といったディスプレイ２１２に結合されてもよい。英数字キーおよび他のキーを含む入力装置２１４が、情報およびコマンド選択をプロセッサ２０４に通信するためにバス２０２に結合される。ユーザ入力装置の別の例は、マウス、トラックボール、またはカーソル方向キーなどのカーソル制御２１６であり、方向情報およびコマンド選択をプロセッサ２０４に通信し、ディスプレイ２１２上のカーソルの動きを制御する。この入力装置は通常、２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において２つの自由度を有しており、それによりこの装置は平面における場所を特定することができる。
【００６５】
この発明は、ここに説明された手法を実現するためのコンピュータシステム２００の使用に関する。この発明の一実施例によれば、これらの手法は、プロセッサ２０４がメインメモリ２０６に含まれる１つ以上の命令の１つ以上のシーケンスを実行するのに応答して、コンピュータシステム２００によって行なわれる。そのような命令は、ストレージ装置２１０などの別のコンピュータ読取可能な媒体からメインメモリ２０６に読込まれてもよい。メインメモリ２０６に含まれる命令のシーケンスの実行により、プロセッサ２０４は、ここに説明されたプロセスステップを行なうようになる。代替的な実施例では、この発明を実現するために、ソフトウェアの命令の代わりに、またはソフトウェア命令と組合せて、配線接続回路が使用されてもよい。このため、この発明の実施例は、配線接続回路とソフトウェアとのどの特定の組合せにも限定されない。
【００６６】
ここで用いられるような「コンピュータ読取可能な媒体」という用語は、プロセッサ２
０４に実行用に命令を提供することに関与するあらゆる媒体を指す。そのような媒体は、不揮発性媒体、揮発性媒体、および通信媒体を含むもののそれらに限定されない多くの形態をとり得る。不揮発性媒体は、たとえば、ストレージ装置２１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ２０６などのダイナミックメモリを含む。通信媒体は、バス２０２を構成する配線を含む、同軸ケーブル、銅線および光ファイバを含む。通信媒体は、電波および赤外線データ通信中に発生するものなどの音波または光波の形もとり得る。
【００６７】
コンピュータ読取可能な媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、または任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光媒体、パンチカード、紙テープ、孔のパターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップまたはカートリッジ、以下に記載されるような搬送波、またはコンピュータがそこから読出し可能な任意の他の媒体を含む。
【００６８】
コンピュータ読取可能な媒体のさまざまな形態は、１つ以上の命令の１以上のシーケンスをプロセッサ２０４に実行用に保持することに関与していてもよい。たとえば、命令はまず、遠隔コンピュータの磁気ディスク上に保持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、電話回線を通してモデムを用いて命令を送ることができる。コンピュータシステム２００にとってローカルなモデムは、電話回線上のデータを受信し、赤外線送信機を用いてデータを赤外線信号に変換することができる。赤外線検出器は赤外線信号で搬送されたデータを受信することができ、適切な回路がそのデータをバス２０２上に配置することができる。バス２０２はそのデータをメインメモリ２０６へ搬送し、そこからプロセッサ２０４が命令を検索して実行する。メインメモリ２０６によって受信された命令は、プロセッサ２０４による実行の前または後のいずれかで、ストレージ装置２１０に随意に記憶されてもよい。
【００６９】
コンピュータシステム２００は、バス２０２に結合された通信インターフェイス２１８も含む。通信インターフェイス２１８は、ローカルネットワーク２２２に接続されたネットワークリンク２２０に双方向データ通信結合を提供する。たとえば、通信インターフェイス２１８は、データ通信接続を対応する種類の電話回線に提供するデジタル総合サービス網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス２１８は、データ通信接続を互換性があるＬＡＮに提供するローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクも実現可能である。そのような任意の実現化例では、通信インターフェイス２１８は、さまざまな種類の情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号または光信号を送信および受信する。
【００７０】
ネットワークリンク２２０は通常、１つ以上のネットワークを介して他のデータ装置へデータ通信を提供する。たとえば、ネットワークリンク２２０は、ローカルネットワーク２２２を介して、ホストコンピュータ２２４へ、またはインターネットサービスプロバイダ（ＩＳＤ）２２６により運営されるデータ装置へ、接続を提供してもよい。ＩＳＰ２２６は次に、現在一般に「インターネット」２２８と呼ばれている全世界的パケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク２２２およびインターネット２２８は双方とも、電気信号、電磁信号または光信号を使用してデジタルデータストリームを搬送する。コンピュータシステム２００へ、またはコンピュータシステム２００からデジタルデータを搬送する、さまざまなネットワークを通る信号と、ネットワークリンク２２０上の、および通信インターフェイス２１８を通る信号とは、情報を伝達する搬送波の例示的な形態である。
【００７１】
コンピュータシステム２００は、ネットワーク、ネットワークリンク２２０および通信
インターフェイス２１８を通して、メッセージを送信し、プログラムコードを含むデータを受信する。インターネットの例では、サーバ２３０は、アプリケーションプログラムについて要求されたコードを、インターネット２２８、ＩＳＰ２２６、ローカルネットワーク２２２および通信インターフェイス２１８を介して送信してもよい。
【００７２】
受信されたコードは、それが受信されたときにプロセッサ２０４によって実行されてもよく、および／または、後での実行のためにストレージ装置２１０または他の不揮発性ストレージに記憶されてもよい。このように、コンピュータシステム２００は、搬送波の形をしたアプリケーションコードを獲得し得る。
【００７３】
前述の明細書において、この発明を、その特定の実施例を参照して説明してきた。しかしながら、この発明のより幅広い精神および範囲を逸脱することなく、さまざまな修正および変更がそれになされてもよいことは明らかである。明細書および図面は、したがって、限定的な意味というよりもむしろ例示的な意味において考察されるべきである。
【図面の簡単な説明】
【００７４】
【図１】この発明の一実施例に従ったキーと値のペアのリポジトリのブロック図である。
【図２】この発明の実施例が実現され得るコンピュータシステムのブロック図である。
【図１】
2005522787.tif 000003
【図２】
2005522787.tif 000004
【手続補正書】
【提出日】平成16年5月25日(2004.5.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを、アプリケーションプログラミング層で公開するステップと、
ストレージ抽象層の共通のインターフェイスを介して複数のプラグインのうちの１つを呼び出すことによって、前記リポジトリインターフェイスを介して行なわれた呼び出しに応じるステップと、
動作を実行する要求を受取るステップと、
前記動作の実行中にアクセスするために、前記複数のプラグインのうちのどの特定のプラグインが、ストレージサブシステムの種類に対応するかを判断するステップと、
ストレージサブシステムの前記種類に対応する特定のプラグインを動的にロードするステップと、
前記共通のインターフェイスを介して前記特定のプラグインに１つ以上の呼び出しを行なうことによって前記動作を実行するステップとを含み、
前記複数のプラグインの各プラグインは、永続的に記憶されたキーと値のペア情報にアクセスするために前記共通のインターフェイスを公開し、
前記複数のプラグインの各プラグインは、前記共通のインターフェイスを介して行なわれた呼び出しに応答して、ある特定の種類のストレージサブシステムと相互作用するよう設計されており、
各プラグインが相互作用するストレージサブシステムは、前記複数のプラグインの他の各々が相互作用するストレージサブシステムとは異なる種類のストレージサブシステムである、方法。
【請求項２】
前記リポジトリの単一の構成要素をマスタ構成要素として指定するステップと、
クラスタの複数のノードにわたって広がっている構成要素において、前記複数のノード上に存在するクライアントから前記リポジトリインターフェイスを介して呼び出しを受取るステップと、
パーシステントなストレージへのアクセスを要求するすべての呼び出しを前記マスタ構成要素に向けるステップとをさらに含み、
マスタ構成要素は、前記共通のインターフェイスを介してプラグインを呼び出すステップを行なうことが許可された前記リポジトリの唯一の構成要素である、請求項１に記載の方法。
【請求項３】
クライアントから前記リポジトリインターフェイスを介して要求を受取るステップと、
前記共通のインターフェイスを介して、前記要求により必要とされる情報について呼び出しを行なう前に、マスタキャッシュにおいて前記情報を検索するステップとをさらに含む、請求項１に記載の方法。
【請求項４】
クライアントは第１のノード上に存在し、マスタキャッシュは第２のノード上に存在し、
前記方法は、前記マスタキャッシュにおいて前記情報を検索するステップの前に、前記第１のノード上のローカルキャッシュ上で前記情報を検索するステップをさらに含む、請求項３に記載の方法。
【請求項５】
第１のノードは前記リポジトリの複数の構成要素を含み、
クライアントは前記複数の構成要素の第１の構成要素に関連付けられており、
前記方法はさらに、
前記複数の構成要素の１つの構成要素のみをキャッシング構成要素として確立するステップと、
前記第１の構成要素が前記キャッシング構成要素ではない場合、前記第１の構成要素から前記キャッシング構成要素にメッセージが送られるようにして、前記キャッシング構成要素に前記情報について前記ローカルキャッシュを検索させるステップとを含む、請求項４に記載の方法。
【請求項６】
前記リポジトリインターフェイスを実現するルーチンを含むコードライブラリを作成するステップと、
前記コードライブラリをクライアントコードにリンクさせて、前記クライアントコードにおけるルーチンが、前記コードライブラリの前記ルーチンを呼び出すことによって前記リポジトリを使用できるようにするステップとをさらに含む、請求項１に記載の方法。
【請求項７】
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しにおけるパラメータの値に基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとをさらに含む、請求項１に記載の方法。
【請求項８】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しに基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを含む、方法。
【請求項９】
リポジトリは、キャッシングアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
呼び出しを受取るステップは、キャッシングアクセスモードおよびデフォルトアクセスモードのうちの１つを特定する呼び出しを受取るステップを含み、
前記方法は、前記呼び出しが前記キャッシングアクセスモードを特定する場合に、前記クライアントに関連する前記リポジトリの構成要素をキャッシング構成要素として確立するステップを含む、請求項８に記載の方法。
【請求項１０】
前記呼び出しが前記デフォルトアクセスモードを特定すると判断することに応答して、前記構成要素により受取られた前記リポジトリからの情報を読出す要求を、前記クライアントから第２のクライアントに関連する第２のキャッシング構成要素にわたすステップと、
前記第２の構成要素によって管理される前記リポジトリからの情報のキャッシュを検査することによって、前記要求に対して前記第２の構成要素に応答させるステップとをさらに含む、請求項９に記載の方法。
【請求項１１】
前記構成要素と前記第２のキャッシング構成要素とは単一のノード上に存在する、請求項１０に記載の方法。
【請求項１２】
第２のキャッシング構成要素により管理されるキャッシュが前記クライアントからの特定の要求により必要とされる情報を含んでいない場合、前記第２のキャッシング構成要素は、前記要求を、前記ノードに対して遠隔にある第２のノード上に存在する第３の構成要素に送るステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
複数のアクセスモードは、インストールアクセスモードおよび読出し専用アクセスモードをさらに含み、
クライアントは、前記リポジトリを最初に作成する際に前記インストールアクセスモードを使用し、
クライアントは、前記リポジトリから立上がる際に前記読出し専用アクセスモードを使用する、請求項９に記載の方法。
【請求項１４】
キーと値のペアを記憶するための方法であって、
キーと値のペア情報を、キーと値のペア情報用に特に設計されたリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
クライアントから前記リポジトリインターフェイスを介して１つ以上の呼び出しを受取るステップとを含み、
前記キーと値のペア情報をパーシステントに記憶するために、前記リポジトリ用の任意の構造をパーシステントなストレージ上に割当てる前に、前記１つ以上の呼び出しは前記リポジトリインターフェイスで受取られ、前記方法はさらに、
前記１つ以上の呼び出しに基づいて、前記キーと値のペア情報を前記パーシステントなストレージ上にパーシステントに記憶するための構造を作成するステップを含む、方法。
【請求項１５】
前記リポジトリは、インストールアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
１つ以上の呼び出しを受取るステップは、インストールアクセスモードを特定する少なくとも１つの呼び出しを受取るステップを含み、
前記方法は、前記クライアントが前記インストールアクセスモードにとどまっている間、前記インストールアクセスモードと前記リポジトリの独占使用とを前記クライアントに与えるステップを含む、請求項１４に記載の方法。
【請求項１６】
前記複数のアクセスモードは読出し専用アクセスモードを含み、
前記方法は、
読出し専用アクセスモードを用いて動作を実行する要求を第２のクライアントから受取るステップと、
前記動作の実行中、前記リポジトリの並行処理メカニズムを回避するステップとを含む、請求項１５に記載の方法。
【請求項１７】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、前記命令は、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを、アプリケーションプログラミング層で公開するステップと、
ストレージ抽象層の共通のインターフェイスを介して複数のプラグインのうちの１つを呼び出すことによって、前記リポジトリインターフェイスを介して行なわれた呼び出しに応じるステップと、
動作を実行する要求を受取るステップと、
前記動作の実行中にアクセスするために、前記複数のプラグインのうちのどの特定のプラグインが、ストレージサブシステムの種類に対応するかを判断するステップと、
ストレージサブシステムの前記種類に対応する特定のプラグインを動的にロードするステップと、
前記共通のインターフェイスを介して前記特定のプラグインに１つ以上の呼び出しを行なうことによって前記動作を実行するステップとを行なうための命令を含み、
前記複数のプラグインの各プラグインは、永続的に記憶されたキーと値のペア情報にアクセスするために前記共通のインターフェイスを公開し、
前記複数のプラグインの各プラグインは、前記共通のインターフェイスを介して行なわれた呼び出しに応答して、ある特定の種類のストレージサブシステムと相互作用するよう設計されており、
各プラグインが相互作用するストレージサブシステムは、前記複数のプラグインの他の各々が相互作用するストレージサブシステムとは異なる種類のストレージサブシステムである、コンピュータ読取可能な媒体。
【請求項１８】
前記リポジトリの単一の構成要素をマスタ構成要素として指定するステップと、
クラスタの複数のノードにわたって広がっている構成要素において、前記複数のノード上に存在するクライアントから前記リポジトリインターフェイスを介して呼び出しを受取るステップと、
パーシステントなストレージへのアクセスを要求するすべての呼び出しを前記マスタ構成要素に向けるステップとを行なうための命令をさらに含み、
マスタ構成要素は、前記共通のインターフェイスを介してプラグインを呼び出すステップを行なうことが許可された前記リポジトリの唯一の構成要素である、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項１９】
クライアントから前記リポジトリインターフェイスを介して要求を受取るステップと、
前記共通のインターフェイスを介して、前記要求により必要とされる情報について呼び出しを行なう前に、マスタキャッシュにおいて前記情報を検索するステップとを行なうための命令をさらに含む、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項２０】
クライアントは第１のノード上に存在し、マスタキャッシュは第２のノード上に存在し、
前記コンピュータ読取可能な媒体は、前記マスタキャッシュにおいて前記情報を検索するステップの前に、前記第１のノード上のローカルキャッシュ上で前記情報を検索するス
テップを行なうための命令をさらに含む、請求項１９に記載のコンピュータ読取可能な媒体。
【請求項２１】
第１のノードは前記リポジトリの複数の構成要素を含み、
クライアントは前記複数の構成要素の第１の構成要素に関連付けられており、
前記コンピュータ読取可能な媒体はさらに、
前記複数の構成要素の１つの構成要素のみをキャッシング構成要素として確立するステップと、
前記第１の構成要素が前記キャッシング構成要素ではない場合、前記第１の構成要素から前記キャッシング構成要素にメッセージが送られるようにして、前記キャッシング構成要素に前記情報について前記ローカルキャッシュを検索させるステップとを行なうための命令を含む、請求項２０に記載のコンピュータ読取可能な媒体。
【請求項２２】
前記リポジトリインターフェイスを実現するルーチンを含むコードライブラリを作成するステップと、
前記コードライブラリをクライアントコードにリンクさせて、前記クライアントコードにおけるルーチンが、前記コードライブラリの前記ルーチンを呼び出すことによって前記リポジトリを使用できるようにするステップとを行なうための命令をさらに含む、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項２３】
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しにおけるパラメータの値に基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを行なうための命令をさらに含む、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項２４】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、
キーと値のペア情報をリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
前記リポジトリインターフェイスの一部を実現するルーチンを介して、クライアントから呼び出しを受取るステップと、
前記呼び出しに基づいて、前記クライアントに関連する前記リポジトリの構成要素を、前記リポジトリ用のキャッシュを管理する責任を負うキャッシング構成要素として確立するかどうかを判断するステップとを行なうための命令を含む、コンピュータ読取可能な媒体。
【請求項２５】
リポジトリは、キャッシングアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
呼び出しを受取るステップは、キャッシングアクセスモードおよびデフォルトアクセスモードのうちの１つを特定する呼び出しを受取るステップを含み、
前記コンピュータ読取可能な媒体は、前記呼び出しが前記キャッシングアクセスモードを特定する場合に、前記クライアントに関連する前記リポジトリの構成要素をキャッシング構成要素として確立するステップを行なうための命令を含む、請求項２４に記載のコンピュータ読取可能な媒体。
【請求項２６】
前記呼び出しが前記デフォルトアクセスモードを特定すると判断することに応答して、前記構成要素により受取られた前記リポジトリからの情報を読出す要求を、前記クライアントから第２のクライアントに関連する第２のキャッシング構成要素にわたすステッ
プと、
前記第２のキャッシング構成要素によって管理される前記リポジトリからの情報のキャッシュを検査することによって、前記要求に対して前記第２の構成要素に応答させるステップとを行なうための命令をさらに含む、請求項２５に記載のコンピュータ読取可能な媒体。
【請求項２７】
前記構成要素と前記第２のキャッシング構成要素とは単一のノード上に存在する、請求項２６に記載のコンピュータ読取可能な媒体。
【請求項２８】
第２のキャッシング構成要素により管理されるキャッシュが前記クライアントからの特定の要求により必要とされる情報を含んでいない場合、前記第２のキャッシング構成要素は、前記要求を、前記ノードに対して遠隔にある第２のノード上に存在する第３の構成要素に送るステップを行なうための命令をさらに含む、請求項２７に記載のコンピュータ読取可能な媒体。
【請求項２９】
複数のアクセスモードは、インストールアクセスモードおよび読出し専用アクセスモードをさらに含み、
クライアントは、前記リポジトリを最初に作成する際に前記インストールアクセスモードを使用し、
クライアントは、前記リポジトリから立上がる際に前記読出し専用アクセスモードを使用する、請求項２５に記載のコンピュータ読取可能な媒体。
【請求項３０】
キーと値のペアを記憶するための命令を保持するコンピュータ読取可能な媒体であって、
キーと値のペア情報を、キーと値のペア情報用に特に設計されたリポジトリに記憶し、アクセスするよう、クライアントが呼び出しを行なう際に介するリポジトリインターフェイスを公開するステップと、
クライアントから前記リポジトリインターフェイスを介して１つ以上の呼び出しを受取るステップとを行なうための命令を含み、
前記キーと値のペア情報をパーシステントに記憶するために、前記リポジトリ用の任意の構造をパーシステントなストレージ上に割当てる前に、前記１つ以上の呼び出しは前記リポジトリインターフェイスで受取られ、前記コンピュータ読取可能な媒体はさらに、
前記１つ以上の呼び出しに基づいて、前記キーと値のペア情報を前記パーシステントなストレージ上にパーシステントに記憶するための構造を作成するステップを含む、コンピュータ読取可能な媒体。
【請求項３１】
前記リポジトリは、インストールアクセスモードおよびデフォルトアクセスモードを含む複数のアクセスモードをサポートし、
１つ以上の呼び出しを受取るステップは、インストールアクセスモードを特定する少なくとも１つの呼び出しを受取るステップを含み、
前記コンピュータ読取可能な媒体は、前記クライアントが前記インストールアクセスモードにとどまっている間、前記インストールアクセスモードと前記リポジトリの独占使用とを前記クライアントに与えるステップを行なうための命令を含む、請求項３０に記載のコンピュータ読取可能な媒体。
【請求項３２】
前記複数のアクセスモードは読出し専用アクセスモードを含み、
前記コンピュータ読取可能な媒体は、
読出し専用アクセスモードを用いて動作を実行する要求を第２のクライアントから受取るステップと、
前記動作の実行中、前記リポジトリの並行処理メカニズムを回避するステップとを行な
う命令を含む、請求項３１に記載のコンピュータ読取可能な媒体。
【国際調査報告】
2005522787.tif 000005
2005522787.tif 000006
2005522787.tif 000007
2005522787.tif 000008
2005522787.tif 000009