Toto-Azero / Wikipedia

Scripts utilisés par ZéroBot (https://fr.wikipedia.org/User:ZéroBot)
GNU General Public License v3.0
7 stars 5 forks source link

drp_warn: deux demandes peuvent rentrer en conflit et donner des modifications infinies #13

Open framawiki opened 6 years ago

framawiki commented 6 years ago

Un bug assez important a été reporté ici: https://fr.wikipedia.org/wiki/Discussion_utilisateur:Toto_Az%C3%A9ro#un_bug_??? Il s'agit de cas où le bot poste le message un nombre infini de fois sur la PDD d'un même utilisateur.

Exemples:

Un exemple de log:

phase try 0

found_full_template = True
PaS = False
=== [[Titre exact]] ===
statut_actuel = attente
date = 29 août 2018 à 10:34 (CEST)
non
DRP déjà traitée mais statut différent…
[[fr:Discussion utilisateur:Mehdi Bellatif]]
Titre exact
WARNING: API warning (main): Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API de$
WARNING: API warning (revisions): Because "rvslots" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new forma$
/* Concernant votre demande de restauration de la page [[Titre exact]] */ nouvelle section

Distribué par [[Utilisateur:ZéroBot|ZéroBot]], le ~~~~~
Sleeping for 6.2 seconds, 2018-09-01 00:00:19
Page [[Discussion utilisateur:Mehdi Bellatif]] saved

Le problème semble se situer sur l’enregistrement dans la base, il marque que le "statut actuel" (la valeur qu'il a déduite de l'état de la page) vaut "attente", alors que celle sauvegardée dans la base vaut "non". Les valeurs étant différentes, il poste donc un message.

Mon analyse est que deux DRP portant sur la même page (souvent "Titre exact") ayant des états différents s'annulent entre elles à chaque passage du script. Demander à ce que toutes les demandes portent sur des titres différents est impossible, il faudrait ajouter une colonne dans la table, afin que le simili-primarykey porte cette fois sur la paire (nom de page + nom d'utilisateur) au lieu de seulement (nom de page). Il n'y aurait plus ce risque.