Jie Yu created MESOS-2398:
-----------------------------
Summary: Destroying PREPARING container in Mesos containerizer is
buggy
Key: MESOS-2398
URL: https://issues.apache.org/jira/browse/MESOS-2398
Project: Mesos
Issue Type: Bug
Affects Versions: 0.22.0
Reporter: Jie Yu
This regression is introduced in
https://reviews.apache.org/r/28141/
{code}
923 void MesosContainerizerProcess::destroy(const ContainerID& containerId)
...
936
937 LOG(INFO) << "Destroying container '" << containerId << "'";
938
939 if (container->state == PREPARING) {
940 // We cannot simply terminate the container if it's preparing
941 // since isolator's prepare doesn't need any cleanup.
942 containerizer::Termination termination;
943 termination.set_killed(true);
944 termination.set_message("Container destroyed while preparing
isolators");
945 container->promise.set(termination);
946
947 containers_.erase(containerId);
948
949 return;
950 }
...
{code}
In the PREPARING case, isolator->prepare() might be called already.
Looking at our isolators, looks like we usually create an Info struct when
prepare is called and delete the Info struct in cleanup. The shortcut here
could cause a leak of this data structure. This is problematic because the port
mapping isolator will run out of ephemeral ports because of this.
Also, the comment is not accurate. I don't see any comments in the public
header of isolator.hpp saying that prepare does not need any cleanup.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)