(57)【要約】【課題】コマンドの重複実行を抑制する。【解決手段】受信したリクエストを処理する処理部２１と、処理部２１による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部２０２と、受信したリクエストに付加された順序情報に基づいて最終リクエスト情報を参照して、受信したリクエストが処理済みであるか否かを判断する判断部２２と、受信したリクエストが処理済みであると判断部２２が判断した場合に、受信したリクエストの処理部２１による処理を抑止する制御部２３とを備える。【選択図】図１
2013191187.tif 000002
【特許請求の範囲】
【請求項１】
受信したリクエストを処理する処理部と、
前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備えることを特徴とする、処理装置。
【請求項２】
前記処理部による前記リクエストの処理結果を記憶する処理結果記憶部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、前記処理結果記憶部に記憶した前記処理結果をリクエスト元に送信する送信部とを備えることを特徴とする、請求項１記載の処理装置。
【請求項３】
前記記憶部が、前記最終リクエスト情報を当該最終リクエスト情報に対応するオブジェクト毎に記憶することを特徴とする、請求項１又は請求項２記載の処理装置。
【請求項４】
前記記憶部が、前記処理部により処理中のリクエストに付加された順序情報を処理中リクエスト情報として記憶し、
前記判断部が、前記受信したリクエストに付加された順序情報に基づいて前記処理中リクエスト情報を参照して、前記受信したリクエストが処理中であるか否かを判断し、
前記制御部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止することを特徴とする、請求項１〜３のいずれか１項に記載の処理装置。
【請求項５】
前記送信部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、前記処理部による処理中のリクエストの処理が完了した後に、当該処理が完了したリクエストの処理結果をリクエスト元に送信することを特徴とする、請求項４記載の処理装置。
【請求項６】
前記記憶部が、前記処理中リクエスト情報を当該処理中リクエスト情報にかかるオブジェクト毎に記憶することを特徴とする、請求項４又は請求項５記載の処理装置。
【請求項７】
処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶部に記憶し、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断し、
前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの処理を抑止する、
処理をコンピュータに実行させる、プログラム。
【請求項８】
複数のリクエスト間での順序を示す順序情報をリクエストに付加して、当該リクエストを送信するリクエスト送信部と、
受信したリクエストを処理する処理部と、
前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備えることを特徴とする、処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、処理装置，プログラム及び処理システムに関する。
【背景技術】
【０００２】
例えば、クライアント・サーバ型のストレージシステムにおいて、データはオブジェクトという単位でサーバに格納される。
また、冗長化のために、オブジェクトは複製されて複数のサーバに格納される。複製を保持するサーバ群のうち、クライアントがアクセスする第１のサーバをプライマリサーバといい、その他のサーバをバックアップサーバという。プライマリサーバが故障した際には、バックアップサーバのうちの一つが新しいプライマリサーバとなる。
【０００３】
図１４及び図１５はそれぞれ従来のストレージシステムにおける処理を説明する図である。これらの図１４及び図１５においては、２つのサーバＳ０１，Ｓ０２と１つのクライアントＣ０１を示している。
図１４に例示するストレージシステムにおいて、クライアントＣ０１はプライマリサーバであるサーバＳ０１にオブジェクト０（obj0）に関するリクエストを送信し（矢印Ａ１参照）、サーバＳ０１はリクエストによって指定されたコマンド（オブジェクトに対する操作）を実行する。コマンドの実行が完了すると、サーバＳ０１は完了通知及び実行結果をリプライとしてクライアントＣ０１に返信する（矢印Ａ４参照）。又、プライマリサーバＳ０１は、クライアントＣ０１から受信したオブジェクト０（obj0）に関するリクエストをバックアップサーバＳ０２へ転送し（矢印Ａ２参照）、リクエストを実行したバックアップサーバＳ０２はプライマリサーバＳ０１にリプライを送信する（矢印Ａ３参照）。
【０００４】
ここで、プライマリサーバＳ０１がコマンド実行中に故障したとする。すなわち、プライマリサーバＳ０１が、クライアントＣ０１からのリクエストを受信後、クライアントＣ０１に対してリプライを返信する前のタイミングで故障した例について考える。
図１５に示すように、クライアントＣ０１はプライマリサーバであるサーバＳ０１にオブジェクト０（obj0）に関するリクエストを送信する（矢印Ｂ１参照）。
【０００５】
プライマリサーバＳ０１は、クライアントＣ０１から受信したリクエストをバックアップサーバＳ０２へ転送し（矢印Ｂ２参照）、リクエストを実行したバックアップサーバＳ０２はプライマリサーバＳ０１にリプライを送信する（矢印Ｂ３参照）。この時点において、プライマリサーバＳ０１において故障が発生すると（矢印Ｂ４参照）、プライマリサーバＳ０１はクライアントＣ０１に対してリプライを送信することができない（矢印Ｂ５参照）。
【０００６】
クライアントＣ０１はプライマリサーバＳ０１へのリクエストがタイムアウトしたことを検知すると、リクエストのリトライを行なう。すなわち、オブジェクト０（obj0）に関するリクエストの再送信を行なう（矢印Ｂ６参照）。このリトライは、タイムアウトが生じたサーバＳ０１とは別のサーバであるサーバＳ０２に対して送信される。以下、新たなプライマリサーバＳ０２を新プライマリサーバＳ０２といい、タイムアウトが発生したプライマリサーバＳ０１を旧プライマリサーバＳ０１という。
【０００７】
ここで、旧プライマリサーバＳ０１において故障が発生するタイミングによっては、旧プライマリサーバＳ０１から新プライマリサーバＳ０２へのコマンドの転送が、行なわれる場合と、行なわれない場合とがある。すなわち、クライアントＣ０１からリトライされるコマンドは、新プライマリサーバＳ０２で実行済みの場合と、未実行の場合とがある。
しかしながら、コマンドの中には、例えばINCREMENT などの非冪等な処理のように、重複して実行されてはならないものが存在する。従って、新プライマリサーバＳ０２においては、実行済みのコマンドに対するリトライであるか、未実行のコマンドに対するリトライであるかを判別し、実行済みのコマンドについては再実行しないようにする必要がある。
【０００８】
従来のクライアントサーバシステムにおいては、クライアントＣ０１から送信するリクエストに識別子を付加し、サーバにおいて、実行したリクエストの識別子を実行済みリストとして記録する。この実行済みリストのサイズは固定長であり、古いリクエストの実行記録は消えていく。サーバＳ０１，Ｓ０２は、受け取ったリクエストの識別子が既に実行済みリストに登録されている場合には、当該リクエストを実行しないことにより、コマンドの重複実行を防止する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１１−７６３０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、例えば、新プライマリサーバＳ２が高負荷状態である場合、すなわち、単位時間当たりのコマンド実行数が多い場合等には、ごく最近実行されたリクエストの識別子も実行済みリストから消えてしまう。従って、この状態でクライアントＣ０１が新プライマリサーバＳ２に対してリトライを送信すると、新プライマリサーバＳ０２が、既に実行済みのコマンドを重複して実行する恐れがある。
【００１１】
１つの側面では、本件は、コマンドの重複実行を抑制できるようにすることを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けることができる。
【課題を解決するための手段】
【００１２】
このため、この処理装置は、受信したリクエストを処理する処理部と、前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備える。
【００１３】
また、このプログラムは、処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶部に記憶し、前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断し、前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの処理を抑止する処理をコンピュータに実行させる。
【００１４】
さらに、この処理システムは、複数のリクエスト間での順序を示す順序情報をリクエストに付加して、当該リクエストを送信するリクエスト送信部と、受信したリクエストを処理する処理部と、前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備える。
【発明の効果】
【００１５】
開示の技術によれば、リクエストの重複処理を抑制することができる利点がある。
【図面の簡単な説明】
【００１６】
【図１】実施形態の一例としてのストレージシステムの構成を模式的に示す図である。
【図２】実施形態の一例としてのストレージシステムのサーバのハードウェア構成を例示する図である。
【図３】（ａ），（ｂ），（ｃ）はそれぞれ実施形態の一例としてのストレージシステムにおける制御情報を説明するための図である。
【図４】実施形態の一例としてのストレージシステムにおける制御部による処理を説明するフローチャートである。
【図５】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図６】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図７】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図８】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図９】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図１０】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図１１】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図１２】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図１３】実施形態の一例としてのストレージシステムによる処理を説明する図である。
【図１４】従来のストレージシステムにおける処理を説明する図である。
【図１５】従来のストレージシステムにおける処理を説明する図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本処理装置、プログラム及び処理システムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１８】
図１は実施形態の一例としてのストレージシステム１の構成を模式的に示す図、図２はそのサーバのハードウェア構成を例示する図である。
ストレージシステム１は、複数（図１に示す例では２つ）のサーバＳ１，Ｓ２と、１以上（図１に示す例では２つ）のクライアントＣ１，Ｃ２と、管理サーバ１０１とを備えるクライアント・サーバ型システムである。
【００１９】
これらのサーバＳ１，Ｓ２，クライアントＣ１，Ｃ２及び管理サーバ１０１は、ネットワーク５０を介して相互に通信可能に接続されている。ネットワーク５０はＬＡＮ（Local Area Network）等の通信回線である。
クライアントＣ１，Ｃ２は、情報処理装置であり、例えば、サーバＳ１，Ｓ２が提供する記憶領域に格納されたデータ（オブジェクト）に対して種々の処理を行なう。これらのクライアントＣ１，Ｃ２は、同様の構成を備える。以下、クライアントを示す符号としては、複数のクライアントのうち１つを特定する必要があるときには符号Ｃ１，Ｃ２を用いるが、任意のクライアントを指すときには符号Ｃを用いる。
【００２０】
クライアントＣは、例えば、図示しない、ＣＰＵ（Central Processing Unit）やＲＡＭ（Random Access Memory），ＲＯＭ（Read Only Memory）等を備えたコンピュータである。
そして、クライアントＣは、図１に示すように、リクエスト送信部１１，トランザクションＩＤ設定部１２，クライアントＩＤ設定部１３及びオブジェクトＩＤ設定部１４としての機能を備える。
【００２１】
リクエスト送信部１１は、サーバＳ１，Ｓ２に対して、コマンド（オブジェクトに対する操作）を指定するリクエストを生成し、サーバＳ１，Ｓ２のうちプライマリのサーバに対して送信する。なお、サーバＳ１，Ｓ２のうちいずれがプライマリのサーバ（プライマリサーバ）であるかは、例えば、後述する管理サーバ１０１によって通知される。
トランザクションＩＤ設定部１２は、リクエスト送信部１１が生成する各リクエストに対して、ユニークな識別子であるトランザクションＩＤ（xid）を設定する。トランザクションＩＤは、複数のリクエスト間におけるリクエストの順序を表す順序情報である。トランザクションＩＤとしては、例えば、所定値（例えば、１）ずつ増加する値、すなわち単純増加する値を用いることが望ましい。そして、トランザクションＩＤ設定部１２は、リクエスト送信部１１がリクエストを生成して送信する毎に、トランザクションＩＤをインクリメントする。
【００２２】
これにより、トランザクションＩＤの大小関係を比較することにより、そのトランザクションＩＤが付加されたリクエストの処理順序を判断することができる。トランザクションＩＤの値が小さい程、そのリクエストの処理順序が先であり、トランザクションＩＤの値が大きい程、そのリクエストの処理順序が後である。
トランザクションＩＤ設定部１２は、リクエスト送信部１１により順次送信される各リクエストに対して、その送信順序を表す値として、単純増加するトランザクションＩＤを順次設定する。
【００２３】
なお、トランザクションＩＤは単純増加する値に限定されるものではなく、適宜変更して実施することができる。例えば、アルファベット等の文字列のような前後関係が明確になっている一連の情報を用いてもよい。又、トランザクションＩＤ設定部１２は、リクエストの送信順序を表す送信順序情報としてトランザクションＩＤを設定する代わりに、例えば、サーバＳにおけるリクエストの処理順序を表す処理順序情報としてトランザクションＩＤを設定してもよく、適宜変形して実施することができる。
【００２４】
リクエスト送信部１１は、トランザクションＩＤ設定部１２によって設定されたトランザクションＩＤをリクエストに添付して送信する。
クライアントＩＤ設定部１３は、リクエスト送信部１１が生成する各リクエストに対して、当該クライアントＣを表すユニークな識別子であるクライアントＩＤ（cid）を設定する。例えば、クライアントＣ毎に予め設定された識別子を、クライアントＣにおける図示しない記憶装置に記憶しておき、クライアントＩＤ設定部１３は、この記憶装置から読み出した識別子をクライアントＩＤとして用いる。
【００２５】
リクエスト送信部１１は、クライアントＩＤ設定部１３によって設定されたクライアントＩＤもリクエストに添付して送信する。
オブジェクトＩＤ設定部１４は、リクエスト送信部１１が生成する各リクエストにかかるオブジェクト対して、ユニークな識別子であるオブジェクトＩＤ（Oid）を設定する。なお、オブジェクトＩＤとしては、例えば、英数文字等の任意の組み合わせ等を用いることができる。又、これに限定されるものではなく、適宜変更して実施することができる。
【００２６】
リクエスト送信部１１は、オブジェクトＩＤ設定部１４によって設定されたオブジェクトＩＤもリクエストに添付して送信する。
管理サーバ１０１は、本ストレージシステム１における運用管理を行なう情報処理装置であり、各サーバＳ１，Ｓ２の情報獲得や設定等を行なう。この管理サーバ１０１も、例えば、図示しない、ＣＰＵやＲＡＭ，ＲＯＭ等を備えたコンピュータである。
【００２７】
例えば、管理サーバ１０１は、サーバＳ１やサーバＳ２の動作状態をモニタし、故障等の障害の発生を検知する。又、管理サーバ１０１は、各クライアントＣに対して、サーバＳ１，Ｓ２のうちいずれがプライマリサーバであるかを通知する。
サーバＳ１，Ｓ２は、クライアントＣ等から送信されるリクエストを受信し、このリクエストによって指定されたコマンド（オブジェクトに対する操作）を実行する。本実施形態においては、サーバＳ１，Ｓ２は、ストレージサーバ機能を備えた情報処理装置（コンピュータ）であり、それぞれストレージ装置２０８を管理する。サーバＳ１，Ｓ２は、同様の構成を備える。以下、サーバを示す符号としては、複数のサーバのうち１つを特定する必要があるときには符号Ｓ１，Ｓ２を用いるが、任意のサーバを指すときには符号Ｓを用いる。
【００２８】
また、これらの複数のサーバＳ１，Ｓ２は冗長化され、サーバＳ１に保存されるデータ（オブジェクト）の少なくとも一部と同じデータがサーバＳ２にも保存される。
本実施形態においては、これらの複数のサーバＳ１，Ｓ２のうち、サーバＳ１がプライマリサーバであり、サーバＳ２がバックアップサーバであるものとする。プライマリサーバＳ１が故障した際には、バックアップサーバＳ２が新たなプライマリサーバとなる。
【００２９】
サーバＳは、図２に示すように、ＣＰＵ２０１，ＲＡＭ２０２，ＲＯＭ２０３，表示装置２０５，キーボード２０６及びマウス２０７を備える。又、サーバＳにはストレージ装置２０８が接続されている。
ストレージ装置２０８は、例えば、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置であり、複数のＨＤＤ（Hard Disk Drive）２０９を組み合わせて、冗長化された１つのストレージとして管理する。なお、ストレージ装置２０８の構成は適宜変更することができる。例えば、ＨＤＤ２０９の台数は種々変形して実施することができる。又、ＨＤＤ２０９に代えてＳＳＤ（Solid State Drive）等の他の記憶装置をそなえてもよい。
【００３０】
表示装置２０５は、例えば液晶ディスプレイ等の表示装置であって、オペレータに対する各種メッセージや演算結果等が表示される。キーボード２０６及びマウス２０７は入力装置であり、オペレータがこれらの入力装置を用いて、種々の入力操作を行なう。
ＲＯＭ２０３は、ＣＰＵ２０１が実行するプログラムや種々のデータを格納する記憶装置である。ＲＡＭ２０２は、種々のデータやプログラムを一時的に格納する記憶領域であって、ＣＰＵ２０１がプログラムを実行する際に、データやプログラムを一時的に格納・展開して用いる。又、このＲＡＭ２０２には、後述する判断部２２によって作成される制御情報Ｔ１や処理部２１による処理結果が格納される。
【００３１】
ＣＰＵ２０１は、種々の制御や演算を行なう処理装置であり、ＲＯＭ２０３に格納されたプログラムを実行することにより、種々の機能を実現する。すなわち、ＣＰＵ２０１は、図１に示す、処理部２１，判断部２２，制御部２３，送信部２４及び冗長化処理部２５として機能する。
なお、これらの処理部２１，判断部２２，制御部２３，送信部２４及び冗長化処理部２５としての機能を実現するためのプログラムは、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００３２】
処理部２１，判断部２２，制御部２３，送信部２４及び冗長化処理部２５としての機能を実現する際には、内部記憶装置（本実施形態ではＲＡＭ２０２やＲＯＭ２０３）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ２０１）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００３３】
同様に、クライアントＣにおいても、情報処理装置のＣＰＵが、プログラムを実行することにより、前述したリクエスト送信部１１，トランザクションＩＤ設定部１２，クライアントＩＤ設定部１３及びオブジェクトＩＤ設定部１４として機能するようになっている。
なお、これらのリクエスト送信部１１，トランザクションＩＤ設定部１２，クライアントＩＤ設定部１３及びオブジェクトＩＤ設定部１４としての機能を実現するためのプログラムも、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００３４】
リクエスト送信部１１，トランザクションＩＤ設定部１２，クライアントＩＤ設定部１３及びオブジェクトＩＤ設定部１４としての機能を実現する際には、内部記憶装置（本実施形態ではクライアントＣの図示しないＲＡＭやＲＯＭ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではクライアントＣのＣＰＵ）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００３５】
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。又、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とを備えており、本実施形態においては、サーバＳ１，Ｓ２やクライアントＣ１，Ｃ２がコンピュータとしての機能を有しているのである。
【００３６】
処理部２１は、受信したリクエストを処理する。すなわち、処理部２１は、リクエストによって指定されたコマンドを実行する。又、処理部２１は、コマンドの実行結果をＲＡＭ２０２やストレージ装置２０８に格納する。すなわち、これらのＲＡＭ２０２やストレージ装置２０８が、記処理部２１によるリクエストの処理結果を記憶する処理結果記憶部として機能する。
【００３７】
また、処理部２１は、受信したリクエストを、そのリクエストに付加されたトランザクションＩＤの値の小さいものから順に処理を行なう。
判断部２２は、制御情報Ｔ１を管理し、受信したリクエストに付加されたトランザクションＩＤに基づいてこの制御情報Ｔ１を参照して、受信したリクエストが処理済みのリクエストであるか否かを判断する。
【００３８】
図３（ａ），（ｂ），（ｃ）はそれぞれ実施形態の一例としてのストレージシステム１における制御情報Ｔ１を説明するための図である。
制御情報Ｔ１は、図３（ａ），（ｂ），（ｃ）に示すように、クライアントＩＤ（cid），実行中トランザクションＩＤ（EXE xid）及び最大実行済みトランザクションＩＤ（MAX xid）を相互に関連付けることにより構成される。又、これらのクライアントＩＤ，実行中トランザクションＩＤ及び最大実行済みトランザクションＩＤの組み合わせは、オブジェクト毎に作成される。すなわち、これらのクライアントＩＤ，実行中トランザクションＩＤ及び最大実行済みトランザクションＩＤの組み合わせは、オブジェクトＩＤに対応付けて作成される。例えば、判断部２２が、この制御情報Ｔ１を作成する。
【００３９】
クライアントＩＤは、そのトランザクションの発行元のクライアントＣを表すクライアントＩＤである。
実行中トランザクションＩＤは、処理部２１が実行中（処理中）のトランザクション（コマンド）のトランザクションＩＤである。判断部２２は、処理部２１が実行中のトランザクションのトランザクションＩＤを実行中トランザクションＩＤとして記憶する。又、判断部２２は、トランザクションの実行が完了し、処理部２１が次のトランザクションを実行する場合には、新たに実行するトランザクションのトランザクションＩＤにより実行中トランザクションＩＤを更新する。
【００４０】
最大実行済みトランザクションＩＤは、当該サーバＳが実行したトランザクションのうち、最後に実行したトランザクションのトランザクションＩＤである。
本ストレージシステム１においては、前述の如く、各クライアントＣにおいて、トランザクションＩＤ設定部１２が、送信される複数のリクエストに対して、単純増加するトランザクションＩＤを、順次、設定する。従って、クライアントＣから連続して送信されるリクエストにおいて、後に発行されるリクエストのトランザクションＩＤは先に発行されたリクエストのトランザクションＩＤよりも大きくなる。そして、サーバＳにおいて、最後に受信し処理を行なったリクエストのトランザクションＩＤの値が最も大きくなる。
【００４１】
判断部２２は、処理部２１によるトランザクションにかかるコマンドの処理が完了すると、処理中であったリクエストにかかる実行中トランザクションＩＤの値を、最大実行済みトランザクションＩＤとして制御情報Ｔ１に記憶する。すなわち、判断部２２は、処理部２１が処理するリクエストを切り替える際に、実行中トランザクションＩＤの値を更新し、この更新前に実行中トランザクションＩＤとして記憶されていた値を、最大実行済みトランザクションＩＤとして記憶する。つまり、判断部２２は、トランザクションの実行が完了すると、実行中トランザクションＩＤの値を用いて最大実行済みトランザクションＩＤの値を更新する。
【００４２】
例えば、図３（ａ）に例示する状態においては、オブジェクトＩＤが“０”のオブジェクトに関し、クライアントＣ１から送信され、最後に処理したリクエストのトランザクションＩＤは“７”であることを示している。又、クライアントＣ２から送信され、最後に処理したリクエストのトランザクションＩＤは“４”であり、又、処理部２１が実行中のリクエストはない状態を示している。
【００４３】
この図３（ａ）に例示する状態において、クライアントＣ１からトランザクションＩＤ“１０”（xid=10）のリクエストを受信し、処理部２１がこの受信したリクエストの処理を開始すると、判断部２２は、図３（ｂ）に示すように、クライアントＣ１について実行中トランザクションＩＤとして“１０”を制御情報Ｔ１に記憶させる（EXE xid=10）。
その後、処理部２１が、このxid=10にかかるリクエストの処理を完了すると、図３（ｃ）に示すように、判断部２２は、クライアントＣ１についての最大実行済みトランザクションＩＤを“１０”に更新する（MAX xid=10）
そして、判断部２２は、受信したリクエストのトランザクションＩＤと最大実行済みトランザクションＩＤとを比較することにより、受信したリクエストが処理部２１により処理済みであるか否かを判断する。
【００４４】
具体的には、判断部２２は、受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合に、当該リクエストにかかるコマンドが実行済みであると判断する。又、判断部２２は、受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤよりも大きい場合に、当該リクエストにかかるコマンドが未実行であると判断する。
【００４５】
また、判断部２２は、受信したリクエストのトランザクションＩＤと実行中トランザクションＩＤとを比較することにより、受信したリクエストが処理部２１により処理中であるか否かを判断する。具体的には、判断部２２は、受信したリクエストのトランザクションＩＤが実行中トランザクションＩＤと等しい場合に、当該リクエストにかかるコマンドが実行中であると判断する。
【００４６】
制御部２３は、判断部２２が、受信したリクエストが処理部２１により処理済みもしくは処理中であると判断した場合に、この受信したリクエストの処理部２１による処理を抑止する。
具体的には、判断部２２が、受信したリクエストが処理部２１により処理済みであると判断した場合に、制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。そして送信部２４が、ＲＡＭ２０２等に記憶されている、当該コマンドの実行結果をリプライとして送信元に送信する。
【００４７】
また、判断部２２が、受信したリクエストが処理部２１により処理中であると判断した場合にも、制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。又、処理部２１が当該リクエストのコマンドの処理を完了すると、送信部２４が、その実行結果をリプライとして送信元に送信する。
受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合には、当該リクエストにかかるコマンドが実行済みであることを示す。従って、当該コマンドの重複実行を阻止するために、制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。
【００４８】
送信部２４は、リクエストの送信元に対して、当該リクエストの処理結果等をリプライとして送信する。例えば、受信したリクエストが処理済みであると判断部２２が判断した場合に、送信部２４は、メモリ２０２等に記憶されている処理結果をリクエスト元に送信する。
また、受信したリクエストが処理部２１により処理中であると判断部２２が判断した場合には、送信部２４は、その処理部２１による処理が完了後に、その処理結果をリクエスト元に送信する。
【００４９】
以下に、各場合における、判断部２２，制御部２３及び送信部２４による処理を示す。
（１）クライアントＣから送られてきたリクエストのトランザクションＩＤが実行中トランザクションＩＤと等しい場合（xid=EXE xid）
判断部２２は、受信したリクエストのトランザクションＩＤが実行中トランザクションＩＤと等しい場合には、当該リクエストにかかるコマンドが実行中であると判断する。
【００５０】
制御部２３は、当該実行中のコマンドの重複実行を阻止するために、受信したリクエストのコマンドを処理部２１に処理させない。処理部２１が実行中のコマンド完了後に、送信部２４は、当該コマンドの実行結果をリプライとして送信元に送信する。
（２）クライアントＣから送られてきたリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合（xid<=MAX xid）
判断部２２は、受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合には、当該リクエストにかかるコマンドが実行済みであると判断する。
【００５１】
制御部２３は、当該実行済みのコマンドの重複実行を阻止するために、受信したリクエストのコマンドを処理部２１に処理させない。送信部２４は、ＲＡＭ２０２等に記憶されている、当該コマンドの実行結果をリプライとして送信元に送信する。
（３）クライアントＣから送られてきたリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤよりも大きい場合（xid>MAX xid）
判断部２２は、受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤよりも大きい場合には、当該リクエストにかかるコマンドが未実行であると判断する。
【００５２】
制御部２３は、受信したリクエストのコマンドを処理部２１に処理させる。送信部２４は、処理部２１によるコマンドの処理が完了した後に、当該コマンドの実行結果をリプライとして送信元に送信する。
冗長化処理部２５は、複数のサーバＳ間において少なくとも一部のデータ（オブジェクト）を冗長化する。具体的には、例えば、プライマリサーバＳ１において、クライアントＣから受信したリクエストをバックアップサーバＳ２に転送し、この転送先のバックアップサーバＳ２においても実行させる。これにより、サーバＳ１とサーバＳ２とで記憶するオブジェクトの状態を一致させる。なお、この冗長化処理部２５による冗長化手法は既知の種々の機能を用いて実現することができ、その詳細な説明は省略する。
【００５３】
上述の如く構成された、実施形態の一例としてのストレージシステム１における制御部２３による処理を、図４に示すフローチャート（ステップＳ１０〜Ｓ４０）に従って説明する。
サーバＳがクライアントＣからリクエストを受信すると、サーバＳにおいて、判断部２２は、受信したリクエストに付加されたトランザクションＩＤに基づいて制御情報Ｔ１を参照し、受信したリクエストが処理済みのリクエストであるか否かを判断する。すなわち、判断部２２は、受信したリクエストに付加されたトランザクションＩＤ（Xid）と、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）とを比較する（ステップＳ１０）。
【００５４】
受信したリクエストに付加されたトランザクションＩＤ（Xid）と、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）とが一致（Xid= EXE xid）する場合には（ステップＳ１０のＹＥＳルート参照）、判断部２２は、受信したリクエストを実行中であると判断する。制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。送信部２４は、処理部２１が実行中のコマンド完了後に、当該コマンドの実行結果をリプライとして送信元に送信し、処理を終了する。これにより、処理部２１が、同一のコマンドを重複して実行することがない。
【００５５】
また、受信したリクエストに付加されたトランザクションＩＤと、制御情報Ｔ１における実行中トランザクションＩＤとが一致（Xid= EXE xid）しない場合には（ステップＳ１０のＮＯルート参照）、判断部２２は、次に、受信したリクエストに付加されたトランザクションＩＤと、制御情報Ｔ１における最大実行済みトランザクションＩＤとを比較する。すなわち、判断部２２は、受信したリクエストに付加されたトランザクションＩＤ（Xid）が、制御情報Ｔ１における最大実行済みトランザクションＩＤ（MAX xid）以下であるか（Xid≦MAX xid）を確認する（ステップＳ２０）。
【００５６】
受信したリクエストに付加されたトランザクションＩＤ（Xid）が、最大実行済みトランザクションＩＤ（MAX xid）よりも大きい（Xid> MAX xid）場合には（ステップＳ２０のＮＯルート参照）、判断部２２は、受信したリクエストを実行対象であると判断する。すなわち、判断部２２は、受信したリクエストは、処理部２１により実行済みではなく、又、処理部２１による実行中でもないと判断する。制御部２３は、処理部２１に当該リクエストにかかるコマンドを実行させる（ステップＳ３０）。
【００５７】
処理部２１による当該リクエストのコマンドの処理が完了すると、送信部２４は、その実行結果を当該リクエストの送信元にリプライとして返信して（ステップＳ４０）、処理を終了する。すなわち、そのリクエストの送信元がクライアントＣであった場合には、送信部２４は、そのクライアントＣに対してリプライを送信する。又、リクエストが他のサーバＳから転送されたものである場合には、送信部２４は、その転送元のサーバＳに対してリプライを送信する。
【００５８】
一方、受信したリクエストに付加されたトランザクションＩＤ（Xid）が、最大実行済みトランザクションＩＤ（MAX xid）以下である（Xid<=MAX xid）場合には（ステップＳ２０のＹＥＳルート参照）、ステップＳ４０に移行する。すなわち、判断部２２は、受信したリクエストは、処理部２１により実行済みであるが、そのリプライが送信元に到達していないと判断する。
【００５９】
そこで、制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。これにより、処理部２１が、同一のコマンドを重複して実行することがない。又、送信部２４は、受信したリクエストにかかる実行結果をＲＡＭ２０２から読み出し、当該リクエストの送信元にリプライとして返信する。
次に、実施形態の一例としてのストレージシステム１による処理を、図５〜図１３を用いて例示する。本例においては、クライアントＣ１がオブジェクト０（obj0；oid=0）に関するリクエストを行なう。又、これらの図５〜図１３中においては、便宜上、クライアントＣ１，サーバＳ１，Ｓ２及び、各制御情報Ｔ１だけを図示し、クライアントＣ２や管理サーバ１０１，ネットワーク５０等の図示を省略している。又、各部の詳細な構成の図示も省略している。
【００６０】
まず、図５〜図１０を用いて、サーバＳにおいて故障が発生しない場合の処理を説明する。
図５に示す状態においては、サーバＳ１，Ｓ２において、オブジェクト０に関して処理部２１が実行中のリクエストはない。又、サーバＳ１，Ｓ２において、各制御情報Ｔ１に示すように、オブジェクト０に関して、クライアントＣ１に関する最大実行済みトランザクションＩＤは７（MAX xid=7）であり、クライアントＣ２に関する最大実行済みトランザクションＩＤは４（MAX xid=4）である。
【００６１】
この図５に示す状態において、クライアントＣ１からプライマリサーバＳ１に対して、オブジェクト０に対するINCREMENTコマンドに関するリクエスト（xid=10）を発行する。
リクエスト（xid=10）を受信したプライマリサーバＳ１においては、判断部２２は、リクエストに付加されたトランザクションＩＤ（Xid=10）を、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）や最大実行済みトランザクションＩＤ（MAX xid）と比較する。
【００６２】
図６に示す状態においては、実行中トランザクションＩＤ（EXE xid）はなく、又、最大実行済みトランザクションＩＤ（MAX xid=7）はリクエストに付加されたトランザクションＩＤ（Xid=10）よりも小さい。そこで、判断部２２は、受信したリクエストを実行対象であると判断する。制御部２３は、処理部２１に、受信したリクエストにかかるコマンドを実行させ、処理部２１はかかる受信したリクエストにかかるINCREMENTコマンドを実行する。図６に示すように、プライマリサーバＳ１においては、判断部２２が制御情報Ｔ１において、クライアントＣ１に対応付けて実行中トランザクションＩＤに１０を格納する（EXE xid=10）。
【００６３】
プライマリサーバＳ１において、処理部２１によるリクエスト（xid=10）にかかるINCREMENTコマンドの実行が完了すると、図７に示すように、判断部２２は、制御情報Ｔ１を更新する。すなわち、判断部２２は、制御情報Ｔ１において、クライアントＣ２に対応付けて最大実行済みトランザクションＩＤに１０を格納し（MAX xid=10）、又、これに伴い、実行中トランザクションＩＤの値を削除する。
【００６４】
図８に示すように、プライマリサーバＳ１の冗長化処理部２５が、バックアップサーバＳ２に対して、クライアントＣ１から受信したリクエストの転送を行なう。このリクエストの転送には、送信元のクライアントＣ１のクライアントＩＤ（cid=1）も付加される。
転送されたリクエストを受信したバックアップサーバＳ２において、判断部２２は、リクエストに付加されたトランザクションＩＤ（Xid=10）を、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）や最大実行済みトランザクションＩＤ（MAX xid）と比較する。
【００６５】
図７に示す状態においては、バックアップサーバＳ２において、実行中トランザクションＩＤ（EXE xid）はなく、又、最大実行済みトランザクションＩＤ（MAX xid=7）はリクエストに付加されたトランザクションＩＤ（Xid=10）よりも小さい。そこで、バックアップサーバＳ２において、判断部２２は、受信したリクエストを実行対象であると判断する。制御部２３は、処理部２１に、受信したリクエストにかかるコマンドを実行させ、処理部２１はかかる受信したリクエストにかかるINCREMENTコマンドを実行する。バックアップサーバＳ２においては、判断部２２が制御情報Ｔ１において、クライアントＣ１に対応付けて実行中トランザクションＩＤに１０を格納する（EXE xid=10）。
【００６６】
バックアップサーバＳ２において、処理部２１によるリクエスト（xid=10）にかかるINCREMENTコマンドの実行が完了すると、図９に示すように、判断部２２は、制御情報Ｔ１を更新する。すなわち、判断部２２は、クライアントＣ１に対応付けて最大実行済みトランザクションＩＤに１０を格納し（MAX xid=10）、又、これに伴い、実行中トランザクションＩＤの値を削除する。
【００６７】
図１０に示すように、プライマリサーバＳ１の送信部２４は、リクエストの送信元であるクライアントＣ１に対してリプライを送信する。このリプライには、例えば、当該リクエストにかかるコマンド実行が成功したことや、実行結果等が含まれる。又、バックアップサーバＳ２は、リクエストの転送元であるプライマリサーバＳ１に対してリプライを送信する。
【００６８】
次に、図１１〜図１３を用いて、プライマリサーバＳ１に故障が発生した場合の処理を説明する。
図１１に示す例においては、図８に示した状態において、バックアップサーバＳ２の処理部２１が、プライマリサーバＳ１から転送されたリクエストにかかるINCREMENTコマンド（xid=10）を実行している状態で、プライマリサーバＳ１に故障が発生したとする。
【００６９】
管理サーバ１０１は、プライマリサーバＳ１の故障を検知し、バックアップサーバＳ２を新たなプライマリサーバとして設定する。管理サーバ１０１は、各クライアントＣに対して、サーバＳ２が新たなプライマリサーバ（プライマリサーバＳ２）となったことを通知する。
ただし、図１１〜図１３中においては、便宜上、サーバＳ１を“プライマリ”と、又、サーバＳ２を“バックアップ”と表す。
【００７０】
プライマリサーバＳ１が故障したことにより、このプライマリサーバＳ１からクライアントＣ１に対して、リクエストに対するリプライが送信されない。
クライアントＣ１においては、プライマリサーバＳ１へのリクエスト（xid=10）の送信後、所定時間経過しても当該リクエストに対するリプライを受信しないことによりタイムアウトエラーを検知する。タイムアウトエラーを検知したクライアントＣ１は、新たなプライマリサーバＳ２に対して、同一のリクエスト（xid=10）をリトライ要求として発行する。すなわち、クライアントＣ１はプライマリサーバＳ２に対して、オブジェクト０に対するINCREMENTコマンドに関するリクエスト（xid=10）を発行する。
【００７１】
プライマリサーバＳ２において、判断部２２は、リクエストに付加されたトランザクションＩＤ（Xid=10）を、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）や最大実行済みトランザクションＩＤ（MAX xid）と比較する。
図１１に示す状態においては、リクエストに付加されたトランザクションＩＤ（Xid=10）は、実行中トランザクションＩＤ（EXE xid=10）と等しい。
【００７２】
判断部２２は、受信したリクエストを処理部２１が実行中であると判断する。制御部２３は、受信したリクエストのコマンドを処理部２１に処理させずに破棄する。これにより、処理部２１が、同一のコマンドを重複して実行することがない。プライマリサーバＳ２においては、処理部２１が実行中のコマンドの完了後に、通信部２４が、当該コマンドの実行結果をリプライとしてクライアントＣ１に送信する。
【００７３】
また、図１２に示す例においては、図９に示した状態において、バックアップサーバＳ２の処理部２１が、プライマリサーバＳ１から転送されたリクエストにかかるINCREMENTコマンド（xid=10）の実行を完了した後の状態で、プライマリサーバＳ１に故障が発生したとする。
すなわち、バックアップサーバＳ２において、判断部２２が、クライアントＣ１に対応付けて最大実行済みトランザクションＩＤに１０を格納し（MAX xid=10）、又、これに伴い、実行中トランザクションＩＤの値を削除することにより、制御情報Ｔ１を更新した状態で、プライマリサーバＳ１に故障が発生した。
【００７４】
管理サーバ１０１は、プライマリサーバＳ１の故障を検知し、バックアップサーバＳ２を新たなプライマリサーバとして設定する。管理サーバ１０１は、クライアントＣ１に対して、サーバＳ２が新たなプライマリサーバ（プライマリサーバＳ２）となったことを通知する。
プライマリサーバＳ１が故障したことにより、このプライマリサーバＳ１からクライアントＣ１に対して、リクエストに対するリプライが送信されない。
【００７５】
クライアントＣ１においては、リクエスト（xid=10）の送信後、所定時間経過しても当該リクエストに対するリプライを受信しないことによりタイムアウトエラーを検知する。タイムアウトエラーを検知したクライアントＣ１は、新たなプライマリサーバＳ２に対して、同一のリクエスト（xid=10）をリトライ要求として発行する。すなわち、クライアントＣ１はプライマリサーバＳ２に対して、オブジェクト０に対するINCREMENTコマンドに関するリクエスト（xid=10）を発行する。
【００７６】
プライマリサーバＳ２において、判断部２２は、リクエストに付加されたトランザクションＩＤ（Xid=10）を、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）や最大実行済みトランザクションＩＤ（MAX xid）と比較する。
図１２に示す状態においては、リクエストに付加されたトランザクションＩＤ（Xid=10）は、最大実行済みトランザクションＩＤ（MAX xid=10）と等しい。
【００７７】
判断部２２は、受信したリクエストは、処理部２１により実行済みであると判断する。制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。これにより、処理部２１が、同一のコマンドを重複して実行することがない。送信部２４は、処理部２１に対して、受信したリクエストにかかる実行結果を、当該リクエストの送信元にリプライとして返信する。
【００７８】
また、図１３に示す例においては、図９に示した状態において、バックアップサーバＳ２の処理部２１が、プライマリサーバＳ１から転送されたリクエストにかかるINCREMENTコマンド（xid=10）の実行を完了した後、かつ、プライマリサーバＳ１が新たなリクエスト（xid=11）をバックアップサーバＳ２に転送する前の状態で、プライマリサーバＳ１に故障が発生したとする。
【００７９】
すなわち、バックアップサーバＳ２において、判断部２２が、制御情報Ｔ１に、クライアントＣ１に対応付けて最大実行済みトランザクションＩＤに１０を格納する（MAX xid=10）。又、判断部２２は、これに伴い、実行中トランザクションＩＤの値を削除する。このように判断部２２が制御情報Ｔ１を更新した状態で、プライマリサーバＳ１に故障が発生したものとする。
【００８０】
管理サーバ１０１は、プライマリサーバＳ１の故障を検知し、バックアップサーバＳ２を新たなプライマリサーバとして設定する。管理サーバ１０１は、クライアントＣ１に対して、サーバＳ２が新たなプライマリサーバ（プライマリサーバＳ２）となったことを通知する。
プライマリサーバＳ１が故障したことにより、このプライマリサーバＳ１からクライアントＣ１に対して、リクエストに対するリプライが送信されない。
【００８１】
クライアントＣ１においては、リクエスト（xid=11）の送信後、所定時間経過しても当該リクエストに対するリプライを受信しないことによりタイムアウトエラーを検知する。タイムアウトエラーを検知したクライアントＣ１は、新たなプライマリサーバＳ２に対して、同一のリクエスト（xid=11）をリトライ要求として発行する。すなわち、クライアントＣ１はプライマリサーバＳ２に対して、オブジェクト０に対するINCREMENTコマンドに関するリクエスト（xid=11）を発行する。
【００８２】
プライマリサーバＳ２において、判断部２２は、リクエストに付加されたトランザクションＩＤ（Xid=11）を、制御情報Ｔ１における実行中トランザクションＩＤ（EXE xid）や最大実行済みトランザクションＩＤ（MAX xid）と比較する。
図１３に示す状態においては、リクエストに付加されたトランザクションＩＤ（Xid=11）は、最大実行済みトランザクションＩＤ（MAX xid=10）よりも大きい。
【００８３】
判断部２２は、受信したリクエストは、処理部２１においては未実行であると判断する。制御部２３は、このように、処理部２１が未実行であるリクエストについては、当該リクエストのコマンドを処理部２１に処理させる。送信部２４は、受信したリクエストにかかる実行結果を、当該リクエストの送信元にリプライとして返信する。
このように、実施形態の一例としてのストレージシステム１によれば、サーバＳにおいて、制御情報Ｔ１として、処理部２１が最後に処理を行なったリクエストを示す最大実行済みトランザクションＩＤを記憶する。又、トランザクションＩＤは、リクエストの送信順序を表す処理順序情報である。
【００８４】
判断部２２が、受信したリクエストのトランザクションＩＤを制御情報Ｔ１の最大実行済みトランザクションＩＤと比較することにより、当該サーバＳにおいて、受信したリクエストが実行済みであるか否かを判断する。そして、受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合には、制御部２３は、受信したリクエストのコマンドを処理部２１に処理させない。
【００８５】
受信したリクエストのトランザクションＩＤが最大実行済みトランザクションＩＤ以下の場合には、当該リクエストにかかるコマンドが実行済みであり、これにより、処理部２１が当該コマンドを重複して実行することを阻止することができる。
また、処理部２１による実行結果をＲＡＭ２０２等に記憶しておき、送信部２４は、このＲＡＭ２０２等に記憶されている処理部２１による当該コマンドの実行結果を当該リクエストの送信元に対してリプライとして送信する。これにより、処理済のコマンドの実行結果を処理部２１に重複して実行させることなくリプライとして送信することができる。
【００８６】
さらに、制御情報Ｔ１として、実行中トランザクションＩＤや最大実行済みトランザクションＩＤを、そのリクエストにかかるオブジェクト毎に記憶することにより、サーバＳにおいて、異なるオブジェクトにかかるリクエストのコマンドを並行して実行することができる。
また、制御情報Ｔ１として、オブジェクト毎に、クライアントＩＤに対して実行中トランザクションＩＤ及び最大実行済みトランザクションＩＤを対応付けた情報を用いることにより、リクエストの重複管理を少ないデータ量で実現することができる。又、各クライアントＣからのリクエスト数が増大し、サーバＳが高負荷状態となっても、制御情報Ｔ１のデータが消失することがなく、確実にリクエストの重複実行を防止することができる。
【００８７】
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
また、上述した実施形態に関わらず、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
【００８８】
例えば、上述した実施形態においては、ストレージシステム１が２つのクライアントＣ１，Ｃ２と２つのサーバＳ１，Ｓ２を備える例を示しているが、これに限定されるものではない。すなわち、１つもしくは３以上のクライアントＣを備えてもよく、又、３以上のサーバＳを備えてもよい。
また、上述した実施形態においては、各サーバＳがストレージ装置２０８を管理するストレージシステム１の例を示しているが、これに限定されるものではなく、ストレージシステム１以外の情報処理システムであってもよい。
【００８９】
そして、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
受信したリクエストを処理する処理部と、
前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備えることを特徴とする、処理装置。
【００９０】
（付記２）
前記処理部による前記リクエストの処理結果を記憶する処理結果記憶部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、前記処理結果記憶部に記憶した前記処理結果をリクエスト元に送信する送信部とを備えることを特徴とする、付記１記載の処理装置。
【００９１】
（付記３）
前記記憶部が、前記最終リクエスト情報を当該最終リクエスト情報に対応するオブジェクト毎に記憶することを特徴とする、付記１又は付記２記載の処理装置。
（付記４）
前記記憶部が、前記処理部により処理中のリクエストに付加された順序情報を処理中リクエスト情報として記憶し、
前記判断部が、前記受信したリクエストに付加された順序情報に基づいて前記処理中リクエスト情報を参照して、前記受信したリクエストが処理中であるか否かを判断し、
前記制御部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止することを特徴とする、付記１〜３のいずれか１項に記載の処理装置。
【００９２】
（付記５）
前記送信部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、前記処理部による処理中のリクエストの処理が完了した後に、当該処理が完了したリクエストの処理結果をリクエスト元に送信することを特徴とする、付記４記載の処理装置。
（付記６）
前記記憶部が、前記処理中リクエスト情報を当該処理中リクエスト情報にかかるオブジェクト毎に記憶することを特徴とする、付記４又は付記５記載の処理装置。
【００９３】
（付記７）
処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶部に記憶し、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断し、
前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの処理を抑止する、
処理をコンピュータに実行させる、プログラム。
【００９４】
（付記８）
前記受信したリクエストが処理済みであると判断した場合に、処理結果記憶部に記憶した前記処理結果をリクエスト元に送信する、
処理を前記コンピュータに実行させる、付記７記載のプログラム。
（付記９）
前記記憶部が、前記最終リクエスト情報を当該最終リクエスト情報に対応するオブジェクト毎に記憶する、
処理を前記コンピュータに実行させる、付記７又は付記８記載のプログラム。
【００９５】
（付記１０）
前記記憶部に、処理中のリクエストに付加された順序情報を処理中リクエスト情報として記憶し、
前記受信したリクエストに付加された順序情報に基づいて前記処理中リクエスト情報を参照して、前記受信したリクエストが処理中であるか否かを判断し、
前記受信したリクエストを処理中であると判断した場合に、当該受信したリクエストの処理を抑止する、
処理を前記コンピュータに実行させる、付記７〜９のいずれか１項に記載のプログラム。
【００９６】
（付記１１）
前記受信したリクエストを処理中であると判断した場合に、処理中のリクエストの処理が完了した後に、当該処理が完了したリクエストの処理結果をリクエスト元に送信する、
処理を前記コンピュータに実行させる、付記１０記載のプログラム。
（付記１２）
前記記憶部に、前記処理中リクエスト情報を当該処理中リクエスト情報にかかるオブジェクト毎に記憶する、
処理を前記コンピュータに実行させる、付記１０又は付記１１記載のプログラム。
【００９７】
（付記１３）
複数のリクエスト間での順序を示す順序情報をリクエストに付加して、当該リクエストを送信するリクエスト送信部と、
受信したリクエストを処理する処理部と、
前記処理部による処理済みのリクエストのうち最後に処理を行なったリクエストに付加された順序情報を最終リクエスト情報として記憶する記憶部と、
前記受信したリクエストに付加された順序情報に基づいて前記最終リクエスト情報を参照して、前記受信したリクエストが処理済みであるか否かを判断する判断部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止する制御部とを備えることを特徴とする、処理システム。
【００９８】
（付記１４）
前記処理部による前記リクエストの処理結果を記憶する処理結果記憶部と、
前記判断部が前記受信したリクエストが処理済みであると判断した場合に、前記処理結果記憶部に記憶した前記処理結果をリクエスト元に送信する送信部とを備えることを特徴とする、付記１３記載の処理システム。
【００９９】
（付記１５）
前記記憶部が、前記最終リクエスト情報を当該最終リクエスト情報に対応するオブジェクト毎に記憶することを特徴とする、付記１３又は付記１４記載の処理システム。
（付記１６）
前記記憶部が、前記処理部により処理中のリクエストに付加された順序情報を処理中リクエスト情報として記憶し、
前記判断部が、前記受信したリクエストに付加された順序情報に基づいて前記処理中リクエスト情報を参照して、前記受信したリクエストが処理中であるか否かを判断し、
前記制御部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、当該受信したリクエストの前記処理部による処理を抑止することを特徴とする、付記１３〜１５のいずれか１項に記載の処理システム。
【０１００】
（付記１７）
前記送信部が、前記判断部が前記受信したリクエストを処理中であると判断した場合に、前記処理部による処理中のリクエストの処理が完了した後に、当該処理が完了したリクエストの処理結果をリクエスト元に送信することを特徴とする、付記１６記載の処理システム。
【０１０１】
（付記１８）
前記記憶部が、前記処理中リクエスト情報を当該処理中リクエスト情報にかかるオブジェクト毎に記憶することを特徴とする、付記１６又は付記１７記載の処理システム。
【符号の説明】
【０１０２】
１    ストレージシステム（処理システム）
１１    リクエスト送信部
１２    トランザクションＩＤ設定部
１３    クライアントＩＤ設定部
１４    オブジェクトＩＤ設定部
２１    処理部
２２    判断部
２３    制御部
２４    送信部
２５    冗長化処理部
５０    ネットワーク
１０１    管理サーバ
２０１    ＣＰＵ
２０２    ＲＡＭ
２０３    ＲＯＭ
２０５    表示装置
２０６    キーボード
２０７    マウス    
２０８    ストレージ装置
２０９    ＨＤＤ
Ｃ，Ｃ１，Ｃ２    クライアント
Ｓ，Ｓ１，Ｓ２    サーバ（処理装置）
Ｔ１    制御情報（最終リクエスト情報，処理中リクエスト情報）
【図１】
2013191187.tif 000003
【図２】
2013191187.tif 000004
【図３】
2013191187.tif 000005
【図４】
2013191187.tif 000006
【図５】
2013191187.tif 000007
【図６】
2013191187.tif 000008
【図７】
2013191187.tif 000009
【図８】
2013191187.tif 000010
【図９】
2013191187.tif 000011
【図１０】
2013191187.tif 000012
【図１１】
2013191187.tif 000013
【図１２】
2013191187.tif 000014
【図１３】
2013191187.tif 000015
【図１４】
2013191187.tif 000016
【図１５】
2013191187.tif 000017