Make redaction retention period configurable

This commit is contained in:
Erik Johnston 2019-09-05 17:16:03 +01:00
parent 549f974897
commit 3ff0422d2d
4 changed files with 27 additions and 3 deletions

View File

@ -306,6 +306,11 @@ listeners:
# #
#allow_per_room_profiles: false #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
## TLS ## ## TLS ##

View File

@ -162,6 +162,16 @@ class ServerConfig(Config):
self.mau_trial_days = config.get("mau_trial_days", 0) 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 # Options to disable HS
self.hs_disabled = config.get("hs_disabled", False) self.hs_disabled = config.get("hs_disabled", False)
self.hs_disabled_message = config.get("hs_disabled_message", "") self.hs_disabled_message = config.get("hs_disabled_message", "")
@ -718,6 +728,11 @@ class ServerConfig(Config):
# Defaults to 'true'. # Defaults to 'true'.
# #
#allow_per_room_profiles: false #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() % locals()
) )

View File

@ -1566,10 +1566,12 @@ class EventsStore(
Deferred Deferred
""" """
if self.stream_ordering_month_ago is None: if not self.hs.config.redaction_retention_period:
return 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 # 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 # a stream ordering from over a month ago, that we haven't yet censored

View File

@ -344,7 +344,9 @@ class RedactionTestCase(unittest.HomeserverTestCase):
{"content": {"body": "t", "msgtype": "message"}}, json.loads(event_json) {"content": {"body": "t", "msgtype": "message"}}, json.loads(event_json)
) )
# Advance by 30 days # Advance by 30 days, then advance again to ensure that the looping call
# for updating the stream position gets called and then the looping call
# for the censoring gets called.
self.reactor.advance(60 * 60 * 24 * 31) self.reactor.advance(60 * 60 * 24 * 31)
self.reactor.advance(60 * 60 * 2) self.reactor.advance(60 * 60 * 2)