You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by tn...@apache.org on 2016/10/27 14:49:12 UTC

[1/2] mesos git commit: Added name format validation for mesos managed docker containers.

Repository: mesos
Updated Branches:
  refs/heads/master 388bc4d08 -> 3758aa1c9


Added name format validation for mesos managed docker containers.

Review: https://reviews.apache.org/r/53047/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/3758aa1c
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/3758aa1c
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/3758aa1c

Branch: refs/heads/master
Commit: 3758aa1c95f2ab984b8f42db325d851798f24978
Parents: 9dfb30b
Author: Manuwela Kanade <ma...@gmail.com>
Authored: Wed Oct 26 22:30:34 2016 -0700
Committer: Timothy Chen <tn...@gmail.com>
Committed: Thu Oct 27 07:48:35 2016 -0700

----------------------------------------------------------------------
 src/slave/containerizer/docker.cpp              | 24 ++++--
 .../docker_containerizer_tests.cpp              | 83 ++++++++++++++++++++
 2 files changed, 100 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/3758aa1c/src/slave/containerizer/docker.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp
index 8ec4c0a..f720320 100644
--- a/src/slave/containerizer/docker.cpp
+++ b/src/slave/containerizer/docker.cpp
@@ -36,6 +36,7 @@
 #include <stout/hashset.hpp>
 #include <stout/jsonify.hpp>
 #include <stout/os.hpp>
+#include <stout/uuid.hpp>
 
 #include <stout/os/killtree.hpp>
 
@@ -96,6 +97,7 @@ const string DOCKER_SYMLINK_DIRECTORY = "docker/links";
 Option<ContainerID> parse(const Docker::Container& container)
 {
   Option<string> name = None();
+  Option<ContainerID> containerId = None();
 
   if (strings::startsWith(container.name, DOCKER_NAME_PREFIX)) {
     name = strings::remove(
@@ -116,18 +118,26 @@ Option<ContainerID> parse(const Docker::Container& container)
     if (!strings::contains(name.get(), DOCKER_NAME_SEPERATOR)) {
       ContainerID id;
       id.set_value(name.get());
-      return id;
+      containerId = id;
+    } else {
+      vector<string> parts = strings::split(name.get(), DOCKER_NAME_SEPERATOR);
+      if (parts.size() == 2 || parts.size() == 3) {
+        ContainerID id;
+        id.set_value(parts[1]);
+        containerId = id;
+      }
     }
 
-    vector<string> parts = strings::split(name.get(), DOCKER_NAME_SEPERATOR);
-    if (parts.size() == 2 || parts.size() == 3) {
-      ContainerID id;
-      id.set_value(parts[1]);
-      return id;
+    // Check if id is a valid UUID.
+    if (containerId.isSome()) {
+      Try<UUID> uuid = UUID::fromString(containerId.get().value());
+      if (uuid.isError()) {
+        return None();
+      }
     }
   }
 
-  return None();
+  return containerId;
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/3758aa1c/src/tests/containerizer/docker_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/docker_containerizer_tests.cpp b/src/tests/containerizer/docker_containerizer_tests.cpp
index 73ae390..a91bcad 100644
--- a/src/tests/containerizer/docker_containerizer_tests.cpp
+++ b/src/tests/containerizer/docker_containerizer_tests.cpp
@@ -1449,6 +1449,89 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SkipRecoverNonDocker)
 }
 
 
+// This test checks the docker containerizer doesn't recover containers
+// with malformed uuid.
+TEST_F(DockerContainerizerTest, ROOT_DOCKER_SkipRecoverMalformedUUID)
+{
+  MockDocker* mockDocker =
+    new MockDocker(tests::flags.docker, tests::flags.docker_socket);
+
+  Shared<Docker> docker(mockDocker);
+
+  slave::Flags flags = CreateSlaveFlags();
+  flags.docker_kill_orphans = true;
+
+  Fetcher fetcher;
+
+  Try<ContainerLogger*> logger =
+    ContainerLogger::create(flags.container_logger);
+
+  ASSERT_SOME(logger);
+
+  MockDockerContainerizer dockerContainerizer(
+      flags,
+      &fetcher,
+      Owned<ContainerLogger>(logger.get()),
+      docker);
+
+  SlaveID slaveId;
+  slaveId.set_value("s1");
+  ContainerID containerId;
+  containerId.set_value("malformedUUID");
+
+  string container = containerName(slaveId, containerId);
+
+  // Clean up container if it still exists.
+  ASSERT_TRUE(docker->rm(container, true).await(Seconds(30)));
+
+  Resources resources = Resources::parse("cpus:1;mem:512").get();
+  ContainerInfo containerInfo;
+  containerInfo.set_type(ContainerInfo::DOCKER);
+
+  // TODO(tnachen): Use local image to test if possible.
+  ContainerInfo::DockerInfo dockerInfo;
+  dockerInfo.set_image("alpine");
+  containerInfo.mutable_docker()->CopyFrom(dockerInfo);
+
+  CommandInfo commandInfo;
+  commandInfo.set_value("sleep 1000");
+
+  Future<Option<int>> run =
+    docker->run(
+        containerInfo,
+        commandInfo,
+        container,
+        flags.work_dir,
+        flags.sandbox_directory,
+        resources);
+
+  ASSERT_TRUE(
+    exists(docker, slaveId, containerId, ContainerState::RUNNING));
+
+  SlaveState slaveState;
+  slaveState.id = slaveId;
+  FrameworkState frameworkState;
+
+  ExecutorID execId;
+  execId.set_value("e1");
+
+  ExecutorState execState;
+  ExecutorInfo execInfo;
+  execState.info = execInfo;
+
+  FrameworkID frameworkId;
+  frameworkState.executors.put(execId, execState);
+  slaveState.frameworks.put(frameworkId, frameworkState);
+
+  Future<Nothing> recover = dockerContainerizer.recover(slaveState);
+  AWAIT_READY(recover);
+
+  // The container should still exist and should not get killed
+  // by containerizer recovery.
+  ASSERT_TRUE(exists(docker, slaveId, containerId));
+}
+
+
 #ifdef __linux__
 // This test verifies that we can launch a docker container with
 // persistent volume.


[2/2] mesos git commit: Adding fromString test in UUIDTest testcase.

Posted by tn...@apache.org.
Adding fromString test in UUIDTest testcase.

Review: https://reviews.apache.org/r/53128/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9dfb30bb
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9dfb30bb
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9dfb30bb

Branch: refs/heads/master
Commit: 9dfb30bb4e22a00edf2db560a95c8f97024f6075
Parents: 388bc4d
Author: Manuwela Kanade <ma...@gmail.com>
Authored: Wed Oct 26 22:21:00 2016 -0700
Committer: Timothy Chen <tn...@gmail.com>
Committed: Thu Oct 27 07:48:35 2016 -0700

----------------------------------------------------------------------
 3rdparty/stout/tests/uuid_tests.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/9dfb30bb/3rdparty/stout/tests/uuid_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/stout/tests/uuid_tests.cpp b/3rdparty/stout/tests/uuid_tests.cpp
index fe9894a..1fbd623 100644
--- a/3rdparty/stout/tests/uuid_tests.cpp
+++ b/3rdparty/stout/tests/uuid_tests.cpp
@@ -60,6 +60,6 @@ TEST(UUIDTest, MalformedUUID)
   EXPECT_SOME(UUID::fromBytes(UUID::random().toBytes()));
   EXPECT_ERROR(UUID::fromBytes("malformed-uuid"));
   EXPECT_ERROR(UUID::fromBytes("invalidstringmsg"));
-
+  EXPECT_SOME(UUID::fromString(UUID::random().toString()));
   EXPECT_ERROR(UUID::fromString("malformed-uuid"));
 }