]
Eduardo Martins commented on WFLY-11328:
----------------------------------------
I don't really like the idea of aborting threads and after digging in EE Concurrency
RI I found that checking a thread status wrt this threshold param locks the thread, so I
don't really like the idea of using its functionality in short periods either. I see
two resolutions for this JIRA:
a) Forget about the RI functionality, i.e. remove the related configuration params and
update docs
b) Implement a non intrusive periodic check (at least 1 minute) that just logs if threads
are considered hung, and/or a management op that does the same on demand
One thing I also discovered is that hung task threshold param is delegated to the thread
factory used by the executor, which means that if an executor shares a factory, the
default config that plugs the default managed thread factory in the executor, the last
executor created overrides older ones configs.
EE Concurency Utilities "hung-task-threshold" /
"long-running-tasks" do not work and are not implemented as explained
---------------------------------------------------------------------------------------------------------------------
Key: WFLY-11328
URL:
https://issues.jboss.org/browse/WFLY-11328
Project: WildFly
Issue Type: Bug
Components: EE
Reporter: Jiri Ondrusek
Assignee: Jiri Ondrusek
Priority: Major
ee subsystem parameters "hung-task-threshold" and
"long-running-tasks" for managed-executor-service /
managed-scheduled-executor-service do not work and are not implemented as described in
[EAP 7 Development
Guide|https://access.redhat.com/documentation/en-us/red_hat_jboss_enterpr...]:
- hung-task-threshold: Defines the time, in milliseconds, after which tasks are
considered hung by the managed executor service and forcefully aborted. If the value is 0
(which is the default), tasks are never considered hung.
- long-running-tasks: Suggests optimizing the execution of long running tasks, and
defaults to false.
I tested with [EAP 7 QuickStarts managed-executor-service
example|https://github.com/jboss-developer/jboss-eap-quickstarts/tree/7.0...]
but these paremeters doe not take any effect:
- tasks exceeding hung-task-threshold are never forcefully aborted. And there's no
way to detect hung tasks exceeding hung-task-threshold.
- setting long-running-tasks to true does not change the behavior.
As far as I checked the source code, I noticed the following:
- EAP 7.x uses the EE Concurency Utilities RI
[
org.glassfish.enterprise.concurrent|https://github.com/javaee/cu-ri] internally and just
passes the paramters to the RI.
- In the EE Concurency Utilities RI, these parameters are used in the methods
[ManagedThreadFactoryImpl#isTaskHung(long
now)|https://github.com/javaee/cu-ri/blob/master/src/main/java/org/glassf...],
[
AbstractManagedExecutorService#getHungThreads()|https://github.com/javaee...]
and
[
AbstractManagedExecutorService#isLongRunningTasks()|https://github.com/ja...]
(AbstractManagedExecutorService is the parent class of ManagedExecutorServiceImpl /
ManagedScheduledExecutorServiceImpl).
- However, these methods are never invoked from EAP 7.x. So, these parameters do not
take any effect in EAP 7.x.
- In addition, even if these methods are used, it looks the implementation is totally
different from the description in the documentation. The parameter
"long-running-tasks" is just used as a flag to skip from checking hung thread
detection. And the parameter "hung-task-threshold" never forcefully abort the
hung thread exceeding the threshold.