You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2016/07/01 21:01:36 UTC

mesos git commit: Added new utility function, `frameworkHasCapability()`.

Repository: mesos
Updated Branches:
  refs/heads/master 53de5578c -> 2a49ae261


Added new utility function, `frameworkHasCapability()`.

Replace various hand-coded loops checking for capabilities with calls to
this new function instead.

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


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

Branch: refs/heads/master
Commit: 2a49ae2618c13036356f3fdca3b727d3779a1c47
Parents: 53de557
Author: Neil Conway <ne...@gmail.com>
Authored: Fri Jul 1 14:01:21 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Fri Jul 1 14:01:21 2016 -0700

----------------------------------------------------------------------
 src/common/protobuf_utils.cpp               | 15 ++++++++++
 src/common/protobuf_utils.hpp               |  5 ++++
 src/docker/executor.cpp                     | 17 ++++++------
 src/launcher/executor.cpp                   | 17 ++++++++----
 src/master/allocator/mesos/hierarchical.cpp | 35 ++++++++----------------
 5 files changed, 51 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/2a49ae26/src/common/protobuf_utils.cpp
----------------------------------------------------------------------
diff --git a/src/common/protobuf_utils.cpp b/src/common/protobuf_utils.cpp
index 040bdf8..a2885d0 100644
--- a/src/common/protobuf_utils.cpp
+++ b/src/common/protobuf_utils.cpp
@@ -44,6 +44,21 @@ namespace mesos {
 namespace internal {
 namespace protobuf {
 
+bool frameworkHasCapability(
+    const FrameworkInfo& framework,
+    FrameworkInfo::Capability::Type capability)
+{
+  foreach (const FrameworkInfo::Capability& c,
+           framework.capabilities()) {
+    if (c.type() == capability) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+
 bool isTerminalState(const TaskState& state)
 {
   return (state == TASK_FINISHED ||

http://git-wip-us.apache.org/repos/asf/mesos/blob/2a49ae26/src/common/protobuf_utils.hpp
----------------------------------------------------------------------
diff --git a/src/common/protobuf_utils.hpp b/src/common/protobuf_utils.hpp
index 3dd03da..cb02022 100644
--- a/src/common/protobuf_utils.hpp
+++ b/src/common/protobuf_utils.hpp
@@ -47,6 +47,11 @@ namespace mesos {
 namespace internal {
 namespace protobuf {
 
+bool frameworkHasCapability(
+    const FrameworkInfo& framework,
+    FrameworkInfo::Capability::Type capability);
+
+
 bool isTerminalState(const TaskState& state);
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/2a49ae26/src/docker/executor.cpp
----------------------------------------------------------------------
diff --git a/src/docker/executor.cpp b/src/docker/executor.cpp
index 88b7fc4..2089b54 100644
--- a/src/docker/executor.cpp
+++ b/src/docker/executor.cpp
@@ -38,6 +38,7 @@
 #include <stout/os/killtree.hpp>
 
 #include "common/status_utils.hpp"
+#include "common/protobuf_utils.hpp"
 
 #include "docker/docker.hpp"
 #include "docker/executor.hpp"
@@ -348,15 +349,13 @@ private:
       killed = true;
 
       // Send TASK_KILLING if the framework can handle it.
-      foreach (const FrameworkInfo::Capability& c,
-               frameworkInfo->capabilities()) {
-        if (c.type() == FrameworkInfo::Capability::TASK_KILLING_STATE) {
-          TaskStatus status;
-          status.mutable_task_id()->CopyFrom(taskId.get());
-          status.set_state(TASK_KILLING);
-          driver.get()->sendStatusUpdate(status);
-          break;
-        }
+      if (protobuf::frameworkHasCapability(
+              frameworkInfo.get(),
+              FrameworkInfo::Capability::TASK_KILLING_STATE)) {
+        TaskStatus status;
+        status.mutable_task_id()->CopyFrom(taskId.get());
+        status.set_state(TASK_KILLING);
+        driver.get()->sendStatusUpdate(status);
       }
 
       // TODO(bmahler): Replace this with 'docker kill' so

http://git-wip-us.apache.org/repos/asf/mesos/blob/2a49ae26/src/launcher/executor.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/executor.cpp b/src/launcher/executor.cpp
index bb88a45..cb23501 100644
--- a/src/launcher/executor.cpp
+++ b/src/launcher/executor.cpp
@@ -26,6 +26,8 @@
 #include <string>
 #include <vector>
 
+#include <mesos/mesos.hpp>
+
 #include <mesos/v1/executor.hpp>
 #include <mesos/v1/mesos.hpp>
 
@@ -65,8 +67,10 @@
 #include <stout/os/killtree.hpp>
 
 #include "common/http.hpp"
+#include "common/protobuf_utils.hpp"
 #include "common/status_utils.hpp"
 
+#include "internal/devolve.hpp"
 #include "internal/evolve.hpp"
 
 #ifdef __linux__
@@ -103,9 +107,12 @@ using process::Subprocess;
 using process::Time;
 using process::Timer;
 
+using mesos::internal::devolve;
 using mesos::internal::evolve;
 using mesos::internal::TaskHealthStatus;
 
+using mesos::internal::protobuf::frameworkHasCapability;
+
 using mesos::v1::ExecutorID;
 using mesos::v1::FrameworkID;
 
@@ -539,12 +546,10 @@ private:
       CHECK_SOME(taskId);
       CHECK(taskId.get() == _taskId);
 
-      foreach (const FrameworkInfo::Capability& c,
-               frameworkInfo->capabilities()) {
-        if (c.type() == FrameworkInfo::Capability::TASK_KILLING_STATE) {
-          update(taskId.get(), TASK_KILLING);
-          break;
-        }
+      if (frameworkHasCapability(
+              devolve(frameworkInfo.get()),
+              mesos::FrameworkInfo::Capability::TASK_KILLING_STATE)) {
+        update(taskId.get(), TASK_KILLING);
       }
 
       // Now perform signal escalation to begin killing the task.

http://git-wip-us.apache.org/repos/asf/mesos/blob/2a49ae26/src/master/allocator/mesos/hierarchical.cpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.cpp b/src/master/allocator/mesos/hierarchical.cpp
index 3838123..eca949e 100644
--- a/src/master/allocator/mesos/hierarchical.cpp
+++ b/src/master/allocator/mesos/hierarchical.cpp
@@ -34,6 +34,8 @@
 #include <stout/stopwatch.hpp>
 #include <stout/stringify.hpp>
 
+#include "common/protobuf_utils.hpp"
+
 using std::set;
 using std::string;
 using std::vector;
@@ -257,21 +259,14 @@ void HierarchicalAllocatorProcess::addFramework(
 
   frameworks[frameworkId] = Framework();
   frameworks[frameworkId].role = frameworkInfo.role();
+  frameworks[frameworkId].suppressed = false;
 
   // Set the framework capabilities that this allocator cares about.
-  frameworks[frameworkId].revocable = false;
-  frameworks[frameworkId].gpuAware = false;
-
-  foreach (const FrameworkInfo::Capability& capability,
-           frameworkInfo.capabilities()) {
-    if (capability.type() == FrameworkInfo::Capability::REVOCABLE_RESOURCES) {
-      frameworks[frameworkId].revocable = true;
-    } else if (capability.type() == FrameworkInfo::Capability::GPU_RESOURCES) {
-      frameworks[frameworkId].gpuAware = true;
-    }
-  }
+  frameworks[frameworkId].revocable = protobuf::frameworkHasCapability(
+      frameworkInfo, FrameworkInfo::Capability::REVOCABLE_RESOURCES);
 
-  frameworks[frameworkId].suppressed = false;
+  frameworks[frameworkId].gpuAware = protobuf::frameworkHasCapability(
+      frameworkInfo, FrameworkInfo::Capability::GPU_RESOURCES);
 
   LOG(INFO) << "Added framework " << frameworkId;
 
@@ -401,17 +396,11 @@ void HierarchicalAllocatorProcess::updateFramework(
   CHECK_EQ(frameworks[frameworkId].role, frameworkInfo.role());
 
   // Update the framework capabilities that this allocator cares about.
-  frameworks[frameworkId].revocable = false;
-  frameworks[frameworkId].gpuAware = false;
-
-  foreach (const FrameworkInfo::Capability& capability,
-           frameworkInfo.capabilities()) {
-    if (capability.type() == FrameworkInfo::Capability::REVOCABLE_RESOURCES) {
-      frameworks[frameworkId].revocable = true;
-    } else if (capability.type() == FrameworkInfo::Capability::GPU_RESOURCES) {
-      frameworks[frameworkId].gpuAware = true;
-    }
-  }
+  frameworks[frameworkId].revocable = protobuf::frameworkHasCapability(
+      frameworkInfo, FrameworkInfo::Capability::REVOCABLE_RESOURCES);
+
+  frameworks[frameworkId].gpuAware = protobuf::frameworkHasCapability(
+      frameworkInfo, FrameworkInfo::Capability::GPU_RESOURCES);
 }