Adding deadpool timeouts. (#2775)

This commit is contained in:
Dessalines 2023-03-03 04:30:03 -05:00 committed by Felix Ableitner
parent ff6458b48f
commit 777595038f
3 changed files with 16 additions and 3 deletions

4
Cargo.lock generated
View File

@ -1205,6 +1205,9 @@ name = "deadpool-runtime"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
dependencies = [
"tokio",
]
[[package]]
name = "derive_builder"
@ -2478,6 +2481,7 @@ dependencies = [
"async-trait",
"bcrypt",
"chrono",
"deadpool",
"diesel",
"diesel-async",
"diesel-derive-newtype",

View File

@ -16,7 +16,7 @@ doctest = false
[features]
full = ["diesel", "diesel-derive-newtype", "diesel_migrations", "bcrypt", "lemmy_utils",
"activitypub_federation", "sha2", "regex", "once_cell", "serde_json", "diesel_ltree",
"diesel-async"]
"diesel-async", "deadpool"]
[dependencies]
chrono = { workspace = true }
@ -41,6 +41,7 @@ async-trait = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
tracing-error = { workspace = true }
deadpool = { version = "0.9.5", features = ["rt_tokio_1"], optional = true }
[dev-dependencies]
serial_test = { workspace = true }

View File

@ -7,6 +7,7 @@ use crate::{
};
use activitypub_federation::{core::object_id::ObjectId, traits::ApubObject};
use chrono::NaiveDateTime;
use deadpool::Runtime;
use diesel::{
backend::Backend,
deserialize::FromSql,
@ -27,12 +28,13 @@ use diesel_migrations::EmbeddedMigrations;
use lemmy_utils::{error::LemmyError, settings::structs::Settings};
use once_cell::sync::Lazy;
use regex::Regex;
use std::{env, env::VarError};
use std::{env, env::VarError, time::Duration};
use tracing::info;
use url::Url;
const FETCH_LIMIT_DEFAULT: i64 = 10;
pub const FETCH_LIMIT_MAX: i64 = 50;
const POOL_TIMEOUT: Option<Duration> = Some(Duration::from_secs(5));
pub type DbPool = Pool<AsyncPgConnection>;
@ -135,7 +137,13 @@ async fn build_db_pool_settings_opt(settings: Option<&Settings>) -> Result<DbPoo
let db_url = get_database_url(settings);
let pool_size = settings.map(|s| s.database.pool_size).unwrap_or(5);
let manager = AsyncDieselConnectionManager::<AsyncPgConnection>::new(&db_url);
let pool = Pool::builder(manager).max_size(pool_size).build()?;
let pool = Pool::builder(manager)
.max_size(pool_size)
.wait_timeout(POOL_TIMEOUT)
.create_timeout(POOL_TIMEOUT)
.recycle_timeout(POOL_TIMEOUT)
.runtime(Runtime::Tokio1)
.build()?;
// If there's no settings, that means its a unit test, and migrations need to be run
if settings.is_none() {