]> Untitled Git - lemmy.git/commitdiff
Adding deadpool timeouts. (#2775)
authorDessalines <dessalines@users.noreply.github.com>
Fri, 3 Mar 2023 09:30:03 +0000 (04:30 -0500)
committerGitHub <noreply@github.com>
Fri, 3 Mar 2023 09:30:03 +0000 (10:30 +0100)
Cargo.lock
crates/db_schema/Cargo.toml
crates/db_schema/src/utils.rs

index 3ccca54f7a27a14bb6259d71b415d4a7ac674724..909893932319a52316d3d9ef46e2a51c97425646 100644 (file)
@@ -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",
index 0983aa37c49ad74f1afb3ff45a312709ef7980f4..c21467ebc7be637f88f6e85e3a7f3765101aa9a9 100644 (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 }
index 9e3a3f418d55b472ea7c3dbc3bfbc6a7ff1c70cc..c05cd565d0dc487c61967f17376d54624959427c 100644 (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() {