Anomalie #7045
ferméProblème enregistrement multiple de crontab suite à mise à jour dynacase-core 3.2.21
100%
La clé d'identification de l'enregistrement du CRON ne doit pas dépendre du répertoire, mais du contexte
Description
Le script d'API `manageContextCrontab` n'identifie pas correctement, dans la crontab, la section d'un contexte lorsque le répertoire racine du contexte se termine par un slash final (e.g. "/var/www/dynacase/"). Dans ce cas, on peut se retrouver avec des crontabs enregistrés deux fois : une fois avec le répertoire du contexte avec un slash final et une autre avec le répertoire du contexte sans le slash finale.
Exemple de crontab observée sur un serveur ayant ce problème :
# BEGIN:FREEDOM_CRONTAB:/var/www/dynacase/:FREEDOM/freedom.cron
CONTEXT_ROOT=/var/www/dynacase/ ^__
^_____________\__ crontab #1 : avec un slash final
/
[...] v
# END:FREEDOM_CRONTAB:/var/www/dynacase/:FREEDOM/freedom.cron
# BEGIN:FREEDOM_CRONTAB:/var/www/dynacase:FREEDOM/freedom.cron
CONTEXT_ROOT=/var/www/dynacase ^__
^_____________\__ crontab #2 : pas de slash final
[...] /
v
# END:FREEDOM_CRONTAB:/var/www/dynacase:FREEDOM/freedom.cron
Le problème se manifeste alors par des erreurs plus ou moins aléatoires lors de l'exécution de `cleanContext` par ces crontabs (erreur du type "ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « docname_pkey »" ou "ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « docfrom_pkey »").
Le problème se produit donc lorsqu'un contexte a été créé avec un répertoire racine se terminant par un slash final.
Ensuite, ce problème doit être déclenché par la correction de #5939 qui fait que à partir de dynacase-core >= 3.2.21 le DEFAULT_PUBDIR est calculé à partir de la constante PHP DIR (donc sans slash final) alors qu'avant on utilisait la valeur du répertoire racine de dynacase-control (donc potentiellement avec un slash final suivant comment le contexte a été créé initialement).
Conditions de reproduction du problème :
- avoir créé un contexte avec dynacase-control avec un répertoire racine se terminant par un slash final (e.g. "/var/www/dynacase/") ;
- avoir installé dans ce contexte un dynacase-core < 3.2.21 (une crontab #1 est alors enregistrée avec "/var/www/dynacase/" : avec un slash final) ;
- avoir par la suite mis à jour dynacase-core en version >= 3.2.21 (une crontab #2 est alors enregistrée avec "/var/www/dynacase" : pas de slash final).
Mis à jour par Marc Claverie il y a plus de 8 ans
- Assigné à mis à Jérôme Augé
- Version cible mis à 3.2.23
Mis à jour par Éric Brison il y a plus de 8 ans
- Statut changé de Nouveau à Intégré
- % réalisé changé de 0 à 100
Appliqué par commit internal-platfrom:commit:38eb9719ee9080fc67c6badae07b7fcef50a6282.
Mis à jour par Jérôme Augé il y a plus de 8 ans
- Lié à Anomalie #7225: Section end mismatch at line #126: expecting '/var/www/xxx:FREEDOM/freedom.cron', found '/var/www/xxx:FREEDOM/freedom.cron# BEGIN:FREEDOM_CRONTAB:/var/www/zzz:FREEDOM/freedom.cron' ajouté