Author: jacopoc
Date: Tue Jan 27 14:04:56 2015
New Revision: 1655047
URL: http://svn.apache.org/r1655047
Log:
Applied fix from trunk for revision: 1655046
===
Moved out from JobManager.getInstance the call to reloadCrashedJobs because it
was causing a deadlock issue at bootstrap when an eca rule of type "validate"
is defined on the JobSandbox entity.
At bootstrap an eca definition like the following:
<eca entity="JobSandbox" operation="store" event="validate">
<action service="ping" mode="sync"/>
</eca>
is causing a deadlock because it is triggered at startup when the
reloadCrashedJobs method is executed; reloadCrashedJobs is executed holding a
lock on the JobManager object; within this method a "find" operation is
performed that (because of the "validate" event) triggers the action; but for
this a getDispatchContext is executed and this blocks until the task (executed
by a thread Executor) that reads and setups the eca rules is complete; but this
task requires a lock on the same JobManager object and thus we get the deadlock
Thanks to Arun Patidar and Deepak Dixit for analyzing the issue with me.
Modified:
ofbiz/branches/release14.12/ (props changed)
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobManager.java
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobPoller.java
Propchange: ofbiz/branches/release14.12/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 27 14:04:56 2015
@@ -8,4 +8,4 @@
/ofbiz/branches/json-integration-refactoring:1634077-1635900
/ofbiz/branches/multitenant20100310:921280-927264
/ofbiz/branches/release13.07:1547657
-/ofbiz/trunk:1649393,1649742,1650240,1650583,1650642,1650678,1650882,1650887,1650938,1651593,1652361,1652706,1652725,1652731,1652739,1653248,1653456,1654175,1654273
+/ofbiz/trunk:1649393,1649742,1650240,1650583,1650642,1650678,1650882,1650887,1650938,1651593,1652361,1652706,1652725,1652731,1652739,1653248,1653456,1654175,1654273,1655046
Modified:
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobManager.java
URL:
http://svn.apache.org/viewvc/ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobManager.java?rev=1655047&r1=1655046&r2=1655047&view=diff
==============================================================================
---
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobManager.java
(original)
+++
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobManager.java
Tue Jan 27 14:04:56 2015
@@ -94,7 +94,6 @@ public final class JobManager {
registeredManagers.putIfAbsent(delegator.getDelegatorName(), jm);
jm = registeredManagers.get(delegator.getDelegatorName());
if (enablePoller) {
- jm.reloadCrashedJobs();
JobPoller.registerJobManager(jm);
}
}
@@ -280,7 +279,7 @@ public final class JobManager {
return poll;
}
- private synchronized void reloadCrashedJobs() {
+ public synchronized void reloadCrashedJobs() {
assertIsRunning();
if (crashedJobsReloaded) {
return;
Modified:
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobPoller.java
URL:
http://svn.apache.org/viewvc/ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobPoller.java?rev=1655047&r1=1655046&r2=1655047&view=diff
==============================================================================
---
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobPoller.java
(original)
+++
ofbiz/branches/release14.12/framework/service/src/org/ofbiz/service/job/JobPoller.java
Tue Jan 27 14:04:56 2015
@@ -220,6 +220,7 @@ public final class JobPoller implements
Collection<JobManager> jmCollection =
jobManagers.values();
List<Iterator<Job>> pollResults = new
ArrayList<Iterator<Job>>();
for (JobManager jm : jmCollection) {
+ jm.reloadCrashedJobs();
pollResults.add(jm.poll(remainingCapacity).iterator());
}
// Create queue candidate list from "list of lists"