Make redaction retention period configurable
2 files changed, 19 insertions, 2 deletions
diff --git a/synapse/config/server.py b/synapse/config/server.py
index 2abdef0971..8efab924d4 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -162,6 +162,16 @@ class ServerConfig(Config):
self.mau_trial_days = config.get("mau_trial_days", 0)
+ # How long to keep redacted events in the database in unredacted form
+ # before redacting them.
+ redaction_retention_period = config.get("redaction_retention_period")
+ if redaction_retention_period:
+ self.redaction_retention_period = self.parse_duration(
+ redaction_retention_period
+ )
+ else:
+ self.redaction_retention_period = None
+
# Options to disable HS
self.hs_disabled = config.get("hs_disabled", False)
self.hs_disabled_message = config.get("hs_disabled_message", "")
@@ -718,6 +728,11 @@ class ServerConfig(Config):
# Defaults to 'true'.
#
#allow_per_room_profiles: false
+
+ # How long to keep redacted events in unredacted form in the database.
+ # By default redactions are kept indefinitely.
+ #
+ #redaction_retention_period: 30d
"""
% locals()
)
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 2970da6829..d0d1781c90 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -1566,10 +1566,12 @@ class EventsStore(
Deferred
"""
- if self.stream_ordering_month_ago is None:
+ if not self.hs.config.redaction_retention_period:
return
- max_pos = self.stream_ordering_month_ago
+ max_pos = yield self.find_first_stream_ordering_after_ts(
+ self._clock.time_msec() - self.hs.config.redaction_retention_period
+ )
# We fetch all redactions that point to an event that we have that has
# a stream ordering from over a month ago, that we haven't yet censored
|