【実施例】
【0019】
図1は、実施例のネットワークシステム100の構成およびデータ転送装置400の構成の一例を示す説明図である。
【0020】
ネットワークシステム100は、複数のネットワーク200、複数の端末300、および複数のデータ転送装置400から構成される。
図1に示す例では、ネットワークシステムは、3つのネットワーク200A、200B、200Cを含み、2つの端末300A、300Bを含み、また、2つのデータ転送装置400A、400Bを含む。
【0021】
なお、本実施例は、ネットワーク200、端末300、およびデータ転送装置400の数に限定されない。本明細書では、ネットワーク200A、200B、200Cを区別しない場合はネットワーク200と記載し、端末300A、300Bを区別しない場合は端末300と記載し、また、データ転送装置400A、400Bを区別しない場合はデータ転送装置400と記載する。
【0022】
端末300Aおよびデータ転送装置400Aはネットワーク200Aを介して互いに接続され、端末300Bおよびデータ転送装置400Bはネットワーク200Cを介して接続され、また、データ転送装置400Aおよびデータ転送装置400Bはネットワーク200Bを介して互いに接続される。ネットワーク200は、例えば、LAN(Local Area Network)またはWAN(Wide Area Network)等が考えられるが、本実施例はネットワーク200の種別に限定されない。また、端末300およびデータ転送装置400と、ネットワーク200との間の接続形式は有線または無線のいずれであってもよい。
【0023】
端末300は、ネットワーク200を介して他の端末300に宛先情報を含むデータを送信し、また、他の端末300から宛先情報を含むデータを受信する。なお、端末300は、図示しないCPU(Central Processing Unit)、メモリ、およびネットワークインタフェース等を有する。
【0024】
データ転送装置400は、ネットワーク200を介して端末300または他のデータ転送装置400からデータを受信した場合、受信したデータに含まれる宛先情報に従って適切な転送先に当該データを転送する。ここで、データ転送装置400Aを例にデータ転送装置400の構成について説明する。なお、データ転送装置400Bも同一の構成である。
【0025】
データ転送装置400Aは、CPU410、メインメモリ420、復旧制御部430、不揮発性メモリ440、転送エンジン450、揮発性メモリ460、ポート470、およびバス480を備える。なお、CPU410、復旧制御部430、および転送エンジン450を区別しない場合、デバイスとも記載する。
【0026】
CPU410および復旧制御部430はバス480Aを介して互いに接続され、復旧制御部430および転送エンジン450はバス480Bを介して接続され、転送エンジン450およびポート470はバス480Cを介して接続される。また、ポート470は、回線485を介してネットワーク200と接続する。
【0027】
各デバイスは、バス480を介して他のデバイスにコマンド490を送信し、また、バス480を介して他のデバイスからコマンド490を受信する。これによって、各デバイスは、他のデバイスに対して指示を行い、また、他のデバイスが保持する情報または他のデバイスに接続されたメモリに対してデータの読み書きを行う。
【0028】
CPU410は、データ転送装置400A全体を制御する。本実施例のCPU410は、ルーティングテーブル421の生成および更新を行い、また、転送情報ベース441および転送情報ベース461の更新の指示を行う。
【0029】
メインメモリ420は、CPU410に接続され、ルーティングテーブル421を格納する。メインメモリ420は、例えば、DRAM(Dynamic Random Access Memory)等の揮発性メモリを用いるものとする。
【0030】
ルーティングテーブル421は、各ネットワーク200ごとに、データの転送先を示す転送先情報を格納する。ルーティングテーブル421に格納される転送先情報は、ネットワークシステム100の運用者によって固定的に設定され、または、他のデータ転送装置400との間で転送先情報を送受信して動的に設定される。また、本実施例では、前述したものの他に、データ転送装置400Aの再起動時に、不揮発性メモリ440に格納される転送情報ベース441に基づいてルーティングテーブル421が生成される。ルーティングテーブル421の詳細は
図4を用いて後述する。
【0031】
復旧制御部430は、データ転送装置400Aの通常運用中にCPU410から送信された転送先情報を不揮発性メモリ440の転送情報ベース441に格納し、さらに、転送エンジン450に当該転送先情報を含む転送情報ベース461の更新指示を送信する。具体的には、復旧制御部430は、CPU410から送信されたコマンド490に基づいて、不揮発性メモリ440の転送情報ベース441にコマンド490に含まれる転送先情報を格納する。また、復旧制御部430は、転送先情報を含むコマンド490を転送エンジン450に送信することによって、揮発性メモリ460の転送情報ベース461の更新を転送エンジン450に指示する。
【0032】
また、復旧制御部430は、データ転送装置400Aの再起動時に転送情報ベース441および転送情報ベース461の整合性を判定し、当該判定結果に基づいて、転送情報ベース441を用いた揮発性メモリ460の転送情報ベース461の復旧を制御する。
【0033】
不揮発性メモリ440は、復旧制御部430に接続され、転送情報ベース441および不揮発性制御情報442を格納する。本実施例の不揮発性メモリ440は、データの書き込みによる性能の劣化が発生せず、かつ、揮発性メモリ460と同程度の速度で動作するものとする。前述の条件を満たす不揮発性メモリとしては、MRAM(Magnetoresistive Random Access Memory)、ReRAM(Resistance Random Access Memory)、およびFeRAM(Ferroelectric Random Access Memory)等がある。
【0034】
転送情報ベース441は、転送エンジン450が使用する転送情報ベース461のバックアップデータである。転送情報ベース441は、不揮発性メモリ440に格納されているため、データ転送装置400Aが停止しても消失しない。転送情報ベース441は、ルーティングテーブル421が更新された場合、CPU410からの指示に基づいて書き換えられる。後述するように、転送情報ベース441の更新時には、揮発性メモリ460に格納される転送情報ベース461も同時に書き換えられる。
【0035】
不揮発性制御情報442は、復旧制御部430が実行する処理を制御するための情報である。本実施例では不揮発性制御情報442を用いて転送情報ベース441および転送情報ベース461の状態が管理される。不揮発性制御情報442の詳細は
図7を用いて後述する。
【0036】
転送エンジン450は、ネットワーク200を介して受信したデータの転送処理を実行する。具体的には、転送エンジン450は、ネットワーク200から回線485を経由してデータを受信した場合、揮発性メモリ460に格納された転送情報ベース461を用いてデータの転送先を検索し、検索結果に基づいて適切な転送先にデータを転送する。
【0037】
揮発性メモリ460は、転送エンジン450に接続され、転送情報ベース461を格納する。揮発性メモリ460としては、動作速度が速いSRAM(Static Random Access Memory)、および検索処理に特化したTCAM(Ternary Content Addressable Memory)等がある。検索に適した、木構造またはハッシュテーブル等のデータ構造に変換された転送情報ベース461が格納される場合、SRAMが用いられる。
【0038】
転送情報ベース461は、転送エンジン450がデータの転送先を検索するのに適したデータ形式にルーティングテーブル421が変換された情報である。転送情報ベース461の詳細は
図5を用いて後述する。
【0039】
ポート470は、外部のネットワークまたは外部の装置と接続するインタフェースである。本実施例では、データ転送装置400Aは、ポート470Aに接続される回線485Aを介してネットワーク200Bと接続し、また、ポート470Bに接続される回線485Bを介してネットワーク200Cと接続する。バス480は、データ転送装置400A内の構成を接続する。バス480にはコマンド490が流れる。
【0040】
一般的なデータ転送装置400の場合、CPU410およびメインメモリ420は制御カードに搭載され、転送エンジン450および揮発性メモリ460は転送カードに搭載される。そのため、復旧制御部430および不揮発性メモリ440を搭載するカードの形態として様々考えられる。
【0041】
例えば、制御カードまたは転送カードのいずれか一方に復旧制御部430および不揮発性メモリ440を搭載する形態が考えられる。また、制御カードには復旧制御部430を搭載し、転送カードには不揮発性メモリ440を搭載する形態、または、制御カードには不揮発性メモリ440を搭載し、転送カードには復旧制御部430を搭載する形態も考えられる。また、復旧制御部430および不揮発性メモリ440を搭載した復旧制御カードとしてデータ転送装置400に搭載する形態でもよい。また、制御カード、転送カード、および復旧制御カードは、データ転送装置400に対して挿抜可能な構成であってもよい。
【0042】
なお、CPU410、メインメモリ420、復旧制御部430、不揮発性メモリ440、転送エンジン450、揮発性メモリ460は、カード形式の装置として搭載されていなくてもよい。例えば、一つのチップとしてデータ転送装置400に搭載されていてもよい。
【0043】
図2は、実施例の復旧制御部430の構成の一例を示すブロック図である。
【0044】
復旧制御部430は、CPUインタフェース部431、メモリインタフェース部432、制御処理部433、時刻管理部434、および転送エンジンインタフェース部435を有し、また、揮発性制御情報436を保持する。なお、復旧制御部430は図示しない揮発性メモリを有し、当該揮発性メモリには揮発性制御情報436および処理のために一時的に保持するデータ等が格納される。
【0045】
制御処理部433は、CPUインタフェース部431、メモリインタフェース部432、時刻管理部434、および転送エンジンインタフェース部435と内部バス等を介して接続する。また、制御処理部433は、内部バス等を介して揮発性制御情報436が格納される揮発性メモリと接続する。
【0046】
CPUインタフェース部431は、CPU410から送信されるコマンド490の受信処理を実行する。また、CPUインタフェース部431は、制御処理部433からの指示に従って、CPU410に対してコマンド490を送信する。
【0047】
メモリインタフェース部432は、制御処理部433からの指示に従って、不揮発性メモリ440の指示されたアドレスに対してデータの読み出しおよび書き込みを行う。
【0048】
制御処理部433は、復旧制御部430全体の制御を行う。制御処理部433は、処理の内容に応じて、CPU410および転送エンジン450との間で指示およびデータの送受信を行い、不揮発性メモリ440に対するデータの読み出しおよび書き込みを行う。
【0049】
時刻管理部434は、揮発性制御情報436に格納される時刻の情報を管理する。時刻管理部434は、バッテリー等の電源によって動作可能な回路によって、データ転送装置400が停止した状態においても時刻を刻み続ける。
【0050】
転送エンジンインタフェース部435は、CPUインタフェース部431と同様に、転送エンジン450との間でコマンド490の送受信を行う。
【0051】
揮発性制御情報436は、復旧制御部430が実行する処理を制御するための情報である。本実施例では揮発性制御情報436を用いて復旧制御部430の処理の状態が管理される。なお、揮発性制御情報436は、復旧制御部430が保持する揮発性メモリに格納されているため、データ転送装置400が停止すると消失する。揮発性制御情報436の詳細は
図6を用いて後述する。
【0052】
図3は、実施例のデータ転送装置400において使用されるコマンド490のフォーマットの一例を示す説明図である。
【0053】
コマンド490は、宛先デバイス4911、送信元デバイス4912、コマンド種別4913、アドレス4914、およびデータ4915から構成される。
【0054】
宛先デバイス4911は、コマンド490の送信先のデバイスの識別情報である。送信元デバイス4912は、コマンド490の送信元のデバイスの識別情報である。宛先デバイス4911および送信元デバイス4912のそれぞれには、CPU410、復旧制御部430、および転送エンジン450の少なくともいずれかが設定される。コマンド種別4913は、コマンドの種別を示す情報である。コマンドの種別としては、リード要求、リード応答、およびライト要求がある。
【0055】
アドレス4914は、コマンド490の処理の対象となるメモリ領域のアドレスである。データ4915は、コマンド490の処理の対象となるデータである。なお、コマンド種別4913に「リード要求」が設定される場合、アドレス4914にのみ値が設定され、データ4915には値は設定されない。また、コマンド種別4913に「リード応答」または「ライト要求」のいずれかが設定される場合、アドレス4914およびデータ4915のいずれにも値が設定される。
【0056】
各デバイスは、他のバイスとの間でコマンド490を送受信することによって、他のデバイスに対して指示を行い、他のデバイスが保持する情報または他のデバイスに接続されるメモリに対してデータの読み出しおよび書き込みを行う。
【0057】
他のデバイスに対する指示は、他のデバイスが保持する特定の情報に対してデータを書き込むことによって行われる。データを読み出す情報またはデータを書き込む情報が、他のデバイスが保持する情報、または、他のデバイスに接続されるメモリに格納される情報のいずれであるかは、アドレス4914に設定されたアドレスの範囲によって判定される。
【0058】
コマンド種別4913に「リード要求」または「リード応答」のいずれかが設定されたコマンド490は、他のデバイスが保持する情報または他のデバイスに接続されるメモリからデータを読み出す場合に使用される。
【0059】
デバイスは、受信したコマンド490のコマンド種別4913に「リード要求」が設定される場合、当該デバイスが保持する情報または当該デバイスに接続されるメモリのアドレス4914に設定された値に対応するメモリ領域からデータを読み出す。また、デバイスは、受信したコマンド490の送信元デバイス4912に対して、コマンド種別4913に「リード応答」が設定され、データ4915に読み出されたデータが設定されたコマンド490を送信する。
【0060】
コマンド種別4913に「ライト要求」が設定されたコマンド490は、他のデバイスが保持する情報または当該デバイスに接続されるメモリに対してデータを書き込む場合に使用される。
【0061】
デバイスは、受信したコマンド490のコマンド種別4913に「ライト要求」が設定される場合、当該デバイスが保持する情報または当該デバイスに接続されるメモリに対して、アドレス4914に設定された値に対応するメモリ領域にデータ4915を書き込む。
【0062】
図4は、実施例のデータ転送装置400が保持するルーティングテーブル421の一例を示す説明図である。
図4では、データ転送装置400Aが保持するルーティングテーブル421を示す。なお、データ転送装置400Bも同様のルーティングテーブル421を保持する。
【0063】
本実施例のルーティングテーブル421は、テーブル形式のデータであり、一つのエントリにデータの転送先を特定する転送先情報を格納する。当該エントリは、宛先ネットワーク4211、転送先4212、および生成フラグ4213を含む。
【0064】
宛先ネットワーク4211は、データ転送装置400が、転送先の装置等にデータを転送する場合に当該データを送信するネットワーク200の識別情報である。転送先4212は、宛先ネットワーク4211に対応するネットワーク200から次にデータを転送するデータ転送装置400の識別情報である。
【0065】
図4では、ネットワーク200Aおよびネットワーク200Bに対してデータ転送装置400Aが当該ネットワークから次にデータを転送する転送先であることを示す。また、
図4では、ネットワーク200Cに対してデータ転送装置400Bが当該ネットワークから次にデータを転送する転送先であることを示す。
【0066】
生成フラグ4213は、エントリが通常の処理によって生成されたか否かを示すフラグである。生成フラグ4213には、生成フラグ4213が有効化されていることを示す「ON」、または、生成フラグ4213が無効化されていることを示す「OFF」のいずれかが設定される。
【0067】
データ転送装置400の再起動時に、不揮発性メモリ440に格納される転送情報ベース441を用いた復旧処理によって生成されたエントリの場合、生成フラグ4213には「OFF」が設定される。復旧処理以外の方法でエントリが生成された場合、生成フラグ4213には「ON」が設定される。
【0068】
なお、復旧処理以外の方法でエントリが生成された場合としては、ネットワークシステム100の運用者によって固定的にルーティングテーブル421が設定された場合、または、通常の運用時に他のデータ転送装置400と転送先情報を送受信することによって動的にエントリが生成された場合等がある。
【0069】
図5は、実施例のデータ転送装置400が保持する転送情報ベース461の一例を示す説明図である。
図5では、データ転送装置400Aが保持する転送情報ベース461を示す。なお、データ転送装置400Bも同様の転送情報ベース461を保持する。
【0070】
転送情報ベース461は、ルーティングテーブル421を転送エンジン450がデータの転送先を容易に検索できるデータ形式に変換した情報である。本実施例の転送情報ベース461は、テーブル形式のデータであり、一つのエントリに宛先を特定する情報を格納する。一つのエントリは、アドレス4611およびデータ4612を含む。
【0071】
アドレス4611は、揮発性メモリ460のアドレスである。データ4612は、アドレス4611に対応するメモリ領域に格納されるデータである。
【0072】
ルーティングテーブル421では、転送先情報が一つのエントリに格納されていたが、転送情報ベース461では、アドレス4611が示すメモリ領域に転送先情報の一部が格納される。例えば、アドレス4611「0x00000000」に対応するメモリ領域には宛先ネットワーク4211に対応する「ネットワーク200A」が格納され、アドレス4611「0x00000004」に対応するメモリ領域には転送先4212に対応する「データ転送装置400A」が格納される。
【0073】
不揮発性メモリ440に格納される転送情報ベース441は、転送情報ベース461と同一のものであるため説明を省略する。なお、揮発性メモリ460に格納される転送情報ベース461は、データ転送装置400の通常運用中において転送エンジン450によって使用されるが、不揮発性メモリ440に格納される転送情報ベース441は、データ転送装置400の運用時において転送エンジン450によって使用されない。
【0074】
なお、
図5に示す転送情報ベース461は、ルーティングテーブル421に格納される転送先情報の一部を格納するメモリ領域のアドレスとデータとが対応付けられた情報であるがこれに限定されない。例えば、CPU410は、ハッシュテーブル等、検索に適したデータ構造にルーティングテーブル421に含まれる転送先情報を変換した上で、転送情報ベース461にアドレスとデータとを対応付けたエントリを格納してもよい。
【0075】
揮発性メモリ460に格納される転送情報ベース461のバックアップデータとして不揮発性メモリ440に転送情報ベース441を格納することは障害対策および早期のデータ転送の再開に有用であるが、転送情報ベース441をそのまま転送情報ベース461として復旧させた場合、様々な問題が発生する。すなわち、データ転送装置400Aが、転送情報ベース461の更新中に再起動した場合、転送情報ベース461と転送情報ベース441との間でデータの不整合が発生する可能性がある。
【0076】
例えば、転送情報ベース441がすでに更新されており、転送情報ベース461の更新が終了していない場合データの不整合が発生する。また、データ転送装置400の再起動前と再起動後のハッシュ値が異なるため、転送情報ベース441および転送情報ベース461のデータ構造に不整合、すなわち、データの不整合が発生する。
【0077】
データの不整合が発生している状態において、データ転送装置400Aが転送情報ベース441を用いて揮発性メモリ460の転送情報ベース461を復旧した場合、不整合が発生したデータを含む転送情報ベース461を用いてデータの転送先の検索を行うと、誤った転送先にデータを転送し、または、データ転送装置400Aが停止する可能性がある。
【0078】
また、データ転送装置400Bが停止した場合、ルーティングテーブル421および転送情報ベース461からネットワーク200Cに関する転送先情報を削除する必要がある。データ転送装置400Aが通常運用中の場合、転送情報ベース461の更新処理の実行時に転送情報ベース441からもネットワーク200Cに関する転送先情報が削除される。しかし、データ転送装置400Aが停止した場合、転送情報ベース441は更新されない。
【0079】
従って、データ転送装置400Aが長時間停止している間にネットワークシステム100のネットワーク構成の変更が発生した場合、転送情報ベース441に格納される転送先情報が古くなっている可能性がある。転送エンジン450が、古い転送先情報を格納する転送情報ベース441を用いて復旧した転送情報ベース461に基づいてデータの転送先を検索する場合、誤った転送先または存在しない転送先にデータを転送する可能性がある。これによって、ネットワークシステム100のネットワーク負荷が上昇し、また、ネットワークシステム100上のデータの消失が発生する可能性がある。
【0080】
図6は、実施例の復旧制御部430が保持する揮発性制御情報436の一例を示す説明図である。
【0081】
揮発性制御情報436は、更新開始フラグ4361、更新終了フラグ4362、復旧中フラグ4363、復旧済フラグ4364、および現在時刻4365を含む。
【0082】
更新開始フラグ4361は、CPU410が転送情報ベース441および転送情報ベース461の更新を開始したことを復旧制御部430に通知するフラグである。更新開始フラグ4361は、更新開始フラグ4361が有効化されていることを示す「ON」、または、更新開始フラグ4361が無効化されていることを示す「OFF」のいずれかが設定される。更新開始フラグ4361には初期値として「OFF」が設定される。後述するように、CPU410は、転送情報ベース441および転送情報ベース461の更新を開始する場合、コマンド490を用いて更新開始フラグ4361に「ON」を設定する。
【0083】
更新終了フラグ4362は、CPU410が転送情報ベース441および転送情報ベース461の更新が終了したことを復旧制御部430に通知するフラグである。更新終了フラグ4362には、更新終了フラグ4362が有効化されていることを示す「ON」、または、更新終了フラグ4362が無効化されていることを示す「OFF」のいずれかが設定される。更新終了フラグ4362には初期値として「OFF」が設定される。後述するように、CPU410は、転送情報ベース441および転送情報ベース461の更新を終了する場合、コマンド490を用いて更新終了フラグ4362に「ON」を設定する。
【0084】
復旧中フラグ4363は、復旧制御部430によって揮発性メモリ460に転送情報ベース441が復旧中であることを示すフラグである。復旧中フラグ4363には、復旧中フラグ4363が有効化されていることを示す「ON」、または、復旧中フラグ4363が無効化されていることを示す「OFF」のいずれかが設定される。復旧中フラグ4363には初期値として「OFF」が設定される。後述するように、復旧制御部430は、データ転送装置400の再起動時に復旧中フラグ4363に「ON」を設定する。
【0085】
復旧済フラグ4364は、復旧制御部430によって揮発性メモリ460の転送情報ベース461の復旧が終了したことを示すフラグである。復旧済フラグ4364には、復旧済フラグ4364が有効化されていることを示す「ON」、または、復旧済フラグ4364が無効化されていることを示す「OFF」のいずれかが設定される。復旧中フラグ4363には初期値として「OFF」が設定される。後述するように、復旧制御部430は、転送情報ベース461の復旧が終了した後に復旧済フラグ4364に「ON」を設定する。
【0086】
現在時刻4365は、ネットワークシステム100における現在の時刻を表す情報である。現在時刻4365に格納される値は復旧制御部430の時刻管理部434によって管理される。
【0087】
図7は、実施例の不揮発性メモリ440に格納される不揮発性制御情報442の一例を示す説明図である。
【0088】
不揮発性制御情報442は、有効化フラグ4421、更新中フラグ4422、最終更新時刻4423、および有効期限4424を含む。
【0089】
有効化フラグ4421は、データ転送装置400の再起動時に、転送情報ベース441を用いて揮発性メモリ460上に転送情報ベース461を復旧するか否か、すなわち、復旧処理が有効か否かを示すフラグである。有効化フラグ4421には、有効化フラグ4421が有効化されていることを示す「ON」、または、有効化フラグ4421が無効化されていることを示す「OFF」のいずれかが設定される。本実施例では、データ転送装置400の通常運用中に、運用者が「ON」または「OFF」のいずれかを有効化フラグ4421に設定する。
【0090】
有効化フラグ4421に「ON」が設定されている場合にのみ、復旧制御部430は復旧処理を実行する。なお、有効化フラグ4421には初期値として「OFF」が設定される。これによって、データ転送装置400が初めて起動した場合等、転送情報ベース441に全く転送先情報が格納されていない場合に、復旧処理が実行されることを抑止することができる。
【0091】
また、データ転送装置400が長時間停止することが予想される場合、有効化フラグ4421を「OFF」に設定することによって、長時間の停止状態が解除されてデータ転送装置400が再起動する場合に、復旧処理が実行されることを抑止できる。
【0092】
更新中フラグ4422は、復旧制御部430が転送情報ベース441および転送情報ベース461の更新中であるか否かを示すフラグである。更新中フラグ4422には、更新中フラグ4422が有効化されていることを示す「ON」、または、更新中フラグ4422が無効化されていることを示す「OFF」のいずれかが設定される。更新中フラグ4422には初期値として「OFF」が設定される。
【0093】
なお、データ転送装置400の再起動時に更新中フラグ4422が「ON」の場合、転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止したことを意味する。この場合、転送情報ベース441および転送情報ベース461に格納される転送先情報に不整合が発生している可能性があるため、復旧制御部430は復旧処理を実行しない。
【0094】
最終更新時刻4423は、転送情報ベース441および転送情報ベース461が最後に更新された時刻である。本実施例では、復旧制御部430は、CPU410から転送情報ベース441および転送情報ベース461の更新終了が通知された場合、当該通知を受信した時点における現在時刻4365の値を最終更新時刻4423に設定する。
【0095】
有効期限4424は、復旧処理に用いる転送情報ベース441の有効期限である。データ転送装置400の再起動時に、現在時刻4365に設定される時刻が有効期限4424に設定された有効期限を経過している場合、転送情報ベース441に格納される転送先情報が古い可能性がある。この場合、復旧制御部430は復旧処理を実行しない。
【0096】
なお、有効期限4424には、あらかじめ固定の期限が設定されてもよいし、データ転送装置400の運用中に運用者から入力された期限が設定されてもよい。また、有効期限4424に設定される期限は、現在時刻4365に対する絶対時刻でもよいし、最終更新時刻4423からの相対時間でもよい。
【0097】
図8は、実施例のデータ転送装置400の通常運用中における転送情報ベース441および転送情報ベース461の更新処理の流れを説明するシーケンス図である。
【0098】
CPU410は、データ転送装置400の通常運用中に、ルーティングテーブル421を更新する(ステップS1101)。
【0099】
ルーティングテーブル421を更新する契機としては、ネットワークシステム100の運用者によってルーティングテーブル421の情報が設定された場合、または、他のデータ転送装置400と転送先情報を送受信することによって動的に更新する場合がある。このとき、CPU410は、エントリを追加する場合には、当該エントリの生成フラグ4213に「ON」を設定する。また、更新されたエントリの生成フラグ4213に「OFF」が設定されている場合、CPU410は、生成フラグ4213に「ON」を設定する。
【0100】
CPU410は、コマンド490を用いて、復旧制御部430に転送情報ベース441および転送情報ベース461の更新開始を通知する(ステップS1102)。
【0101】
具体的には、CPU410は、ルーティングテーブル421が更新された後、コマンド490を用いて揮発性制御情報436の更新開始フラグ4361に「ON」を設定する。これ以降、CPU410は、更新されたルーティングテーブル421に格納される転送先情報を所定のデータ形式に変換し、変換された転送先情報を含むコマンド490を用いて転送情報ベース441および転送情報ベース461の更新を指示する。なお、CPU410は、更新された転送先情報のみを送信してもよい。
【0102】
復旧制御部430は、CPU410から転送情報ベース441および転送情報ベース461の更新開始の通知を受信した場合、更新中フラグ4422に「ON」を設定する(ステップS1103)。
【0103】
具体的には、復旧制御部430は、更新開始フラグ4361に「ON」が設定されたことを検知することによって、転送情報ベース441および転送情報ベース461の更新が開始したことを把握して、更新開始フラグ4361に「OFF」を設定する。その後、復旧制御部430は、更新中フラグ4422に「ON」を設定する。
【0104】
CPU410は、更新されたルーティングテーブル421を変換することによって生成された転送先情報を含むコマンド490を用いて、復旧制御部430に転送情報ベース441の更新を指示する(ステップS1104)。
【0105】
復旧制御部430は、CPU410から転送情報ベース441の更新の指示を受信した場合、不揮発性メモリ440に格納される転送情報ベース441を更新する(ステップS1105)。また、復旧制御部430は、コマンド490を用いて、転送エンジン450に対して転送情報ベース461の更新を指示する(ステップS1106)。なお当該コマンド490には変換された転送先情報が含まれる。
【0106】
転送エンジン450は、復旧制御部430から転送情報ベース461の更新の指示を受信した場合、揮発性メモリ460に格納された転送情報ベース461を更新する(ステップS1107)。
【0107】
CPU410は、更新されたルーティングテーブル421の転送先情報を全て送信した場合、コマンド490を用いて、復旧制御部430に転送情報ベース441および転送情報ベース461の更新終了を通知する(ステップS1108)。
【0108】
具体的には、CPU410は、コマンド490を用いて揮発性制御情報436の更新終了フラグ4362に「ON」を設定する。なお、更新された転送先情報にのみが送信される場合、CPU410は、更新された転送先情報を全て送信した後に、コマンド490を用いて揮発性制御情報436の更新終了フラグ4362に「ON」を設定する。
【0109】
復旧制御部430は、CPU410から転送情報ベース441および転送情報ベース461の更新終了の通知を受信した場合、現在時刻4365に格納される時刻に基づいて最終更新時刻4423を更新し(ステップS1109)、更新中フラグ4422に「OFF」を設定する(ステップS1110)。
【0110】
具体的には、復旧制御部430は、更新終了フラグ4362に「ON」が設定されたことを検知することによって、転送情報ベース441および転送情報ベース461の更新が終了したことを把握して、更新終了フラグ4362に「OFF」を設定する。その後、復旧制御部430は、最終更新時刻4423を更新し、また、更新中フラグ4422に「OFF」を設定する。
【0111】
図9は、実施例の復旧制御部430が転送情報ベース441および転送情報ベース461の更新時に実行する処理を説明するフローチャートである。
【0112】
復旧制御部430の制御処理部433は、データ転送装置400が起動すると、以下で説明する処理を開始する。まず、制御処理部433は、CPU410からコマンド490を受信したか否かを判定する(ステップS1201)。
【0113】
CPU410からコマンド490を受信していない場合(ステップS1201がNO)、制御処理部433は、ステップS1201に戻り、コマンド490を受信するまで同様の判定処理を繰り返し実行する。
【0114】
CPU410からコマンド490を受信した場合(ステップS1201がYES)、制御処理部433は、受信したコマンド490が転送情報ベース441および転送情報ベース461の更新開始を通知するコマンドであるか否かを判定する(ステップS1202)。
【0115】
具体的には、制御処理部433は、受信したコマンド490によって揮発性制御情報436の更新開始フラグ4361に「ON」が設定されたか否かを判定する。受信したコマンド490によって揮発性制御情報436の更新開始フラグ4361に「ON」が設定された場合、制御処理部433は、受信したコマンド490が転送情報ベース441および転送情報ベース461の更新開始を通知するコマンドであると判定する。
【0116】
受信したコマンド490が転送情報ベース441および転送情報ベース461の更新開始を通知するコマンドである場合(ステップS1202がYES)、制御処理部433は、不揮発性制御情報442の更新中フラグ4422に「ON」を設定する(ステップS1203)。その後、制御処理部433は、ステップS1201に戻り、コマンド490を受信するまで同様の判定処理を繰り返し実行する。
【0117】
受信したコマンド490が転送情報ベース441および転送情報ベース461の更新開始を通知するコマンドでない場合(ステップS1202がNO)、制御処理部433は、受信したコマンド490が転送情報ベース441および転送情報ベース461の更新終了を通知するコマンドであるか否かを判定する(ステップS1204)。
【0118】
具体的には、制御処理部433は、受信したコマンド490によって揮発性制御情報436の更新終了フラグ4362に「ON」が設定されたか否かを判定する。受信したコマンド490によって揮発性制御情報436の更新終了フラグ4362に「ON」が設定された場合、制御処理部433は、受信したコマンド490が転送情報ベース441および転送情報ベース461の更新終了を通知するコマンドであると判定する。
【0119】
受信したコマンド490が転送情報ベース441および転送情報ベース461の更新終了を通知するコマンドである場合(ステップS1204がYES)、制御処理部433は、不揮発性制御情報442の更新中フラグ4422に「OFF」を設定する(ステップS1205)。その後、制御処理部433は、ステップS1201に戻り、コマンド490を受信するまで同様の判定処理を繰り返し実行する。
【0120】
受信したコマンド490が転送情報ベース441および転送情報ベース461の更新終了を通知するコマンドでない場合は(ステップS1204がNO)、制御処理部433は、受信したコマンド490が、変換された転送先情報を含む転送情報ベース441の更新を指示するコマンドであるか否かを判定する(ステップS1206)。
【0121】
受信したコマンド490が転送情報ベース441の更新を指示するコマンドである場合(ステップS1206がYES)、制御処理部433は、当該コマンド490に含まれる転送先情報に基づいて不揮発性メモリ440に格納される転送情報ベース441を更新する(ステップS1207)。
【0122】
また、制御処理部433は、転送エンジン450に対して転送情報ベース461の更新を指示するコマンド490を送信することによって、転送エンジン450に揮発性メモリ460に格納される転送情報ベース461の更新を指示する(ステップS1208)。その後、制御処理部433は、ステップS1201に戻り、コマンド490を受信するまで同様の判定処理を繰り返し実行する。
【0123】
なお、転送エンジン450に送信されるコマンド490のデータ4915には、CPU410から受信したコマンド490に含まれる転送先情報が含まれる。転送エンジン450は、復旧制御部430から転送情報ベース461の更新指示を受信した場合、コマンド490に含まれる転送先情報に基づいて揮発性メモリ460に格納される転送情報ベース461を更新する。
【0124】
受信したコマンド490が転送情報ベース441の更新を指示するコマンドでない場合(ステップS1206がNO)、制御処理部433は、受信したコマンド490に応じた処理を実行する(ステップS1209)。その後、制御処理部433は、ステップS1201に戻り、コマンド490を受信するまで同様の判定処理を繰り返し実行する。
【0125】
図10は、実施例のデータ転送装置400の再起動時における転送情報ベース461の復旧処理の流れを説明するシーケンス図である。
【0126】
データ転送装置400が再起動した場合(ステップS1301)、CPU410、復旧制御部430、および転送エンジン450はそれぞれ起動処理を開始する。
【0127】
このとき、CPU410は、復旧中フラグ4363の監視を開始する。復旧中フラグ4363に「ON」が設定されている場合、復旧制御部430によって転送情報ベース461の復旧処理が実行されるため、CPU410は、周期的に復旧中フラグ4363を監視する。なお、復旧中フラグ4363の監視には、復旧中フラグ4363に対する読み出しを指示するコマンド490が用いられる。また、揮発性メモリ460の転送情報ベース461は空であるため、転送エンジン450はデータの転送処理を開始しない。
【0128】
まず、復旧制御部430は、復旧中フラグ4363に「ON」を設定する(ステップS1302)。このとき、復旧制御部430は、有効化フラグ4421に「ON」が設定されていることを確認する。
【0129】
CPU410は、復旧中フラグ4363に「ON」が設定されたことを検知した場合、復旧中フラグ4363に「ON」が設定されている間、転送情報ベース441および転送情報ベース461の更新を抑止する。
【0130】
次に、復旧制御部430は、更新中フラグ4422に「ON」を設定し(ステップS1303)、さらに、コマンド490を用いて、転送エンジン450に対して、転送情報ベース441を用いた転送情報ベース461の復旧を指示する(ステップS1304)。なお、転送エンジン450に送信されるコマンド490のデータ4915には転送情報ベース441に格納された転送先情報が含まれる。
【0131】
転送エンジン450は、復旧制御部430から転送情報ベース461の復旧の指示を受信した場合、受信した転送情報ベース441に格納された転送先情報を用いて揮発性メモリ460上に転送情報ベース461を復旧する(ステップS1305)。これによって、データ転送装置400の停止前の転送情報ベース461を迅速に復旧できる。転送エンジン450は、転送情報ベース461の復旧後、データの転送処理を再開することができる。
【0132】
復旧制御部430は、転送エンジン450において転送情報ベース461の復旧が終了した後、更新中フラグ4422に「OFF」を設定する(ステップS1306)。例えば、復旧制御部430は、転送情報ベース441に格納される全ての転送先情報を転送エンジン450に送信した場合、または、転送エンジン450から転送情報ベース461を復旧した旨を通知するコマンド490を受信した場合、転送情報ベース461の復旧が終了したと判定する。
【0133】
復旧制御部430は、復旧済フラグ4364に「ON」を設定し(ステップS1307)、さらに、復旧中フラグ4363に「OFF」を設定する(ステップS1308)。これによって、転送情報ベース461の復旧処理が終了したことCPU410が検知できる。
【0134】
CPU410は、復旧中フラグ4363が「ON」から「OFF」に変更されたことを検知した場合、復旧済フラグ4364を読み出し、当該フラグに「ON」が設定されていることを確認した後、コマンド490を用いて転送情報ベース441の読み出しを復旧制御部430に指示する(ステップS1309)。なお、復旧済フラグ4364に「OFF」が設定されている場合、CPU410は、復旧済フラグ4364が「ON」に変更されるまで転送情報ベース441の読み出し指示を行わない。
【0135】
復旧制御部430は、CPU410から転送情報ベース441の読み出しの指示を受信した場合、転送情報ベース441に格納される転送先情報を読み出し、コマンド490を用いて読み出した転送先情報をCPU410に送信する(ステップS1310)。
【0136】
CPU410は、読み出された転送情報ベース441に格納される転送先情報に基づいて、再度、ルーティングテーブル421を生成する(ステップS1311)。
【0137】
具体的には、CPU410は、転送情報ベース441に格納される転送先情報に基づいてルーティングテーブル421を生成する。このとき、CPU410は、ルーティングテーブル421に含まれる各エントリの生成フラグ4213に「OFF」を設定する。
【0138】
当該処理の後、ネットワークシステム100の運用者によって固定的な転送先情報が設定された場合、または、他のデータ転送装置400とデータの転送先情報を送受信することによって動的に転送先情報が設定された場合等、読み出された転送情報ベース441に基づく転送先情報の復旧以外の方法で転送先情報が設定される場合、CPU410は、エントリの情報を更新し、当該エントリの生成フラグ4213に「ON」を設定する。
【0139】
CPU410は、一定時間が経過後に生成フラグ4213に「OFF」が設定されているエントリが存在する場合、ルーティングテーブル421から当該エントリを削除する。これによって、不要な転送先情報を削除し、また、古い転送先情報を整理することができる。また、CPU410は、エントリの削除に伴う転送情報ベース461の更新を復旧制御部430に指示する。
【0140】
図11は、実施例の復旧制御部430が実行する転送情報ベース461の復旧処理を説明するフローチャートである。
【0141】
データ転送装置400が起動し、CPU410、復旧制御部430、および転送エンジン450が起動した後、復旧制御部430の制御処理部433は以下で説明する処理を開始する。
【0142】
まず、制御処理部433は、復旧中フラグ4363に「ON」を設定し(ステップS1401)、転送情報ベース461の復旧処理を実行する必要があるか否かを判定する(ステップS1402)。
【0143】
具体的には、制御処理部433は、有効化フラグ4421に「ON」が設定されているか否かを判定する。有効化フラグ4421に「ON」が設定されている場合、制御処理部433は、転送情報ベース461の復旧処理を実行する必要があると判定する。
【0144】
転送情報ベース461の復旧処理を実行する必要がない場合(ステップS1402がNO)、制御処理部433は、復旧済フラグ4364に「OFF」を設定し(ステップS1410)、その後、ステップS1409に進む。この場合、有効化フラグ4421に「OFF」が設定されているので、転送情報ベース461の復旧処理は実行されず、CPU410によって通常の起動処理が実行される。
【0145】
転送情報ベース461の復旧処理を実行する必要がある場合(ステップS1402がYES)、制御処理部433は、転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した後の再起動であるか否かを判定する(ステップS1403)。
【0146】
具体的には、制御処理部433は、更新中フラグ4422に「ON」が設定されているか否かを判定する。更新中フラグ4422に「ON」が設定されている場合、制御処理部433は、転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した後の再起動であると判定する。
【0147】
転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した後の再起動である場合(ステップS1403がYES)、制御処理部433は、復旧済フラグ4364に「OFF」を設定し(ステップS1410)、その後、ステップS1409に進む。
【0148】
転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した場合、転送情報ベース441および転送情報ベース461に格納される転送先情報に不整合が発生している可能性がある。そのため、転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した後の再起動である場合、復旧制御部430は、転送情報ベース461の復旧処理の実行を中止し、通常の起動処理が行われるように制御する。
【0149】
転送情報ベース441および転送情報ベース461の更新中にデータ転送装置400が停止した後の再起動でない場合(ステップS1403がNO)、制御処理部433は、転送情報ベース441に設定された有効期限を経過しているか否かを判定する(ステップS1404)。
【0150】
具体的には、制御処理部433は、現在時刻4365の時刻が有効期限4424に設定された有効期限内であるかを判定する。
【0151】
転送情報ベース441に設定された有効期限を経過している場合(ステップS1404がYES)、制御処理部433は、復旧済フラグ4364に「OFF」を設定し(ステップS1410)、その後、ステップS1409に進む。
【0152】
転送情報ベース441に設定された有効期限を経過している場合、当該転送情報ベース441に格納される転送先情報が古い可能性がある。そのため、復旧制御部430は、古い転送先情報を格納する転送情報ベース441を用いた転送情報ベース461の復旧処理の実行を停止し、通常の起動処理が行われるように制御する。
【0153】
転送情報ベース441に設定された有効期限を経過していない場合(ステップS1404がNO)、制御処理部433は、更新中フラグ4422に「ON」を設定して(ステップS1405)、揮発性メモリ460上に転送情報ベース461を復旧させる(ステップS1406)。
【0154】
具体的には、制御処理部433は、不揮発性メモリ440の転送情報ベース441から転送先情報を読み出し、読み出された転送先情報を含むコマンド490を、転送情報ベース461の復旧指示として転送エンジン450に送信する。転送エンジン450は、当該コマンド490を受信した場合、当該コマンド490に含まれる転送先情報に基づいて、転送情報ベース461を復旧する。
【0155】
制御処理部433は、転送情報ベース461の復旧が終了した後、更新中フラグ4422に「OFF」を設定し(ステップS1407)、さらに、復旧済フラグ4364に「ON」を設定する(ステップS1408)。
【0156】
制御処理部433は、例えば、転送情報ベース441に格納される全ての転送先情報を転送エンジン450に送信した場合、または、転送エンジン450から転送情報ベース461を復旧した旨を通知するコマンド490を受信した場合、転送情報ベース461の更新が終了したと判定する。
【0157】
ステップS1408またはステップS1410の処理が実行された後、制御処理部433は、復旧中フラグ4363に「OFF」を設定する(ステップS1409)。その後、制御処理部433は、転送情報ベース461の復旧処理を終了する。
【0158】
CPU410は、復旧中フラグ4363に「OFF」が設定された場合、転送情報ベース441および転送情報ベース461の更新を再開する。このとき、復旧済フラグ4364の状態に応じて、以下のような処理に分岐する。
【0159】
復旧済フラグ4364に「ON」が設定されている場合、CPU410は、転送情報ベース441を用いてルーティングテーブル421を再生成して、以後のルーティングテーブル421の更新、並びに転送情報ベース441および転送情報ベース461の更新を行う。
【0160】
復旧済フラグ4364に「OFF」が設定される場合、CPU410は、揮発性メモリ460の転送情報ベース461が復旧されていないため、CPU410は転送情報ベース441を用いたルーティングテーブル421の生成を行わない。復旧済フラグ4364に「OFF」が設定される場合、転送情報ベース441に誤った転送先情報が格納されている可能性がある。そのため、CPU410は、通常のデータ転送装置400の起動時と同様に、転送情報ベース441および転送情報ベース461を初期化した上で、再度、ルーティングテーブル421を生成し、また、転送情報ベース441および転送情報ベース461を更新する。
【0161】
なお、通常のデータ転送装置400の起動時における転送情報ベース441および転送情報ベース461を初期化とは、転送情報ベース441および転送情報ベース461に格納される情報を消去し、新たに転送先情報を格納できる状態にすることを示す。また、CPU410は、運用者が予め設定した情報等に基づいて、ルーティングテーブル421を生成する。
【0162】
転送情報ベース461の復旧中にデータ転送装置400が停止した場合、通常の転送情報ベース441および転送情報ベース461の更新時におけるデータ転送装置400の停止の場合と同様に、転送情報ベース441に不整合が発生する可能性がある。そのため、制御処理部433は、更新中フラグ4422を操作することによって、転送情報ベース461の復旧中にデータ転送装置400が停止した場合であっても、再起動時に復旧処理が実行されるのを回避できる。
【0163】
なお、
図11に示す処理では、ステップS1404において、制御処理部433は、復旧中フラグ4363に「ON」が設定されている場合に、有効期限を経過しているか否かを判定しているが、有効期限を考慮しない場合にはステップS1404の処理を省略してもよい。
【0164】
以上で説明したように、実施例によれば、復旧制御部430が、不揮発性メモリ440に格納する転送情報ベース461のバックアップデータである転送情報ベース441の更新を制御し、また、データ転送装置400の再起動時には転送情報ベース441の整合性を確認し、整合性がある場合に転送情報ベース441を用いて揮発性メモリ460上に転送情報ベース461を復旧する。
【0165】
転送情報ベース441および転送情報ベース461に整合性がある場合に不揮発性メモリ440に格納される転送情報ベース441を用いて転送情報ベース461を復旧することによって、データ転送装置400の再起動時に早期のデータ転送を再開することができる。また、転送情報ベース441および転送情報ベース461に整合性がない場合には、当該転送情報ベース441を用いた転送情報ベース461の復旧処理の実行が抑止されるため、誤った転送先へのデータの転送、またはデータ転送装置400の停止等を回避することができる。
【0166】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【0167】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるCPUが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、およびそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0168】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラムまたはスクリプト言語で実装できる。
【0169】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段またはCD−RW、CD−R等の記憶媒体に格納し、コンピュータが備えるCPUが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【0170】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。