Dead sessions are reused with auto-reconnect off; frame-too-large rejection desynchronizes the connection
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- rust
- 領域
- databases, networking
調査の方向性
Session::is_open()、プールの取得側の追い出しループ、TFramedReadTransport、fetch_results、with_retry、execute_query_raw を追跡します。まずトランスポート障害の経路を再現または追跡し、その後、障害によってセッションが破損状態としてマークされ、プールがそれを追い出し、有効時には自動再接続がそれを置き換えることを検証します。その際、fetch_results にリトライ動作を追加しないでください。
索引モデルが issue の本文から書いたものです。
説明
Two related liveness/robustness issues:
Session::is_open()isconnection.is_some(), not socket state. Withenable_auto_reconnect = false, a session whose connection died (silent peer, FIN lost, etc.) is reused indefinitely under load: the pool's acquire-side eviction loop (entry.session.is_open()) keeps handing it out, every RPC on it blocks or fails, and nothing ever discards it. A transport-level failure should mark the connection broken sois_open()turns false and the pool discards/replaces the session.- Frame-too-large rejection desynchronizes the connection.
TFramedReadTransport(thrift 0.23) rejects a frame above its default 16,384,000-byte cap before draining the body, leaving the connection desynchronized;fetch_resultsdoes not go throughwith_retry, so the desynchronized connection is then reused. Go and C# use the same cap, so the cap itself is not Rust-specific — the fix worth having is that a transport-level failure (including this one) marks the session broken, so the pool evicts it and auto-reconnect (when enabled) replaces it. (execute_query_rawdeliberately excludes the result-set-pinnedfetch_resultsfrom retry; see spec gotcha #13.)
- 主要言語
- Rust
- スター
- 1
- フォーク
- 0
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/iotdb-client-rust のほかの issue
-
Session::open does not fail over when openSession/requestStatementId fails (only TCP-layer failover) オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 65/100
apache/iotdb-client-rust#10 ·
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 62/100
apache/iotdb-client-rust の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug team:backend track:services-maintenance
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
cowprotocol/services#4950 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
gitbutlerapp/gitbutler#15998 · コメント 1 件 ·
-
bug triage:deciding
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
open-telemetry/otel-arrow#4132 ·