Merge pull request #5276 from matrix-org/babolivier/account_validity_job_delta

Allow configuring a range for the account validity startup job
This commit is contained in:
Erik Johnston 2019-05-31 12:11:56 +01:00 committed by GitHub
commit 58cce39f3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 9 deletions

View file

@ -16,6 +16,7 @@
# limitations under the License.
import itertools
import logging
import random
import sys
import threading
import time
@ -247,6 +248,8 @@ class SQLBaseStore(object):
self._check_safe_to_upsert,
)
self.rand = random.SystemRandom()
if self._account_validity.enabled:
self._clock.call_later(
0.0,
@ -308,21 +311,36 @@ class SQLBaseStore(object):
res = self.cursor_to_dict(txn)
if res:
for user in res:
self.set_expiration_date_for_user_txn(txn, user["name"])
self.set_expiration_date_for_user_txn(
txn,
user["name"],
use_delta=True,
)
yield self.runInteraction(
"get_users_with_no_expiration_date",
select_users_with_no_expiration_date_txn,
)
def set_expiration_date_for_user_txn(self, txn, user_id):
def set_expiration_date_for_user_txn(self, txn, user_id, use_delta=False):
"""Sets an expiration date to the account with the given user ID.
Args:
user_id (str): User ID to set an expiration date for.
use_delta (bool): If set to False, the expiration date for the user will be
now + validity period. If set to True, this expiration date will be a
random value in the [now + period - d ; now + period] range, d being a
delta equal to 10% of the validity period.
"""
now_ms = self._clock.time_msec()
expiration_ts = now_ms + self._account_validity.period
if use_delta:
expiration_ts = self.rand.randrange(
expiration_ts - self._account_validity.startup_job_max_delta,
expiration_ts,
)
self._simple_insert_txn(
txn,
"account_validity",