You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2017/02/23 21:56:44 UTC

mesos git commit: Added allocation role to tasks/executors in v0 /state API.

Repository: mesos
Updated Branches:
  refs/heads/master eb3263af2 -> 2ee98b040


Added allocation role to tasks/executors in v0 /state API.

Added allocation role of tasks/executors to the /state v0 API. Unlike
v1 API where allocation_info is nested in each one of resources, we
add that information at task/executor level for v0 API since the JSON
format for resources cannot be extended to support allocation role.
Note that resources of one task/executor are guaranteed to have same
allocation role.

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


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

Branch: refs/heads/master
Commit: 2ee98b040927ec80371f1850717fe4add91b8b77
Parents: eb3263a
Author: Jay Guo <gu...@gmail.com>
Authored: Thu Feb 23 13:26:43 2017 -0800
Committer: Benjamin Mahler <bm...@apache.org>
Committed: Thu Feb 23 13:55:51 2017 -0800

----------------------------------------------------------------------
 src/common/http.cpp       | 14 ++++++++++++++
 src/master/http.cpp       | 11 +++++++++--
 src/slave/http.cpp        | 13 +++++++++++++
 src/tests/slave_tests.cpp | 16 ++++++++++++++--
 4 files changed, 50 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/2ee98b04/src/common/http.cpp
----------------------------------------------------------------------
diff --git a/src/common/http.cpp b/src/common/http.cpp
index abfbf72..5d75ecd 100644
--- a/src/common/http.cpp
+++ b/src/common/http.cpp
@@ -559,6 +559,15 @@ void json(JSON::ObjectWriter* writer, const ExecutorInfo& executorInfo)
   writer->field("command", executorInfo.command());
   writer->field("resources", Resources(executorInfo.resources()));
 
+  // Resources may be empty for command executors.
+  if (!executorInfo.resources().empty()) {
+    // Executors are not allowed to mix resources allocated to
+    // different roles, see MESOS-6636.
+    writer->field(
+        "role",
+        executorInfo.resources().begin()->allocation_info().role());
+  }
+
   if (executorInfo.has_labels()) {
     writer->field("labels", executorInfo.labels());
   }
@@ -641,6 +650,11 @@ void json(JSON::ObjectWriter* writer, const Task& task)
   writer->field("slave_id", task.slave_id().value());
   writer->field("state", TaskState_Name(task.state()));
   writer->field("resources", Resources(task.resources()));
+
+  // Tasks are not allowed to mix resources allocated to
+  // different roles, see MESOS-6636.
+  writer->field("role", task.resources().begin()->allocation_info().role());
+
   writer->field("statuses", task.statuses());
 
   if (task.has_user()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/2ee98b04/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index e2fd71c..6e5178e 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -266,12 +266,19 @@ struct FullFrameworkWriter {
           writer->field("framework_id", framework_->id().value());
 
           writer->field(
-            "executor_id",
-            taskInfo.executor().executor_id().value());
+              "executor_id",
+              taskInfo.executor().executor_id().value());
 
           writer->field("slave_id", taskInfo.slave_id().value());
           writer->field("state", TaskState_Name(TASK_STAGING));
           writer->field("resources", Resources(taskInfo.resources()));
+
+          // Tasks are not allowed to mix resources allocated to
+          // different roles, see MESOS-6636.
+          writer->field(
+              "role",
+              taskInfo.resources().begin()->allocation_info().role());
+
           writer->field("statuses", std::initializer_list<TaskStatus>{});
 
           if (taskInfo.has_labels()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/2ee98b04/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index 8a9fabf..17b6398 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -127,6 +127,10 @@ static void json(JSON::ObjectWriter* writer, const TaskInfo& task)
   writer->field("slave_id", task.slave_id().value());
   writer->field("resources", Resources(task.resources()));
 
+  // Tasks are not allowed to mix resources allocated to
+  // different roles, see MESOS-6636.
+  writer->field("role", task.resources().begin()->allocation_info().role());
+
   if (task.has_command()) {
     writer->field("command", task.command());
   }
@@ -174,6 +178,15 @@ struct ExecutorWriter
     writer->field("directory", executor_->directory);
     writer->field("resources", executor_->resources);
 
+    // Resources may be empty for command executors.
+    if (!executor_->info.resources().empty()) {
+      // Executors are not allowed to mix resources allocated to
+      // different roles, see MESOS-6636.
+      writer->field(
+          "role",
+          executor_->info.resources().begin()->allocation_info().role());
+    }
+
     if (executor_->info.has_labels()) {
       writer->field("labels", executor_->info.labels());
     }

http://git-wip-us.apache.org/repos/asf/mesos/blob/2ee98b04/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index 61767b1..3731c76 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -1581,6 +1581,9 @@ TEST_F(SlaveTest, StateEndpoint)
   AWAIT_READY(offers);
   EXPECT_NE(0u, offers.get().size());
 
+  Resources executorResources = Resources::parse("cpus:0.1;mem:32").get();
+  executorResources.allocate("*");
+
   TaskID taskId;
   taskId.set_value("1");
 
@@ -1588,8 +1591,11 @@ TEST_F(SlaveTest, StateEndpoint)
   task.set_name("");
   task.mutable_task_id()->MergeFrom(taskId);
   task.mutable_slave_id()->MergeFrom(offers.get()[0].slave_id());
-  task.mutable_resources()->MergeFrom(offers.get()[0].resources());
+  task.mutable_resources()->MergeFrom(
+      Resources(offers.get()[0].resources()) - executorResources);
+
   task.mutable_executor()->MergeFrom(DEFAULT_EXECUTOR_INFO);
+  task.mutable_executor()->mutable_resources()->CopyFrom(executorResources);
 
   EXPECT_CALL(exec, registered(_, _, _, _));
 
@@ -1638,6 +1644,11 @@ TEST_F(SlaveTest, StateEndpoint)
 
   EXPECT_EQ("default", executor.values["id"]);
   EXPECT_EQ("", executor.values["source"]);
+  EXPECT_EQ("*", executor.values["role"]);
+  EXPECT_EQ(
+      model(Resources(task.resources()) +
+            Resources(task.executor().resources())),
+      executor.values["resources"]);
 
   Result<JSON::Array> tasks = executor.find<JSON::Array>("tasks");
   ASSERT_SOME(tasks);
@@ -1648,7 +1659,8 @@ TEST_F(SlaveTest, StateEndpoint)
   EXPECT_EQ("", taskJSON.values["name"]);
   EXPECT_EQ(taskId.value(), taskJSON.values["id"]);
   EXPECT_EQ("TASK_RUNNING", taskJSON.values["state"]);
-  EXPECT_EQ(model(resources.get()), taskJSON.values["resources"]);
+  EXPECT_EQ("*", taskJSON.values["role"]);
+  EXPECT_EQ(model(task.resources()), taskJSON.values["resources"]);
 
   EXPECT_CALL(exec, shutdown(_))
     .Times(AtMost(1));