prisma / tiberius

TDS 7.2+ (Microsoft SQL Server) driver for Rust
Apache License 2.0
326 stars 119 forks source link

Add Support for MultiSubnetFailover when using a High Availability Group #337

Open pip8786 opened 6 months ago

pip8786 commented 6 months ago

Currently Prisma doesn't support the MultiSubnetFailover option of SQL Server. See https://github.com/prisma/prisma/issues/9187. I think this would require support at the driver level so I'm adding an issue here.

Other info: https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/sqlclient-support-for-high-availability-disaster-recovery

dariusj18 commented 5 months ago

An example of implementation is here:

https://github.com/tediousjs/tedious/blob/a51e57dd20f7739e1b2cb21600ae56fe93a4ce96/src/connection.ts#L2067

connectInParallel

https://github.com/tediousjs/tedious/blob/a51e57dd20f7739e1b2cb21600ae56fe93a4ce96/src/connector.ts#L9

pip8786 commented 5 months ago

Thanks @dariusj18 . That seems relatively simple so maybe the maintainers could implement this pretty quickly in their rust code. I tried looking at the connection code and I'm definitely not qualified to try a PR in Rust.

dariusj18 commented 5 months ago

I'd give it stab, but I am kinda worried that PRs won't be merged in. There hasn't been much activity and a few people that have commented say things like "I'm not the owner of this crate anymore"

So I don't know if anyone is really maintaining it.

dariusj18 commented 5 months ago

Upon further further evaluation, the TcpStream connection is created in a few places

https://github.com/prisma/tiberius/blob/e74b5562ba66fd9f84e3a60492339beff2cd0a4b/src/sql_browser/async_std.rs#L16

https://github.com/prisma/tiberius/blob/e74b5562ba66fd9f84e3a60492339beff2cd0a4b/src/sql_browser/tokio.rs#L18

https://github.com/prisma/tiberius/blob/e74b5562ba66fd9f84e3a60492339beff2cd0a4b/src/sql_browser/smol.rs#L17

it seems that these exist for different library compatibilities.

pip8786 commented 5 months ago

So do you think we need to post an issue on prisma-engines as well or is this still the right place?

dariusj18 commented 5 months ago

This is the right place.

tylerclendenin commented 5 days ago

I created a simple example PR https://github.com/prisma/tiberius/pull/357 with changes I assume would be needed. This is the first time I have touched rust, so I am not sure if it is correct. Also, if it is correct, the same changes would be needed to be made to tokio and smol implementations.