(57)【要約】【課題】マルチノード環境の中でジャーナル処理を実現するためのシステムおよび方法【解決手段】コンピュータ環境の中でジャーナル処理を行うためのシステムおよび方法が開示される。本発明の一実施形態は、第１のノードおよび第２のノードを提供する段階と、第１のノードおよび第２のノードによってアクセス可能であるジャーナルを提供する段階と、第１のノードによってロック状態の変更を要求する段階と、第１のノードによってなされたロック状態の変更の要求に応じて第２のノードによってタスクを実行する段階とを含む。【特許請求の範囲】
【請求項１】
コンピュータ環境においてジャーナル処理を行うための方法であって、
第１のノードおよび第２のノードを提供し、
前記第１のノードおよび前記第２のノードによってアクセス可能であるジャーナルを提供し、
前記第１のノードによってロック状態の変更を要求し、
前記第１のノードによってなされた前記ロック状態の前記変更の要求に応じ、前記第２のノードによってタスクを実行する、方法。
【請求項２】
請求項１に記載の方法であって、
前記タスクは、ジャーナル処理に関連づけられている、方法。
【請求項３】
請求項１に記載の方法であって、
前記ロック状態の前記変更の要求は、ロックを要求することである、方法。
【請求項４】
請求項３に記載の方法であって、
前記タスクは、ジャーナルエントリを書き込んで、トランザクションを有効化することである、方法。
【請求項５】
請求項３に記載の方法であって、
前記タスクは、ジャーナルエントリを書き込んで、前記第１のノードにブロックデータを送信することである、方法。
【請求項６】
請求項３に記載の方法であって、
前記タスクは、ジャーナルエントリのリストを用意し、前記リスト用のトランザクションデータを前記第１のノードに送信することである、方法。
【請求項７】
請求項１に記載の方法であって、
前記ロック状態の前記変更の要求は、ジャーナルの中のスペースに関するロックを要求することである、方法。
【請求項８】
請求項７に記載の方法であって、
前記タスクは、トランザクションジャーナルスペースに関する前記ロックを解除することである、方法。
【請求項９】
請求項７に記載の方法であって、
前記タスクは、トランザクションの中のブロックをディスクに書き込み、前記トランザクションを失効したものとしてマーク付けすることである、方法。
【請求項１０】
コンピュータ環境においてジャーナル処理を行うためのシステムであって、
ロック状態の変更を要求するように構成された第１のノードと、
前記第１のノードによってなされた前記ロック状態の前記変更の要求に応じてタスクを実行するように構成された第２のノードと、
前記第１のノードおよび前記第２のノードによってアクセス可能であるジャーナルと
を備えるシステム。
【請求項１１】
コンピュータ環境においてジャーナル処理を行うためのコンピュータプログラム製品であって、
コンピュータによって読み取り可能である媒体の中に組み込まれ、
前記第１のノードによるロック状態の変更の要求と、
前記第１のノードによる前記ロック状態の前記変更の要求に応じた、前記第２のノードによるタスクの実行と、
前記第１のノードによるジャーナルへのアクセスと、
のためのコンピュータ命令と、
を備えるコンピュータプログラム製品。
【請求項１２】
コンピュータ環境においてジャーナル処理を行うための方法であって、
トランザクションを記録するために更新をスケジュールし、
このトランザクションを有効化する旨の要求を受信し、
前記トランザクションをジャーナルに記録する、方法。
【請求項１３】
請求項１２に記載の方法であって、
前記トランザクションの記録は、前記トランザクションを有効化する旨の前記要求の前記受信に応じて生じる、方法。
【発明の詳細な説明】
【関連出願の参照】
【０００１】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，１９６号（代理人整理番号：ＰＯＬＹＰ００１＋）「共用ストレージロック：複数の交渉者間において相互排他を実施するための新しいソフトウェア同期化メカニズム（SHARED STORAGE LOCK: A NEW SOFTWARE SYNCHRONIZATION MECHANISM FOR ENFORCING MUTUAL EXCLUSION AMONG MULTIPLE NEGOTIATORS）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００２】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，２２６号（代理人整理番号：ＰＯＬＹＰ００２＋）「マルチノード環境のための効率的かつ選択的なリカバリを伴うジャーナル処理メカニズム（JOUNALING MECHANISM WITH EFFICIENT, SELECTIVE RECOVERY FOR MULTI-NODE ENVIRONMENTS）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００３】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，２２４号（代理人整理番号：ＰＯＬＹＰ００３＋）「マルチノードファイルシステムにおける協調キャッシュ（COLLABORATIVE CACHING IN A MULTI-NODE FILESYSTEM）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００４】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，２４２号（代理人整理番号：ＰＯＬＹＰ００５＋）「ストレージエリアネットワークの分散管理（DISTRIBUTED MANAGEMENT OF A STORAGE AREA NETWORK）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００５】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，１９５号（代理人整理番号：ＰＯＬＹＰ００６＋）「ジャーナル処理および分散ロック管理を実装するための方法（METHOD FOR IMPLEMENTING JOURNALING AND DISTRIBUTED LOCK MANAGEMENT）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００６】
本出願は、２００１年９月２１日付けで出願された米国仮特許出願第６０／３２４，２４３号（代理人整理番号：ＰＯＬＹＰ００７＋）「マトリックスサーバ：コヒーレントな共用ファイルストレージを伴う高可用性マトリックス処理システム（MATRIX SERVER: A HIGHLY AVAILABLE MATRIX PROCESSING SYSTEM WITH COHERENT SHARED FILE STORAGE）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００７】
本出願は、２００１年９月２４日付けで出願された米国仮特許出願第６０／３２４，７８７号（代理人整理番号：ＰＯＬＹＰ００８＋）「高可用性マトリックス処理システムにおける効率的なオンラインロックリカバリのための方法（A METHOD FOR EFFICIENT ON-LINE LOCK RECOVERY IN A HIGHLY AVAILABLE MATRIX PROCESSING SYSTEM）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００８】
本出願は、２００１年１０月１日付けで出願された米国仮特許出願第６０／３２７，１９１号（代理人整理番号：ＰＯＬＹＰ００９＋）「高速ロックリカバリ：高可用性マトリックス処理システムにおける効率的なオンラインロックリカバリのための方法（FAST LOCK RECOVERY: A METHOD FOR EFFICIENT ON-LINE LOCK RECOVERY IN A HIGHLY AVAILABLE MATRIX PROCESSING SYSTEM）」をもとに優先権を主張し、該仮出願を引用として本明細書の中に組み込むものとする。
【０００９】
本出願は、本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００１）「複数の交渉者間において相互排他を実施するための同期化のためのシステムおよび方法（A SYSTEM AND METHOD FOR SYNCHRONIZATION FOR ENFORCING MUTUAL EXCLUSION AMONG MULTIPLE NEGOTIATORS）」、本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００２）「マルチノード環境のためのジャーナルリカバリのためのシステムおよび方法（SYSTEM AND METHOD FOR JOUNAL RECOVERY FOR MULTI-NODE ENVIRONMENTS）」、本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００３）「マルチノードファイルシステムにおける協調キャッシュのためのシステムおよび方法（A SYSTEM AND METHOD FOR COLLABORATIVE CACHING IN A MULTINODE FILESYSTEM）」、本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００５）「ストレージエリアネットワークの管理のためのシステムおよび方法（A SYSTEM AND METHOD FOR MANAGEMENT OF A STORAGE AREA NETWORK）」、本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００７）「共用ストレージを伴うマルチノード環境のためのシステムおよび方法（A SYSTEM AND METHOD FOR A MULTI-NODE ENVIRONMENT WITH SHARED STORAGE）」、および本出願と同時に出願されかつ引用として本明細書の中に組み込まれるものとされる同時係属の米国特許出願第 号（代理人整理番号：ＰＯＬＹＰ００９）「効率的なロックリカバリのためのシステムおよび方法（A SYSTEM AND METHOD FOR EFFICIENT LOCK RECOVERY）」に関連している。
【技術分野】
【００１０】
本発明は、一般に、コンピュータシステムに関する。本発明は、特に、ストレージ等のリソースを共有するコンピュータシステムに関する。
【背景技術】
【００１１】
サーバは、一般に、大規模なＷｅｂサービスや製造と併せて使用されるアプリケーションやワークロードといった、大規模なアプリケーションおよびワークロードに対して使用される。サーバは、単独では所望のアプリケーションを実施するのに十分なパワーを有さない。これらの大規模なアプリケーションに対応するためには、ストレージエリアネットワーク（ＳＡＮ）の中で複数のサーバを複数の共有ストレージデバイスと併せて使用することができる。また、複数のサーバをグループ化し、使用の可能性および管理の容易性を向上させても良い。
【００１２】
システムが大規模化するにつれ、共用されている複数のデータ構造に対して、高性能かつ効率的なやり方でマルチプルコンポーネント更新を整合的に行うことは、いっそう困難になる。ハードウェアがシングルブロック更新レベルのアトミシティしか提供できない場合は、複数のデータブロックに分散した複数のデータ構造に対するアトミック更新を合成することも有効である。アトミック更新が必要とされるのは、更新の部分的な完了に伴って生じる不整合がシステム障害を引き起こす可能性があり、しかも、その発見および修復は高価でかつ実現困難である可能性もあるからである。更新を整合的に行う方法の一つは、ジャーナルを使用する方法である。ジャーナルは、更新をアトミック（不可分）かつ耐久性のあるものにするメカニズムを提供する。
【００１３】
したがって、マルチノード環境の中でジャーナルを管理するためのシステムおよび方法であって、複数のデータブロックに分散した複数のデータ構造に対するアトミック更新を合成することができるシステムおよび方法が必要とされている。本発明は、このような必要に対処するものである。
【００１４】
本発明は、添付の図面に併せて行われる以下の詳細な説明から容易に理解することができる。図中、類似の構成要素は類似の参照番号で示した。
【発明の開示】
【００１５】
本発明は、プロセス、装置、システム、またはコンピュータ読み取り可能ストレージ媒体等のコンピュータ読み取り可能媒体、または光通信リンクもしくは電子通信リンクを通してプログラム命令を送信するコンピュータネットワーク等の、様々な形で実現することが可能である。なお、以下で開示されるプロセスの各工程の順序は、本発明の範囲内で変更することが可能である。
【００１６】
以下では、発明の原理を例示している添付の図面と併せて、本発明による一つまたはそれ以上の好ましい実施形態が詳細に説明される。ただし、以下では、このような実施形態に関連して本発明が説明されるが、本発明は、当然ながらこれらのどの実施形態にも限定されない。それどころか、本発明の範囲は、添付の特許請求の範囲によってのみ限定され、数多くの代替形態、変更形態、および等価形態を網羅している。以下では、例として多くの設定を具体的に特定することによって、本発明の完全な理解を促している。しかしながら、本発明は、これらの具体的な設定の一部または全部を特定しなくても、特許請求の範囲にしたがって実現することが可能である。また、本発明を不必要にわかりにくくすることを避けるため、本発明に関連した技術分野で既に知られている技術情報の詳細な説明は省略した。
【００１７】
本発明の一実施形態は、ジャーナル管理を、データに対するマルチノードアクセスを制御するために使用されるロック管理に統合させる。
【００１８】
図１は、本発明の一実施形態を適用するのに適した共用ストレージシステムのブロック図である。この例では、ノード１０２Ａ〜１０２Ｄは、ネットワークスイッチ１００を通して互いに繋がれている。ネットワークスイッチ１００は、イーサネット（登録商標）、インフィニバンドネットワーク、およびファイバチャネルネットワーク等の、ホスト間通信能力を有する任意のネットワークインフラを表すことができる。また、図中のノード１０２Ａ〜１０２Ｄは、データストレージ相互接続１０４にも繋がれている。データストレージ相互接続１０４の一例は、Ｂｒｏｃａｄｅ  ３２００ファイバチャネルスイッチ等のファイバチャネルスイッチである。データストレージネットワークは、あるいは、ｉＳＣＳＩもしくは他のＩＰのストレージネットワーク、インフィニバンドネットワーク、またはそれ以外のホスト−ストレージ間ネットワークであっても良い。また、ネットワークスイッチ１００およびデータストレージ相互接続１０４は、併せて単一の相互接続を構成しても良い。ノード１０２Ａ〜１０２Ｄは、例えば、コンピュータ、サーバ、またはストレージもしくはデータを共用できる他の任意の処理装置もしくはアプリケーションであって良いが、これらに限定されない。ノード１０２Ａ〜１０２Ｄは、代表してサーバと称される場合もある。図中のデータストレージ相互接続１０４は、共用ストレージ１０６Ａ〜１０６Ｄに繋がれている。共用ストレージ１０６Ａ〜１０６Ｄは、例えば、ハードディスクドライブ、コンパクトディスク、テープ、およびランダムアクセスメモリ等の任意のストレージの形態をとる。
【００１９】
共用ストレージは、ハードディスクドライブ、コンパクトディスク、テープ、およびランダムアクセスメモリ等の任意のストレージデバイスであって良い。ファイルシステムは、共用ストレージ上に構築された論理的エンティティである。共用ストレージが、一般に物理的装置であると見なされる一方で、ファイルシステムは、ストレージの一部にオーバーレイされた論理的構造であると考えられるのが通常である。しかしながら、ここでは簡単のため、ファイルシステムを共用ストレージと称する場合もある。例えば、共用ストレージに障害が生じたと称する場合は、それは、一つのファイルシステムの一部の障害であるかもしれないし、一つまたはそれ以上のファイルシステムの障害であるかもしれないし、またはファイルシステムがオーバーレイされている物理的なストレージデバイスの障害であるかもしれない。したがって、ここで使用される共用ストレージという用語は、物理的なストレージデバイス、一つのファイルシステムの一部、一つのファイルシステム、複数のファイルシステム、またはこれらの任意の組み合わせを意味することができる。
【００２０】
図２Ａ〜２Ｃは、本発明の一実施形態にしたがったジャーナルエントリの例である。ジャーナル処理メカニズムは、更新が複数のブロックに影響を及ぼし、なおかつハードウェアが複数のブロックをアトミック（不可分）に更新できない場合であっても、独立した複数の処理ノードによって一連の共通データ構造をアトミックに更新することができるようにするために、使用される。複数のブロックに影響を及ぼす可能性がある更新に関するジャーナルは、システム障害の発生後に容易に見つけられる形で情報を記録する。このような、アトミックに生じることが望ましい一連の更新作業は、トランザクション処理と称される。各トランザクションは、ジャーナルエントリと共にジャーナルに記録される。ジャーナルエントリは、ジャーナルに書き込まれた一連のブロックを含む。これらのブロックは、更新の一環として書き込まれるブロック値の複製値を、これらの新しい値の書き込み先であるロケーションを特定する情報と共に含んでいる。これらのロケーションは、更新の最終ロケーションと称され、ジャーナルエントリ自体に含まれるブロック値の複製値と区別される場合もある。
【００２１】
ジャーナルは、単一のブロックをアトミック（不可分）な形で書き込むことによって一つのジャーナルエントリを完成させ、共用ストレージにおけるマルチブロック更新を実施する狙いを密封する。これは、ジャーナルエントリの有効化と称される。ジャーナルエントリが有効化されるまでは、どのブロック値も更新されて最終ロケーションに書き込まれることはない。ジャーナルエントリが有効化されると、ブロック値は要望どおりに更新されて最終ロケーションに書き込まれる。したがって、ジャーナルエントリの有効化よりも前に障害が生じた場合は、そのジャーナルエントリに対応する回復トランザクションの中に一切の更新を含まない状態に、システムは回復することができる。そして、ジャーナルエントリを完成させる書き込みがなされ、ジャーナルエントリが有効化された後は、そのトランザクションの全ての更新を含む状態を回復することができる。換言すると、ジャーナルエントリを作成中であるノードが、そのジャーナルエントリを有効化する前に障害を生じた場合は、たとえ更新の一部が既にそのジャーナルエントリに書き込まれていても、これらの更新は一切反映されない。ジャーナルエントリが有効化された後は、たとえ障害が生じた場合であっても、最終的にはこれらの有効な更新を完了させることができる。したがって、障害の発生後にジャーナルを調べれば、全てのマルチブロック更新がアトミックに行われた場合に存在していたはずのデータ構造を回復することが可能である。
【００２２】
ジャーナルエントリは、新しい値を全てそれぞれの最終ロケーションに書き込まれた時点で、失効したものとしてマーク付けすることができる。失効したジャーナルエントリに記録されている更新は、どれも既に実施済みである。したがって、このようなジャーナルエントリはこれ以上保持する必要がなく、そのスペースは別の目的に再利用することが可能である。
【００２３】
図２Ａに示された例では、時刻１のノード３は、そのローカルメモリの中に情報を保持しており、ブロックＢを３，０００に、そしてブロックＣを１，５００に更新できる状態にある。この簡単な例では、各ブロックは整数のみを格納し、文字によって識別されるものとする。例えば、ブロックＢ，Ｃが２つの個々の銀行口座を表し、ユーザが銀行口座Ｂから銀行口座Ｃにお金を移すものと考えて良い。ノード３は、既にこのような情報を有しているが、まだその情報をジャーナルに記録していない。
【００２４】
ノード１は、ブロックＸを７５０に、そしてブロックＹを１２５０に設定している。そして、このトランザクションを記録するジャーナルエントリは、既に有効化されている。ノード７は、ブロックＱを５０に設定している。ただし、この時点でのノード７は、まだトランザクションの書き込みの最中であり、ジャーナルエントリはまだ有効化されていない。ノード４は、そのメモリの中に情報を保持しており、ブロックＡを５００に更新しようとしている。
【００２５】
時刻１（図２Ａ）と時刻２（図２Ｂ）との間に、ノード４は、ブロックＡを５００に更新するトランザクションの一環として、ブロックＢを更新しようとしている。ブロックＢは、（図２Ａに示されるように）まだ有効化されていないノード３からのトランザクションの一環である。したがって、ブロックＢを更新するために、ノード４はノード３に対し、そのトランザクションを有効化するように要求する。図２Ｂに示された時刻２では、ノード３は、ブロックＢを３０００に、そしてブロックＣを１５００に設定する更新を記録するジャーナルエントリの書き込みを完了しており、そのトランザクションは有効化されている。ノード３は、また、ブロックＣを１０００に、そしてブロックＤを２５０に設定する前のトランザクション用のジャーナルエントリの書き込みも完了している。ノード７のジャーナルエントリは、まだそのトランザクションの書き込みを完了していないので、まだ有効化されていない。ノード４のジャーナルエントリは、空のままである。
【００２６】
時刻２（図２Ｂ）と時刻３（図２Ｃ）との間では、ノード３がブロックＢに関するトランザクションを既に終了しているので、ノード４は、そのトランザクション用のジャーナルエントリを書き込むことができる。なお、本発明の一実施形態にしたがうと、有効化されたジャーナルエントリは連続的である必要はない。時刻３では、ノード３，１，４が有効なトランザクションを書き込み済みである一方で、ノード７のトランザクションはまだ非有効のままである。
【００２７】
図３Ａ〜３Ｂは、本発明の一実施形態にしたがった、ジャーナルの中にトランザクションを作成する例のフローチャートである。この例では、トランザクション用のデータ構造を作成するために、ノードは、更新を必要とするブロックが存在するか否かを決定する（３００）。更新するべきブロックが存在する場合は、そのブロックおよびそのブロック用の新しい値が獲得される（３０２）。次に、そのブロックが別のノード用のまだ有効でないトランザクションに関わっているか否かが決定される（３０４）。このようなケースは、例えば、ノード４がブロックＢの更新を必要とするがノード３が既にＢの更新を予定している場合として、図２と併せて上述されている。
【００２８】
このブロックが、別のノード用のまだ有効でないトランザクションに関わっている場合は、その別のノードに対し、そのトランザクションを有効化するように強制する（３０６）。図２で取り上げられた例では、ノード３のトランザクションの優先順位を高く設定するなどして、ノード４からノード３に対し、そのトランザクションを進めるように促している。
【００２９】
図３Ａ〜３Ｂの方法を実行しているノードは、次に、トランザクションが有効化されるのを待つ（３０８）。
【００３０】
このブロックが、他のノード用のまだ有効でないトランザクションに関わっていない場合は（３０４）、他に更新を必要とするブロックがあるか否かが決定される。更新を必要とするブロックがもう無い場合は（３００）、このトランザクションを記録するためにジャーナルの更新がスケジュールされる（３２０）。次に、このトランザクションを有効化させる要求が別のノードからあるか否かが決定される（３２２）。別のノードからの要求が無い場合は、このノードはこのジャーナル更新を「ゆっくりと」書き込むことができる（３２４）。つまり、このジャーナル更新は優先順位が低く、したがって、都合の良い際に実施すれば良い。ジャーナル更新の書き込みを直ちに行わないという選択肢は、ノード間のトランザクション負荷が高いときのジャーナルのボトルネックを抑えられるという点で有利である。
【００３１】
このトランザクションを有効化させる要求が別のノードからある場合は（３２２）、そのジャーナルエントリは直ちに書き込まれる（３２６）。例えば、そのジャーナルエントリは優先順位が高まる。次に、更新が最終ロケーションに書き込まれる（３２８）。次に、書き込まれたジャーナルエントリが有効であるものとしてマーク付けされる（３３０）。
【００３２】
図２および図３は、本発明の一実施形態にしたがって、マルチノード環境の中で複数のブロックをアトミック（不可分）に更新するためには如何にしてジャーナル処理を使用すれば良いかを示している。図４〜８は、本発明の一実施形態にしたがって、ジャーナルにいつエントリを書き込むかの制御と、複数のノードからのジャーナルアクセスの調整と、ノード間における複数のジャーナル処理データの共用とを、ロックメカニズムを使用して如何にして効率良く行うかを説明している。
【００３３】
図４は、本発明の一実施形態にしたがった、ロックおよびジャーナルを管理する方法の状態図である。この例では、３つのロックモードが示されている。すなわち、排他モード（４００）、共用モード（４０４）、および非保持モード（４０８）の３つである。簡単のため、図４に示された例では、非保持モード以外では、書き込みモード４００に代表される排他モードと、読み出しモード（４０４）に代表される共用モードと、の２つのモードのみを示している。しかしながら、本発明は、複数のモードに対応することが可能である。これらのモードにおいては、各ノードは、ある一つのブロックに関するロックを取得し、そのブロックに対して読み出しまたは書き込み等のデータアクセスを行うことが可能である。この例では、複数のノードが共用／読み出しモードにおいて一つのロックを保持しているあいだは、それら複数のノードが同じブロックを読むことができる。一方、書き込み／排他モードにおけるロックは、一つのノードのみが、ある一つのブロックに対して書き込みを行うために取得することができる。
【００３４】
この例では、あるノードが排他ロックを有する状態４００から共用ロックを有する状態４０４に移行すると、降格ルーチン４０２が呼び出される。ノードが共用ロックを保持する状態４０４からロックを保持しない状態４０８に移行すると、解除ルーチン４０６が呼び出される。ノードが排他ロックを保持する状態４００からロックを保持しない状態４０８に移行すると、降格ルーチン４０２’および解除ルーチン４０６’が共に呼び出される。
【００３５】
ノードがロックを保持しない状態４０８から共用ロックを保持する状態４０４に移行すると、獲得ルーチン４１４が呼び出される。同様に、ノードがロックを保持しない状態から排他ロックを保持する状態４００に移行すると、獲得ルーチン４１４’が呼び出される。獲得ルーチン４１４，４１４’は、例えば次のように、ブロックの読み出しプロセスを完了するために使用することができる。すなわち、ブロックの読み出しが必要とされる場合は、先ず、そのブロックを対象に含む読み出し（共用）ロックの要求がなされる。後にロック要求が認可されると、獲得ルーチンが呼び出される。すると、獲得ルーチンはブロックの読み出しに進むことができる。同様のプロセスは、ブロックの書き込みにも適用される。すなわち、書き込み（排他）ロックの要求がなされ、後になってロックが認可されると獲得ルーチンが呼び出され、そして、ブロックの書き込みが可能になる。
【００３６】
解除ルーチン４０６，４０６’の一例として、キャッシュの一貫性を維持することが挙げられる。例えば、あるノードがそのメモリの中に、あるブロックをキャッシュされており、そのブロックが読み出しロックまたは書き込みロックの対象に含まれており、なおかつ別のノードがそのブロックを更新したいと望んでいる場合は、そのロックは最初のノードに対して取り消される。これにより、解除ルーチン４０６，４０６’が呼び出されるので、解除ルーチンは、キャッシュされているそのブロックの複製をメモリから除去することができる。
【００３７】
図４に示された例では、降格ルーチン４０２，４０２’は、更新されたブロックをノードが共用メモリに書き込むことを可能にする。したがって、そのノードが保持するロックは、もう排他ではない。解除ルーチン４０６，４０６’は、このノードからロックを解放することができる。獲得ルーチン４１４，４１４’は、何らかのレベルの排他性を必要とするロックを獲得することができる。
【００３８】
したがって、本発明の本実施形態では、ノードからノードへと要求をやり取りし、様々なタスクを実行するために、降格／解除／獲得ルーチンの一環としてロック状態の変化を利用することができる。
【００３９】
図５Ａ〜５Ｂは、本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法を示している。この例では、ノードＡがロック状態の変更を要求し、それがノードＢの応答をトリガするという、２つのノード間の相互作用を取り上げる。
【００４０】
ノードＡは、特定のブロックを読み出すために、共用／読み出しロックモードのロックを獲得しようと試みる。ノードＡは、そのブロックに関する読み出しロックを要求し（５００）、そのロックが認可されるのを待ち（５０２）、そのブロックをディスクから読み出す（５０４）。ノードＡが特定のブロックの書き込みを試みる場合は、読み出しブロックではなくそのブロックに関する書き込みブロックを要求し、そのロックが認可されるのを待ち、そのブロックをディスクから読み出す。
【００４１】
ノードＡが上記のブロックに関する読み出しロックを要求すると（図５Ａの５００）、その要求はノードＢの副次作用を開始させる。ここで言う副次作用とは、生じている他の何らかのイベントに関連した、対象とするアクション、すなわち最初のイベントに関連したイベントまたはタスクを意味する。この例では、ノードＡによって要求されたブロックの排他モードロックを、ノードＢが保持していると仮定する。したがって、ノードＡによる読み出しロックの要求は、ノードＢにおける降格ルーチンを開始させる。ノードＢは、ジャーナルエントリを書き込むことによって、このブロックのトランザクションおよびあらゆる関連のトランザクションを有効化する（５１０）。関連のトランザクションとは、ノードＡによって要求されたブロックを更新するトランザクションよりも前のトランザクションを含み、それらのトランザクションは、そのトランザクションによっても更新されるブロックの更新を含む。それは、一組のトランザクションの関係における推移的な閉鎖関係であり、例えば、ＰはＱよりも前に実施され、ＰとＱは共通する少なくとも一つのブロックを更新する場合、トランザクションＰはトランザクションＱに関連のトランザクションである。すなわち、ここでは、「有効なトランザクションに含まれるどのブロックも、同トランザクションよりも前のまだ有効でないトランザクションに関わることはできない」というルールに従う必要がある。「関連のトランザクション」とは、このルールとの整合性を維持するために有効化を必要とするトランザクションである。例えば、図２では、ブロックＣ，Ｄを更新するノード３のトランザクションが関連のトランザクションである。
【００４２】
ノードＢは、もしブロックがまだディスクに書き込まれていないならば、必要に応じ、そのブロックに新しい値を書き込む（５１２）。ブロックに新しい値を書き込む必要がある場合とは、例えば、ノードＢがブロックに関する書き込みロックを保持しており、そのブロックが前回ディスクに書き込まれたときから変更されている場合である。変更された値をブロックに書き込む必要があるのは、次のノードが更新後のそのブロックにアクセスできるようにするためである。例えば図２Ｂでは、ノード４がブロックＢへのアクセスを要求しているので、もしまだ未更新ならば、ノード３はブロックＢに値３０００を書き込む必要がある。
【００４３】
ノードＢは、トランザクションの他のブロックに任意で新しい値を書き込むこともできる（５１４）。例えば、図２Ｂのノード３は、その時点でブロックＣに値１５００を書き込むことを選択することもできる。ノードＢは、次に、そのブロックに関するロックを解放する（５１６）。
【００４４】
図６Ａ〜６Ｃは、本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の別の一例を示している。この例では、ノードＡによるロック状態の変更が、ノードＢにおける副次作用的なタスクを開始させる。このときは、ジャーナルスペースを使い果たしたことによって、トランザクションの失効がトリガされる。
【００４５】
図６Ａは、環状構造のジャーナルを示している。図中、新しいエントリは一方向に進行するように作成され、古いエントリはテール部分で失効して削除される。ノードＡが新しいエントリを書き込む必要があるときは、ジャーナルのヘッド部分にスペースを割り当てなければならない。しかしながら、ヘッド部分がテール部分に達すると、スペースを割り当てることができなくなる。このときは、一つまたはそれ以上のノードに対し、ログのテール部分でトランザクションを失効させるように要求する必要がある。これは、降格ルーチンを通じて行うことが可能である。
【００４６】
この例では、ノードＡは、ジャーナルのヘッド部分にあるジャーナルのスペースのロックを要求する（図６Ｂの６００）。ノードＡは、次に、ロック要求が満たされるまで待ち（６０２）、そのジャーナルスペースを使用する（６０４）。ノードＡがジャーナルのスペースのロックを要求すると（図６Ｂの６００）、その要求は、ノードＢの降格ルーチンを開始させる。ノードＢは、テール部分にあるジャーナルエントリを書き込んだノードであり、ジャーナルのその部分を対象に含む一つまたはそれ以上のロックを保持しているノードである。ノードＢは、テール部分にあるジャーナルエントリの全ブロックが各自の最終ロケーションに書き込まれたことを確認する（図６Ｃの６１０）。次に、そのトランザクションは、失効したものとしてマーク付けされる（６１２）。そして、そのトランザクションのジャーナルスペースに関するロックが解放される（６１４）。
【００４７】
図７Ａ〜７Ｂは、本発明の一実施形態にしたがって、第２のノードにおけるタスクを駆動する第１のノードによるロック状態の変更の別の一例を示している。この例では、ノードＡ，Ｂは協調キャッシュを使用する。協調キャッシュは、例えば、 （代理人の参照番号：ＰＯＬＹＰ００３）すなわち米国特許第 号「マルチノードファイルシステムの中で協調キャッシュを行うためのシステムおよび方法」で開示されたシステムおよび方法等である。この文献は、引用によって本明細書に組み込まれるものとする。
【００４８】
この例では、ノードＡは、あるブロックの読み出しロックを要求することによって、そのブロックを読み出そうと試みる（７００）。ノードＡは、そのロックが認可されるまで待ち（７０２）、要求したブロックデータをロックの認可者が送信したか否かを決定する（７０４）。ロックの認可者がデータブロックを送信した場合は、ノードＡは、送られてきたブロックデータを受け取ってキャッシュに保存する（７０６）。しかしながら、ロックの認可者がブロックデータを送信しなかった場合は（７０４）、ノードＡは、そのブロックを共用ディスクから読み出す（７０８）。
【００４９】
ノードＡがブロックの読み出しロックを要求すると（図７Ａの７００）、要求されたブロックに関するロックを有するノードＢにおいて副次作用が開始する。この例では、副次作用はすなわち降格である。図５Ｂに示されるように、この降格は、ノードＢにジャーナルエントリの書き込みを行わせ、このブロックのトランザクションおよび関連のあらゆるトランザクションを有効化させる（７２０）。必要な場合には、共用ディスクに新しい値が書き込まれる（７２２）。必要な場合とは、例えば、ノードＢがブロックの書き込みロックを保持しており、そのデータが最後の書き込み以降に変更されている場合である。このような場合には、ノードＢは、トランザクションの他のブロックに任意で新しい値を書き込む（７２４）。この行為がこの時点で任意であるのは、ジャーナルエントリがいったん有効化されて完了してしまえば、そのノードは書き込みに都合の良いときに随時それらの値を最終ロケーションに書き込むことができるからである。
【００５０】
次に、このブロックデータがノードＢのキャッシュの中にまだ留まっているか否かが決定される（７２６）。まだキャッシュの中にある場合は、このブロックデータは、ノードＢから要求元のブロックＡに送信される（７２８）。ノードＢは、次に、要求されたブロックデータがキャッシュの中にあるか否かに関わらず（７２６）、そのブロックに関するロックを解放する（７３０）。
【００５１】
図８Ａ〜８Ｂは、本発明の一実施形態にしたがって、第２のノードにおけるタスクを駆動する第１のノードによるロック状態の変更のさらに別の例を示している。この例では、ノードＡ，Ｂは、協調キャッシュを目的としたトランザクションに関わっている。
【００５２】
ノードＡは、あるブロックの読み出しロックを要求することによって、そのブロックを読み出そうと試みる（８００）。ノードＡは、次に、ロックが認可されるまで待ち（８０２）、ブロックおよびトランザクションデータがロックの認可者によって送信されたか否かを決定する（８０４）。ロックの認可者がそのブロックおよびトランザクションデータを送信しなかった場合は、ノードＡは、そのブロックを共用ディスクから読み出す（８０６）。ロックの認可者がそのブロックおよびトランザクションデータを送信した場合は（８０４）、これらのトランザクションは、このノード（ノードＡ）における未完了トランザクションのリストに追加される（８０８）。ノードＡは、次に、ブロックデータを受け取ってキャッシュに保存する（８１０）。
【００５３】
ノードＡが読み出しロックを要求すると（図８Ａの８００）、ノードＢにおいて降格ルーチンが開始され、要求されたブロックデータがノードＢのキャッシュの中にあるか否かが決定される（８２０）。要求されたブロックデータがノードＢのキャッシュの中にない場合は、ノードＢはジャーナルエントリを書き込み、このブロックのトランザクションおよび関連のあらゆるトランザクションを有効化する（８２２）。ノードＢは、図５Ｂに示された場合のように、トランザクションの他のブロックに任意で新しい値を書き込むこともできる（８２６）。
【００５４】
要求されたブロックデータがノードＢのキャッシュの中にある場合は（８２０）、ノードＢは、要求されたブロックを変更するトランザクションおよび関連のあらゆるトランザクションに関し、それらのジャーナルエントリのリストを作成する（８２４）。このトランザクションリストは、ステップ８２２で有効化されるリストと同じものである。このトランザクションリストのジャーナルエントリの中味およびブロックデータは、次に、要求元のノードに送信される。
【００５５】
以上では、本発明の理解を促す目的で細部に渡る説明を行ったが、添付された特許請求の範囲の範囲内で一定の変更が可能であることは明らかである。本発明のプロセスおよび装置は、いずれも、他の多くの代替の方法によって実現することが可能である。したがって、これらの実施形態は、例示を目的としたものであって、本発明の範囲を限定するものではなく、本発明は、この明細書で取り上げた詳細に限定されず、添付の特許請求の範囲およびそれらの同等物の範囲内で変更することが可能である。
【図面の簡単な説明】
【００５６】
【図１】本発明の一実施形態を実現するのに適した共用ストレージシステムのブロック図である。
【図２Ａ】本発明の一実施形態にしたがったジャーナルエントリの一例である。
【図２Ｂ】本発明の一実施形態にしたがったジャーナルエントリの一例である。
【図２Ｃ】本発明の一実施形態にしたがったジャーナルエントリの一例である。
【図３Ａ】本発明の一実施形態にしたがった、ジャーナルの中にトランザクションを作成する一例のフローチャートである。
【図３Ｂ】本発明の一実施形態にしたがった、ジャーナルの中にトランザクションを作成する一例のフローチャートである。
【図４】本発明の一実施形態にしたがった、ロックおよびジャーナルを管理する方法の状態図である。
【図５Ａ】本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の一例を示している。
【図５Ｂ】本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の一例を示している。
【図６Ａ】本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の別の一例を示している。
【図６Ｂ】本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の別の一例を示している。
【図６Ｃ】本発明の一実施形態にしたがって、マルチノード環境の中でジャーナル処理を行う方法の別の一例を示している。
【図７Ａ】第２のノードにおけるタスクを開始させる第１のノードによるロック状態の変更の別の一例を、本発明の一実施形態にしたがって示している。
【図７Ｂ】第２のノードにおけるタスクを開始させる第１のノードによるロック状態の変更の別の一例を、本発明の一実施形態にしたがって示している。
【図８Ａ】第２のノードによるタスクを開始させる第１のノードによるロック状態の変更のさらに別の一例を、本発明の一実施形態にしたがって示している。
【図８Ｂ】第２のノードによるタスクを開始させる第１のノードによるロック状態の変更のさらに別の一例を、本発明の一実施形態にしたがって示している。
【符号の説明】
【００５７】
１００…ネットワークスイッチ
１０２Ａ〜１０２Ｄ…ノード
１０４…データストレージ相互接続
１０６Ａ〜１０６Ｄ…共用ストレージ
４００…排他モード
４０２，４０２’…降格ルーチン
４０４…共用モード
４０６，４０６’…解除ルーチン
４０８…非保持モード
４１４，４１４’…獲得ルーチン
【図１】
2005504369.tif 000002
【図２Ａ】
2005504369.tif 000003
【図２Ｂ】
2005504369.tif 000004
【図２Ｃ】
2005504369.tif 000005
【図３Ａ】
2005504369.tif 000006
【図３Ｂ】
2005504369.tif 000007
【図４】
2005504369.tif 000008
【図５Ａ】
2005504369.tif 000009
【図５Ｂ】
2005504369.tif 000010
【図６Ａ】
2005504369.tif 000011
【図６Ｂ】
2005504369.tif 000012
【図６Ｃ】
2005504369.tif 000013
【図７Ａ】
2005504369.tif 000014
【図７Ｂ】
2005504369.tif 000015
【図８Ａ】
2005504369.tif 000016
【図８Ｂ】
2005504369.tif 000017
【国際公開パンフレット】
2005504369.tif 000018
2005504369.tif 000019
2005504369.tif 000020
2005504369.tif 000021
2005504369.tif 000022
2005504369.tif 000023
2005504369.tif 000024
2005504369.tif 000025
2005504369.tif 000026
2005504369.tif 000027
2005504369.tif 000028
2005504369.tif 000029
2005504369.tif 000030
2005504369.tif 000031
2005504369.tif 000032
2005504369.tif 000033
2005504369.tif 000034
2005504369.tif 000035
2005504369.tif 000036
2005504369.tif 000037
2005504369.tif 000038
2005504369.tif 000039
2005504369.tif 000040
2005504369.tif 000041
2005504369.tif 000042
2005504369.tif 000043
2005504369.tif 000044
2005504369.tif 000045
2005504369.tif 000046
2005504369.tif 000047
2005504369.tif 000048
2005504369.tif 000049
2005504369.tif 000050
2005504369.tif 000051
2005504369.tif 000052
【国際調査報告】
2005504369.tif 000053