You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2016/09/28 05:12:39 UTC
mesos git commit: Removed 'directory' in nested container launch
interface.
Repository: mesos
Updated Branches:
refs/heads/master bb6527029 -> af5723034
Removed 'directory' in nested container launch interface.
In this patch, the containerizer launch method for nested containers
should be responsible for figuring out the sandbox directory for the
nested container. So we can avoid passing an extra parameter to the
nested launch interface, and there is no need for the agent to figure
out the nested sandbox.
Review: https://reviews.apache.org/r/52334/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/af572303
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/af572303
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/af572303
Branch: refs/heads/master
Commit: af5723034a962f000ab3e6050fd52ebbe083cb4b
Parents: bb65270
Author: Gilbert Song <so...@gmail.com>
Authored: Tue Sep 27 22:10:57 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Sep 27 22:12:33 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/containerizer.hpp | 1 -
src/slave/containerizer/mesos/containerizer.cpp | 43 ++++++++++++++++++--
src/slave/containerizer/mesos/containerizer.hpp | 2 -
src/slave/http.cpp | 1 -
src/tests/api_tests.cpp | 2 +-
src/tests/containerizer/mock_containerizer.hpp | 3 +-
6 files changed, 41 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/slave/containerizer/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/containerizer.hpp b/src/slave/containerizer/containerizer.hpp
index 5f8901f..7554446 100644
--- a/src/slave/containerizer/containerizer.hpp
+++ b/src/slave/containerizer/containerizer.hpp
@@ -99,7 +99,6 @@ public:
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const std::string& directory,
const Option<std::string>& user,
const SlaveID& slaveId)
{
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 11cc8ba..d38de1f 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -500,7 +500,6 @@ Future<bool> MesosContainerizer::launch(
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const string& directory,
const Option<string>& user,
const SlaveID& slaveId)
{
@@ -509,7 +508,6 @@ Future<bool> MesosContainerizer::launch(
const ContainerID&,
const CommandInfo&,
const Option<ContainerInfo>&,
- const string&,
const Option<string>&,
const SlaveID&) = &MesosContainerizerProcess::launch;
@@ -518,7 +516,6 @@ Future<bool> MesosContainerizer::launch(
containerId,
commandInfo,
containerInfo,
- directory,
user,
slaveId);
}
@@ -1004,6 +1001,7 @@ Future<bool> MesosContainerizerProcess::launch(
container->state = PROVISIONING;
container->config = containerConfig;
container->resources = containerConfig.resources();
+ container->directory = containerConfig.directory();
// Maintain the 'children' list in the parent's 'Container' struct,
// which will be used for recursive destroy.
@@ -1402,7 +1400,9 @@ Future<bool> MesosContainerizerProcess::_launch(
if (forked.isError()) {
return Failure("Failed to fork: " + forked.error());
}
+
pid_t pid = forked.get();
+ container->pid = pid;
// Checkpoint the forked pid if requested by the agent.
if (checkpoint) {
@@ -1546,7 +1546,6 @@ Future<bool> MesosContainerizerProcess::launch(
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const string& directory,
const Option<string>& user,
const SlaveID& slaveId)
{
@@ -1572,6 +1571,42 @@ Future<bool> MesosContainerizerProcess::launch(
LOG(INFO) << "Starting nested container " << containerId;
+ const ContainerID rootContainerId = getRootContainerId(containerId);
+
+ CHECK(containers_.contains(rootContainerId));
+ if (containers_[rootContainerId]->directory.isNone()) {
+ return Failure(
+ "Unexpected empty sandbox directory for root container " +
+ stringify(rootContainerId));
+ }
+
+ const string directory = containerizer::paths::getSandboxPath(
+ containers_[rootContainerId]->directory.get(),
+ containerId);
+
+ Try<Nothing> mkdir = os::mkdir(directory);
+ if (mkdir.isError()) {
+ return Failure(
+ "Failed to create nested sandbox directory '" +
+ directory + "': " + mkdir.error());
+ }
+
+#ifndef __WINDOWS__
+ if (user.isSome()) {
+ LOG(INFO) << "Trying to chown '" << directory << "' to user '"
+ << user.get() << "'";
+
+ Try<Nothing> chown = os::chown(user.get(), directory);
+ if (chown.isError()) {
+ LOG(WARNING) << "Failed to chown sandbox directory '" << directory
+ << "'. This may be due to attempting to run the container "
+ << "as a nonexistent user on the agent; see the description"
+ << " for the `--switch_user` flag for more information: "
+ << chown.error();
+ }
+ }
+#endif // __WINDOWS__
+
ContainerConfig containerConfig;
containerConfig.mutable_command_info()->CopyFrom(commandInfo);
containerConfig.set_directory(directory);
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index 83cd53e..c542902 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -90,7 +90,6 @@ public:
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const std::string& directory,
const Option<std::string>& user,
const SlaveID& slaveId);
@@ -157,7 +156,6 @@ public:
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const std::string& directory,
const Option<std::string>& user,
const SlaveID& slaveId);
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index f1edf97..ff750e2 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -1933,7 +1933,6 @@ Future<Response> Slave::Http::launchNestedContainer(
call.launch_nested_container().has_container()
? call.launch_nested_container().container()
: Option<ContainerInfo>::none(),
- os::temp(),
None(),
slave->info.id());
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/tests/api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/api_tests.cpp b/src/tests/api_tests.cpp
index 2a0ca9d..3ec4421 100644
--- a/src/tests/api_tests.cpp
+++ b/src/tests/api_tests.cpp
@@ -3452,7 +3452,7 @@ TEST_P(AgentAPITest, NestedContainerLaunch)
containerId.mutable_parent()->set_value(UUID::random().toString());
{
- EXPECT_CALL(mockContainerizer, launch(_, _, _, _, _, _))
+ EXPECT_CALL(mockContainerizer, launch(_, _, _, _, _))
.WillOnce(Return(Future<bool>(true)));
v1::agent::Call call;
http://git-wip-us.apache.org/repos/asf/mesos/blob/af572303/src/tests/containerizer/mock_containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/mock_containerizer.hpp b/src/tests/containerizer/mock_containerizer.hpp
index 204fa2a..319b5c3 100644
--- a/src/tests/containerizer/mock_containerizer.hpp
+++ b/src/tests/containerizer/mock_containerizer.hpp
@@ -57,13 +57,12 @@ public:
const std::map<std::string, std::string>&,
bool));
- MOCK_METHOD6(
+ MOCK_METHOD5(
launch,
process::Future<bool>(
const ContainerID& containerId,
const CommandInfo& commandInfo,
const Option<ContainerInfo>& containerInfo,
- const std::string& directory,
const Option<std::string>& user,
const SlaveID& slaveId));