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;