@@ -0,0 +1,27 @@
|
||||
"""Delete expired uploads/artifacts after any active lease has elapsed."""
|
||||
import logging
|
||||
import time
|
||||
from sqlalchemy import select, delete, or_
|
||||
from .db import Job, sessions, engine
|
||||
from .storage import storage
|
||||
|
||||
log=logging.getLogger(__name__)
|
||||
|
||||
def cleanup(batch=100):
|
||||
now=time.time(); removed=0
|
||||
with sessions().begin() as db:
|
||||
q=select(Job).where(Job.expires_at<=now, or_(Job.status!='processing', Job.lease_until<now)).limit(batch)
|
||||
if engine().dialect.name=='postgresql': q=q.with_for_update(skip_locked=True)
|
||||
for job in db.scalars(q):
|
||||
try:
|
||||
storage().delete(job.input_key)
|
||||
for attempt in (1,2):
|
||||
for name in ('data.json','drawing.svg'):
|
||||
storage().delete(f'{job.id}/attempt-{attempt}/{name}')
|
||||
db.delete(job); removed+=1
|
||||
except Exception: log.exception('Expired artifact cleanup failed for %s',job.id)
|
||||
return removed
|
||||
|
||||
if __name__=='__main__':
|
||||
from .db import initialize
|
||||
initialize(); print(f'Removed {cleanup()} expired schematics')
|
||||
مرجع در شماره جدید
مسدود کردن کاربر