JPPF Issue Tracker
star_faded.png
Please log in to bookmark issues
bug_report_small.png
CLOSED  Bug report JPPF-4  -  JPPFLeakPrevention causes job deserialization to fail
Posted Jul 28, 2012 - updated Feb 24, 2014
icon_info.png This issue has been closed with status "Closed" and resolution "WON'T FIX".
Issue details
  • Type of issue
    Bug report
  • Status
     
    Closed
  • Assigned to
     lolo4j
  • Progress
       
  • Type of bug
    Not triaged
  • Likelihood
    Not triaged
  • Effect
    Not triaged
  • Posted by
     lolo4j
  • Owned by
    Not owned by anyone
  • Category
    Node
  • Resolution
    WON'T FIX
  • Priority
    Low
  • Reproducability
    Always
  • Severity
    Normal
  • Targetted for
    icon_milestones.png JPPF 4.1
Issue description
When preventThread is enabled in the node, and with a class loader cache size set to 1, submitting a job from a second client instance causes the following stack trace in the log while the job is deserialized:
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@5fbfc2eb rejected from java.util.concurrent.ThreadPoolExecutor@26960369[Terminated, pool size = 3, active threads = 0, queued tasks = 0, completed tasks = 35]
  at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2013)
  at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:816)
  at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1337)
  at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
  at org.jppf.server.node.remote.JPPFRemoteContainer.deserializeObjects(JPPFRemoteContainer.java:90)
  at org.jppf.server.node.remote.RemoteNodeIO.deserializeObjects(RemoteNodeIO.java:95)
  at org.jppf.server.node.remote.RemoteNodeIO.deserializeObjects(RemoteNodeIO.java:75)
  at org.jppf.server.node.AbstractNodeIO.readObjects(AbstractNodeIO.java:114)
  at org.jppf.server.node.AbstractNodeIO.readTask(AbstractNodeIO.java:84)
  at org.jppf.server.node.JPPFNode.perform(JPPFNode.java:150)
  at org.jppf.server.node.JPPFNode.run(JPPFNode.java:119)
  at org.jppf.node.NodeRunner.main(NodeRunner.java:142)
Additionally, the following stack is shown in the node output at about the same time:
exception caught from thread Thread[node processing-thread-3,5,node processing thread group] :
java.lang.ThreadDeath
  at java.lang.Thread.stop(Thread.java:813)
  at org.jppf.classloader.JPPFLeakPrevention.clearThreads(JPPFLeakPrevention.java:221)
  at org.jppf.classloader.JPPFLeakPrevention.clearReferences(JPPFLeakPrevention.java:107)
  at org.jppf.classloader.AbstractJPPFClassLoaderLifeCycle.clearReferences(AbstractJPPFClassLoaderLifeCycle.java:205)
  at org.jppf.server.node.AbstractClassLoaderManager.getContainer(AbstractClassLoaderManager.java:139)
  at org.jppf.server.node.JPPFNode.getContainer(JPPFNode.java:307)
  at org.jppf.server.node.remote.RemoteNodeIO.deserializeObjects(RemoteNodeIO.java:93)
  at org.jppf.server.node.remote.RemoteNodeIO.deserializeObjects(RemoteNodeIO.java:75)
  at org.jppf.server.node.AbstractNodeIO.readObjects(AbstractNodeIO.java:114)
  at org.jppf.server.node.AbstractNodeIO.readTask(AbstractNodeIO.java:84)
  at org.jppf.server.node.JPPFNode.perform(JPPFNode.java:150)
  at org.jppf.server.node.JPPFNode.run(JPPFNode.java:119)
  at org.jppf.node.NodeRunner.main(NodeRunner.java:142)
Clearly JPPFLeakPrevention is stopping the threads that are deserializing the job and its tasks.<br/> For now, as a workaround, I have set all leak prevention flags by default.
Steps to reproduce this issue
  • Use 1 driver, 1 node with jppf.classloader.cache.size = 1
  • Submit a job with a JPPF client
  • Submit a 2nd job with a new JPPFClient instance (to create a new classloader in the node and evict the previous one)
  • ==> you get the exceptions mentioned in the description

#5
Comment posted by
 jandam
Jul 29, 14:52
Leak prevention clear threads including from JPPF thread managers.
#14
Comment posted by
 lolo4j
Feb 24, 20:39
Since this feature is not used anywhere, I will leave it undocumented and disabled by default and simply close this bug.