チケット #27222

振り分け先サーバ異常時にFINパケットが返却される

登録: 2012-01-23 16:13 最終更新: 2012-09-18 16:16

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
1

詳細

振り分け先サーバ異常時に、クライアントがUM-L7に接続すると、RSTではなくFINパケットが返却される。
この場合、クライアントにはエラーが表示されず、空のデータが返却された場合と同じ動作をする。


振り分け先は異常な状態になっているため、クライアントにはエラーが表示されるほうが好ましい。
本事象はUltraMonkey-L7-v3.0.3で発生しており、v3.0.1では発生しない(RSTが返る)ためデグレと考えられる。

本事象の再現手順は以下のとおり。

1. ip モジュールに--no-reschedule オプションを指定し、VSを追加
2.クライアントから1で追加したVSに接続
3.2で接続した際に振り分けられたサーバを停止
4.再度、2と同じクライアントから接続

チケットの履歴 (4 件中 3 件表示)

2012-01-23 16:13 更新者: hibari
  • 新しいチケット "振り分け先サーバ異常時にFINパケットが返却される" が作成されました
2012-01-23 16:35 更新者: hibari
コメント

ip モジュールに--no-reschedule オプションを指定した場合のほかに、sslidモジュールでの--no-reschedule オプションを指定時にも同様の問題が発生する。
また、SorryServerが設定されていない、もしくはSorryServerに異常が発生している場合に、クライアントからの接続がSorryServerに振り分けられた場合も同様の問題が発生する。

■本事象の原因
ソケットをクローズする際に、socket.shutdown()を行い、その後にsocket.close()を行うが、
異常時にsocket.shutdownを行ってしまうと、強制的にソケットをクローズせず、穏やかにソケットをクローズしようとするため、RSTではなくFINが返却される。

現状、正常時、異常時にかかわらず、必ずshutdownを実行するようになっている。

■添付の修正patchについて
・upthread_status がUPTHREAD_LOCKになったままで、UPTHREAD_ACTIVEに変更されていなかったた点を修正。
クライアント側ソケットのクローズ処理は各モジュールにより
1.CLIENT_DISCONNECT(shutdown)
2.FINALIZE(close)
の順番で行われるようになっているが、異常時はFINELIZEのみ実行するよう修正

・sslの通信時にlowest_layer().shutdownは冗長であるため、併せて修正。
#ssl_socket.shutdown()を行うだけでよい。

2012-09-18 16:16 更新者: hibari
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2012-09-18 16:16 に更新されました
コメント

v3.0.4-2で修正が取り込まれた。

添付ファイルリスト

  • return_reset_packet.patch(4KB)
    • 振り分け先サーバ異常時にFINパケットが返却される問題の修正パッチ

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする