mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-17 02:12:56 +00:00
See #11942 Idea: * if connections are short lived, they can get enqueued and then also remove themselves later if they never made it to redis. This reduces the load on the queue. * short lived connections (<10m, most?) will only issue 1 command, we remove the delete command and rely on ttl. * we can enqueue as many commands as we want, as we can always cancel the enqueue, thanks to the ~~intrusive linked lists~~ `BTreeMap`.
35 lines
836 B
Rust
35 lines
836 B
Rust
use tokio::net::TcpStream;
|
|
|
|
use crate::client::SocketConfig;
|
|
use crate::config::{Host, SslMode};
|
|
use crate::tls::MakeTlsConnect;
|
|
use crate::{Error, cancel_query_raw, connect_socket};
|
|
|
|
pub(crate) async fn cancel_query<T>(
|
|
config: SocketConfig,
|
|
ssl_mode: SslMode,
|
|
tls: T,
|
|
process_id: i32,
|
|
secret_key: i32,
|
|
) -> Result<(), Error>
|
|
where
|
|
T: MakeTlsConnect<TcpStream>,
|
|
{
|
|
let hostname = match &config.host {
|
|
Host::Tcp(host) => &**host,
|
|
};
|
|
let tls = tls
|
|
.make_tls_connect(hostname)
|
|
.map_err(|e| Error::tls(e.into()))?;
|
|
|
|
let socket = connect_socket::connect_socket(
|
|
config.host_addr,
|
|
&config.host,
|
|
config.port,
|
|
config.connect_timeout,
|
|
)
|
|
.await?;
|
|
|
|
cancel_query_raw::cancel_query_raw(socket, ssl_mode, tls, process_id, secret_key).await
|
|
}
|