You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by "Junfan Zhang (Jira)" <ji...@apache.org> on 2022/01/17 09:39:00 UTC
[jira] [Updated] (OOZIE-3646) Possible dead-lock in SignalXCommand
[ https://issues.apache.org/jira/browse/OOZIE-3646?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Junfan Zhang updated OOZIE-3646:
--------------------------------
Attachment: OOZIE-3646.patch-2
> Possible dead-lock in SignalXCommand
> ------------------------------------
>
> Key: OOZIE-3646
> URL: https://issues.apache.org/jira/browse/OOZIE-3646
> Project: Oozie
> Issue Type: Bug
> Reporter: Junfan Zhang
> Assignee: Junfan Zhang
> Priority: Major
> Attachments: OOZIE-3646.patch-1, OOZIE-3646.patch-2, a1.png
>
>
> The limited thread execution mechanism aims to solve the dead-lock when all active threads are executing the SignalXCommand's invokeAll method.
> h2. Dead-lock when to happen
> Assuming that Oozie CallableQueue thread pool size is 120, when all threads are executing the {{SignalXCommand.startForkedActions}} method, a deadlock occurs.
> Because in {{SignalXCommand.startForkedActions}}, the code of
> {code:java}
> List<Future<ActionExecutorContext>> futures = Services.get().get(CallableQueueService.class)
> .invokeAll(tasks);
> {code}
> will be sync executed, however now all callableQueue threads are busy.
> h2. Solution
> 1. Need to limit directly invokeAll call when the num of rest threads is less than the tasks
> 2. To obtain correct active threads number in callableQueue, the SignalXCommand.class lock is needed.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)