CritasWang opened a new issue, #8: URL: https://github.com/apache/iotdb-client-rust/issues/8
Two related liveness/robustness issues: 1. **`Session::is_open()` is `connection.is_some()`, not socket state.** With `enable_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 so `is_open()` turns false and the pool discards/replaces the session. 2. **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_results` does not go through `with_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_raw` deliberately excludes the result-set-pinned `fetch_results` from retry; see spec gotcha #13.) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
