Skip to content

v2 · Préchauffer les extraits du défi du jour (tâche périodique) #279

Open

Description

@Oasis35

Part of #205

Contexte

Au démarrage d'une partie (POST /api/daily/sessions, E2), l'API demande à Deezer l'adresse de l'extrait audio de chacun des 5 morceaux du défi (ITrackPreviews, cache d'IPreviewProvider). Quand le cache est vide, par exemple à minuit quand tout le monde arrive, ces appels se font pendant que la transaction et le verrou du joueur sont tenus : si Deezer est lent ou en panne, chaque joueur garde une connexion à la base jusqu'à 15 s, et les connexions peuvent s'épuiser (toute l'API se bloque). Limite connue notée dans « Fait en E2 » (DEVELOPPEMENT.md).

À faire

Une tâche Hangfire daily-warm-previews (même mécanique que catalogue-refresh, IScheduledJob, AddScheduledJob) qui demande à Deezer les extraits des morceaux du défi du jour toutes les X heures et les met dans le cache d'IPreviewProvider, pour que les démarrages lisent la mémoire sans appeler Deezer.

  • Choisir X à partir de la durée de validité réelle des adresses signées de Deezer (paramètre exp de ?hdnea=exp=…~acl=…~hmac=…, à lire sur une vraie adresse) : le cache garde une adresse jusqu'à son expiration moins 1 h de marge (piège 14, CachedPreviewProvider), et ne la garde pas du tout s'il reste moins d'1 h. X doit donc rester inférieur à cette durée moins la marge.
  • Lancer aussi la tâche juste après la génération du défi (minuit, à la volée, bouton de l'admin) : le pic de minuit est le cas qui compte.
  • Ne tourne pas en staging si cela partage le quota Deezer de la prod (même IP, piège 16) : décider comme pour catalogue-refresh (Jobs:<id>:Cron à « jamais » dans appsettings.Staging.json).
  • Ajouter la tâche à ExpectedJobs de Jobs/ScheduledJobsTests, compte rendu { warmed, failed }, un échec Deezer (Unavailable) ne fait jamais échouer la tâche ni ne vide le cache.

Terminé quand

Tests verts (tâche appelée directement avec le faux Deezer : les extraits sont en cache, un démarrage ne fait aucune requête vers Deezer), et vérification en staging que le nombre de requêtes Deezer au démarrage d'une partie tombe à zéro après le passage de la tâche.

À planifier après la mise en staging de E2, avec de vrais chiffres. Alternative non retenue : lire les extraits avant d'ouvrir la transaction (étape de chargement hors du mécanisme de transaction automatique de Wolverine), plus propre mais plus invasif.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions