From 7c196f4e00b74bed247a03e701439bdac759914e Mon Sep 17 00:00:00 2001
From: Nyaaori <+@nyaaori.cat>
Date: Fri, 9 Sep 2022 19:17:29 +0200
Subject: [PATCH] feat: Add max prev events config option, allowing adjusting
 limit for prev_events fetching

---
 src/config/mod.rs                      | 6 ++++++
 src/service/globals/mod.rs             | 4 ++++
 src/service/rooms/event_handler/mod.rs | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/config/mod.rs b/src/config/mod.rs
index 8a4b54ea..b974fb1f 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -40,6 +40,8 @@ pub struct Config {
     pub max_request_size: u32,
     #[serde(default = "default_max_concurrent_requests")]
     pub max_concurrent_requests: u16,
+    #[serde(default = "default_max_fetch_prev_events")]
+    pub max_fetch_prev_events: u16,
     #[serde(default = "false_fn")]
     pub allow_registration: bool,
     #[serde(default = "true_fn")]
@@ -249,6 +251,10 @@ fn default_max_concurrent_requests() -> u16 {
     100
 }
 
+fn default_max_fetch_prev_events() -> u16 {
+    100_u16
+}
+
 fn default_log() -> String {
     "warn,state_res=warn,_=off,sled=off".to_owned()
 }
diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs
index c0fcb4bd..bb823e2c 100644
--- a/src/service/globals/mod.rs
+++ b/src/service/globals/mod.rs
@@ -222,6 +222,10 @@ impl Service {
         self.config.max_request_size
     }
 
+    pub fn max_fetch_prev_events(&self) -> u16 {
+        self.config.max_fetch_prev_events
+    }
+
     pub fn allow_registration(&self) -> bool {
         self.config.allow_registration
     }
diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs
index 7531674b..5633bc55 100644
--- a/src/service/rooms/event_handler/mod.rs
+++ b/src/service/rooms/event_handler/mod.rs
@@ -1226,7 +1226,7 @@ impl Service {
                 .await
                 .pop()
             {
-                if amount > 100 {
+                if amount > services().globals.max_fetch_prev_events() {
                     // Max limit reached
                     warn!("Max prev event limit reached!");
                     graph.insert(prev_event_id.clone(), HashSet::new());