RefletsWeb2
L'application refletweb2 contient un outil de création et modification du budget à l'aide de scénarios. Un scénario est une série de modifications faites au budget qui lorsqu'elles respectent certaines règles comptables peuvent être "chargées" c-à-d appliquées dans le budget courant pour ainsi le modifier.
URL: https://coda.auf.org/refletsweb/ Git: https://git.auf.org/prive/?p=auf_reflets_web_django.git;a=summary
Problèmes connues
Chargement concurrent
Lors du chargement d'un scénario plusieurs opérations sont faites comme l'écriture dans la base de données, dans coda, etc. Malheureusement, certaines d'entre elles comme l'incrémentation du numéro de chargement ne sont pas atomique c-à-d qui elles ne préviennent pas deux écritures conflictuelles.
L'incident est le résultat de deux chargements du même scénario qui a eu pour effet de rendre la base de données de RW2 incohérente et inaccessible.
Comme solution à court terme, j'ai modifié la base de données manuellement pour remettre les scénarios dans l'ordre chronologique. Pour la recherche de doublon la requête est la suivante:
SELECT id, chargement, date_chargement FROM budget_scenario WHERE chargement IN ( SELECT chargement FROM budget_scenario GROUP BY chargement HAVING COUNT(id) > 1 ) AND chargement != 0;
Avec un résultat semblable à:
+------+------------+---------------------+ | id | chargement | date_chargement | +------+------------+---------------------+ | 2180 | 1628 | 2017-08-04 06:10:52 | +------+------------+---------------------+ | 2182 | 1628 | 2017-08-04 06:06:46 | +------+------------+---------------------+
Ensuite, j'ai vérifié les dates de chargement et corriger la colonne chargement pour corriger l'ordre avec:
UPDATE budget_scenario SET chargement = 1629 WHERE id = 2180;