Dead sessions are reused with auto-reconnect off; frame-too-large rejection desynchronizes the connection
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 55/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- rust
- Domain
- databases, networking
Research direction
Trace Session::is_open(), the pool's acquire-side eviction loop, TFramedReadTransport, fetch_results, with_retry, and execute_query_raw. Start by reproducing or following the transport-failure path, then verify that failures mark the session broken, the pool evicts it, and auto-reconnect replaces it when enabled without adding retry behavior to fetch_results.
Written by the indexing model from the issue text.
Description
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.)
- Dominant language
- Rust
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/iotdb-client-rust
-
Session::open does not fail over when openSession/requestStatementId fails (only TCP-layer failover) Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 3/5 1-2 days Newbie friendliness 65/100
apache/iotdb-client-rust#10 ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 68/100
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 62/100
All issues in apache/iotdb-client-rust
Similar issues
-
todo:perf
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
ACP agents get no MCP servers when the thread is created before the project's first worktree loads Openstate:needs triage
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
zed-industries/zed#64611 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
ontola/atomic-server#1625 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
objectionary/phie#154 ·