Upstream commit: 474dd0229cb20cf513036619781ed97bd8073c3f Enterprise-only files removed or emptied: 63 Enterprise-only snippets removed: 117 in 50 files Dangling module declarations removed: 5 Cargo edits turning enterprise off: 14 Verification: clean Enterprise feature gates left for rebuilt features: 19 in 18 files Produced by tools/fork/strip.py. The full report is in docs/fork/strip-reports/ on main.
88 lines
2.8 KiB
Rust
88 lines
2.8 KiB
Rust
/*
|
|
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
|
*/
|
|
|
|
use super::{
|
|
RedisClusterConnectionManager, RedisConnectionManager, RedisSentinelConnectionManager,
|
|
into_error,
|
|
};
|
|
use deadpool::managed;
|
|
use redis::{
|
|
aio::{ConnectionLike, MultiplexedConnection},
|
|
cluster_async::ClusterConnection,
|
|
};
|
|
|
|
impl managed::Manager for RedisConnectionManager {
|
|
type Type = MultiplexedConnection;
|
|
type Error = trc::Error;
|
|
|
|
async fn create(&self) -> Result<MultiplexedConnection, trc::Error> {
|
|
match tokio::time::timeout(self.timeout, self.client.get_multiplexed_async_connection())
|
|
.await
|
|
{
|
|
Ok(conn) => conn.map_err(into_error),
|
|
Err(_) => Err(trc::StoreEvent::RedisError.ctx(trc::Key::Details, "Connection Timeout")),
|
|
}
|
|
}
|
|
|
|
async fn recycle(
|
|
&self,
|
|
conn: &mut MultiplexedConnection,
|
|
_: &managed::Metrics,
|
|
) -> managed::RecycleResult<trc::Error> {
|
|
conn.req_packed_command(&redis::cmd("PING"))
|
|
.await
|
|
.map(|_| ())
|
|
.map_err(|err| managed::RecycleError::Backend(into_error(err)))
|
|
}
|
|
}
|
|
|
|
impl managed::Manager for RedisClusterConnectionManager {
|
|
type Type = ClusterConnection;
|
|
type Error = trc::Error;
|
|
|
|
async fn create(&self) -> Result<ClusterConnection, trc::Error> {
|
|
match tokio::time::timeout(self.timeout, self.client.get_async_connection()).await {
|
|
Ok(conn) => conn.map_err(into_error),
|
|
Err(_) => Err(trc::StoreEvent::RedisError.ctx(trc::Key::Details, "Connection Timeout")),
|
|
}
|
|
}
|
|
|
|
async fn recycle(
|
|
&self,
|
|
conn: &mut ClusterConnection,
|
|
_: &managed::Metrics,
|
|
) -> managed::RecycleResult<trc::Error> {
|
|
conn.req_packed_command(&redis::cmd("PING"))
|
|
.await
|
|
.map(|_| ())
|
|
.map_err(|err| managed::RecycleError::Backend(into_error(err)))
|
|
}
|
|
}
|
|
|
|
impl managed::Manager for RedisSentinelConnectionManager {
|
|
type Type = MultiplexedConnection;
|
|
type Error = trc::Error;
|
|
|
|
async fn create(&self) -> Result<MultiplexedConnection, trc::Error> {
|
|
let mut client = self.client.lock().await;
|
|
match tokio::time::timeout(self.timeout, client.get_async_connection()).await {
|
|
Ok(conn) => conn.map_err(into_error),
|
|
Err(_) => Err(trc::StoreEvent::RedisError.ctx(trc::Key::Details, "Connection Timeout")),
|
|
}
|
|
}
|
|
|
|
async fn recycle(
|
|
&self,
|
|
conn: &mut MultiplexedConnection,
|
|
_: &managed::Metrics,
|
|
) -> managed::RecycleResult<trc::Error> {
|
|
conn.req_packed_command(&redis::cmd("PING"))
|
|
.await
|
|
.map(|_| ())
|
|
.map_err(|err| managed::RecycleError::Backend(into_error(err)))
|
|
}
|
|
}
|