[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 }
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 }
};
use activitypub_federation::{core::object_id::ObjectId, traits::ApubObject};
use chrono::NaiveDateTime;
+use deadpool::Runtime;
use diesel::{
backend::Backend,
deserialize::FromSql,
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>;
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() {