Adding deadpool timeouts. (#2775)
This commit is contained in:
parent
1dba94c9cb
commit
66b0ddbbc5
3 changed files with 16 additions and 3 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -1217,6 +1217,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"
|
||||
|
@ -2491,6 +2494,7 @@ dependencies = [
|
|||
"async-trait",
|
||||
"bcrypt",
|
||||
"chrono",
|
||||
"deadpool",
|
||||
"diesel",
|
||||
"diesel-async",
|
||||
"diesel-derive-newtype",
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue