hadoop-yarn-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hong Zhiguo (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (YARN-6319) race condition between deleting app dir and deleting container dir
Date Tue, 14 Mar 2017 09:37:41 GMT

    [ https://issues.apache.org/jira/browse/YARN-6319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15923881#comment-15923881

Hong Zhiguo commented on YARN-6319:

The "app dir cleanup" is triggered in ApplicationImpl.AppFinishTriggeredTransition or ApplicationImpl.AppFinishTransition.
There's pre-condition that all container dirs are cleaned up.
if (app.containers.isEmpty()) {
        // No container to cleanup. Cleanup app level resources.
        return ApplicationState.APPLICATION_RESOURCES_CLEANINGUP;

But this doesn't work. Because in ResourceLocalizationService.handleCleanupContainerResources,
only async "container dir cleanup" is triggered, and then CONTAINER_RESOURCES_CLEANEDUP event
is sent out, which then leads to ApplicationImpl.AppFinishTransition and ApplicationImpl.containers.Remove(...).
So ApplicationImpl.containers could be empty but  "container dir cleanup"  is still in fly.

> race condition between deleting app dir and deleting container dir
> ------------------------------------------------------------------
>                 Key: YARN-6319
>                 URL: https://issues.apache.org/jira/browse/YARN-6319
>             Project: Hadoop YARN
>          Issue Type: Bug
>          Components: nodemanager
>            Reporter: Hong Zhiguo
>            Assignee: Hong Zhiguo
> Last container (on one node) of one app complete
>     |    --> triggers async deletion of container dir (container cleanup)
>     |    --> triggers async deletion of app dir (app cleanup)
> For LCE, deletion is done by container-executor. The "app cleanup" lists sub-dir (step
1), and then unlink items one by one(step 2).   If a file is deleted by "container cleanup"
between step 1 and step2, it'll report below error and breaks the deletion.
> {code}
> ContainerExecutor: Couldn't delete file $LOCAL/usercache/$USER/appcache/application_1481785469354_353539/container_1481785469354_353539_01_000028/$FILE
- No such file or directory
> {code}
> This app dir then escape the cleanup. And that's why we always have many app dirs left
> solution 1: just ignore the error without breaking in container-executor.c::delete_path()
> solution 2: use a lock to serialize the cleanup of same app dir.
> solution 3: backoff and retry on error
> Comments are welcome.

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org

View raw message