[JDBC] Honor DriverManager login timeout
- Vorherrschende Sprache
- Java
- Sterne
- 94
- Forks
- 152
- Ø Merge
- 3 T. 16 Std.
- Gemergte PRs (30 T.)
- 11
Beschreibung
### 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
Beitragsleitfaden
Rechercherichtung
Der Einstiegspunkt ist ArrowFlightJdbcDriver.connect(); lies zunächst dessen aktuellen Verbindungspfad und die bestehende Behandlung von connectTimeoutMs. Füge Tests hinzu, die das globale Timeout von DriverManager setzen und wiederherstellen, das Verhalten bei einem Timeout von null und einem von null verschiedenen Timeout sowie SQLTimeoutException prüfen und die Bereinigung von allocator, channel und client abdecken, wenn der gesamte Versuch abgebrochen wird oder eine Zeitüberschreitung auftritt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- backend, database
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 55/100