Uploaded image for project: 'jBPM'
  1. jBPM
  2. JBPM-2797

Bug in LockMonitor unlocks EVERY Job, not only overdue ones

    Details

      Description

      The LockMonitorThread has a really huge bug.

      It queries all jobs with overdue lock time:
      Date threshold = new Date(System.currentTimeMillis() - maxLockTime - lockBufferTime);
      List overdueJobs = jbpmContext.getJobSession().findJobsWithOverdueLockTime(threshold);

      by this query:

      <query name="JobSession.findJobsWithOverdueLockTime">
      select job
      from org.jbpm.job.Job as job
      where job.lockTime > :threshold
      </query>

      This finds all jobs with a lock timer NEWER than the treshold, not OLDER as it should be. So the query must be:

      <query name="JobSession.findJobsWithOverdueLockTime">
      select job
      from org.jbpm.job.Job as job
      where job.lockTime < :threshold
      </query>

      So if a job runs exactly at the time the LockMonitorThread comes active, this leads to a StaleObjectException in the JobExecution. Since the LockMonitorThread runs only every minute, this is a pretty rare case. The more puzzling it was to find Surprising, that it wasn't recognized that long!

      I commit the changed query to HEAD.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  aguizar Alejandro Guizar
                  Reporter:
                  camunda Bernd Ruecker
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  1 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: