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"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
|
checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
|
||||||
|
dependencies = [
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "derive_builder"
|
name = "derive_builder"
|
||||||
|
@ -2491,6 +2494,7 @@ dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bcrypt",
|
"bcrypt",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"deadpool",
|
||||||
"diesel",
|
"diesel",
|
||||||
"diesel-async",
|
"diesel-async",
|
||||||
"diesel-derive-newtype",
|
"diesel-derive-newtype",
|
||||||
|
|
|
@ -16,7 +16,7 @@ doctest = false
|
||||||
[features]
|
[features]
|
||||||
full = ["diesel", "diesel-derive-newtype", "diesel_migrations", "bcrypt", "lemmy_utils",
|
full = ["diesel", "diesel-derive-newtype", "diesel_migrations", "bcrypt", "lemmy_utils",
|
||||||
"activitypub_federation", "sha2", "regex", "once_cell", "serde_json", "diesel_ltree",
|
"activitypub_federation", "sha2", "regex", "once_cell", "serde_json", "diesel_ltree",
|
||||||
"diesel-async"]
|
"diesel-async", "deadpool"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = { workspace = true }
|
chrono = { workspace = true }
|
||||||
|
@ -41,6 +41,7 @@ async-trait = { workspace = true }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
tracing-error = { workspace = true }
|
tracing-error = { workspace = true }
|
||||||
|
deadpool = { version = "0.9.5", features = ["rt_tokio_1"], optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
serial_test = { workspace = true }
|
serial_test = { workspace = true }
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::{
|
||||||
};
|
};
|
||||||
use activitypub_federation::{core::object_id::ObjectId, traits::ApubObject};
|
use activitypub_federation::{core::object_id::ObjectId, traits::ApubObject};
|
||||||
use chrono::NaiveDateTime;
|
use chrono::NaiveDateTime;
|
||||||
|
use deadpool::Runtime;
|
||||||
use diesel::{
|
use diesel::{
|
||||||
backend::Backend,
|
backend::Backend,
|
||||||
deserialize::FromSql,
|
deserialize::FromSql,
|
||||||
|
@ -27,12 +28,13 @@ use diesel_migrations::EmbeddedMigrations;
|
||||||
use lemmy_utils::{error::LemmyError, settings::structs::Settings};
|
use lemmy_utils::{error::LemmyError, settings::structs::Settings};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use std::{env, env::VarError};
|
use std::{env, env::VarError, time::Duration};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
const FETCH_LIMIT_DEFAULT: i64 = 10;
|
const FETCH_LIMIT_DEFAULT: i64 = 10;
|
||||||
pub const FETCH_LIMIT_MAX: i64 = 50;
|
pub const FETCH_LIMIT_MAX: i64 = 50;
|
||||||
|
const POOL_TIMEOUT: Option<Duration> = Some(Duration::from_secs(5));
|
||||||
|
|
||||||
pub type DbPool = Pool<AsyncPgConnection>;
|
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 db_url = get_database_url(settings);
|
||||||
let pool_size = settings.map(|s| s.database.pool_size).unwrap_or(5);
|
let pool_size = settings.map(|s| s.database.pool_size).unwrap_or(5);
|
||||||
let manager = AsyncDieselConnectionManager::<AsyncPgConnection>::new(&db_url);
|
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 there's no settings, that means its a unit test, and migrations need to be run
|
||||||
if settings.is_none() {
|
if settings.is_none() {
|
||||||
|
|
Loading…
Reference in a new issue