Project

General

Profile

Anomalie #3138

Interblocage entre sauvegarde et mise à jour

Added by Yoni Baude over 10 years ago. Updated over 10 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
-
Category:
-
Start date:
03/22/2012
Due date:
% Done:

0%

Distribution:
EOLE 2.3

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

Related to creole - Anomalie #3378: un appel de sys.exit(0) dans un try n'est pas intercepté Fermé 04/24/2012

Associated revisions

Revision fc5bc457 (diff)
Added by Benjamin Bohard over 10 years ago

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

Revision e4b4544a (diff)
Added by Benjamin Bohard over 10 years ago

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

Revision abcaf3d0 (diff)
Added by Johan Cwiklinski over 4 years ago

Quote escaping; fixes #3138

History

#1 Updated by Yoni Baude over 10 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 10 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 10 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 10 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 10 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 10 years ago

  • Status changed from Nouveau to Fermé

La résolution de la demande liée devrait répondre également à cette demande.

Also available in: Atom PDF