[
https://issues.apache.org/jira/browse/HADOOP-15372?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Akira Ajisaka updated HADOOP-15372:
-----------------------------------
Description:
YARN-5641 introduced some cleanup code in the Shell class. It has a race
condition. {{Shell.runCommand()}} can be called while/after
{{Shell.getAllShells()}} returned all the shells to be cleaned up. This new
thread can avoid the clean up, so that the process held by it can be leaked
causing leaked localized files/etc.
I see another issue as well. {{Shell.runCommand()}} has a finally block with a
{{process.destroy();}} to clean up. However, the try catch block does not cover
all instructions after the process is started, so for example we can exit the
thread and leak the process, if {{timeOutTimer.schedule(timeoutTimerTask,
timeOutInterval);}} causes an exception.
was:
YARN-5641 introduced some cleanup code in the Shell class. It has a race
condition. {{Shell.
runCommand()}} can be called while/after {{Shell.getAllShells()}} returned all
the shells to be cleaned up. This new thread can avoid the clean up, so that
the process held by it can be leaked causing leaked localized files/etc.
I see another issue as well. {{Shell.runCommand()}} has a finally block with a
{{
process.destroy();}} to clean up. However, the try catch block does not cover
all instructions after the process is started, so for example we can exit the
thread and leak the process, if {{
timeOutTimer.schedule(timeoutTimerTask, timeOutInterval);}} causes an exception.
> Race conditions and possible leaks in the Shell class
> -----------------------------------------------------
>
> Key: HADOOP-15372
> URL: https://issues.apache.org/jira/browse/HADOOP-15372
> Project: Hadoop Common
> Issue Type: Bug
> Affects Versions: 2.10.0, 3.2.0
> Reporter: Miklos Szegedi
> Assignee: Eric Badger
> Priority: Minor
> Attachments: HADOOP-15372.001.patch
>
>
> YARN-5641 introduced some cleanup code in the Shell class. It has a race
> condition. {{Shell.runCommand()}} can be called while/after
> {{Shell.getAllShells()}} returned all the shells to be cleaned up. This new
> thread can avoid the clean up, so that the process held by it can be leaked
> causing leaked localized files/etc.
> I see another issue as well. {{Shell.runCommand()}} has a finally block with
> a {{process.destroy();}} to clean up. However, the try catch block does not
> cover all instructions after the process is started, so for example we can
> exit the thread and leak the process, if
> {{timeOutTimer.schedule(timeoutTimerTask, timeOutInterval);}} causes an
> exception.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]