From c0b41ed1476a6361a90c9dc1d16aeffc2534bd80 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Thu, 15 Jul 2021 11:35:41 +0200 Subject: [PATCH] =?UTF-8?q?Zaveden=20garbage=20collector=20na=20registra?= =?UTF-8?q?=C4=8Dn=C3=AD=20tokeny?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Z periodického procházení jobů jsem udělal obecný garbage collector, který kromě jobů uklízí i registrační tokeny. GC se nyní dá spustit ručně pomocí "bin/flask gc". V configu jsem přejmenoval JOB_GC_PERIOD na GC_PERIOD. --- etc/config.py.example | 4 ++-- mo/users.py | 8 ++++++++ mo/web/__init__.py | 20 +++++++++++++++----- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/etc/config.py.example b/etc/config.py.example index a93ece2d..f7db910c 100644 --- a/etc/config.py.example +++ b/etc/config.py.example @@ -42,8 +42,8 @@ MAX_BATCH_CONTENT_LENGTH = 1000000000 # Adresář, do kterého ukládáme data (pro vývoj relativní, pro instalaci absolutní) DATA_DIR = 'data' -# Jak často se má provádět periodická kontrola dávek [s] -JOB_GC_PERIOD = 60 +# Jak často se má spouštět garbage collector na dávky a tokeny [s] +GC_PERIOD = 60 # Za jak dlouho expiruje dokončená dávka [min] JOB_EXPIRATION = 5 diff --git a/mo/users.py b/mo/users.py index 8a12debf..7e0c90b3 100644 --- a/mo/users.py +++ b/mo/users.py @@ -264,3 +264,11 @@ def new_reg_request(type: db.RegReqType, client: str) -> Optional[db.RegRequest] email_token=email_token, client=client, ) + + +def expire_reg_requests(): + sess = db.get_session() + conn = sess.connection() + table = db.RegRequest.__table__ + conn.execute(table.delete().where(table.c.expires_at < mo.now)) + sess.commit() diff --git a/mo/web/__init__.py b/mo/web/__init__.py index 01217887..1be472cf 100644 --- a/mo/web/__init__.py +++ b/mo/web/__init__.py @@ -171,18 +171,28 @@ app.before_request(init_request) ### UWSGI glue ### +# Čas od času se probudíme a spustíme garbage collector: +# - projdeme joby pro případ, že by se ztratil signál +# - expirujeme zastaralé joby +# - expirujeme zastaralé registrační tokeny +@app.cli.command('gc') +def gc(): + """Run garbage collector.""" + + mo.now = mo.util.get_now() + mo.jobs.process_jobs() + mo.users.expire_reg_requests() + + try: import uwsgi from uwsgidecorators import timer, signal - # Čas od času se probudíme a projdeme joby pro případ, že by se ztratil signál. - # Také při tom expirujeme zastaralé joby. - @timer(config.JOB_GC_PERIOD, target='mule') + @timer(config.GC_PERIOD, target='mule') def mule_timer(signum): # app.logger.debug('Mule: Timer tick') with app.app_context(): - mo.now = mo.util.get_now() - mo.jobs.process_jobs() + garbage_collect() # Obykle při vložení jobu dostaneme signál. @signal(42, target='mule') -- GitLab