Si un modérateur modère un billet (= supprime la version publique) pendant que le watchdog est en train d'exporter ce billet, le watchdog va planter lorsque l'export sera terminé (si une erreur se produit dans l'export en lui-même, elle sera rattrapée), au moment de vouloir mettre à jour l'état de la demande d'export (PublicationEvent).
Une façon de provoquer le bug est la suivante :
Lancer make start-publication-watchdog et attendre que le watchdog n'ait plus rien à faire
Ajouter time.sleep(30) à la fin du fichier, à la fin et dans le for (ici), de façon à faire une pause entre le traitement de deux publication_events (pour simuler qu'un export dure 30 secondes)
Relancer le watchdog
Se connecter en tant qu'admin, aller sur la version brouillon d'un billet publié et demander la génération de tous les exports
Le watchdog exporte le premier format demandé, puis fait la pause. Pendant cette pause, revenir sur la version publique du billet et le modérer.
Le watchdog plante en essayer de mettre à jour l'événement de publication, mais le PublishedContent que référence ce PublicationEvent n'existe plus...
Solution : probablement empêcher la suppression d'un contenu public si celui-ci est en train d'être exporté par le watchdog. On ne peut sans doute pas attendre dans la requête de modération que l'export soit terminé (même si c'est pour le supprimer juste après), car certains exports peuvent prendre plusieurs minutes...
Ceci dit, ce problème a peu de chance d'arriver en pratique (modérer un billet juste après sa publication -- ok, en cas de spam...) et ne casse pas la cohérence des données, donc je dirais que c'est un bug avec une priorité relativement basse...
Si un modérateur modère un billet (= supprime la version publique) pendant que le watchdog est en train d'exporter ce billet, le watchdog va planter lorsque l'export sera terminé (si une erreur se produit dans l'export en lui-même, elle sera rattrapée), au moment de vouloir mettre à jour l'état de la demande d'export (
PublicationEvent
).Une façon de provoquer le bug est la suivante :
make start-publication-watchdog
et attendre que le watchdog n'ait plus rien à fairetime.sleep(30)
à la fin du fichier, à la fin et dans lefor
(ici), de façon à faire une pause entre le traitement de deuxpublication_events
(pour simuler qu'un export dure 30 secondes)admin
, aller sur la version brouillon d'un billet publié et demander la génération de tous les exportsPublishedContent
que référence cePublicationEvent
n'existe plus...Solution : probablement empêcher la suppression d'un contenu public si celui-ci est en train d'être exporté par le watchdog. On ne peut sans doute pas attendre dans la requête de modération que l'export soit terminé (même si c'est pour le supprimer juste après), car certains exports peuvent prendre plusieurs minutes...
Ceci dit, ce problème a peu de chance d'arriver en pratique (modérer un billet juste après sa publication -- ok, en cas de spam...) et ne casse pas la cohérence des données, donc je dirais que c'est un bug avec une priorité relativement basse...