From 5e2cc0575fbd097b784246ef8b152e0b54a0ca5b Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Sun, 23 Jun 2024 22:20:18 +0200 Subject: [PATCH] Retention, small fixes (from Friday) --- events/retention.py | 8 +++++--- ...003_alter_turningpoint_triggering_event.py | 20 +++++++++++++++++++ issues/models.py | 2 +- 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 issues/migrations/0003_alter_turningpoint_triggering_event.py diff --git a/events/retention.py b/events/retention.py index a4bbc1c..75d7ba8 100644 --- a/events/retention.py +++ b/events/retention.py @@ -160,7 +160,7 @@ def evict_for_max_events(project, timestamp, stored_event_count=None): from .models import Event if stored_event_count is None: - # allowed as a pass-in to save a query (we generally start off knowing this) + # allowed as a pass-in to save a query (we generally start off knowing this); +1 because call-before-add stored_event_count = Event.objects.filter(project=project).count() + 1 epoch_bounds_with_irrelevance = get_epoch_bounds_with_irrelevance(project, timestamp) @@ -174,9 +174,11 @@ def evict_for_max_events(project, timestamp, stored_event_count=None): # will be evicted (since `evict_for_irrelevance` will evict anything above (but not including) the given value) max_total_irrelevance -= 1 - evict_for_irrelevance(max_total_irrelevance, epoch_bounds_with_irrelevance) + evict_for_irrelevance( + max_total_irrelevance, + list(filter_for_work(epoch_bounds_with_irrelevance, pairs, max_total_irrelevance))) - stored_event_count = Event.objects.filter(project=project).count() + stored_event_count = Event.objects.filter(project=project).count() + 1 if max_total_irrelevance < -1: # < -1: see test below for why. # could still happen ('in theory') if there's max_size items of irrelevance 0 (in the real impl. we'll have diff --git a/issues/migrations/0003_alter_turningpoint_triggering_event.py b/issues/migrations/0003_alter_turningpoint_triggering_event.py new file mode 100644 index 0000000..59ca119 --- /dev/null +++ b/issues/migrations/0003_alter_turningpoint_triggering_event.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.13 on 2024-06-23 20:19 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0004_event_irrelevance_for_retention'), + ('issues', '0002_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='turningpoint', + name='triggering_event', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='events.event'), + ), + ] diff --git a/issues/models.py b/issues/models.py index 1d94f9c..86da661 100644 --- a/issues/models.py +++ b/issues/models.py @@ -458,7 +458,7 @@ class TurningPoint(models.Model): # "milestone", "state_change", "transition", "annotation", "episode" issue = models.ForeignKey("Issue", blank=False, null=True, on_delete=models.SET_NULL) # SET_NULL: cleanup 'later' - triggering_event = models.ForeignKey("events.Event", blank=True, null=True, on_delete=models.SET_NULL) + triggering_event = models.ForeignKey("events.Event", blank=True, null=True, on_delete=models.DO_NOTHING) # null: the system-user user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.SET_NULL)