WIP: cleanup: launch a vacuum for cleaned up tables (#80236) #118

Draft
pducroquet wants to merge 1 commits from wip/80236-vacuum-at-cleanup into main
2 changed files with 18 additions and 3 deletions

View File

@ -390,6 +390,7 @@ class Event(models.Model):
EventTypeDefinition level."""
event_types_by_retention_days = defaultdict(set)
default_retention_days = getattr(settings, 'JOURNAL_DEFAULT_RETENTION_DAYS', 365)
deleted_entries = 0
for event_type in EventType.objects.all():
evd = event_type.definition
retention_days = evd.retention_days if evd else None
@ -402,7 +403,9 @@ class Event(models.Model):
for retention_days, event_types in event_types_by_retention_days.items():
threshold = now() - timedelta(days=retention_days)
Event.objects.filter(type__in=event_types).filter(timestamp__lt=threshold).delete()
deleted, _ = Event.objects.filter(type__in=event_types).filter(timestamp__lt=threshold).delete()
deleted_entries += deleted
Review

deleted_entries n'est pas utilisé. Tu voulais le logguer ou plutôt faire un return deleted_entries ?

`deleted_entries` n'est pas utilisé. Tu voulais le logguer ou plutôt faire un `return deleted_entries` ?
return deleted
@property
def session_id_shortened(self):

View File

@ -18,6 +18,7 @@ import logging
from django.apps import apps
from django.core.management.base import BaseCommand
from django.db import connection
logger = logging.getLogger(__name__)
@ -37,7 +38,18 @@ class Command(BaseCommand):
def cleanup_model(self, model):
manager = getattr(model, 'objects', None)
deleted = 0
if hasattr(manager, 'cleanup'):
manager.cleanup()
deleted_manager = manager.cleanup()
if deleted_manager is not None:
deleted += deleted_manager
if hasattr(model, 'cleanup'):
model.cleanup()
deleted_model = model.cleanup()
if deleted_model is not None:
deleted += deleted_model
if deleted:
# execute a vacuum to make sure the space is properly given back
# this is required because autovacuum may lag behind with many tenants
with connection.cursor() as cursor:
cursor.execute("VACUUM ANALYZE \"%s\";" % model._meta.db_table)