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
Related issues
Associated revisions
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
History
#1 Updated by Yoni Baude over 11 years ago
- Target version set to 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 Updated by Daniel Dehennin over 11 years ago
- Target version changed from Mises à jour 2.3.4 RC to Mises à jour 2.3.5 RC
Pour un bacula/eole-schedule master
#3 Updated by Emmanuel GARETTE over 11 years ago
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 Updated by Emmanuel GARETTE over 11 years ago
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 Updated by Benjamin Bohard over 11 years ago
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 Updated by Benjamin Bohard over 11 years ago
- Status changed from Nouveau to Fermé
La résolution de la demande liée devrait répondre également à cette demande.