(57)【要約】ツリー構造内において大量のメッセージが送信されるシステムであっても、当該システムの整合性を損なうことなく確実にノードの移動を可能にする技術を提供する。ツリー構造内において、移動するノードが移動先の親ノートとの間で接続を形成し、移動するノードが根ノードに移動リクエストを送信し、根ノードがツリー構造に従って当該移動リクエストに対する応答を配信する。移動先の親ノードは、当該応答を受信すると、当該応答よりも後のメッセージを形成された接続を経由して移動するノードに送信する。移動するノードは、形成された接続を経由して受信する応答よりも後のメッセージをキューに保持する。そして、移動するノードは、ツリー構造に従って配信された応答を受信すると、移動前の親ノードから受信した当該応答よりも前のメッセージとキューに保持された当該応答よりも後のメッセージとにより、配信されたメッセージの再構築を行う。
2014010014.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムにおける、該ツリー構造上のノードの位置の移動に係るツリー構造の管理方法であって、
移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、
前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、
を含むツリー構造の管理方法。
【請求項２】
前記移動するノードは、配信されたメッセージを再構築した後、前記移動先の親ノードから受信するメッセージを、キューに保持せずに処理する、
請求項１に記載のツリー構造の管理方法。
【請求項３】
前記移動前の親ノードは、前記ツリー構造に従って配信された前記応答を受信した後に前記移動するノードに対するメッセージの配信を停止することで、前記応答よりも後のメッセージを前記移動するノードに送信しない、
請求項１又は２に記載のツリー構造の管理方法。
【請求項４】
前記移動リクエストに対する応答は、前記移動するノードを示す情報と前記移動するノードの移動先を示す情報とを含み、前記情報処理システムに含まれるすべてのノードに前記ツリー構造に従って配信される、
請求項１から３のいずれか１項に記載のツリー構造の管理方法。
【請求項５】
前記移動リクエストに対する応答は、前記根ノードから前記移動するノードまでの経路に含まれるノードに配信される、
請求項１から３のいずれか１項に記載のツリー構造の管理方法。
【請求項６】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムにおけるノードの置き換えに係るツリー構造の管理方法であって、
前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させるステップと、
前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させるステップと、
を含み、
前記ノードの移動処理は、
移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、
前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、
を含む、
ツリー構造の管理方法。
【請求項７】
前記置き換え対象のノードが、前記ツリー構造における根ノードに置換リクエストを送信するステップと、
前記根ノードが、前記置換リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
を更に含み、
前記代替ノードは、前記根ノードから配信される、前記置換リクエストに対する応答を受信することで、前記ノードの移動処理に基づくノードの移動を開始し、
前記置き換え対象のノードが子ノードを有する場合、該子ノードは、前記代替ノードの移動の際に配信される、前記移動リクエストに対する応答を受信することで、前記ノードの移動処理に基づくノードの移動を開始する、
請求項６に記載のツリー構造の管理方法。
【請求項８】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムであって、
前記ツリー構造上の位置を移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成する手段と、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信する手段と、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信する手段と、
前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信する手段と、
前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持する手段と、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築する手段と、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断する手段と、
を備える情報処理システム。
【請求項９】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムであって、
前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させる手段と、
前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させる手段と、
を備え、
前記ノードの移動処理は、
移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、
前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、
を含む、
情報処理システム。
【請求項１０】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムに、
前記ツリー構造上の位置を移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、
前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、
を実行させるためのプログラム。
【請求項１１】
複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムに、
前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させるステップと、
前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させるステップと、
を実行させるためのプログラムであって、
前記ノードの移動処理は、
移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、
前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、
前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、
前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、
前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、
前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、
前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、
を含む、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ツリー構造の管理方法、情報処理システム、及び、プログラムに関する。
【背景技術】
【０００２】
複数の情報処理装置を備える情報処理システムでは、当該複数の情報処理装置は、それぞれノードとして、ツリー構造に接続される場合がある。例えば、複数のマスタノードがネットワークにより階層的に接続されているデータベースシステムがある（特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４９５１１３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ツリー構造に接続された複数の情報処理装置を備えるシステムでは、当該システム全体に各ノードの処理に係るメッセージを行き渡らせる場合、当該ツリー構造における各ノード間の接続を利用して、根ノードから各ノードにメッセージが送信される。例えば、上記特許文献１では、ツリー構造における各ノード間の接続を利用して、レプリケーションに係るメッセージが各ノードに送信される場面が例示されている。メッセージを受信すると、各ノードでは、当該受信したメッセージに係る処理が実行される。【０００５】
このツリー構造を有するシステムにおいて葉ノード以外のノードが停止すると、ツリー構造が壊れてしまい、当該停止するノードの下位に接続されたノードにメッセージが送信されなくなってしまう。そのため、当該停止するノードの下位に接続されたノードを移動させて、当該システムのツリー構造を維持させる必要がある。【０００６】
ツリー構造を維持する場合、移動するノードは、当該移動に際して、現在の接続を切断し、新たな接続を形成（再接続）することになる。このとき、当該移動するノードは、切断から再接続までの間に送信されたメッセージを受信することができない。【０００７】
これに対処する一つの方法として、送信されるメッセージを各ノードが全て保持しておき、上記のように移動するノードのために、当該移動するノードの切断から再接続までの間に送信されたメッセージを再送する方法がある。しかしながら、例えば、特許文献１に挙げられるレプリケーションに係るメッセージが送信される場面では、大量にメッセージが送信される場合がある。このような場合、送信されるメッセージを各ノードが全て保持する方法はリソースの面から現実的ではない。【０００８】
そのため、別の方法として、切断から再接続までの間に送信されたメッセージを取得できない状態で当該移動するノードを再接続させる方法がある。この方法では、当該移動するノードにおいて失われたメッセージを補う必要があり、場合によっては、当該失われたメッセージを補うための初期化処理が行われる。そうすると、失われたメッセージによっては当該初期化処理が成功せず、システムの整合性が失われてしまう場合があり、移動するノードの再接続処理は放棄されてしまう。つまり、この方法では、ノードの移動にギャンブル性が生じてしまい、気軽にノードを移動させることが出来なくなってしまう。【０００９】
よって、従来の方法では、ツリー構造内において大量のメッセージが送信されるシステムであっても、当該システムの整合性を損なうことなく確実にノードを移動させることができなかった。【００１０】
本発明は、このような点を考慮してなされたものであり、ツリー構造内において大量のメッセージが送信されるシステムであっても、当該システムの整合性を損なうことなく確実にノードの移動を可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の第１形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムにおける、該ツリー構造上のノードの位置の移動に係るツリー構造の管理方法であって、移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、を含むツリー構造の管理方法である。【００１２】
本発明の第１形態によれば、まず、ツリー構造内において、移動するノードと移動先の親ノートとの間で接続が形成される。次に、移動するノードから根ノードに移動リクエストが送信され、当該移動リクエストに対する応答が、根ノードからツリー構造に従って配信される。当該移動先の親ノードが当該応答を受信すると、当該応答よりも後のメッセージが、形成された接続を経由して当該移動するノードに送信される。当該移動するノードでは、形成された接続を経由して受信する応答よりも後のメッセージはキューに保持される。ツリー構造に従って配信された当該応答を移動するノードが受信すると、当該移動するノードでは、移動前の親ノードから受信した当該応答よりも前のメッセージとキューに保持された当該応答よりも後のメッセージとにより、配信されたメッセージの再構築が行われる。そして、移動するノードと移動前の親ノードとの接続が切断され、移動するノードの移動が完了する。【００１３】
従って、本発明の第１形態によれば、移動するノードのキューに保持されたメッセージを利用することで、配信されたメッセージの再構築を確実に行うことが可能であるため、ノードの移動にギャンブル性が生じず、ノードを確実に移動させることができる。また、メッセージの再構築のために保持するメッセージの量は、移動するノードのキューが保持する分だけで済むため、送信されるメッセージを各ノードが全て保持する方法に比べて格段にリソースを節約することができる。よって、本発明の第１形態によれば、ツリー構造内において大量のメッセージが送信されるシステムであっても、当該システムの整合性を損なうことなく確実にノードを移動させることが可能になる。【００１４】
本発明の第２形態は、前記移動するノードは、配信されたメッセージを再構築した後、前記移動先の親ノードから受信するメッセージを、キューに保持せずに処理する、第１形態のツリー構造の管理方法である。【００１５】
本発明の第３形態は、前記移動前の親ノードは、前記ツリー構造に従って配信された前記応答を受信した後に前記移動するノードに対するメッセージの配信を停止することで、前記応答よりも後のメッセージを前記移動するノードに送信しない、第１形態又は第２形態のツリー構造の管理方法である。【００１６】
本発明の第４形態は、前記移動リクエストに対する応答は、前記移動するノードを示す情報と前記移動するノードの移動先を示す情報とを含み、前記情報処理システムに含まれるすべてのノードに前記ツリー構造に従って配信される、第１形態から第３形態のいずれかの形態のツリー構造の管理方法である。【００１７】
本発明の第５形態は、前記移動リクエストに対する応答は、前記根ノードから前記移動するノードまでの経路に含まれるノードに配信される、第１形態から第３形態のいずれかの形態のツリー構造の管理方法である。【００１８】
本発明の第６形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムにおけるノードの置き換えに係るツリー構造の管理方法であって、前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させるステップと、前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させるステップと、を含み、前記ノードの移動処理は、移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、を含む、ツリー構造の管理方法である。【００１９】
本発明の第７形態は、前記置き換え対象のノードが、前記ツリー構造における根ノードに置換リクエストを送信するステップと、前記根ノードが、前記置換リクエストに対する応答を、前記ツリー構造に従って配信するステップと、を更に含み、前記代替ノードは、前記根ノードから配信される、前記置換リクエストに対する応答を受信することで、前記ノードの移動処理に基づくノードの移動を開始し、前記置き換え対象のノードが子ノードを有する場合、該子ノードは、前記代替ノードの移動の際に配信される、前記移動リクエストに対する応答を受信することで、前記ノードの移動処理に基づくノードの移動を開始する、第６形態のツリー構造の管理方法である。【００２０】
なお、上記各形態に係るツリー構造の管理方法の別の形態として、以上の各構成を実現する情報処理システムであってもよいし、プログラムであってもよいし、このようなプログラムを記録したコンピュータその他装置、機械等が読み取り可能な記憶媒体であってもよい。ここで、コンピュータ等が読み取り可能な記録媒体とは、プログラム等の情報を、電気的、磁気的、光学的、機械的、又は、化学的作用によって蓄積する媒体である。なお、データベースシステムは、１又は複数のコンピュータによって実現されてもよい。【００２１】
例えば、本発明の第８形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムであって、前記ツリー構造上の位置を移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成する手段と、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信する手段と、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信する手段と、前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信する手段と、前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持する手段と、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築する手段と、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断する手段と、を備える情報処理システムである。        【００２２】
また、例えば、本発明の第９形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムであって、前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させる手段と、前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させる手段と、を備え、前記ノードの移動処理は、移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、を含む、情報処理システムである。【００２３】
また、例えば、本発明の第１０形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムに、前記ツリー構造上の位置を移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、前記移動先の親ノードが、前記応答を受信すると、形成された前記接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、前記移動するノードが、形成された前記接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、を実行させるためのプログラムである。【００２４】
また、例えば、本発明の第１１形態は、複数の情報処理装置がそれぞれノードとしてツリー構造で接続され、該ツリー構造に従ってメッセージが配信される情報処理システムに、前記ツリー構造における葉ノードを置き換え対象のノードに置き換わる代替ノードとして、前記置き換え対象のノードを前記代替ノードで置き換えるため、前記ツリー構造上の位置に係るノードの移動処理によって、前記代替ノードの移動先の親ノードが前記置き換え対象のノードの親ノードとなるように、前記代替ノードを移動させるステップと、前記置き換え対象のノードが子ノードを有する場合、前記ノードの移動処理によって、前記子ノードの移動先の親ノードが前記代替ノードとなるように、前記子ノードを移動させるステップと、を実行させるためのプログラムであって、前記ノードの移動処理は、移動するノードが、移動によって前記移動するノードの親ノードとなる移動先の親ノードと接続を形成するステップと、前記移動するノードが、前記ツリー構造における根ノードに移動リクエストを送信するステップと、前記根ノードが、前記移動リクエストに対する応答を、前記ツリー構造に従って配信するステップと、前記移動先の親ノードが、前記応答を受信すると、形成された接続を経由して前記移動するノードに前記応答よりも後のメッセージを送信するステップと、前記移動するノードが、形成された接続を経由して前記移動先の親ノードから受信するメッセージをキューに保持するステップと、前記移動するノードが、前記ツリー構造に従って配信された前記応答を受信すると、前記移動するノードの移動前の親ノードから受信した前記応答よりも前のメッセージと前記キューに保持された前記応答よりも後のメッセージとにより、配信されたメッセージを再構築するステップと、前記移動するノード又は前記移動前の親ノードが、前記移動するノードと前記移動前の親ノードとの接続を切断するステップと、を含む、プログラムである。
【発明の効果】
【００２５】
本発明によれば、ツリー構造内において大量のメッセージが送信されるシステムであっても、当該システムの整合性を損なうことなく確実にノードの移動を可能にすることができる。
【図面の簡単な説明】
【００２６】
【図１】図１は、実施の形態に係る複数の情報処理装置がそれぞれノードとしてツリー構造で接続された情報処理システムを例示する。
【図２】図２は、実施の形態に係るノード（情報処理装置）を例示する。
【図３】図３は、実施の形態に係るノードの移動手順を例示する。
【図４】図４は、実施の形態に係るノードの移動手順を例示する。
【図５】図５は、実施の形態においてノードが移動した後の状態を例示する。
【図６】図６は、実施の形態に係るノードの置き換え手順を例示する。
【発明を実施するための形態】
【００２７】
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。ただし、以下で説明する本実施形態は、あらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。つまり、本発明の実施にあたって、それぞれの実施形態に応じた具体的構成が適宜採用されてもよい。
【００２８】
なお、本実施形態において登場するデータを自然言語により説明しているが、より具体的には、コンピュータが認識可能な疑似言語、コマンド、パラメタ、マシン語等で指定される。
【００２９】
［構成例］
図１は、本実施形態に係る複数の情報処理装置がそれぞれノードとしてツリー構造で接続された情報処理システム１を例示する。以下では、複数の情報処理装置をそれぞれノードとも称する。
【００３０】
各ノード間の枝は、接続（connection）を表している。当該接続（connection）上では、メッセージの到達順序が保証される。すなわち、各ノードは、ネットワーク上でメッセージの順序が入れ替わったとしても、受信した当該メッセージを正しい順序、例えば、送信された順序に並び替えることができる。このような接続の一例として、ＴＣＰ（Transmission Control Protocol）の接続を挙げることができる。
【００３１】
本実施形態では、各ノードは、例えば、ネットワーク上において、いずれのノードとも通信可能なように、メッシュ状に接続されてもよいし、並列に接続されてもよい。このようなネットワークにおいて、各ノードは、通信可能な複数のノードのうち、少なくとも、ツリー構造における自身の親ノードと子ノードとを把握している。これにより、図１に示されるようなツリー構造における通信が実現される。
【００３２】
なお、ノード間の通信に利用される接続はツリー構造の接続に限定される訳ではなく、各ノードは、ツリー構造とは無関係なノードと通信を行ってもよい。すなわち、ツリー構造とは無関係な接続（connection）がノード間の通信に利用されてもよい。
【００３３】
また、各ノードは、必ずしも、情報処理システム１に含まれる自身以外の全てのノードと通信可能な状態ではなくともよい。例えば、移動と無関係なノードは、移動に関係あるノードと通信可能な状態ではなくてもよい。図１に示される例では、ノードＢは、ノードＣ以下のノードと通信可能な状態ではなくてもよい。また、ノードＤは、ノードＥ以下のノードと通信可能な状態ではなくてもよい。
【００３４】
また、各ノードは、自身の親ノード及び子ノード以外に更にツリー構造について把握していてもよい。例えば、各ノードは、ツリー構造における根ノードがどのノードであるかを把握していてもよい。また、例えば、各ノードは、情報処理システム１のツリー構造全体を把握していてもよい。ここで、各ノード間で、ツリー構造について把握している度合いが異なってもよい。例えば、一部のノードは、ツリー構造について、自身の親ノードと子ノードとを把握しているのに対して、その他のノードは、ツリー構造全体を把握していてもよい。
【００３５】
なお、各ノードは、制御部に含まれるＲＡＭ又は記憶装置においてツリー構造に関する情報を保持することで、ツリー構造を把握する。例えば、各ノードは、ツリー構造上における自身の親ノードと子ノードとを把握するために、ツリー構造に関する情報として、ツリー構造上における自身の親ノードと子ノードとを示す情報（隣接ノード情報）を保持していてもよい。また、例えば、各ノードは、どのノードが根ノードであるかを把握するために、根ノードを示す情報（根ノード情報）を保持していてもよい。また、例えば、各ノードは、ツリー構造全体を把握するために、ツリー構造に関する情報として、ツリー構造全体を示す情報（ツリー情報）を保持していてもよい。
【００３６】
図１に示されるように、本実施形態に係る情報処理システム１では、例えば、全てのノードにメッセージ（message）を配信する場合、ツリー構造の根ノードであるノードＡからツリー構造に従ってメッセージが配信される。すなわち、各ノードは、自身の親ノードからメッセージを受信すると、自身の子ノードに当該受信したメッセージを送信する。このようなメッセージの受信と送信が、メッセージが葉ノードに到達するまで繰り返されることで、メッセージは全てのノードに配信される。
【００３７】
なお、当該配信されるメッセージは、例えば、情報処理システム１が特許文献１に示されるデータベースシステムである場合、上位マスタノードから配信されるトランザクションログである。当該配信されるメッセージの内容は、実施形態に応じて、適宜選択される。以下では、このような根ノードからツリー構造に従って全てのノードに配信されるメッセージをツリーメッセージと称する。ただし、情報処理システム１では、配信されるメッセージはツリーメッセージに限定される訳ではなく、このような方法以外でメッセージが配信されてもよい。
【００３８】
上述のとおり、本実施形態のツリー構造における接続では、メッセージの到達順序が保証される。そのため、このようなツリーメッセージは、全てのノードにおいて同じ順序で処理することが可能である。本実施形態では、情報処理システム１に含まれる各ノードそれぞれにおいて、同じ順序でツリーメッセージが処理されることで、システムの整合性が保たれる。
【００３９】
なお、図１では、ノードＩが、移動するノードとして、移動先の親ノードがノードＣとなるように、ツリー構造上のノードの位置を移動する場面を例示している。なお、移動するノードは、ノードＩに限定される訳ではなく、ツリー構造内のいずれのノードであってもよい。
【００４０】
ここで、ノードＩの移動前の親ノードは、図１に示されるように、ノードＧである。すなわち、当該ノードＩの移動は、親ノードをノードＧからノードＣに変更するための移動と捉えることが可能である。
【００４１】
図２は、情報処理システム１に含まれる各ノードのハードウェア構成を例示する。図２に示されるように、各ノードは、それぞれ、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、及び、ＲＯＭ（Read Only Memory）等を含む制御部、制御部で実行されるプログラム等を記憶する記憶装置、並びに、ネットワークを介した通信を行うための通信インタフェース、が電気的に接続された情報処理装置である。なお、図２では、通信インタフェースは、「通信Ｉ／Ｆ」と記載される。制御部に含まれるＲＡＭ及びＲＯＭは主記憶装置と称され、記憶装置は補助記憶装置と称されてもよい。制御部に含まれるＣＰＵは、処理装置と称されてもよい。各ノードは、それぞれ、ＰＣ（Personal Computer）、サーバマシン等であってもよい。
【００４２】
なお、各ノードそれぞれのハードウェア構成に関して、実施の形態に応じて適宜構成要素の省略、置換、及び、追加が行われてもよい。例えば、制御部は、複数のプロセッサを含んでもよい。
【００４３】
また、情報処理システム１に含まれる全てのノードは、同じハードウェア構成であってもよい。また、情報処理システム１に含まれる一部のノードは、その他のノードと異なる構成要素を備えてもよい。各ノードの構成要素は、実施形態に応じて、適宜選択される。      
【００４４】
［動作例］
図３及び４は、本実施形態に係るノードの移動手順を例示する。なお、それぞれの図では、ステップを「Ｓ」と表記する。後述する図６においても同様の表記を用いる。また、図４では、ツリーメッセージＡを「ｍＡ」と表記し、ツリーメッセージＢを「ｍＢ」と表記する。
【００４５】
図３に示されるように、ステップ１０１では、ノードＩの制御部が、通信インタフェースを利用して、接続を形成するための通信をノードＣと行い、移動先の親ノードであるノードＣと接続（connection）を形成する。なお、当該形成される接続では、上述のツリー構造上における接続と同様に、メッセージの到達順序が保証される。当該形成される接続の一例として、ＴＣＰの接続を挙げることができる。そして、処理は、ステップ１０２に進む。
【００４６】
ステップ１０２では、ノードＩの制御部が、通信インタフェースを利用して、ツリー構造における根ノードであるノードＡに移動リクエストを送信する。そして、処理は、ステップ１０３に進む。
【００４７】
なお、移動リクエストは、ツリー構造に従って配信されることでノードＡに送信されてもよいし、ツリー構造に従わずに、ノードＡに直接送信されてもよい。ツリー構造に従って配信される場合、ノードＩは、自身が保持しているツリー構造に関する情報を参照して、移動リクエストを自身の親ノードであるノードＧに送信する。ノードＧ、Ｅ、及び、Ｃの制御部は、それぞれ、自身が保持しているツリー構造に関する情報を参照して、受信した移動リクエストを自身の親ノードに送信する。これにより、移動リクエストは、ツリー構造に従って配信されて（図１に示される例では、ノードＩ、Ｇ、Ｅ、Ｃ、Ａの順に配信されて）、ノードＡに送信される。このとき、各ノードは、ツリー構造に関する情報として、自身の親ノード及び子ノード、換言すると、隣接するノードを把握していれば足りる。
【００４８】
他方、移動リクエストは、ツリー構造に従わずに、ノードＡに直接送信されてもよい。ここで、上述のとおり、各ノードは、ツリー構造に関する情報として、自身の親ノードと子ノードとを把握するための隣接ノード情報を保持している場合がある。ノードＩが当該隣接ノード情報以外にツリー構造に関する情報を保持していない場合、ノードＩは、どのノードが根ノードであるか特定することができない。そこで、ノードＩの制御部は、例えば、マルチキャスト又はブロードキャストで、宛先を指定せずに全てのノードに当該移動リクエストを配信することで、移動リクエストをノードＡに送信してもよい。このとき、各ノードは、少なくとも隣接ノード情報により、自身の親ノードと子ノードとを把握している。そのため、各ノードは、少なくとも、自身に親ノードが存在するか否かにより、自身が根ノードであるか否かを把握することができる。よって、根ノード（ノードＡ）以外のノードが当該移動リクエストを無視することで、根ノード（ノードＡ）のみが移動リクエストを処理することができる。なお、ノードＡは、自身がツリー構造上の根ノードであることを把握していてもよい。
【００４９】
また、各ノードは、ツリー構造に関する情報として、根ノードがどのノードであるかを把握するための根ノード情報を保持している場合がある。ノードＩが当該根ノード情報を保持する場合、ノードＩの制御部は、当該根ノード情報を参照することで根ノードを特定することができる。そのため、この場合、ノードＩの制御部は、当該根ノード情報を参照して、根ノードはノードＡであると特定して、当該ノードＡに移動リクエストを送信してもよい。
【００５０】
また、各ノードは、ツリー構造に関する情報として、ツリー構造全体を把握するためのツリー情報を保持している場合がある。ノードＩが当該ツリー情報を保持する場合、根ノード情報の場合と同様、ノードＩの制御部は、当該ツリー情報を参照することで根ノードを特定することができる。そのため、この場合、ノードＩの制御部は、根ノード情報の場合と同様に、当該ツリー情報を参照して、根ノードはノードＡであると特定して、当該ノードＡに移動リクエストを送信してもよい。
【００５１】
図４に示されるように、ステップ１０３では、ノードＡの制御部が、通信インタフェースを利用して、移動リクエストに対する応答（reply）をツリー構造に従って配信する。なお、各ノードは、通信インタフェースを用いて、当該応答（reply）及びツリーメッセージの配信を行う。そして、処理は、ステップ１０４に進む。
【００５２】
ここで、図４において、ツリーメッセージＡは、応答（reply）前のツリーメッセージを例示する。また、ツリーメッセージＢは、応答（reply）後のツリーメッセージを例示する。更に、図４において、表記は省略されているが、楕円は応答（reply）を示し、矩形はツリーメッセージを示し、ノードＢ、及び、Ｄ〜Ｆは、それぞれ、ノードＣ、Ｇ、及び、Ｈと同じ順序でツリーメッセージと応答（reply）とを受信する。
【００５３】
ステップ１０４では、移動先の親ノードであるノードＣの制御部は、応答（reply）を受信すると、通信インタフェースを利用して、応答（reply）よりも後のツリーメッセージＢを移動するノードであるノードＩに送信する。このとき、ノードＣの制御部は、ステップ１０１において形成された接続（connection）を利用して、ツリーメッセージＢをノードＩに送信する。そして、処理は、ステップ１０５に進む。
【００５４】
なお、ノードＣは、例えば、応答（reply）の内容から、受信した応答（reply）が自身の関与する応答（reply）であると認識する。
【００５５】
その一例として、応答（reply）には、移動するノードを示す情報が含まれていてもよい。この場合、ノードＣの制御部は、受信した応答（reply）に含まれる当該情報により示される移動するノードがステップ１０１で接続（connection）を形成してきたノードである場合に、受信した応答（reply）が自身の関与する応答（reply）であると認識する。      
【００５６】
また、その他の例として、応答（reply）には、移動するノードを示す情報に加えて、当該移動するノードの移動先の親ノードを示す情報が含まれているとする。この場合、ノードＣの制御部は、応答（reply）に含まれる当該情報により示される移動先の親ノードが自身である場合に、受信した応答（reply）が自身の関与する応答（reply）であると認識する。
【００５７】
ステップ１０５では、ノードＩの制御部は、ステップ１０１において形成された接続（connection）を経由して送信されたツリーメッセージＢを受信すると、当該受信したツリーメッセージＢをキューに保持する。そして、処理は、ステップ１０６に進む。
【００５８】
なお、キューの記憶領域は、制御部に含まれるＲＡＭに確保されてもよいし、記憶装置に確保されてもよい。ノードＩの制御部は、少なくともＲＡＭ又は記憶装置のいずれか一方にキューの記憶領域を確保し、通信インタフェースを介して受信したツリーメッセージＢを当該キューに保持する。ここで、ノードＩの制御部は、キューの記憶領域として、予め所定の容量の記憶領域を確保してもよいし、ツリーメッセージＢをキューに保持する度に、キューの記憶領域を拡大させてもよい。キューの記憶領域を確保する方法は、実施の形態に応じて、適宜選択される。
【００５９】
ステップ１０６では、ノードＩの制御部は、ツリー構造に従って配信された応答（reply）を受信すると、移動前の親ノードであるノードＧから受信した応答（reply）よりも前のツリーメッセージＡとキューに保持されたツリーメッセージＢとにより、ノードＡから配信されたツリーメッセージを再構築する。これにより、ノードＩでは、ノードＡから配信されるツリーメッセージの到達順序が確保される。そのため、本実施形態では、システムの整合性を損なうことなく、ノードを移動させることができる。そして、処理は、ステップ１０７に進む。
【００６０】
ここで、図４に示されるとおり、移動前の親ノードであるノードＧは、ツリー構造に従って配信された応答（reply）を受信した後に、ノードＩに対するツリーメッセージの配信を停止することで、応答（reply）よりも後のツリーメッセージＢをノードＩに送信しなくてもよい。
【００６１】
なお、この場合、ノードＧは、例えば、応答（reply）の内容により、自身の子ノードであるノードＩが移動することを認識する。上述した応答（reply）の内容の一例として挙げたとおり、応答（reply）には、移動するノードを示す情報が含まれているとする。このとき、ノードＧの制御部は、受信した応答（reply）に含まれる移動するノードを示す情報により示されるノードが自身の子ノードである場合に、自身の子ノードが移動することを認識する。
【００６２】
本動作例では、ノードＧの制御部は、ノードＩが移動することを認識する。そして、ノードＧの制御部は、当該認識の後、ノードＩに対するツリーメッセージの配信を停止することで、応答（reply）よりも後のツリーメッセージＢをノードＩに送信しなくてもよい。
【００６３】
すなわち、ノードＧの制御部は、当該認識の後は、ノードＩとの接続（connection）を少なくともノードの親子関係に関する接続（connection）ではないと認識することができる。そのため、ノードＧの制御部は、ノードＩを子ノードとして取り扱うことを止めることで、ノードＩに対するツリーメッセージの配信を停止してもよい。更に、ノードＧの制御部は、当該認識の後、ノードＩとの接続（connection）を切断してもよい。
【００６４】
また、ノードＩに対するツリーメッセージＢの配信をノードＧが停止しない場合、ノードＩの制御部は、ノードＧから送信される、当該応答（reply）以降のツリーメッセージＢを放棄してもよい。
【００６５】
ステップ１０７では、ノードＩの制御部又はノードＧの制御部が、ノードＩとノードＧとの間の接続（connection）を切断する。これにより、ノードＩの移動は完了する。
【００６６】
ステップ１０１〜１０７により示されるノードの移動方法では、上述した配信されるメッセージを各ノードが保持する方法に比べて、移動するノードが、応答（reply）よりも後のツリーメッセージＢをキューに保持するだけで済む。そのため、本実施形態に係るノードの移動方法によれば、上述した配信されるメッセージを各ノードが保持する方法に比べて、リソースの節約を図ることが可能になる。このようなリソースの節約の効果は、大量のツリーメッセージが流れる情報処理システムほど、高まる。そのため、特許文献１に示されるような大量のツリーメッセージが流れ得るデータベースシステムでは、本ノードの移動方法は、重要な技術となる。
【００６７】
また、本実施形態に係るノードの移動方法では、移動するノードのキューに保持されるツリーメッセージと移動前の親ノードから配信されるツリーメッセージとで、配信されたツリーメッセージの再構築が確実に行うことができる。そのため、本実施形態に係るノードの移動方法によれば、ノードの移動にギャンブル性を生じさせず、確実にノードを移動させることができる。そして、上述した失われたメッセージを補うための初期化処理が行われるシステムに比べて、本ノードの移動方法を実施する情報処理システム１では、当該処理化処理が不要になる分、システムの構成がシンプルになる。
【００６８】
更に、本ノードの移動方法では、各ノードの動作は、根ノードから配信される応答（reply）が起点となる。すなわち、本ノードの移動方法では、応答（reply）以外の情報を配信することなく、ツリー構造の再構築を行うことが可能である。
【００６９】
図５は、本実施形態に係る情報処理システム１においてノードＩが移動した後の状態を例示する。図５では、図３及び４により示されるノードの移動処理によって、ノードＩの親ノードがノードＧからノードＣに変更された状態が例示されている。
【００７０】
なお、図５に示されるとおり、ノードＩが移動した後は、通常どおりにツリーメッセージの配信が行われる。そして、ノードＩにおいても、その他のノードと同様に、通常どおりにツリーメッセージの処理が行われる。具体的には、ノードＩの制御部は、ステップ１０６においてツリーメッセージの再構築を行った後、ノードＣから受信するツリーメッセージをキューに保持せずに処理する。すなわち、ノードＩの制御部は、ノードＣから受信するツリーメッセージをキューに保持していた動作を停止し、通常どおりにツリーメッセージの処理を行う。
【００７１】
ここで、ノードＩの制御部は、ステップ１０６におけるツリーメッセージの再構築が終了した後、キューを廃棄することで、確保したキューの記憶領域を解放してもよい。また、ノードＩの制御部は、キューを廃棄せずに、確保したキューの記憶領域を維持し、次に移動する際に当該キューの記憶領域を利用してもよい。利用しなくなったキューの記憶領域の取扱は、実施形態に応じて、適宜選択される。
【００７２】
＜その他＞
図４では、情報処理システム１に含まれる全てのノードに、移動リクエストに対する応答（reply）が配信される例が示されている。当該応答（reply）には、移動するノードを示す情報が含まれている。
【００７３】
ここで、ノードの移動が生じると、移動するノード、移動先の親ノード、及び、移動前の親ノードでは、ノードの親子関係に変更が生じる。各ノードが、自身の親ノードと子ノードとを把握するために、隣接ノード情報を保持している場合、当該移動するノード、移動先の親ノード、及び、移動前の親ノードでは、当該隣接ノード情報の更新が行われる。
【００７４】
具体的には、上述したステップ１０４では、移動先の親ノードは、受信した応答（reply）に含まれている情報により示される移動するノードがステップ１０１で接続（connection）を形成してきたノードである場合に、受信した応答（reply）が自身の関与する応答（reply）であると認識する。このとき、移動先の親ノードの制御部は、当該情報により示される移動するノードを自身の子ノードに追加するように、保持する隣接ノード情報を更新する。
【００７５】
また、移動前の親ノードの制御部は、応答（reply）に含まれる情報により示される移動するノードが自身の子ノードである場合に、当該移動するノードを子ノードから削除するように、保持する隣接ノード情報を更新する。そして、移動するノードの制御部は、自身の親ノードが移動先の親ノードとなるように、保持する隣接ノード情報を更新する。これにより、各ノードは、少なくとも、自身の親ノードと子ノードとを把握し続けることができる。
【００７６】
なお、各ノードは、情報処理システム１のツリー構造全体を把握するために、ツリー情報を保持している場合がある。この場合、移動リクエストに対する（reply）に移動するノードを示す情報に加えて、当該移動するノードの移動先の親ノードを示す情報が含まれており、情報処理システム１に含まれる全てのノードに当該応答（reply）が配信されることで、各ノードは、ノードの移動が生じた後も、情報処理システム１のツリー構造を把握し続けることが可能である。
【００７７】
具体的には、各ノードの制御部は、受信した応答（reply）に含まれる情報に基づいて、移動するノードと移動先の親ノードとを把握する。そして、各ノードの制御部は、ノードの移動後の状態を示すように、保持するツリー情報を更新する。上述した動作例では、各ノードの制御部は、図１に示されるツリー構造から図５に示されるツリー構造を示すように、自身が保持するツリー情報を更新する。これにより、各ノードは、情報処理システム１のツリー構造全体を把握し続けることができる。
【００７８】
なお、図４では、情報処理システム１に含まれる全てのノードに、当該応答（reply）が配信される例が示されている。しかしながら、当該応答（reply）は、必ずしも、情報処理システム１に含まれる全てのノードに配信されなくてもよい。例えば、当該応答（reply）は、根ノードから移動するノードまでの経路に含まれるノード以外のノードには配信されなくてもよい。図４に示される例では、ノードＢ、Ｄ、Ｆ、及び、Ｈには、当該応答（reply）が配信されなくてもよい。
【００７９】
例えば、情報処理システム１の根ノードであるノードＡが、制御部に含まれるＲＡＭ又は記憶装置において、情報処理システム１のツリー構造全体を把握するためのツリー情報を保持している。この場合、ノードＡは、移動するノードからの移動リクエストに対する応答（reply）に当該応答（reply）が配信される経路を示す経路情報を追加して、当該応答（reply）を配信する。上記動作例では、ノードＡは、ノードＣ、Ｅ、Ｇ、Ｉの順に当該応答（reply）が配信されることを示す経路情報を当該応答（reply）に追加する。ノードＣ、Ｅ、及び、Ｇは、当該経路情報を参照することで、当該応答（reply）の配信先を決定する。これにより、根ノードから移動するノードまでの経路に含まれるノードには当該応答（reply）が配信され、根ノードから移動するノードまでの経路に含まれるノード以外のノードには当該応答（reply）が配信されないようにすることができる。
【００８０】
そのため、このような応答（reply）の配信方法によれば、応答（reply）の配信の発生回数を抑えることが可能になり、当該応答（reply）の配信にかかるリソースの節約を実現することができる。
【００８１】
＜ノードの置換＞
図６は、本実施形態に係るノードの置き換え手順を例示する。上述したノードの移動方法を利用することで、ノードの置き換えを行うことができる。図６により示される例では、置き換え対象のノードはノードＥである。また、ノードＥに置き換わる代替ノードは、葉ノードであるノードＩである。すなわち、図６は、図１により示されるツリー構造において、ノードＥをノードＩに置き換える手順を例示する。なお、以下では、上述したノードの移動方法については説明を省略して、ノードの置き換え手順を説明する。
【００８２】
ステップ１では、上述したノードの移動方法によって、ノードＩの移動先の親ノードがノードＥの親ノードであるノードＣになるように、ノードＩは移動する。ここで、ノードＥには、子ノード（ノードＦとＧ）が存在する。そのため、当該子ノードの移動処理として、ステップ２及び３に係る処理が実行される。なお、ノードＥに子ノードが存在しない場合、当該子ノードの移動処理は省略され、ステップ４に係る処理が実行される。
【００８３】
ステップ２では、ノードＥの子ノードであるノードＧは、上述したノードの移動方法によって、自身の移動先の親ノードがノードＩとなるように移動する。また、ステップ３では、ノードＥの子ノードであるノードＦは、上述したノードの移動方法によって、自身の親ノードがノードＩとなるように移動する。ステップ２及び３の処理が終了すると、処理は、ステップ４に進む。
【００８４】
なお、ノードＧの子ノードであるノードＨには、ノードＧで再構築されたツリーメッセージが配信される。これにより、ノードＨにおいて、ツリーメッセージの整合性が担保される。
【００８５】
また、本実施形態では、ステップ２及び３は、並列に処理される。ここで、ステップ２及び３は、順番に処理されてもよい。例えば、ノードＧが移動した後にノードＦが移動してもよいし、ノードＦが移動した後にノードＧが移動してもよい。すなわち、ノードＥの子ノードを移動させる順番によって、本実施形態は限定されない。
【００８６】
ステップ４では、ノードＥとノードＣとの間の接続（connection）が切断される。ステップ１〜３までの処理により、ツリー構造において、ノードＩがノードＥに置き換わっており、ノードＥの子ノードだったノードＦ及びＧは、ノードＩの子ノードになっている。そのため、ステップ１〜３までの処理が完了した時点で、情報処理システム１には、ノードＥが停止することで影響を受けるノードは存在しない。よって、情報処理システム１は、ノードＥとノードＣとの間の接続（connection）を切断することで、ツリー構造からノードＥを退出することができる。
【００８７】
このような手順により、ノードを置き換えることが可能である。このようなノードの置き換えは、例えば、情報処理システム１の管理者がノードの点検を行いたい場合に、点検対象のノードをツリー構造から退出させる際に、活用される。
【００８８】
なお、上述した各ステップは、手動で開始されてもよいし、自動で開始されてもよい。例えば、管理者が、情報処理システム１を管理するためのクライアントＰＣ（不図示）により、各ノードを操作することで、各ステップの処理が開始されてもよい。
【００８９】
また、例えば、ノードＡから配信される応答（reply）が各ステップのトリガに利用されてもよい。その一例として、以下の方法が挙げられる。
【００９０】
まず、置き換え対象のノードであるノードＥは、根ノードであるノードＡに置換リクエストを送信する。例えば、ノードＥは、上述した移動リクエストと同様の方法で、ノードＡに置換リクエストを送信する。なお、当該置換リクエストは、ステップ４においてノードＥがツリー構造から退出する点を考慮して、退出リクエストと称されてもよい。
【００９１】
ここで、ノードＥがツリー構造全体を把握している場合、ノードＥが代替ノードを決定してもよい。ノードＡがツリー構造全体を把握している場合、ノードＡが代替ノードを決定してもよい。また、管理者の指定によって、代替ノードが決定されてもよい。代替ノードには、システムに含まれるいずれのノードが選択されてもよく、例えば、移動してもシステムに与える影響の少ない葉ノードが選択される。ただし、本実施形態は、代替ノードの決定方法に限定される訳ではない。代替ノードの決定方法は、実施形態に応じて、適宜選択される。なお、ノードＥが代替ノードを選択する方法として、次の方法が用いられてもよい。
【００９２】
ノードＥの制御部は、例えば、システムに含まれる葉ノードを検索するための検索リクエストをツリー構造に従って配信する。当該検索リクエストは、ノードＥ以下のノードに配信されてもよいし、上記移動リクエストに対する応答（reply）と同様に、ノードＥからのリクエストに対する応答として根ノード（ノードＡ）から配信されてもよい。
【００９３】
ここで、各ノードの制御部は、少なくとも隣接ノード情報により、自身の親ノードと子ノードとを把握している。そのため、各ノードの制御部は、少なくとも、自身が保持するツリー構造に関する情報を参照することで、自身に子ノードが存在するか否かにより、自身が葉ノードであるか否かを把握することができる。
【００９４】
そこで、各ノードの制御部は、自身が葉ノードであるか否かを把握しているとする。この場合に、葉ノードではないノードが当該検索リクエストを受信したとき、当該葉ノードではないノードの制御部は、受信した当該検索リクエストを自身の子ノードに配信する。一方、葉ノードが当該検索リクエストを受信したとき、当該葉ノードの制御部は、当該検索リクエストに対する応答をノードＥに対して行う。
【００９５】
ノードＥの制御部は、当該検索リクエストに対する応答を受信することで、システムに含まれる葉ノードを把握することができる。検索リクエストがノードＥ以下のノードに配信された場合は、ノードＥは、自身の下位に存在する１又は複数の葉ノードを把握することができる（図６の例では、ノードＦ、Ｈ、及び、Ｉ）。他方、ノードＥからのリクエストに対する応答として検索リクエストが根ノード（ノードＡ）から配信された場合、ノードＥは、システムに含まれる全ての葉ノードを把握することができる（図６の例では、ノードＢ、Ｄ、Ｆ、Ｈ、及び、Ｉ）。
【００９６】
そして、ノードＥの制御部は、返答のあった葉ノードの中から、所定の規則に従って、代替ノードを決定する。葉ノードの中から代替ノードを決定する当該所定の規則は、いかなる規則であってもよく、実施の形態に応じて、適宜選択されればよい。このような方法により、ノードＥによって代替ノードが選択されてもよい。
【００９７】
次に、置換リクエストを受信すると、根ノード（ノードＡ）は、当該置換リクエストに対する応答（reply）をツリー構造に従って配信する。なお、以下では、当該置換リクエストに対する応答（reply）を置換replyと称する。また、上述したノードの移動方法における、移動リクエストに対する応答（reply）を移動replyと称する。ここで、当該置換リクエストが退出リクエストと称される場合、置換replyは退出replyと称されてもよい。
【００９８】
そして、当該置換replyを受信すると、代替ノード（ノードＩ）は、上述したノードの移動方法に基づいて、移動を開始する。すなわち、代替ノード（ノードＩ）は、置換replyをトリガとして、ノードの移動を開始する。
【００９９】
ここで、根ノード（ノードＡ）の制御部は、置き換え対象のノードを示す情報と代替ノードを示す情報とを含む置換replyを配信する。代替ノードの制御部は、置換replyに含まれるこれらの情報を参照することで、当該置換replyが自身の関与する置換replyであることを認識し、置き換え対象のノードがどのノードであるかを把握する。
【０１００】
代替ノードの制御部は、例えば、ツリー情報を保持する場合、置換replyに含まれる情報と当該ツリー情報とを参照することで、置き換え対象のノードの親ノードを特定することができる。この場合、代替ノードの制御部は、上述したノードの移動方法により、自身が保持する情報に基づいて特定できる置き換え対象のノードの親ノードが移動先の親ノードとなるようなノードの移動を開始する。
【０１０１】
一方、代替ノードの制御部は、隣接ノード情報を保持するに過ぎない場合等、自身が保持する情報では置き換え対象のノードの親ノードを特定できない場合がある。この場合、代替ノードの制御部は、例えば、置き換え対象のノードに問い合わせることで、置き換え対象のノードの親ノードを把握してもよい。
【０１０２】
また、例えば、置き換え対象のノードの親ノードを示す移動先情報が置換replyに含まれていてもよい。つまり、根ノード（ノードＡ）の制御部は、当該移動先情報を含む置換replyをツリー構造に従って配信してもよい。そして、代替ノードの制御部は、当該置換replyに含まれる移動先情報を参照することで、置き換え対象のノードの親ノードを把握してもよい。
【０１０３】
なお、当該移動先情報を置換replyに含める方法の一例として、根ノード（ノードＡ）がツリー情報を保持する場合、当該根ノード（ノードＡ）の制御部は、当該ツリー情報を参照することで、置き換え対象のノードの親ノードを特定することができる。つまり、当該根ノード（ノードＡ）の制御部は、ツリー情報を参照することで、当該移動先情報により示すノードを特定することができる。よって、この場合、根ノード（ノードＡ）の制御部は、置き換え対象のノードの親ノードを示す移動先情報を置換replyに含めることができる。
【０１０４】
また、その他の例として、置き換え対象のノード（ノードＥ）の制御部は、上記置換リクエストとともに、自身の親ノードを示す親ノード情報を根ノード（ノードＡ）に送信してもよい。当該親ノード情報を受信した根ノード（ノードＡ）の制御部は、当該受信した親ノード情報を移動先情報として置換replyに含める。これにより、置き換え対象のノードの親ノードを示す移動先情報を置換replyに含めることができる。
【０１０５】
そして、代替ノードの制御部は、このようにして把握した置き換え対象のノードの親ノードが移動先の親ノードとなるようなノードの移動を開始する。図６において示される例では、ノードＩは、ノードＥの親ノードであるノードＣが移動先の親ノードとなるようなノードの移動を開始する（ステップ１）。
【０１０６】
そして、置き換え対象のノード（ノードＥ）の子ノードは、代替ノード（ノードＩ）の移動の際に配信される移動replyを受信することで、移動を開始する。すなわち、置き換え対象のノード（ノードＥ）の子ノードは、代替ノード（ノードＩ）の移動の際に配信される移動replyをトリガとして、移動を開始する。
【０１０７】
なお、図６に示される例では、置き換え対象のノード（ノードＥ）には、複数の子ノード（ノードＧ及びＦ）が存在する。本実施形態では、上述のとおり、置き換え対象のノードに複数の子ノードが存在する場合、当該複数の子ノードは、並列に移動を開始する。
【０１０８】
当該複数の子ノードは、互いにツリーメッセージを配信する関係にない。そのため、それぞれが並列に移動を開始しても、それぞれが受信するツリーメッセージの到達順序が損なわれることはない。よって、本実施形態では、置き換え対象のノードに複数の子ノードが存在する場合、当該複数の子ノードは、並列に移動を開始する。
【０１０９】
具体的には、まず、置き換え対象のノードの子ノードの制御部は、受信した置換replyに含まれる情報を参照することで、代替ノードがどのノードであるかを把握し、かつ、自身の親ノードが置き換え対象のノードであることを認識する。
【０１１０】
次に、置き換え対象のノードの子ノードの制御部は、把握した代替ノードの移動に際して配信される移動replyが配信されてくるまで待機する。移動replyには、上述のとおり、移動するノードを示す情報が含まれている。そのため、置き換え対象のノードの子ノードの制御部は、当該移動replyに含まれる情報を参照することで、受信した移動replyが、代替ノードの移動の際に配信された移動replyか否かを特定することができる。
【０１１１】
そして、置き換え対象のノードの子ノードの制御部は、代替ノードの移動の際に配信された移動replyを受信すると、当該代替ノードが移動先の親ノードとなるようなノードの移動を開始する。図６において示される例では、ノードＧ及びＦは、ノードＩが移動先の親ノードとなるようなノードの移動を並列に開始する（ステップ２及び３）。
【０１１２】
最後に、置き換え対象のノードの制御部は、自身の子ノードとの接続（connection）が切断された時点で、自身の親ノードとの接続（connection）を切断し、ツリー構造から退出する。
【０１１３】
具体的には、上述したノードの移動方法では、ステップ１０７において、移動するノードと移動前の親ノードとの間の接続（connection）が切断される。上述の動作例では、移動するノード又は移動前の親ノードが当該接続（connection）を切断する。つまり、置き換え対象のノード又は当該置き換え対象のノードの子ノードが、当該置き換え対象のノードの子ノードの移動に際して、置き換え対象のノードと当該置き換え対象のノードの子ノードとの間の接続（connection）を切断する。
【０１１４】
置き換え対象のノードの制御部は、自身の子ノードとの接続（connection）が切断された後に、自身の親ノードとの接続（connection）を切断し、ツリー構造から退出する。図６に示される例では、ノードＥは、ノードＧ及びＦとの接続（connection）が切断された後に、ノードＣとの接続（connection）を切断して、ツリー構造から退出する（ステップ４）。
【０１１５】
なお、上述のとおり、置き換え対象のノードに複数の子ノードが存在する場合、当該複数の子ノードが順番にノードの移動を行ってもよい。例えば、置き換え対象のノード（ノードＥ）に複数の子ノードが存在する場合、当該複数の子ノードのうちの少なくとも１つの子ノードは、ノードＩの移動の際に配信される移動replyを受信することで、移動を開始する。そして、当該複数の子ノードのうちの第１の子ノードの移動の際に配信される移動replyを受信することで、第２の子ノードが移動を開始する。すなわち、第２の子ノードは、第１の子ノードの移動の際に配信される移動replyをトリガとして、上述したノードの移動方法に基づいて、移動を開始する。
【０１１６】
例えば、ノードＦは、ノードＩの移動において配信される移動replyを受信することで、移動を開始してもよい（ステップ２）。そして、ノードＧは、ノードＦの移動の際に配信される移動replyを受信することで、移動を開始してもよい（ステップ３）。この場合、ノードＦが第１の子ノードに相当し、ノードＧが第２の子ノードに相当する。
【０１１７】
また、ノードＧが、ノードＩの移動の際に配信される移動replyを受信することで、移動を開始してもよい。そして、ノードＦは、ノードＧの移動の際に配信される移動replyを受信することで、移動を開始してもよい。すなわち、ノードＧとノードＦの移動する順番は入れ替ってもよい。この場合、ノードＧが第１の子ノードに相当し、ノードＦが第２の子ノードに相当する。
【０１１８】
置き換え対象のノードに複数の子ノードが存在する場合における、当該複数の子ノードの移動順序は、実施形態に応じて、適宜決定される。例えば、各ノードに番号が与えられている場合、当該番号に基づいて、当該複数の子ノードの移動順序が決定されてもよい。      
【０１１９】
この場合、置き換え対象のノードの有する複数の子ノードは、それぞれ、自身が保持するツリー構造に関する情報により、自身を含み、置き換え対象のノードの有する子ノードがどのノードであるかを把握している。そして、当該置き換え対象のノードの有する複数の子ノードは、それぞれに付与されている番号を把握している。これにより、置き換え対象のノードの有する複数の子ノードは、各々、移動replyを受信する度に、これらの情報に基づいて、自身が移動する番であるか否かを判定する。
【０１２０】
以上、本発明の実施の形態を詳細に説明してきたが、前述までの説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【符号の説明】
【０１２１】
１…情報処理システム
Ａ〜Ｉ…ノード（情報処理装置）
【図１】
2014010014.tif 000003
【図２】
2014010014.tif 000004
【図３】
2014010014.tif 000005
【図４】
2014010014.tif 000006
【図５】
2014010014.tif 000007
【図６】
2014010014.tif 000008
【国際調査報告】
2014010014.tif 000009
2014010014.tif 000010