[ https://issues.apache.org/jira/browse/MESOS-6414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15589394#comment-15589394 ]
Anindya Sinha commented on MESOS-6414: -------------------------------------- Let us assume a task is launched which creates a sub-cgroup through an external service. So, the cgroup hierarchy is something like: /sys/fs/cgroup/freezer/mesos/<mesos-cgroup>/<sub-cgroup> Say the task fails, so the container exits, and when launcher->destroy() is called, we do a recursive cgroups::get() to get all cgroups and we get absolute paths for both <mesos-cgroup> as well as <sub-cgroup>. And then the TasksKiller() is initiated for <mesos-cgroup> as well as <sub-cgroup> resulting in freeze(), thaw(), etc. for each of them in parallel, followed by a killed(). However, since the <sub-cgroup> is created by an external service, that service may do a cleanup of <sub-cgroup> without Mesos' knowledge. If that happens, any of the cleanup operations (freeze(), thaw(), etc) for the <sub-cgroup> may fail in the flow of TasksKiller() for the <sub-cgroup> (since the external service removed /sys/fs/cgroup/freezer/mesos/<mesos-cgroup>/<sub-cgroup> before Mesos could do a cleanup in TasksKiller). As a result, we exit out of cleanup of <mesos-cgroup> at that point which seems incorrect since all cleanup has actually happened. To avoid this issue (ie. race of cleanup of <sub-cgroup> between the external service and Mesos), I am suggesting to treat failure in any of these steps as a failure for all cases except when the failure is due to non-existence of <sub-cgroup> (ie. it has already been cleaned up by an external service, so we treat this as a success). > Task cleanup fails when the containers includes cgroups not owned by Mesos > -------------------------------------------------------------------------- > > Key: MESOS-6414 > URL: https://issues.apache.org/jira/browse/MESOS-6414 > Project: Mesos > Issue Type: Bug > Components: cgroups > Reporter: Anindya Sinha > Assignee: Anindya Sinha > Priority: Minor > > If a mesos task is launched in a cgroup outside of the context of Mesos, > Mesos is unaware of that cgroup created in the task context. > Now when the Mesos task terminates: Mesos tries to cleanup all cgroups within > the top level cgroup it knows about. If the cgroup created in the task > context exists when LinuxLauncherProcess::destroy() is called but is > eventually cleaned up by the container before we do a freeze() or thaw() or > remove(), it fails at those stages leading to an incomplete cleanup of the > container. -- This message was sent by Atlassian JIRA (v6.3.4#6332)