You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2018/03/13 05:42:20 UTC

[1/5] mesos git commit: Validated Docker info exists when container's type is DOCKER.

Repository: mesos
Updated Branches:
  refs/heads/master 56843f3b9 -> 92e831eea


Validated Docker info exists when container's type is DOCKER.

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


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

Branch: refs/heads/master
Commit: be2ce4c732cc9dedc38b45f9459cad5e1a130afb
Parents: 56843f3
Author: Qian Zhang <zh...@gmail.com>
Authored: Mon Mar 12 19:54:05 2018 -0700
Committer: Gilbert Song <so...@gmail.com>
Committed: Mon Mar 12 22:40:59 2018 -0700

----------------------------------------------------------------------
 src/common/validation.cpp | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/be2ce4c7/src/common/validation.cpp
----------------------------------------------------------------------
diff --git a/src/common/validation.cpp b/src/common/validation.cpp
index bad9ea8..ff114d7 100644
--- a/src/common/validation.cpp
+++ b/src/common/validation.cpp
@@ -268,6 +268,13 @@ Option<Error> validateContainerInfo(const ContainerInfo& containerInfo)
     }
   }
 
+  if (containerInfo.type() == ContainerInfo::DOCKER) {
+    if (!containerInfo.has_docker()) {
+      return Error(
+          "DockerInfo 'docker' is not set for DOCKER typed ContainerInfo");
+    }
+  }
+
   return None();
 }
 


[4/5] mesos git commit: Made sure no `name` parameter exists in container's Docker info.

Posted by gi...@apache.org.
Made sure no `name` parameter exists in container's Docker info.

Setting `name` parameter in container's Docker info will cause Docker
containerizer cannot recognize the created Docker container, see
MESOS-8497 for details. So this patch disallows that during validation
stage.

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


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

Branch: refs/heads/master
Commit: 3d147f01395c057ee9bc21cd85579a2c8f031a18
Parents: ac844a6
Author: Qian Zhang <zh...@gmail.com>
Authored: Mon Mar 12 19:54:30 2018 -0700
Committer: Gilbert Song <so...@gmail.com>
Committed: Mon Mar 12 22:41:12 2018 -0700

----------------------------------------------------------------------
 src/common/validation.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/3d147f01/src/common/validation.cpp
----------------------------------------------------------------------
diff --git a/src/common/validation.cpp b/src/common/validation.cpp
index ff114d7..74450df 100644
--- a/src/common/validation.cpp
+++ b/src/common/validation.cpp
@@ -273,6 +273,17 @@ Option<Error> validateContainerInfo(const ContainerInfo& containerInfo)
       return Error(
           "DockerInfo 'docker' is not set for DOCKER typed ContainerInfo");
     }
+
+    // We do not support setting `name` parameter in Docker info because
+    // Docker containerizer has its own way to name the Docker container,
+    // otherwise Docker containerizer will not be able to recognize the
+    // created container, see MESOS-8497 for details.
+    foreach (const Parameter& parameter,
+             containerInfo.docker().parameters()) {
+      if (parameter.key() == "name") {
+        return Error("Parameter in DockerInfo must not be 'name'");
+      }
+    }
   }
 
   return None();


[5/5] mesos git commit: Added a test `TaskValidationTest.TaskSettingDockerContainerName`.

Posted by gi...@apache.org.
Added a test `TaskValidationTest.TaskSettingDockerContainerName`.

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


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

Branch: refs/heads/master
Commit: 92e831eea009f767a7040aec0c377591b72a8d11
Parents: 3d147f0
Author: Qian Zhang <zh...@gmail.com>
Authored: Mon Mar 12 19:54:36 2018 -0700
Committer: Gilbert Song <so...@gmail.com>
Committed: Mon Mar 12 22:41:18 2018 -0700

----------------------------------------------------------------------
 src/tests/master_validation_tests.cpp | 56 ++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/92e831ee/src/tests/master_validation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_validation_tests.cpp b/src/tests/master_validation_tests.cpp
index 799da62..efdd44d 100644
--- a/src/tests/master_validation_tests.cpp
+++ b/src/tests/master_validation_tests.cpp
@@ -2825,6 +2825,62 @@ TEST_F(TaskValidationTest, TaskMissingDockerInfo)
   driver.join();
 }
 
