Projet

Général

Profil

Anomalie #3138

Interblocage entre sauvegarde et mise à jour

Ajouté par Yoni Baude il y a environ 12 ans. Mis à jour il y a presque 12 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Début:
22/03/2012
Echéance:
% réalisé:

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


Demandes liées

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

Révisions associées

Révision fc5bc457 (diff)
Ajouté par Benjamin Bohard il y a presque 12 ans

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

Révision e4b4544a (diff)
Ajouté par Benjamin Bohard il y a presque 12 ans

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

Révision abcaf3d0 (diff)
Ajouté par Johan Cwiklinski il y a environ 6 ans

Quote escaping; fixes #3138

Historique

#1 Mis à jour par Yoni Baude il y a environ 12 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 environ 12 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 environ 12 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 environ 12 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 environ 12 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 12 ans

  • Statut changé de Nouveau à Fermé

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

Formats disponibles : Atom PDF