Projet

Général

Profil

Support #74105

Ne pas insérer de récurrences déjà présentes en base

Ajouté par Pierre Ducroquet il y a environ un an. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
02 février 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Le plantage #74001 a été provoqué par une combinaison de plusieurs bugs : un excès d'occurences sur certains événements, une trop grande fréquence d'insertion de ces occurences, et un code d'insertion inefficace.
Le paliatif (passer la colonne en bigint) n'est que cela, un paliatif. Ça fera tenir un certain temps bien sûr, mais cela ne règle pas le problème à la base.
Je suggère donc de réécrire le code qui fait l'insertion des récurrences en base. Ce code est d'ailleurs à l'origine de beaucoup de requêtes extrêmement volumineuses et donc lentes, cela ne peut faire que du bien à l'application et à la base de données.
Le code actuel, Event::create_events_recurrences:

       recurrences = [] 
       for event in events:
           if event.recurrence_end_date:
               max_datetime = datetime.datetime.combine(event.recurrence_end_date, datetime.time(0, 0))
           else:   
               max_datetime = make_naive(now() + datetime.timedelta(days=365))
           recurrences.extend(
               event.get_recurrences(localtime(event.start_datetime), make_aware(max_datetime))
           )
       Event.objects.bulk_create(recurrences, ignore_conflicts=True)

Il me semble qu'en découpant par événement, et en faisant une exclusion en comparant avec un Event.objects.filter(...).order_by(date), on obtiendrait assez facilement le résultat attendu. Les deux contraintes dans la base sont sur (desk_it, &&tstzrange(start,end)) et (agenda_id, slug), on peut aisément les reprendre côté python.

Révisions associées

Révision d9942580 (diff)
Ajouté par Lauréline Guérin il y a environ un an

agendas: rewrite recurrence creation (#74105)

Historique

#1

Mis à jour par Robot Gitea il y a environ un an

  • Assigné à mis à Lauréline Guérin

Lauréline Guérin (lguerin) a ouvert une pull request sur Gitea concernant cette demande :

#2

Mis à jour par Robot Gitea il y a environ un an

Valentin Deniaud (vdeniaud) a approuvé une pull request sur Gitea concernant cette demande :

#3

Mis à jour par Robot Gitea il y a environ un an

Pierre Ducroquet (pducroquet) a approuvé une pull request sur Gitea concernant cette demande :

#4

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Nouveau à Résolu (à déployer)

Lauréline Guérin (lguerin) a mergé une pull request sur Gitea concernant cette demande :

#5

Mis à jour par Transition automatique il y a environ un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#6

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF