JPH0895874A - リモートプロシジャコール処理方法 - Google Patents

リモートプロシジャコール処理方法

Info

Publication number
JPH0895874A
JPH0895874A JP6251283A JP25128394A JPH0895874A JP H0895874 A JPH0895874 A JP H0895874A JP 6251283 A JP6251283 A JP 6251283A JP 25128394 A JP25128394 A JP 25128394A JP H0895874 A JPH0895874 A JP H0895874A
Authority
JP
Japan
Prior art keywords
server
procedure call
remote procedure
rpc
transaction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6251283A
Other languages
English (en)
Inventor
Shinji Fujiwara
真二 藤原
Mitsuru Nagasaka
充 長坂
Kiyohiro Obara
清弘 小原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP6251283A priority Critical patent/JPH0895874A/ja
Publication of JPH0895874A publication Critical patent/JPH0895874A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

(57)【要約】 【目的】同一トランザクションに属する複数のプロセス
からの同一サーバに対するリモートプロシジャコール
(RPC)を同一サーバプロセスで実行する。 【構成】各サーバは、同一のサービス機能を提供する複
数のサービスプロセスからなり、該複数のサービスプロ
セスに対するRPC のスケジュールキューと、接続状態を
管理する拡張チェインテーブルと、同一トランザクショ
ンに属するプロセスからのRPC 要求を受け付ける拡張チ
ェインキューを有する。クライアント側では、自プロセ
スが属するトランザクションと相手サーバとが未接続の
場合にはスケジュールキューにキューイングし、接続待
ちの場合には拡張チェインキューにキューイングし、接
続済みの場合にはソケット経由で直接送信する。サーバ
側では、最初にスケジュールキューから要求を取り出
し、次に拡張チェインキューから要求を取り出し、最後
にソケット経由で送信される要求を取り出すことによ
り、同一トランザクションに属する複数のプロセスから
のRPC を同一サーバプロセスで実行する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、計算機システムにおけ
る遠隔手続き呼び出しを行うためのリモートプロシジャ
処理方法に関する。
【0002】
【従来の技術】並列計算機技術の進歩に伴い、一つの処
理を複数の計算機で実行する並列処理方法が重要となっ
てきている。並列処理方式の一つの方法として、遠隔手
続き呼び出し(リモートプロシジャコール、以下RPC と
呼ぶ)が、提案されている。
【0003】RPC については、篠田洋一訳:「UNIXネッ
トワークプログラミング」、凸版、1993, pp809-842.
(原著;W.Richard: "UNIX NETWORK PROGRAMING", Prin
ce Hall, 1990.)に詳しく述べられている。
【0004】RPC とは、2つのプロセス間にまたがる手
続き呼び出しのことであり、自プロセスから他プロセス
の手続きを呼び出すことである。呼び出す側の自プロセ
スのことをクライアント(又はクライアントプロセ
ス)、呼び出される他プロセスのことをサーバ(又はサ
ーバプロセス)と呼ぶ。サーバプロセスは、クライアン
トプロセスと同一のシステム上(ローカルホストと呼
ぶ)にある場合もあるし、他のシステム上(リモートホ
ストと呼ぶ)にある場合もある。
【0005】クライアントからサーバに対するRPC の処
理手順は、以下のようなものである。まず、クライアン
トの関数から、クライアントスタブと呼ばれるローカル
関数を呼び出す。クライアントスタブは、サーバで実行
すべきプロシジャ名および引き数等を1つのメッセージ
として纏める。このメッセージをRPC 電文と呼ぶ。次
に、クライアントスタブは、OSのシステムコールを発行
して、上記RPC 電文をサーバプロセスのサーバスタブに
対して送信する。サーバプロセスのサーバスタブでは、
受信したRPC 電文を解読して、実行すべき関数および引
き数等を取得し、指定された関数を実行する。関数の戻
り値はサーバスタブに渡され、そこで一つのメッセージ
として纏められる。このメッセージを応答電文と呼ぶ。
サーバスタブは、クライアントスタブに対してOSのシス
テムコールを発行して応答電文を送信する。クライアン
トスタブでは、受信した応答電文を解読し、RPC を呼び
出したクライアントに対して関数の戻り値をリターンす
る。
【0006】以上の手続きにおいては、クライアントが
RPC を実行すべきサーバプロセスと接続する手段が重要
となる。クライアントとサーバを接続するためには、相
手サーバの存在するリモートホストを見つける手段と、
該リモートホスト内において接続すべきサーバプロセス
を特定する手段が必要となる。
【0007】相手サーバの存在するリモートホストを見
つける手段としては、集中型のデータベースを用いる手
段や、サーバ登録時にサーバの情報を他のホストにブロ
ードキャストする手段等が用いられる。リモートホスト
内において接続すべきサーバプロセスを特定する手段と
しては、サービス要求を振り分けるためのサーバデーモ
ンをサーバが存在するホストにあらかじめ用意してお
き、クライアントからのRPC 電文を該サーバデーモンに
一度送信し、その後、RPC 受付可能状態にあるサーバプ
ロセスに振り分けるといった手段等が用いられる。
【0008】RPC の実現方法には種々の方法があるが、
本発明では、各サーバ毎に同一のサービス機能を提供す
る複数のサーバプロセスが存在し、各サーバに対するRP
C 電文をスケジュールキュー経由でサーバに送信するク
ライアント・サーバモデルを扱う。本モデルでは、クラ
イアントからサーバに対して送信されるRPC 電文は、各
サーバ毎に用意されたスケジュールキューにキューイン
グされ、該キューングされた要求がサーバプロセスによ
り順次取り出されて実行される。
【0009】上記クライアント・サーバモデルにおける
RPC の実行モードとしては、同期型非チェインドRPC 、
同期型チェインドRPC 、非同期型非チェインドRPC 、お
よび非同期型チェインドRPC がある。
【0010】同期/非同期の違いを述べる。同期型は、
RPC の応答電文をサーバから受信するまでクライアント
がブロックされる。非同期型は、RPC の応答電文の受信
を待たずにクライアントの処理を続行する。非同期型RP
C の応答電文は、非同期型RPC 応答受信処理関数を発行
することにより受信される。
【0011】また、チェイン/非チェインの違いは、ク
ライアントとサーバとの接続を切断するかしないかの点
にある。チェインドRPC では、当該サーバとの接続を継
続し、次回のRPC 電文をスケジュールキューにキューイ
ングせずに、直接当該サーバプロセスに送信する。従っ
て、同一のサーバプロセスに複数のRPC を実行させるこ
とが可能である。一方、非チェインドRPC は、実行終了
時に当該サーバとの接続を切断する。非チェインドRPC
を実行すると、次回のRPC 電文はスケジュールキューに
キューイングされるため、前回と同一のサーバプロセス
でRPC が実行されるとは限らない。
【0012】クライアントとサーバの接続関係の継続を
可能にするチェインドRPC の公知例としては、XeroxのC
ourirシステム(商品名)がある(前記公知文献参
照)。Courirシステムでは、RPC を発行する前に、オー
プン関数を呼び出してクライアントとサーバの間の接続
を確立し、その後、RPC を複数回実行する。各RPC の実
行において、クライアントとサーバとの接続関係は切断
しない。クライアントとサーバの接続関係の切断は、ク
ローズ関数を発行することにより実行される。このよう
にすることで、1つのプロセスからの複数のRPC を同一
のサーバプロセスで実行することが可能となる。
【0013】
【発明が解決しようとする課題】前記チェインドRPC で
は、1つのプロセスから発行される複数のRPC を同一サ
ーバプロセスに実行させることが可能である。しかしな
がら、一連の処理を複数のプロセスで実行している場合
(例えば、並列計算機による並列処理)、該複数のプロ
セスから発生する同一サーバへのRPC を同一サーバプロ
セスで実行させることはできなかった。
【0014】一連の処理の中で、複数のプロセスから同
一サーバプロセスに対してRPC が発行される例として、
データベースのトランザクション処理がある。複数のデ
ータベースを同時にアクセスするようなトランザクショ
ン処理においては、クライアントプロセスは、複数のデ
ータベースサーバに対してRPC を発行して処理を実行す
る。一つのデータベースサーバからは、入出力サーバの
ように各データベースサーバに共通なサーバに対してRP
C を発行して処理を実行する。そのため、一つのトラン
ザクション処理を実行するときに、複数のサーバプロセ
スを経由して一つのサーバに対してそれぞれRPC が発行
されることが起きる。
【0015】図2は、従来方式における上記処理の流れ
を説明する図である。図において、左上肩に小さい四角
が付けられている矩形1〜5はプロセスを示し、矩形6
〜8はスケジュールキューであるFIFO(First-In First
-Out)キューを示す。また、プロセス内に記述されてい
るT01 の記号は、一連の処理であることを示すグローバ
ルトランザクション識別子(以下、GTIDと呼ぶ)を示し
ている。
【0016】まず、親プロセス(1)から発行されたサ
ーバAに対するRPC 電文は、サーバAスケジュールキュ
ー6にキューイングされ(21)、サーバAプロセス群
40に属する子プロセスa(2)により取り出される
(22)。そして、親プロセス(1)と子プロセスa
(2)間に接続関係が確立し、処理が実行される。子プ
ロセスaの実行途中で発行されるサーバCに対するRPC
電文は、サーバCのスケジュールキュー8にキューイン
グされ(23)、サーバCプロセス群42に属する孫プ
ロセスc1(4)に取り出される(24)。そして、孫
プロセスc1(4)と子プロセスa(2)間に接続関係
が確立し、処理が実行される。
【0017】一方、親プロセス(1)から発行されるサ
ーバBに対するRPC も同様に処理され、サーバBスケジ
ュールキュー7を経由して子プロセスb(3)に取り出
されて実行される(25,26)。
【0018】ここで、子プロセスbからサーバCに対し
てRPC が発行されたとする。このとき、子プロセスbと
接続関係にあるサーバCのプロセスは存在しない。そこ
で、子プロセスbからサーバCに対するRPC 電文は、サ
ーバCスケジュールキュー8にキューイングされる(2
7)。サーバCプロセス群の中では、孫プロセスc1が
サーバAと接続中であるため、子プロセスbがキューイ
ングした要求は、別のプロセスである孫プロセスc2
(5)により取り出される(28)。
【0019】以上示したように、GTIDがT01 である一連
の処理は、プロセス1〜プロセス5により実行され、サ
ーバCに対する異なるプロセス(2および3)からのRP
C は、別々のプロセス(4および5)で実行されること
が分かる。このため、一連の処理内容が前述したような
トランザクション処理であった場合には、サーバCのそ
れぞれの孫プロセス(4および5)においてトランザク
ション開始処理およびトランザクション終了処理を行な
わなければならず、このことがデータベース処理の効率
を悪化させる一つの要因となっている。また、一つのト
ランザクションがが占有するプロセス数(プロセス資
源)が大きくなるという問題もある。
【0020】本発明の目的は、一つのトランザクション
処理を実行する複数のプロセスから発行された同一サー
バに対するRPC を同一のサーバプロセスで実行するリモ
ートプロシジャコール処理方法を提供することにある。
【0021】本発明の他の目的は、上記RPC がRPC の応
答電文の受信を待たずに処理を継続する非同期型RPC で
あった場合においても、複数のプロセスから発行された
同一サーバに対するRPC を同一のサーバプロセスで実行
するリモートプロシジャコール処理方法を提供すること
にある。
【0022】
【課題を解決するための手段】本発明は、クライアント
プロセスから自ホスト上または他ホスト上に存在するサ
ーバの手続きを呼び出すリモートプロシジャコールであ
って、前記サーバは同一のサービスを提供する複数のサ
ーバプロセスで構成され、前記クライアントプロセスか
ら発行されるリモートプロシジャコールは前記複数のサ
ーバプロセスの任意の一つにより処理されるリモートプ
ロシジャコールの処理方法において、トランザクション
管理されている複数のクライアントプロセスが存在し、
各クライアントプロセスは管理されているトランザクシ
ョンを特定するグローバルトランザクション識別子を有
する場合に、同一のトランザクションに管理されている
複数のクライアントプロセスのうちの任意の一つから前
記サーバに最初にリモートプロシジャコールを発行する
第1のステップと、該リモートプロシジャコールを受け
付けた前記サーバにおいて、該リモートプロシジャコー
ルを一つのサーバプロセスに割当てて該サーバプロセス
と前記クライアントプロセスとを接続するとともに、該
接続したクライアントプロセスのグローバルトランザク
ション識別子と該接続に係る接続情報とを拡張チェイン
テーブル上に格納する第2のステップと、前記トランザ
クション管理下の複数のクライアントプロセスのうちの
任意の一つから前記サーバに次にリモートプロシジャコ
ールを発行するとき、該クライアントプロセスは、前記
拡張チェインテーブルを参照して、同一のトランザクシ
ョン管理下の別のクライアントプロセスと接続されてい
るサーバプロセスの接続情報を得、該サーバプロセスに
向けてリモートプロシジャコールを発行する第3のステ
ップとを備え、これにより、同一トランザクションの複
数のクライアントプロセス間で一つのサーバプロセスを
共有することを特徴とする。
【0023】各サーバ毎に、前記クライアントプロセス
からの最初のリモートプロシジャコールの実行要求を受
け付けるスケジュールキューを設け、前記第1のステッ
プにおけるリモートプロシジャコールの発行は、前記リ
モートプロシジャコールの電文を前記スケジュールキュ
ーにキューイングすることにより行なうとよい。
【0024】また、各サーバ毎に、各トランザクション
と当該サーバとのリモートプロシジャコールの実行関係
を格納する前記拡張チェインテーブルおよび拡張チェイ
ンキューを設け、前記拡張チェインテーブルは、前記グ
ローバルトランザクション識別子と、前記グローバルト
ランザクション識別子のトランザクションと当該サーバ
との接続状態を示す拡張チェイン状態と、接続中のサー
バプロセスのハンドル情報と、拡張チェインキューに関
する情報とを格納するテーブルであり、前記第2のステ
ップでは、前記拡張チェインテーブルに、前記グローバ
ルトランザクション識別子と、前記接続したサーバプロ
セスのハンドル情報とを格納し、前記第3のステップで
は、当該サーバの拡張チェインキューに前記リモートプ
ロシジャコールの電文をキューイングすることにより、
同一のトランザクション管理下の別のクライアントプロ
セスと既に接続されているサーバプロセスに向けてリモ
ートプロシジャコールを発行するようにするとよい。
【0025】すなわち、具体的にいうと本発明では、従
来のチェインドRPC の機能を拡張した拡張チェインドRP
C 処理方法を提供する。拡張チェインドRPC では、各サ
ーバ毎に拡張チェインテーブルおよび拡張チェインキュ
ーを新たに設けることにより、複数のプロセスから発行
されるRPC を一つのサーバプロセスにわりあてることを
可能としている。拡張チェインテーブルには、トランザ
クションの識別子であるGTIDと該トランザクションと接
続状態にあるサーバプロセスの接続情報が格納される。
トランザクション管理下にあるクライアントプロセスか
らサーバに対してRPC を発行する際には、前記拡張チェ
インテーブルをクライアントのGTIDで検索し、その結果
により以下の処理を行なう。
【0026】該GTIDが拡張チェインテーブルにまだ登録
されていない場合には、同一GTIDを有する他のプロセス
から該サーバに対する接続要求がまだ行なわれていない
ということであるから、RPC 電文を該サーバのスケジュ
ールキューにキューイングすると共に、拡張チェインテ
ーブルにクライアントのGTIDを登録し、当該サーバの拡
張チェイン状態を接続待ちにする。そして、該RPC 電文
がサーバプロセスにより取り出されたときに、拡張チェ
インテーブルの当該GTIDエントリに対して、サーバの拡
張チェイン状態を接続済みにすると共に、該サーバプロ
セスのハンドル情報(該サーバプロセスに電文を直接送
信するための接続情報)を記録する。
【0027】該GTIDが拡張チェインテーブルに既に登録
されており、かつその拡張チェイン状態が接続済みであ
る場合には、同一GTIDを有する他のプロセスから既に該
サーバに対して接続処理が完了しているので、該テーブ
ルに格納されているサーバプロセスのハンドル情報を取
得し、該サーバプロセスに対して直接RPC 電文を送信す
る。
【0028】該GTIDが拡張チェインテーブルに既に登録
されており、かつその拡張チェイン状態が接続待ちであ
る場合には、同一GTIDを有する他のプロセスから既に出
されている該サーバに対する接続要求の接続処理が未完
了であるということであるから、該サーバプロセスに対
して直接RPC 電文を送信することはできない。そこで、
該GTID専用の拡張チェインキューを作成し、該拡張チェ
インキューにRPC 電文をキューイングする。拡張チェイ
ンキューにキューイングされたRPC 電文は、スケジュー
ルキューにキューイングされたRPC 電文がサーバプロセ
スに取り出されて実行された後に、該サーバプロセスに
より順次取り出されて実行される。このようにすること
で、同一GTIDを持つ他のプロセスからの先行するRPC
と、後続のRPC とを、一つのサーバプロセスで実行する
ことが可能となる。拡張チェインキューが空になると、
該キューは消去され、サーバプロセスは直接送信されて
くる電文の受信待ちに移行する。
【0029】各サーバ毎に設ける拡張チェインテーブル
はクライアントプロセスおよびサーバプロセスの両方か
ら参照/更新されるため、共用メモリに配置する。ま
た、本拡張チェインドRPC を実行する計算システムにリ
モートホスト間の共用メモリが実装されていない場合に
は、スケジューラデーモンを介して同等の処理を行な
う。即ち、サーバが存在する各ホストにスケジューラデ
ーモンをあらかじめ立ち上げておき、リモートホストに
対するRPC 電文は、まず当該リモートホスト上のスケジ
ューラデーモンに直接送信し、該スケジューラデーモン
が相手サーバの拡張チェインテーブルを参照して、受信
したRPC 電文をスケジュールキューにキューイングする
か、相手サーバプロセスに直接送信するか、拡張チェイ
ンキューにキューイングするかを決定する。
【0030】以上説明したように、本発明においては、
同一トランザクション内にある複数のプロセスから発行
される同一サーバに対するRPC を、グローバルトランザ
クション識別子をキーとして同一プロセスに割り当てる
機構を有する点に特徴がある。
【0031】
【作用】以上述べたように、本発明では、拡張チェイン
テーブルならびに拡張チェインキューを用いて、同一GT
IDを有する複数のプロセスから発行されたRPC を一つの
サーバプロセスに割り当てることを実現可能としてい
る。このため、同一サーバに対するRPC の接続/切断処
理を1回に纏めることが可能となる。
【0032】また、チェインドRPC においては、クライ
アントとサーバが接続を開始してから切断するまでの
間、サーバプロセスはクライアントプロセスに確保され
ることになる。ホスト内に生成できるサーバプロセス数
は一般に有限であるため、同一サーバに対するチェイン
ドRPC の同時実行数はプロセス数により制限される。
【0033】これに対して、本発明による拡張チェイン
ドRPC では、同一GTIDを有する複数のプロセスから発行
されるRPC を一つサーバプロセスで処理するため、サー
バプロセス資源の削減にも効果があるという特徴を有す
る。
【0034】
【実施例】以下、本発明の実施例を説明する。本実施例
では、リモートプロシジャコール(以下、RPC と呼ぶ)
の新しい機能である拡張チェインドRPC について、図を
参照しながら、詳細に説明する。
【0035】図1は、本実施例における拡張チェインド
RPC の動作を示す図である。図において、左上肩に小さ
い四角が付けられている矩形1〜5はプロセスを示し、
矩形6〜9はFIFOキューを示す。FIFOキューは、システ
ムが提供するメッセージキューを利用するほか、共用メ
モリ領域にFIFOキューを作成するなど、プロセス間で共
用できる資源を用いて種々の方法で実現可能である。
【0036】また、本図における矢印付きの実線は、プ
ロセス間のRPC 電文の流れを示し、矢印付きの破線は、
共用メモリに格納されているテーブルの参照動作を示
す。破線の四角40〜42は、同一のサービス機能を提
供する複数のプロセスで構成されたサーバプロセス群を
示す。本実施例では、サーバA、サーバB、サーバCの
3種類のサーバが存在し、各サーバ毎にサーバプロセス
群が構成されている。一つのサーバプロセス群には、当
該サーバへの要求を受け付けるためのスケジュールキュ
ー6〜8が用意されている。
【0037】今、親プロセス(1)がトランザクション
管理下にあり、グローバルトランザクションID(以
下、GTIDと呼ぶ)がT01 であるとする。親プロセス
(1)はサーバAおよびサーバBに対してチェインドRP
C 電文を発行し、また、サーバAおよびサーバBはそれ
ぞれサーバCに対してチェインドRPC 電文を発行すると
する。また、それぞれのサーバ間の接続は、未だ確立さ
れていないとする。以下、処理の流れを図1に従って説
明する。
【0038】まず、親プロセス(1)から発行されたサ
ーバAに対するチェインドRPC 電文は、サーバAスケジ
ュールキュー6にキューイングされる(11)。キュー
イングされたRPC 電文は、サーバAプロセス群40の子
プロセスa(2)に取り出されて実行される(12)。
【0039】子プロセスaからサーバCに対してチェイ
ンドRPC 電文を発行する際には、まず、サーバCの拡張
チェインテーブル10をGTID=T01 で検索する(3
0)。すると、前記条件を満たす情報が登録されていな
いことが判明するため、該チェインドRPC 電文をサーバ
Cのスケジュールキュー8にキューイングする(1
3)。このとき、サーバCの拡張チェインテーブル10
に、GTIDがT01 のRPC が接続待ち(REQ_WAIT)状態である
ことを登録する。キューイングされたRPC 電文は、サー
バCプロセス群42の孫プロセスc1(4)に取り出さ
れて実行される(14)。このとき、サーバCの拡張チ
ェインテーブル10に、GTIDがT01 のRPC が孫プロセス
c1と接続済み(ONLINE)状態にあることを登録し、同時
に、孫プロセスc1のハンドル情報も該拡張チェインテ
ーブル10に登録する(32)。
【0040】次に、親プロセス1から発行されたサーバ
Bに対するチェインドRPC 電文は、サーバBのスケジュ
ールキュー7にキューイングされる(16)。キューイ
ングされたRPC 電文は、サーバBプロセス群41の子プ
ロセスb(3)に取り出されて実行される(17)。
【0041】子プロセスbからサーバCに対してチェイ
ンドRPC 電文を発行する際には、まず、サーバCの拡張
チェインテーブル10をGTID=T01 で検索する(3
1)。すると、GTIDがT01 のサーバCに対する要求は既
に他のプロセスにより行なわれており、その拡張チェイ
ン状態がONLINE状態であり、相手サーバプロセスが孫プ
ロセスc1であることが判明する。そこで、該拡張チェ
インテーブル10に格納してある孫プロセスc1のハン
ドル情報を用いて、サーバcに直接RPC 電文を送信する
(18)。
【0042】以上のように、グローバルトランザクショ
ンIDと接続中のサーバプロセスとの対応関係を示す拡張
チェインテーブルを各サーバ毎に用意することにより、
同一GTIDを有する複数のプロセスから発行されたチェイ
ンドRPC を同一のサーバプロセスで実行することが可能
となった。
【0043】なお、上記説明では、煩雑さを避けるため
に省略しているが、実際には、サーバAおよびサーバB
にも拡張チェインテーブルがある。そして、親プロセス
からサーバAおよびサーバBにRPC を発行するときに
は、サーバAおよびサーバBの拡張チェインテーブルを
参照して拡張チェイン状態を取得し、該RPC 電文をサー
バのスケジュールキューにキューイングするか、あるい
は、接続中のサーバプロセスに直接送信するかを決定す
る。
【0044】上記説明では、子プロセスaから発行され
たサーバCへのRPC 電文が孫プロセスc1に取り出され
た後に子プロセスbからサーバCにRPC 電文を発行した
場合を想定している。そこで、以下では、子プロセスa
から発行されたサーバCへのRPC 電文がサーバCのスケ
ジュールキューの中に存在している状態で、子プロセス
bからサーバCに対してRPC 電文が発行された場合の、
サーバBおよびサーバCの動作について説明する。
【0045】まず、サーバBの子プロセスbからサーバ
Cに対してチェインドRPC 電文を発行する際に、サーバ
Cの拡張チェインテーブル10をGTID=T01 で検索する
(31)。すると、GTIDがT01 のサーバCに対する要求
が他のプロセスにより行なわれており、その状態が接続
待ち(REQ_WAIT)状態であることが判明する。
【0046】REQ_WAIT状態においては、相手サーバプロ
セスが未確定であるため、当該RPC電文をサーバプロセ
スに対して直接送信することはできない。また、当該RP
C 電文をサーバCのスケジュールキュー8にキューイン
グすると該RPC 電文はサーバCの他のプロセスにより取
り出されるため、子プロセスaと子プロセスbから発行
されるサーバCへのRPC 電文が必ずしも同一サーバで実
行されるとは限らない。
【0047】そこで、このような状態のときには、GPID
がT01 であるサーバCの拡張チェインキュー9を一時的
に作成し、当該RPC 電文を前記T01 用拡張チェインキュ
ー9にキューイングにする(19)。サーバCのT01 用
拡張チェインキュー9にキューイングされたRPC 電文
は、サーバCのスケジュールキュー8にキューイングさ
れたRPC 電文が孫プロセスc1に取り出されて(14)
実行された後に、孫プロセスc1により取り出されて実
行される(20)。
【0048】サーバプロセスc1は、スケジュールキュ
ー8からチェインドRPC 電文を受け取ると、その後は、
拡張チェインキュー9から電文を順次取り出す。そし
て、拡張チェインキュー9が空になったら、該拡張チェ
インキュー9を削除し、ソケットからのRPC 電文受信待
ちになる。
【0049】図12は、前記拡張チェインテーブルの一
実施例である。サーバが存在する各ノード上には、各サ
ーバのスケジュールキューを管理するためのスケジュー
ル管理テーブル(50)と、各サーバの拡張チェインキ
ューを管理するための拡張チェインテーブル(51,5
2,10)が存在する。スケジュール管理テーブル(5
0)は当該ノードに1つだけ存在するが、拡張チェイン
テーブル(51,52,10)は当該ノードに存在する
サーバ数だけ存在する。
【0050】スケジュール管理テーブル(50)は、サ
ーバ名(61)、スケジュールキュー識別子(62)、
スケジュールキュー内電文数(63)、および拡張チェ
インテーブルへのポインタ(64)等を保持する。拡張
チェインテーブル(51,52,10)は、GTID(6
5)、拡張チェイン状態(66)、サーバプロセスハン
ドル情報(67)、拡張チェインキューID(68)、お
よび拡張チェインキュー内電文数(69)等を保持す
る。
【0051】サーバCの"GTID=T01" のエントリを検索
する際には、まずスケジュール管理テーブル(50)
を”サーバ名=サーバC”で検索し、該エントリの拡張
チェインテーブルポインタ(64)を辿ってサーバC拡
張チェインテーブル(10)を求め、次に、サーバC拡
張チェインテーブル(10)を"GTID=T01" で検索して
該エントリの情報を取得する。
【0052】図3は、拡張チェインドRPC におけるクラ
イアントとサーバの拡張チェイン状態の遷移を示す図で
ある。拡張チェイン状態としては、接続待ち(REQ_WAIT)
状態80、チェイン接続待ち(CHAIN_WAIT)状態81、チ
ェインド電文送信状態(CHAIN_SEND)83、および接続済
み(ONLINE)状態84の4種類がある。
【0053】REQ_WAIT状態は、最初のRPC 電文がスケジ
ュールキューにキューイングされている状態であり、か
つ、同一GTIDを有する他プロセスから当該サーバに対す
るRPC がまだ行なわれていない状態を示す。この状態で
は、拡張チェインキューは存在しない。
【0054】CHAIN_WAIT状態は、最初のRPC 電文がスケ
ジュールキューにキューイングされている状態であり、
かつ、同一GTIDを有する他プロセスから当該サーバに対
するRPC が発行されており、そのRPC 電文が拡張チェイ
ンキューにキューイングされている状態を示す。この状
態において、当該サーバに対して新たに発行されるRPC
電文は、拡張チェインキューに順次キューイングされ
る。
【0055】CHAIN_SEND状態は、最初のRPC 電文はサー
バプロセスに取り出されているが、拡張チェインキュー
にキューイングされたRPC 電文がまだ残っている状態を
示す。この状態においては、サーバプロセスは、RPC 電
文を拡張チェインキューから順次取り出していく。一
方、当該サーバに対して新たに発行されるRPC 電文は、
サーバプロセスのハンドル情報を参照して、接続中のサ
ーバプロセスにソケット経由で直接送信する。
【0056】ONLINE状態は、前記拡張チェインキューに
キューイングされた電文を全て取り出した後の状態であ
り、サーバプロセスはソケット経由で直接送信されてく
るRPC 電文を順次取り出していく。
【0057】次に、拡張チェイン状態の遷移条件につい
て述べる。まず、最初のRPC 電文をスケジュールキュー
にキューイングするときに、該GTIDに関する情報を拡張
チェインテーブルに登録する。このとき、拡張チェイン
状態は、REQ_WAITに初期化される(84)。
【0058】REQ_WAIT状態のときに、スケジュールキュ
ーから当該RPC 要求がサーバプロセスにより取り出され
ると、拡張チェイン状態はONLINE状態に移行する(9
0)。REQ_WAIT状態のときに、同一GTIDを有する他プロ
セスから当該サーバに対するRPC が発行されると、拡張
チェイン状態はCHAIN_WAIT 状態に遷移し(85)、拡
張チェインキューを新たに作成して該RPC 電文をキュー
イングする。
【0059】CHAIN_WAIT状態のときに、同一GTIDを有す
るさらに他のプロセスから当該サーバに対してRPC 要求
が発行された場合には、該RPC 電文を拡張チェインキュ
ーにキューイングして、CHAIN_WAIT 状態を維持する
(86)。CHAIN_WAIT状態のときに、スケジュールキュ
ーにキューイングされている最初のRPC 電文がサーバプ
ロセスに取り出されると、拡張チェイン状態はCHAIN_SE
ND状態に遷移する(87)。
【0060】CHAIN_SEND状態のときには、サーバプロセ
スは拡張チェインキューからRPC 電文を順次取り出す。
RPC 電文を取り出したときに、拡張チェインキューに他
のRPC 電文が残っている場合には、CHAIN_SEND状態を維
持する(88)。RPC 電文を取り出したときに、拡張チ
ェインキューに他のRPC 電文が残っていないときには、
拡張チェインキューを消去して、拡張チェイン状態をON
LINE状態に遷移する(89)。
【0061】ONLINE状態のときには、サーバプロセス
は、ソケット経由で当該サーバプロセスに直接送信され
るRPC 電文を順次取り出していく。このとき、取り出し
たRPC電文が、拡張チェインを継続するチェインドRPC
である場合には、拡張チェイン状態をONLINEに維持し続
ける(91)。取り出したRPC 電文が、拡張チェインを
終了するRPC の場合には、当該サーバの拡張チェインテ
ーブルから当該GTIDのエントリを削除し、拡張チェイン
状態は消滅する(92)。そして、サーバプロセス自身
は、次のRPC 電文をスケジュールキューから取り出す状
態に遷移する。
【0062】次に、拡張チェインドRPCを実現するた
めのより詳細な処理の流れを、流れ図4から図11を参
照しながら説明する。
【0063】本実施例で説明するRPC の種別としては、
チェインドRPC /非チェインドRPC、同期型RPC /非同
期型RPC の組み合わせで、合計4種類ある。
【0064】チェインドRPC は、次回のRPC を同一サー
バプロセスに割り当てるためにクライアントとサーバ間
の接続を維持する。また、クライアントがトランザクシ
ョン管理下にある場合のチェインドRPC は、拡張チェイ
ンドRPC として処理される。非チェインドRPC は、1回
限りのRPC のほかにチェインドRPC の終了処理として用
いられる。即ち、クライアントとサーバ間がチェイン状
態にあるときに非チェインドRPC を実行すると、該RPC
の実行終了後、クライアントとサーバ間の接続を切断す
る。
【0065】また、同期型RPC の場合には、クライアン
トがサーバプロセスからの応答電文を受信するまで処理
を中断するのに対して、非同期型RPC の場合には、クラ
イアントがサーバプロセスからの応答電文の受信を待た
ずに処理を継続し、サーバプロセスからの応答電文は、
クライアントプロセスが応答電文受信関数を明示的に発
行することにより受信する。以下の説明では、これらの
4種類のRPC を実行するための処理の流れについて説明
する。
【0066】図4は、クライアント側におけるRPC 送信
処理の流れを示す図である。クライアント側のRPC 送信
処理では、まず、クライアントプロセスのハンドル情報
を取得し(101)、チェインテーブルを検索してクラ
イアントとサーバのRPC 接続情報を取得する(10
2)。
【0067】チェインテーブルは、クライアントプロセ
スとサーバとのRPC 接続状態を保持するクライアントプ
ロセス固有のテーブルである。図13に、チェインテー
ブルの1実施例を示す。
【0068】本実施例では、サーバ名(70)、サーバ
プロセスハンドル情報(71)、RPC 接続状態(7
2)、および応答受信状態(73)の4つのフィールド
でチェインテーブル(53)が構成されている。ハンド
ル情報(71)は、図に示したように、ノードのネット
ワークアドレス、ネットワークの種別、およびソケット
のポート番号により構成されている。該ハンドル情報
(71)を用いて、リモートホストに存在するサーバプ
ロセスと直接データを送受信することが可能である。本
チェインテーブルを参照することで、任意のサーバとの
接続関係、接続中のサーバプロセスのハンドル情報、お
よび当該サーバの応答受信の有無等を取得することがで
きる。
【0069】次に、クライアントとサーバとのRPC 接続
状態を判定し(103)、IN_CHAINである場合には、前
記チェインテーブルから相手サーバのハンドル情報を取
得する(107)。ハンドル情報が登録済みの場合には
(108)、該ハンドル情報を用いてRPC 電文を接続中
の相手サーバに直接送信し(109)、ハンドル情報が
未登録の場合には(108)、後述のRPC 送信開始処理
を実行する(110)。
【0070】一方、クライアントとサーバとのRPC 接続
状態がチェインテーブルに未登録の場合には(10
3)、後述のRPC 送信開始処理を実行し(104)、さ
らに、実行すべきRPC のタイプがチェイン指定ありの場
合には(105)、クライアントとサーバのRPC 接続状
態をIN_CHAINにしてチェインテーブルに登録する(10
6)。
【0071】以上の処理が終了すると、次にサーバプロ
セスからの応答電文の受信処理を行なう。まず、実行す
べきRPC のタイプが同期型RPC でない場合には(11
1)、応答電文の受信は応答電文受信関数において実行
されるため、応答電文の識別に必要なRPC 識別子をクラ
イアントにリターンして処理を終了する(119)。
【0072】一方、同期型RPC の場合には(111)、
まず、サーバプロセスからの応答電文の受信を待つ(1
12)。そして、応答電文受信後、実行すべきRPC のタ
イプがチェイン指定有りの場合には(113)、チェイ
ンテーブルにサーバプロセスのハンドル情報が登録済み
であるかどうかを確認し(114)、未登録の場合に
は、応答電文からサーバプロセスのハンドル情報を取得
してそれをチェインテーブルに登録する(115)。
【0073】実行すべきRPC のタイプがチェイン指定無
しの場合には(113)、RPC 接続状態を確認し(11
6)、IN_CHAINの場合には、クライアントとサーバのRP
C 接続情報をチェインテーブルから削除してチェイン状
態を解消する(117)。最後に、同期型RPC の場合に
は、応答電文をクライアントにリターンして処理を終了
する(118)。
【0074】図5は、図4のクライアント側RPC 送信処
理の中(ステップ104,110)から呼び出されるRP
C 送信開始処理の流れを示す図である。
【0075】RPC 送信開始処理(200)では、まず、
送信相手先のサーバ情報を取得する(201)。サーバ
情報の取得方法としては、システム内の全てのサーバに
関する情報を集中的に管理するサーバに問い合わせる方
法や、いくつかの分散されたサーバに問い合わせる方法
等、従来から存在する種々の方法が適用できる。
【0076】次に、通信相手先のサーバが自ノード(ロ
ーカルホスト)に存在するかどうかを判定し(20
2)、自ノードに存在しない場合には、相手サーバの存
在するノードのスケジューラデーモンにRPC 電文を直接
送信して(206)、RPC 送信開始処理を終了する。通
信相手先のサーバが自ノードに存在する場合には(20
2)、クライアントプロセスがトランザクション管理下
に有るかどうか、および実行すべきRPC のタイプがチェ
インドRPC か非チェインドRPC かを判定する(203、
204)。
【0077】クライアントがトランザクション管理下に
ない場合、または実行すべきRPC のタイプが非チェイン
ドRPC で有る場合には、当該RPC は拡張チェインドRPC
とはならないため、RPC 電文をスケジュールキューにキ
ューイングして(211)、RPC 送信開始処理を終了す
る。トランザクション管理下かつチェインドRPC の場合
には、拡張チェインドRPC となるため、まず、相手サー
バの拡張チェインテーブルをGTIDで検索し(205)、
相手サーバとの拡張チェイン状態により以下の(a)から
(d)の処理を行なう。
【0078】(a) 拡張チェインテーブルに該GTIDのエン
トリが未登録である場合には、当該サーバに対する最初
のRPC であるため、相手サーバの拡張チェインテーブル
に当該GTIDのエントリを登録し(209)、拡張チェイ
ン状態をREQ_WAITにし(210)、最後にRPC 電文をス
ケジュールキューにキューイングして(211)、RPC
送信開始処理を終了する。
【0079】(b) 拡張チェイン状態がREQ_WAITで有る場
合には、既に同一GTIDを有する他のプロセスからのRPC
要求がスケジュールキューにキューイングされているた
め、拡張チェイン状態をCHAIN_WAITとして(212)、
拡張チェインキューを作成し(213)、該作成した拡
張チェインキューにRPC 電文をキューイングして(21
4)、処理を終了する。
【0080】(c) 拡張チェイン状態がCHAIN_WAITで有る
場合には、既に同一GTIDを有する他のプロセスからのRP
C 要求がスケジュールキューにキューイングされてお
り、かつ、既に同一GTIDを有するさらに他のプロセスか
らのRPC 要求が拡張チェインキューにキューイングされ
ているため、RPC 要求を該拡張チェインキューにキュー
イングして(214)、処理を終了する。
【0081】(d) 拡張チェイン状態が上記以外の場合に
は、既に同一GTIDを有する他のプロセスからのRPC 要求
がサーバプロセスと接続済みであるため、相手サーバの
拡張チェインテーブルから相手サーバのハンドル情報を
取得し(215)、該ハンドル情報を用いてRPC 電文を
相手サーバに直接送信して(216)、処理を終了す
る。
【0082】図6は、サーバ側のRPC 受信処理の流れを
示す図である。サーバ側のRPC 受信処理(300)は、
RPC 受信状態により制御される。RPC 受信状態として
は、スケジュールキュー待ち状態(RECV_QUE)、拡張チェ
インキュー待ち状態(RECV_EX)、およびソケット受信待
ち状態(RECV_SOCK)の3種類がある。RPC 受信状態は、
サーバ起動後にRECV_QUE状態に初期化される(30
1)。その後、RPC 受信状態に応じて分岐し(30
2)、以下の(a)から(c)の処理が実行される。
【0083】(a) RPC 受信状態がRECV_QUEのときには、
後述のスケジュールキュー受信処理を行ない(30
3)、クライアントハンドル情報をサーバ側のRPC 制御
情報に登録する(304)。そして、受信したRPC のタ
イプがチェイン指定有りの場合には(305)、サーバ
のRPC 受信状態をRECV_EXにする(306)。
【0084】(b) RPC 受信状態がRECV_EXのときには、
後述の拡張チェインキュー受信処理を行う(307)。
そのとき、取り出したRPC 電文が空である場合には(3
08)、サーバのRPC 受信状態をRECV_SOCKにして(3
09)、以下の(c)の処理を引き続き行なう。受信したR
PC 電文が空でないときには、受信したRPC のタイプを
判定し(312)、チェイン指定なしの場合には、後述
のチェイン終了処理を実行し(313)、RPC 受信状態
をRECV_QUEにする(314)。
【0085】(c) RPC 受信状態がRECV_SOCKのときに
は、まず、クライアントハンドル情報をサーバが保持す
るRPC 制御情報から取得し(310)、クライアントか
らのRPC 電文をソケット経由で待つ(311)。次に、
受信したRPC のタイプを判定し(312)、チェイン指
定なしの場合には、後述のチェイン終了処理を実行し
(313)、RPC 受信状態をRECV_QUEにする(31
4)。
【0086】以上の(a)から(c)のいずれかの処理を行な
った後、受信したRPC 電文の要求種別を確認し、要求種
別がサーバ終了要求であれば(315)、サーバを終了
する。それ以外の場合には、サービス実行要求であるの
で、指定されたサービス関数を実行し(316)、実行
結果をクライアントに応答電文として送信する(31
7)。その後、再びRPC 受信状態を判定し(302)、
該RPC 受信状態に応じて上記の処理を実行する。
【0087】図7は、スケジュールキュー受信処理(図
6の303)の流れを示す図である。スケジュールキュ
ー受信処理(400)では、まず、RPC 電文を当該サー
バのスケジュールキューから取り出し(401)、受信
電文の種別を確認する。そして、RPC を発行したクライ
アントがトランザクション管理下であるかどうかを判定
し(402)、トランザクション管理下でない場合に
は、受信したRPC 電文をリターンして処理を終了する
(412)。
【0088】RPC を発行したクライアントがトランザク
ション管理下である場合には(402)、当該サーバも
トランザクション管理下にする(403)。次に、受信
したRPC のタイプを判定し(404)、チェイン指定な
しの場合には、受信したRPC電文をリターンして処理を
終了する(412)。チェイン指定有りの場合には(4
04)、当該RPC は拡張チェインドRPC であると判定
し、以下の処理を行なう。
【0089】即ち、まず、自サーバの拡張チェインテー
ブルをGTIDで検索し(405)、拡張チェイン状態を取
得する。拡張チェイン状態がREQ_WAITである場合には
(406)、拡張チェインテーブルにサーバプロセス
(即ち自プロセス)のハンドル情報を登録し(40
7)、拡張チェイン状態をONLINE にして(408)、R
PC 電文をリターンして処理を終了する(412)。拡
張チェイン状態がCHAIN_WAITである場合には(40
6)、拡張チェインテーブルにサーバプロセス(即ち自
プロセス)のハンドル情報を登録して(409)、拡張
チェイン状態をCHAIN_SENDにして(410)、RPC 電
文をリターンして処理を終了する(412)。拡張チェ
イン状態がそれ以外の場合には(406)、状態遷移に
異常が生じていると考えられるため、エラーリターンす
る(411)。
【0090】図8は、拡張チェインキュー受信処理(図
6の307)の流れを示す図である。拡張チェインキュ
ー受信処理(500)では、まず、自サーバの拡張チェ
インテーブルをGTIDで検索し(501)、拡張チェイン
状態を取得する。
【0091】そして、拡張チェイン状態がCHAIN_SEND以
外の場合には(502)、拡張チェインキューが存在し
ないため、空の電文をリターンする(509)。拡張チ
ェイン状態がCHAIN_SENDの場合には(502)、RPC 電
文を当該GTIDに対応した拡張チェインキューから取り出
す(503)。全てのRPC 電文を拡張チェインキューか
ら取り出した場合には(504)、当該GTIDに対応する
拡張チェインキューを削除し(506)、拡張チェイン
状態をONLINEにする(507)。最後に、取り出したRP
C 電文をサーバ側RPC 受信処理ルーチンにリターンし
て、処理を終了する(508)。
【0092】図9は、チェイン終了処理(図6の31
3)の流れを示す図である。チェイン終了処理(60
0)では、まず、自サーバプロセスがトランザクション
管理下にあるかどうかを確認し(601)、トランザク
ション管理下にない場合には、RPC 受信制御情報のクラ
イアントハンドル情報を削除して(607)、処理を終
了する(608)。
【0093】トランザクション管理下にある場合には
(601)、拡張チェイン状態の切断処理を行なうた
め、まず、自サーバの拡張チェインテーブルを自サーバ
プロセスのGTIDで検索し(602)、拡張チェイン状態
を取得する。自サーバプロセスのGTIDが拡張チェインテ
ーブルに登録されていない場合には(603)、トラン
ザクションの決着処理を行ない(606)、クライアン
トのハンドル情報を削除して(607)、処理を終了す
る(608)。
【0094】拡張チェイン状態がCHAIN_SENDである場合
には(603)、まず、拡張チェインキューを削除し
(604)、拡張チェインテーブルから当該GTIDのエン
トリを削除し(605)、トランザクションの決着処理
を行ない(606)、クライアントのハンドル情報を削
除して(607)、処理を終了する(608)。
【0095】拡張チェイン状態がCHAIN_SEND以外の場合
には(603)、拡張チェインテーブルから当該GTIDの
エントリを削除し(605)、トランザクションの決着
処理を行ない(606)、クライアントのハンドル情報
を削除して(607)、処理を終了する(608)。
【0096】図10は、非同期型RPC 応答受信処理の流
れを示す図である。非同期型RPC では、クライアントは
本処理を明示的に実行することによりサーバからの応答
電文を受信することができる。
【0097】本処理(700)では、まず、サーバプロ
セスからの応答電文の受信を待つ(701)。そして、
応答電文受信後、受信した応答電文に対応するRPC のタ
イプがチェイン指定有りの場合には(702)、チェイ
ンテーブルを検索して、受信した応答電文に対応するサ
ーバとクライアントのRPC 接続情報を取得し(70
3)、該テーブルに相手サーバのハンドル情報が登録さ
れているかを確認し(704)、未登録の場合には、応
答電文から相手サーバのハンドル情報を取得しそれをチ
ェインテーブルに登録する(705)。そして、応答電
文およびRPC 識別子をクライアントにリターンして処理
を終了する(706)。
【0098】図11は、サーバが他ノード(リモートホ
スト)にある場合に、クライアントから相手サーバにRP
C 電文の転送を行なうスケジューラデーモンの処理の流
れを示す図である。
【0099】スケジューラデーモン(800)では、ま
ず最初に、他ノードのクライアントからのRPC 電文の受
信待ちを行なう(801)。スケジューラデーモンに電
文が届くと、まずその電文がスケジューラデーモンに対
する終了指示電文であるかどうかをチェックし(80
2)、終了指示電文である場合には、スケジューラデー
モンの処理を終了する(803)。
【0100】その他の場合には(802)、スケジュー
ラデーモンが存在する自ノードのサーバに対するRPC 電
文であるので、まず該RPC 電文を送信する相手先サーバ
を特定し、相手先サーバ情報を取得する(804)。
【0101】次に、RPC 電文の内容を確認し(805,
806)、送信元のクライアントがトランザクション管
理下にないか又は実行すべきRPC が非チェインドRPC で
ある場合には、当該RPC は拡張チェインドRPC とはなら
ないため、RPC 電文を相手サーバのスケジュールキュー
にキューイングする(811)。クライアントがトラン
ザクション管理下にあり、かつ実行すべきRPC がチェイ
ンドRPC の場合には(805,806)、拡張チェイン
ドRPC となるため、まず、相手サーバの拡張チェインテ
ーブルをGTIDで検索し(807)、相手サーバとの拡張
チェイン状態により分岐して(808)、以下の(a)か
ら(d)の処理を行なう。
【0102】(a) 拡張チェインテーブルに該GTIDのエン
トリが未登録である場合には、当該サーバに対する最初
のRPC であるため、相手サーバの拡張チェインテーブル
に当該GTIDのエントリを登録し(809)、拡張チェイ
ン状態をREQ_WAITにし(810)、RPC 電文をスケジュ
ールキューにキューイングする(811)。
【0103】(b) 拡張チェイン状態がREQ_WAITで有る場
合には、既に同一GTIDを有する他のプロセスからのRPC
要求がスケジュールキューにキューイングされているた
め、拡張チェイン状態をCHAIN_SENDとして(812)、
拡張チェインキューを作成し(813)、該作成した拡
張チェインキューにRPC 電文をキューイングする(81
4)。
【0104】(c) 拡張チェイン状態がCHAIN_WAITで有る
場合には、既に同一GTIDを有する他のプロセスからのRP
C 要求がスケジュールキューにキューイングされてお
り、かつ、既に同一GTIDを有するさらに他のプロセスか
らのRPC 要求が拡張チェインキューにキューイングされ
ているため、RPC 要求を該拡張チェインキューにキュー
イングする(814)。
【0105】(d) 拡張チェイン状態が上記以外の場合に
は、既に同一GTIDを有する他のプロセスからのRPC 要求
がサーバプロセスと接続済みであるため、相手サーバの
拡張チェインテーブルから相手サーバのハンドル情報を
取得し(815)、該ハンドル情報を用いてRPC 電文を
相手サーバに直接送信する(816)。
【0106】以上、(a)から(d)までの処理を行なった
後、スケジューラデーモンは再び他ノードのクライアン
トからのRPC 電文受信待ち(801)の状態に戻る。
【0107】
【発明の効果】本発明により、同一グローバルトランザ
クション識別子を有する複数のクライアントプロセスか
らの同一サーバに対するリモートプロシジャコールを、
一つのサービスプロセスで実行することが、可能とな
る。応答電文の受信を待たずに処理を継続する非同期型
のリモートプロシジャコールでも同様である。このた
め、一つのトランザクションが占有するサーバプロセス
数は各サーバ毎に1つずつとなり、プロセス資源の節約
に効果がある。また、サーバプロセスのハンドル情報を
拡張チェインテーブルに格納しておくため、クライアン
トとサーバプロセスの接続処理も高速化できる。
【図面の簡単な説明】
【図1】本発明による拡張チェインドRPC の処理の流れ
を説明する図、
【図2】従来のチェインドRPC による処理の流れを説明
する図、
【図3】拡張チェイン状態の状態遷移図、
【図4】クライアント側のRPC 送信処理を示す流れ図、
【図5】クライアント側のRPC 送信開始処理を示す流れ
図、
【図6】サーバ側におけるRPC 受信処理を示す流れ図、
【図7】サーバ側におけるスケジュールキュー受信処理
を示す流れ図、
【図8】サーバ側における拡張チェインキュー受信処理
を示す流れ図、
【図9】サーバ側におけるチェイン終了処理を示す流れ
図、
【図10】非同期型RPC における非同期型RPC 応答受信
処理を示す流れ図、
【図11】スケジューラデーモンの処理を示す流れ図、
【図12】拡張チェインドRPC を実現するための管理テ
ーブルの例を示す図、
【図13】クライアントプロセスのチェイン状態を管理
するチェインテーブルの例を示す図。
【符号の説明】
1…親プロセス、2…子プロセスa、3…子プロセスb、
4…孫プロセスc1、5…孫プロセスc2、6…サーバAス
ケジュールキュー、7…サーバBスケジュールキュー、
8…サーバCスケジュールキュー、9…T01用サーバC
拡張チェインキュー、10…サーバC拡張チェインテー
ブル、50…スケジュール管理テーブル、53…チェイ
ンテーブル。

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】クライアントプロセスから自ホスト上また
    は他ホスト上に存在するサーバの手続きを呼び出すリモ
    ートプロシジャコールであって、前記サーバは同一のサ
    ービスを提供する複数のサーバプロセスで構成され、前
    記クライアントプロセスから発行されるリモートプロシ
    ジャコールは前記複数のサーバプロセスの任意の一つに
    より処理されるリモートプロシジャコールの処理方法に
    おいて、 トランザクション管理されている複数のクライアントプ
    ロセスが存在し、各クライアントプロセスは管理されて
    いるトランザクションを特定するグローバルトランザク
    ション識別子を有する場合に、同一のトランザクション
    に管理されている複数のクライアントプロセスのうちの
    任意の一つから前記サーバに最初にリモートプロシジャ
    コールを発行する第1のステップと、 該リモートプロシジャコールを受け付けた前記サーバに
    おいて、該リモートプロシジャコールを一つのサーバプ
    ロセスに割当てて該サーバプロセスと前記クライアント
    プロセスとを接続するとともに、該接続したクライアン
    トプロセスのグローバルトランザクション識別子と該接
    続に係る接続情報とを拡張チェインテーブル上に格納す
    る第2のステップと、 前記トランザクション管理下の複数のクライアントプロ
    セスのうちの任意の一つから前記サーバに次にリモート
    プロシジャコールを発行するとき、該クライアントプロ
    セスは、前記拡張チェインテーブルを参照して、同一の
    トランザクション管理下の別のクライアントプロセスと
    接続されているサーバプロセスの接続情報を得、該サー
    バプロセスに向けてリモートプロシジャコールを発行す
    る第3のステップとを備え、 これにより、同一トランザクションの複数のクライアン
    トプロセス間で一つのサーバプロセスを共有することを
    特徴とするリモートプロシジャコール処理方法。
  2. 【請求項2】各サーバ毎に、前記クライアントプロセス
    からの最初のリモートプロシジャコールの実行要求を受
    け付けるスケジュールキューを設け、前記第1のステッ
    プにおけるリモートプロシジャコールの発行は、前記リ
    モートプロシジャコールの電文を前記スケジュールキュ
    ーにキューイングすることにより行なう請求項1に記載
    のリモートプロシジャコール処理方法。
  3. 【請求項3】各サーバ毎に、各トランザクションと当該
    サーバとのリモートプロシジャコールの実行関係を格納
    する前記拡張チェインテーブルを設け、前記拡張チェイ
    ンテーブルは、前記グローバルトランザクション識別子
    と、前記グローバルトランザクション識別子のトランザ
    クションと当該サーバとの接続状態を示す拡張チェイン
    状態と、接続中のサーバプロセスのハンドル情報と、拡
    張チェインキューに関する情報とを格納するテーブルと
    し、 前記第2のステップでは、前記拡張チェインテーブル
    に、前記グローバルトランザクション識別子と、前記接
    続したサーバプロセスのハンドル情報とを格納し、 前記第3のステップでは、当該サーバの拡張チェインキ
    ューに前記リモートプロシジャコールの電文をキューイ
    ングすることにより、同一のトランザクション管理下の
    別のクライアントプロセスと既に接続されているサーバ
    プロセスに向けてリモートプロシジャコールを発行する
    請求項2に記載のリモートプロシジャコール処理方法。
  4. 【請求項4】前記第1のステップにおける、クライアン
    トプロセスと相手サーバ間に接続関係が確立していない
    ときのクライアントプロセスから自ホスト内のサーバに
    対するリモートプロシジャコールを、 (a) クライアントプロセスがトランザクション管理下で
    あるかどうかを確認し、トランザクション管理下である
    場合には、リモートプロシジャコールを実行する相手サ
    ーバの拡張チェインテーブルをグローバルトランザクシ
    ョン識別子で検索する処理と、 (b) 該グローバルトランザクション識別子が前記拡張チ
    ェインテーブルに未登録であった場合には、該グローバ
    ルトランザクション識別子を拡張チェインテーブルに登
    録して、トランザクションとサーバの接続状態を接続待
    ち状態にし、リモートプロシジャコール実行要求を相手
    サーバのスケジュールキューにキューイングする処理
    と、 (c) 該グローバルトランザクション識別子が前記拡張チ
    ェインテーブルに登録済みでありトランザクションと当
    該サーバとの接続状態が接続待ち状態であった場合に
    は、トランザクションとサーバの接続状態をチェイン接
    続待ち状態にして、該トランザクション用に拡張チェイ
    ンキューを一時的に作成し該拡張チェインキューにリモ
    ートプロシジャコール実行要求をキューイングする処理
    と、 (d) 該グローバルトランザクション識別子が前記拡張チ
    ェインテーブルに登録済みでありトランザクションと当
    該サーバとの接続状態がチェイン接続待ち状態であった
    場合には、該トランザクション用に既に作成されている
    拡張チェインキューにリモートプロシジャコール実行要
    求をキューイングする処理と、 (e) 該グローバルトランザクション識別子が前記拡張チ
    ェインテーブルに登録済みでありトランザクションと当
    該サーバとの接続状態が接続済み状態であった場合に
    は、拡張チェインテーブルに登録済みのサーバプロセス
    ハンドル情報を用いて、ソケット経由で、接続中のサー
    バプロセスに直接リモートプロシジャコール実行要求を
    送信する処理とで行なう請求項3に記載のリモートプロ
    シジャコール処理方法。
  5. 【請求項5】さらに、サーバの存在する各ホスト上に、
    他のホストのクライアントプロセスから自ホストのサー
    バに対するリモートプロシジャコール実行要求を転送す
    るためのスケジューラデーモンを備え、 クライアントプロセスと相手サーバ間に接続関係が確立
    していないときのクライアントプロセスから他のホスト
    内のサーバに対するリモートプロシジャコールを、 相手サーバの存在する他ホストのスケジューラデーモン
    に該リモートプロシジャコール実行要求を転送する処理
    と、相手サーバ上のスケジューラデーモンにおいて、受
    信したリモートプロシジャコールを相手サーバに対して
    前記請求項4に記載の(a)から(e)までの処理により、送
    信するリモートプロシジャコール処理方法。
  6. 【請求項6】前記サーバプロセスは、リモートプロシジ
    ャコールの実行要求をどこから受け取るかを管理するサ
    ーバ受信状態を有し、 該サーバ受信状態がスケジュールキュー待ちである場合
    には、当該サーバのスケジュールキューからリモートプ
    ロシジャコールの実行要求を取り出し、実行要求元のク
    ライアントがトランザクション管理下である場合には、
    前記拡張チェインテーブルをグローバルトランザクショ
    ン識別子で検索して当該トランザクションとサーバとの
    接続関係を取得し、該接続関係が接続待ちである場合に
    は該接続関係を接続済み状態にすると共に前記サーバ受
    信状態をソケット受信待ち状態にし、該接続関係がチェ
    イン接続待ちである場合には該接続関係をチェインド電
    文送信状態とすると共に前記サーバ受信状態を拡張チェ
    インキュー待ち状態とする処理と、 該サーバ受信状態が拡張チェイン待ちである場合には、
    チェイン中のトランザクションに対応する当該サーバの
    拡張チェインキューからリモートプロシジャコールの実
    行要求を取り出し、該取り出した実行要求が拡張チェイ
    ンキューにキューイングされている最後の実行要求であ
    った場合には拡張チェインテーブルの当該トランザクシ
    ョンとサーバとの接続関係を接続済み状態とし、サーバ
    の受信状態をソケット受信待ち状態にする処理と、 該サーバの受信状態がソケット受信待ちである場合に
    は、接続中のクライアントからソケット経由で直接送信
    されてくるリモートプロシジャコールの実行要求を取り
    出す処理とにより、 同一グローバルトランザクション識別子を有する複数の
    クライアントプロセスから送信されてくるリモートプロ
    シジャコールの実行要求を一つのサーバプロセスで実行
    する請求項3に記載のリモートプロシジャコール処理方
    法。
JP6251283A 1994-09-20 1994-09-20 リモートプロシジャコール処理方法 Pending JPH0895874A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6251283A JPH0895874A (ja) 1994-09-20 1994-09-20 リモートプロシジャコール処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6251283A JPH0895874A (ja) 1994-09-20 1994-09-20 リモートプロシジャコール処理方法

Publications (1)

Publication Number Publication Date
JPH0895874A true JPH0895874A (ja) 1996-04-12

Family

ID=17220504

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6251283A Pending JPH0895874A (ja) 1994-09-20 1994-09-20 リモートプロシジャコール処理方法

Country Status (1)

Country Link
JP (1) JPH0895874A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005276175A (ja) * 2004-02-13 2005-10-06 Microsoft Corp 拡張性のあるプリントスプーラ
US8583754B2 (en) 2008-08-15 2013-11-12 Fujitsu Limited Business flow distributed processing system and method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005276175A (ja) * 2004-02-13 2005-10-06 Microsoft Corp 拡張性のあるプリントスプーラ
US8583754B2 (en) 2008-08-15 2013-11-12 Fujitsu Limited Business flow distributed processing system and method

Similar Documents

Publication Publication Date Title
US5805823A (en) System and method for optimal multiplexed message aggregation between client applications in client-server networks
EP0794491B1 (en) Client/server architecture supporting concurrent servers
EP0343820B1 (en) Temporary state preservation for a distributed file service
EP0205946B1 (en) Flexible data transmission for message based protocols
JP2000163372A (ja) トランザクション処理方法及びその実施装置並びにその処理プログラムを記録した媒体
JP2008033952A (ja) 共通作業キュー環境における最適格サーバ
WO2007141124A1 (en) Method and apparatus for processing remote shell commands
US20120290639A1 (en) Queueing messages related by affinity set
EP0459774B1 (en) File access system in distributed data processing system
JP3931941B2 (ja) ワークプロセス管理装置及びワークプロセス管理方法
JPH0895874A (ja) リモートプロシジャコール処理方法
CN100466578C (zh) 通信控制方法
JP4196310B2 (ja) 情報管理システムのメッセージ制御方法
JP2003008612A (ja) ネットワークインタフェース装置及びネットワークインタフェース方式及びネットワークインタフェース方法及びネットワークインタフェースプログラム及びネットワークインタフェースプログラムを記録した記録媒体
JPH09160847A (ja) クライアント・サーバ型分散処理システム
JPH06266643A (ja) サーバプログラム管理方法
JP3741818B2 (ja) 多数のコンピュータが参加する情報分配応答システム
JPH11212913A (ja) クライアント/サーバ環境におけるオブジェクト間通信のためのシステム、サービスエージェント、サービスマネージャ、クライアントインタフェース及びサーバインタフェース
JPH09198346A (ja) サーバ選択方式及び方法
US20090019259A1 (en) Multiprocessing method and multiprocessor system
JP2000227860A (ja) 並行アクセス制御方法とその装置及びマルチスレッドプロセス方法
JPH0991234A (ja) ワークフローシステム
JP3006187B2 (ja) 分散処理システム
JP2003141070A (ja) 装 置
JPH07282012A (ja) 分散データ処理システムにおける分散運用支援方法