+
+// This test verifies that a task that has `name` parameter set
+// in `DockerInfo` is rejected during `TaskInfo` validation.
+TEST_F(TaskValidationTest, TaskSettingDockerParameterName)
+{
+  Try<Owned<cluster::Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
+  ASSERT_SOME(slave);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<vector<Offer>> offers;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers))
+    .WillRepeatedly(Return()); // Ignore subsequent offers.
+
+  driver.start();
+
+  AWAIT_READY(offers);
+  ASSERT_FALSE(offers->empty());
+
+  Future<TaskStatus> status;
+  EXPECT_CALL(sched, statusUpdate(&driver, _))
+    .WillOnce(FutureArg<1>(&status));
+
+  // Create an invalid task that has `name` parameter set in `DockerInfo`.
+  TaskInfo task = createTask(offers.get()[0], "exit 0");
+  task.mutable_container()->set_type(ContainerInfo::DOCKER);
+  task.mutable_container()->mutable_docker()->set_image("alpine");
+
+  Parameter* parameter =
+      task.mutable_container()->mutable_docker()->add_parameters();
+
+  parameter->set_key("name");
+  parameter->set_value("test");
+
+  driver.launchTasks(offers.get()[0].id(), {task});
+
+  AWAIT_READY(status);
+  EXPECT_EQ(TASK_ERROR, status->state());
+  EXPECT_EQ(
+      "Task's `ContainerInfo` is invalid: "
+      "Parameter in DockerInfo must not be 'name'",
+      status->message());
+
+  driver.stop();
+  driver.join();
+}
+
 // TODO(jieyu): Add tests for checking duplicated persistence ID
 // against offered resources.
 


[2/5] mesos git commit: Added a test `TaskValidationTest.TaskMissingDockerInfo`.

Posted by gi...@apache.org.
Added a test `TaskValidationTest.TaskMissingDockerInfo`.

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


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

Branch: refs/heads/master
Commit: ac844a68c1947274c820d0e176795e66863d5a22
Parents: e7cb1d9
Author: Qian Zhang <zh...@gmail.com>
Authored: Mon Mar 12 19:54:21 2018 -0700
Committer: Gilbert Song <so...@gmail.com>
Committed: Mon Mar 12 22:41:05 2018 -0700

----------------------------------------------------------------------
 src/tests/master_validation_tests.cpp | 50 ++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/ac844a68/src/tests/master_validation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_validation_tests.cpp b/src/tests/master_validation_tests.cpp
index 53cc3ed..799da62 100644
--- a/src/tests/master_validation_tests.cpp
+++ b/src/tests/master_validation_tests.cpp
@@ -2775,6 +2775,56 @@ TEST_F(TaskValidationTest, TaskEnvironmentInvalid)
   driver.join();
 }
 
+
+// This test verifies that a task that has `ContainerInfo` set as DOCKER
+// but has no `DockerInfo` is rejected during `TaskInfo` validation.
+TEST_F(TaskValidationTest, TaskMissingDockerInfo)
+{
+  Try<Owned<cluster::Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
+  ASSERT_SOME(slave);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<vector<Offer>> offers;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers))
+    .WillRepeatedly(Return()); // Ignore subsequent offers.
+
+  driver.start();
+
+  AWAIT_READY(offers);
+  ASSERT_FALSE(offers->empty());
+
+  Future<TaskStatus> status;
+  EXPECT_CALL(sched, statusUpdate(&driver, _))
+    .WillOnce(FutureArg<1>(&status));
+
+  // Create an invalid task that has `ContainerInfo` set
+  // as DOCKER but has no `DockerInfo`.
+  TaskInfo task = createTask(offers.get()[0], "exit 0");
+  task.mutable_container()->set_type(ContainerInfo::DOCKER);
+
+  driver.launchTasks(offers.get()[0].id(), {task});
+
+  AWAIT_READY(status);
+  EXPECT_EQ(TASK_ERROR, status->state());
+  EXPECT_EQ(
+      "Task's `ContainerInfo` is invalid: "
+      "DockerInfo 'docker' is not set for DOCKER typed ContainerInfo",
+      status->message());
+
+  driver.stop();
+  driver.join();
+}
+
 // TODO(jieyu): Add tests for checking duplicated persistence ID
 // against offered resources.
 


[3/5] mesos git commit: Set Docker info for the test `TaskUsesDockerContainerInfo`.

Posted by gi...@apache.org.
Set Docker info for the test `TaskUsesDockerContainerInfo`.

Docker info is required when container's type is DOCKER, it is enforced
in `mesos::internal::common::validation:validateContainerInfo()`. So in
this test, we have to set Docker info to pass the validation.

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


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

Branch: refs/heads/master
Commit: e7cb1d9bd0ee040b8ab7873f0770bb4f014b7f5c
Parents: be2ce4c
Author: Qian Zhang <zh...@gmail.com>
Authored: Mon Mar 12 19:54:14 2018 -0700
Committer: Gilbert Song <so...@gmail.com>
Committed: Mon Mar 12 22:41:05 2018 -0700

----------------------------------------------------------------------
 src/tests/master_validation_tests.cpp | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/e7cb1d9b/src/tests/master_validation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_validation_tests.cpp b/src/tests/master_validation_tests.cpp
index 77ec7fb..53cc3ed 100644
--- a/src/tests/master_validation_tests.cpp
+++ b/src/tests/master_validation_tests.cpp
@@ -3385,6 +3385,7 @@ TEST_F(TaskGroupValidationTest, TaskUsesDockerContainerInfo)
   task1.mutable_slave_id()->MergeFrom(offer.slave_id());
   task1.mutable_resources()->MergeFrom(resources);
   task1.mutable_container()->set_type(ContainerInfo::DOCKER);
+  task1.mutable_container()->mutable_docker()->set_image("alpine");
 
   // Create a valid task.
   TaskInfo task2;