Image du projet 'Socle K-Sup' téléversée
  1. Socle K-Sup
  2. CORE-1982

La méthode vetoJobExecution dit toujours oui

    XMLWordImprimable

    Informations

    • Type: Bug
    • Etat: Résolu
    • Priorité: Majeur
    • Résolution: Résolu
    • Affecte la/les version(s): 6.02.31
    • Version(s) corrigée(s): 6.02.33
    • Composants: Aucune
    • Etiquettes:
      Aucune

      Description

      Dans la classe BatchTriggerListner, l'implémentation de la méthode vetoJobExecution est un peu laxiste...

      La méthode met en pause tous les trigger puis autorise l'exécution du job.
      Or dans un environnement clusterisé, on peut se retrouver sur deux membres différents avec un appel "concurrent" à cette méthode, sur deux instances différentes (ce que ne peut pas prendre en compte le synchronized).

      De ce fait, la première instance sur la machine A appelle le vetoJobExecution de son scheduler. Une ligne est insérée dans la table QRTZ_PAUSED_TRIGGER_GRPS et le système autorise l'exécution du job (retour false). Si au même moment, le scheduler de la machine B exécute la même opération, il va tenté d'insérer une ligne dans la même table, ce qui provoque une erreur "Duplicate key" lors de l'insertion dans la base.
      L'exception SQL est attrapée et transformée en une JobPersistenceException (qui étend SchedulerException).
      Une fois remontée jusqu'au Listener, l'exception est attrapée et le système autorise le job à s'exécuter, alors qu'un job est déjà en cours sur un autre noeud.

      Un "return true" aprrès le catch me paraît important.

        Pièces jointes

          Activité

            Personnes

            • Responsable:
              frederic.rapin Frédéric RAPIN
              Rapporteur:
              frederic.rapin Frédéric RAPIN
            • Votes:
              0 Voter pour cette demande
              Gérer les observateurs:
              4 Commencer l'observation de cette demande

              Dates

              • Création:
                Mise à jour:
                Résolue: