apache / apache/arrow-java

[JDBC] Honor DriverManager login timeout

未關閉
#1,268 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Java
星號
94
分支
152
平均合併
3 天 16 小時
30 天內合併 PR
11

描述

### Describe the enhancement requested

`ArrowFlightJdbcDriver.connect()` does not currently honor the timeout configured through `DriverManager.setLoginTimeout(int)`.

Implement support for the `DriverManager` login timeout:

- Read the value exposed by `DriverManager.getLoginTimeout()` when establishing a connection selected by `DriverManager`.
- Preserve the JDBC semantics of zero: do not impose a login timeout.
- Apply a nonzero timeout to the overall connection attempt, not only the underlying Netty socket connection.
- If the timeout expires, attempt to cancel the connection attempt and throw `SQLTimeoutException`.
- Clean up any allocator, channel, or partially constructed client when the attempt is cancelled or times out.
- Add tests that set and restore the global `DriverManager` timeout and verify timeout enforcement, exception type, and resource cleanup.

This is distinct from #494/#495. The existing `connectTimeoutMs` property configures Netty socket connection attempts and does not consume the timeout configured through `DriverManager`.

Context: #1027 and [the follow-up discussion](https://github.com/apache/arrow-java/pull/1027#issuecomment-5447203124).

Related DataSource work: https://github.com/apache/arrow-java/issues/1267

貢獻指南

開啟貢獻指南

研究方向

進入點是 ArrowFlightJdbcDriver.connect(); 首先閱讀其目前的連線路徑,以及現有的 connectTimeoutMs 處理方式。新增測試涵蓋設定並還原 DriverManager 的全域逾時、檢查逾時為零與非零時的行為、SQLTimeoutException,以及整個嘗試被取消或逾時時 allocator、channel 與 client 的清理。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
java
領域
backend, database
Issue 類型
功能
難度
4/5
預估耗時
3-5 天
活躍度
活躍
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。