Skip to content
Snippets Groups Projects
Commit c0b41ed1 authored by Martin Mareš's avatar Martin Mareš
Browse files

Zaveden garbage collector na registrační tokeny

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.
parent 242f7cac
No related branches found
No related tags found
1 merge request!86Registrace
This commit is part of merge request !86. Comments created here will be created in the context of that merge request.
......@@ -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
......
......@@ -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()
......@@ -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')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment