Anomalie #3138
Interblocage entre sauvegarde et mise à jour
0%
Description
Erreur de sauvegarde du catalogue bacula:
Log bacula:
22-Mar 03:19 127.0.0.1-dir JobId 422: Warning: FileSet MD5 digest not found.
22-Mar 03:19 127.0.0.1-dir JobId 422: Start Backup JobId 422, Job=JobSchedulePost.2012-03-22_03.19.00_29
22-Mar 03:19 127.0.0.1-dir JobId 422: Using Device "FileStorage"
22-Mar 03:19 127.0.0.1-fd JobId 422: shell command: run ClientRunBeforeJob "/usr/share/eole/schedule/schedule_bacula post"
22-Mar 03:19 127.0.0.1-fd JobId 422: shell command: run ClientRunBeforeJob "/usr/share/eole/bacula/baculaconfig.py --lock --backup_progress --jobType=cron"
22-Mar 03:19 127.0.0.1-fd JobId 422: ClientRunBeforeJob: Un verrou autre que celui de la sauvegarde est placé
22-Mar 03:19 127.0.0.1-fd JobId 422: Error: Runscript: ClientRunBeforeJob returned non-zero status=1. ERR=Child exited with code 1
22-Mar 03:19 127.0.0.1-dir JobId 422: Fatal error: Bad response to ClientRunBeforeJob command: wanted 2000 OK RunBefore
, got 2905 Bad RunBeforeJob command.
22-Mar 03:19 127.0.0.1-dir JobId 422: Fatal error: Client "127.0.0.1-fd" RunScript failed.
Maj :
/etc/cron.d/schedule -> #EOLE don't touch this file; 19 3 * * * root python /usr/share/eole/schedule/schedule cron >> /var/log/schedule.log 2>&1
Demandes liées
Révisions associées
Lien problématique entre la sauvegarde et la mise à jour.
- tmpl/bacula-dir.conf : passage de l'appel à schedule_bacula post après
la fin du job (au lieu d'avant) pour limiter les problèmes
d'annulation de mise à jour en cas de job de sauvegarde en cours.
Ref #3138
Lien problématique entre la sauvegarde et la mise à jour.
- eole/schedule/schedule : ajout de la vérification de tâche en cours
pour bacula avant de lancer la mise à jour.
- eole/schedule/schedule_bacula : appel de schedule par l'intermédiaire
de la commande at en post pour que le processus ne soit pas lié à
bacula et que jobpostschedule ne soit pas en erreur avec le
redémarrage de bacula consécutif à la mise à jour.
Ref #3138
Quote escaping; fixes #3138
Historique
#1 Mis à jour par Yoni Baude il y a environ 14 ans
- Version cible mis à Mises à jour 2.3.4 RC
Est-il possible de modifier la valeur de maj du serveur ?
Comment sont gérés les conflits entre la maj et la sauvegarde?
Quelle est la plage horaire dela programmation aléatoire des maj?
Faut-il que la sauvegarde soit programmée que après la maj?
#2 Mis à jour par Daniel Dehennin il y a presque 14 ans
- Version cible changé de Mises à jour 2.3.4 RC à Mises à jour 2.3.5 RC
Pour un bacula/eole-schedule master
#3 Mis à jour par Emmanuel GARETTE il y a presque 14 ans
Pour complèter ... je n'ai pas pu reproduite le blocage via des locks. Les locks se mettent même après le schedule (ce qui n'a pas d'intérêt).
Il y a un gros soucis dans la méthode actuelle ... c'est que lorsqu'une mise à jour se fait, un reconfigure est lancé. Ce qui arrête redémarre tous les services (dont bacula). La tâche ne se fini alors jamais :/
Il faudrait que la mise à jour se fasse APRES bacula. Je pense qu'un script lancé par un "at" serait suffisant, mais il faut bien le lancer après.
#4 Mis à jour par Emmanuel GARETTE il y a presque 14 ans
J'ai finalement trouvé. Un try catch le sys.exit(). Donc même si le schedule est annulé, la mise à jour se fait quand même.
Un patch pour résoudre ce soucis ...
--- /tmp/schedule 2012-04-15 10:34:28.548337549 +0200
+++ /usr/share/eole/schedule/schedule 2012-04-15 10:36:22.846449065 +0200
@@ -78,6 +78,10 @@
sys.exit(0)
try:
baculajobs = load_bacula_jobs(check_active=False)
+ load_bacula = True
+ except:
+ load_bacula = False
+ if load_bacula:
for job in baculajobs:
day = int(job['day'])
if job['job'] == 'daily':
@@ -90,9 +94,8 @@
if WEEK_DAY == day and MONTH_DAY < 8:
exit_not_cron()
else:
- raise Exception('Job inconnu {0}'.format(job['job']))
- except:
- pass
+ print 'Job inconnu {0}'.format(job['job'])
+ sys.exit(1)
run_runparts('daily', 'pre')
run_runparts('daily', 'post')
Mais cela ne résoud pas le problème de fond (le Maj-Auto devrait être lancé APRÈS).
#5 Mis à jour par Benjamin Bohard il y a presque 14 ans
Voici une autre solution possible :
diff --git a/eole/schedule/schedule b/eole/schedule/schedule
index af56af9..8f109af 100755
--- a/eole/schedule/schedule
+++ b/eole/schedule/schedule
@@ -91,6 +91,8 @@ def schedule_cron():
exit_not_cron()
else:
raise Exception('Job inconnu {0}'.format(job['job']))
+ except SystemExit:
+ raise
except:
pass
run_runparts('daily', 'pre')
#6 Mis à jour par Benjamin Bohard il y a presque 14 ans
- Statut changé de Nouveau à Fermé
La résolution de la demande liée devrait répondre également à cette demande.