Projet

Général

Profil

Development #18481

nanterre: sécuriser les flux contenant des créations de fédération

Ajouté par Benjamin Dauvergne il y a plus de 6 ans. Mis à jour il y a plus de 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 septembre 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

  • ne pas les rejouer automatiquement (i.e. le statut sur une erreur sera toujours UNRECOVERABLE_ERROR)
  • locker les individus concernés lors de la requête et lors du rejeu
  • sur un rejeu (i.e. job repassé dans l'état TODO) qui échoue, on efface la clé de fédération
  • on sauvegarde les anciennes clés en cas d'écrasement dans une liste 'anciennes_clés_de_fédération' composée de tuples:
    [nom de l'application, date de l'écrasement, valeur de l'ancienne clé]
    

Fichiers

Révisions associées

Révision 5732cc61 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 6 ans

nanterre: sécurise les créations initiales et en rejeu des fédérations (fixes #18481)

- ne pas les rejouer
- locker les individus pour lesquels on va potentiellement créer une fédération
- en cas de rejeu forcé et d'échec on nettoye la fédération
- on sauvegarde les anciennes clés en cas d'écrasement dans une
liste 'anciennes_clés_de_fédération' composée de tuples:

[nom de l'application, date de l'écrasement, valeur de l'ancienne clé]

Historique

#3

Mis à jour par Thomas Noël il y a plus de 6 ans

Le select_for_update() va attendre que «l'autre» requête se soit terminée, est-ce ce que l'on veut ? Avec un nowait=True on pourrait obtenir l'info qu'un lock est en place par ailleurs et renvoyer un message d'erreur (via un try: select_for_update(nowait=True) except: erreur) ... Je ne sais pas ce qui est le mieux, à vrai dire.

#4

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

J'arrivais mieux à penser la chose avec un simple lock bloquant mais oui c'est plus efficace de ne pas bloquer.

#6

Mis à jour par Thomas Noël il y a plus de 6 ans

MMmhh t'as pas géré pour les select_for_update, là (y'en a deux sans noawait, et un sans try/except)

#7

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Bon finalement je ne suis plus si sûr, on a deux moment où il faut un lock:
  • à l'exécution du flux (pour éviter une écriture concurrente dans 'cles_de_federation')
  • à la création du flux (pour être sûr qu'on prend la bonne décision concernant le choix entre créer une fédération ou utiliser l'existante)

Je me dis qu'à la création on veut toujours bloquer parce que jusqu'à présent on a aucune erreur attendue à la génération d'un flux et là on en créerait une, non seulement ça a échoué mais on a généré aucun flux; j'aime pas inventer des situations inconnues.

À l'exécution effectivement on peut simplement abandonner.

Dans mon dernier patch j'ai viré les lock au niveau de def synchronize() et CalculerQF.create() (d'ailleurs je pourrai factoriser encore un peu plus maintenant que j'ai mon flag FragmentBuilder.lock_individus et mettre ça dans FragmentBuilder.create().

#9

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Et oui bloquer à la création qui est aussi le moment d'exécution de 99% des flux, c'est bloquer tout le temps (sachant qu'on a un timeout de 20s sur les appels RSU, bien trop long finalement sachant qu'on peut synchroniser jusqu'à 3 applications), on a des blocages en synchro jusqu'à 30s. De toute façon si technocarte timeout on aura tous les workers bloqués assez vite (5 personnes lance une synchro techno, personne utilise zoo pendant 20s). Idéalement on devrait beaucoup baisser les timeout et tant pis si ça passe pas (je le leur dirai), on peut aussi monter le nombre de workers et/ou utiliser massivement le mode thread/greenlet d'uwsgi parce que finalement zoo c'est que des I/O (peut-être plus greenlet parce que psycopg2 et threads ça m'inquiète toujours un peu, même si logiquement on a pas de connections partagées entre threads).

#10

Mis à jour par Thomas Noël il y a plus de 6 ans

Je suis pour poser ce patch ainsi sans toucher aux timeouts pour l'instant, sujet encore trop sensible face à une réalité qu'on ne connait pas (on n'a jamais vu ce que tout cela donne en prod, "quand les applications sont chargées", etc). Comme toi, pas envie de trouver des solutions à des problèmes inconnues.

#11

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Statut changé de Nouveau à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#12

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

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

Formats disponibles : Atom PDF