Next: Control message (SMObject/TCPIP/Control)
Up: Session Management
Previous: Control server
クライアントはコントロールサーバ経由でいつでもエンジンに signal を
送ることができる. しかし, I/O 操作は通常バッファリングされている
ため, トラブルが生ずる場合がある. エンジンを安全にリセットするため
次が必要である.
- 1.
- 全ての OX メッセージは Java の意味で synchronized object である.
- 2.
- エンジンのリセット後に送られるクライアントからの計算要求メッセージと
エンジンからの返答が正しく対応していなければならない.
SM_control_reset_connection は, エンジンの安全なリセットを
行う一連の手続きを開始するための SM コマンドである.
クライアントから SM_control_reset_connection がコントロール
サーバに送られると, コントロールサーバは SIGUSR1 をエンジンに
送る. 以後の手続きは次の通りである.
クライアント側
- 1.
- SM_control_reset_connection をコントロールサーバに
送った後, クライアントはリセット状態に入る. リセット状態では,
OX_SYNC_BALL を受け取るまですべてのメッセージを読みとばす.
- 2.
- OX_SYNC_BALL を受け取ったあと, クライアントは
OX_SYNC_BALL をエンジンに送り, 通常状態に戻る.
エンジン側
- 1.
- SIGUSR1 をコントロールサーバから受け取ったら, エンジンは
リセット状態に入る. OX_SYNC_BALL をクライアントに送る.
この時点でクライアントは既にリセット状態にあるので, この送信が
ブロックされることはない.
- 2.
- エンジンは
OX_SYNC_BALL を受け取るまですべてのメッセージを読みとばす.
OX_SYNC_BALL を受け取ったら通常状態に戻る.
図 1 はデータの流れを示す.
OX_SYNC_BALL は特殊な OX メッセージであり,
I/O stream に残るデータの終りを示す.
OX_SYNC_BALL を読んだ後, それぞれの stream は空であり,
後に続くクライアントからのリクエストと, エンジンからの返答が
正しく対応する.
図 1:
OpenXM reset procedure
|
Nobuki Takayama
平成12年4月13日