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/13 19:10:59 UTC
[4/8] mesos git commit: Implemented 'GetState' call in v1 agent API.
Implemented 'GetState' call in v1 agent API.
Review: https://reviews.apache.org/r/49760/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a2981795
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a2981795
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a2981795
Branch: refs/heads/master
Commit: a298179585c727255c6637d77229d251fb8dd1af
Parents: d8e4b05
Author: haosdent huang <ha...@gmail.com>
Authored: Wed Jul 13 12:10:22 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Wed Jul 13 12:10:22 2016 -0700
----------------------------------------------------------------------
include/mesos/agent/agent.proto | 6 ++-
include/mesos/v1/agent/agent.proto | 6 ++-
src/slave/http.cpp | 78 ++++++++++++++++++++++++++++++++-
src/slave/slave.hpp | 10 +++++
4 files changed, 97 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/a2981795/include/mesos/agent/agent.proto
----------------------------------------------------------------------
diff --git a/include/mesos/agent/agent.proto b/include/mesos/agent/agent.proto
index 528b8b3..5b91677 100644
--- a/include/mesos/agent/agent.proto
+++ b/include/mesos/agent/agent.proto
@@ -167,8 +167,12 @@ message Response {
required bytes data = 2;
}
+ // Contains full state of the agent i.e. information about the tasks,
+ // frameworks and executors running in the cluster.
message GetState {
- // TODO(vinod): Fill in the fields.
+ optional GetTasks get_tasks = 1;
+ optional GetExecutors get_executors = 2;
+ optional GetFrameworks get_frameworks = 3;
}
// Information about containers running on this agent. It contains
http://git-wip-us.apache.org/repos/asf/mesos/blob/a2981795/include/mesos/v1/agent/agent.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/agent/agent.proto b/include/mesos/v1/agent/agent.proto
index 699a17b..8145669 100644
--- a/include/mesos/v1/agent/agent.proto
+++ b/include/mesos/v1/agent/agent.proto
@@ -167,8 +167,12 @@ message Response {
required bytes data = 2;
}
+ // Contains full state of the agent i.e. information about the tasks,
+ // frameworks and executors running in the cluster.
message GetState {
- // TODO(vinod): Fill in the fields.
+ optional GetTasks get_tasks = 1;
+ optional GetExecutors get_executors = 2;
+ optional GetFrameworks get_frameworks = 3;
}
// Information about containers running on this agent. It contains
http://git-wip-us.apache.org/repos/asf/mesos/blob/a2981795/src/slave/http.cpp
----------------------------------------------------------------------
diff --git a/src/slave/http.cpp b/src/slave/http.cpp
index 63968bf..2cbf3c5 100644
--- a/src/slave/http.cpp
+++ b/src/slave/http.cpp
@@ -385,7 +385,7 @@ Future<Response> Slave::Http::api(
return readFile(call, principal, acceptType);
case agent::Call::GET_STATE:
- return NotImplemented();
+ return getState(call, principal, acceptType);
case agent::Call::GET_CONTAINERS:
return getContainers(call, principal, acceptType);
@@ -1411,6 +1411,82 @@ agent::Response::GetTasks Slave::Http::_getTasks(
}
+Future<Response> Slave::Http::getState(
+ const agent::Call& call,
+ const Option<string>& principal,
+ ContentType contentType) const
+{
+ CHECK_EQ(agent::Call::GET_STATE, call.type());
+
+ // Retrieve Approvers for authorizing frameworks and tasks.
+ Future<Owned<ObjectApprover>> frameworksApprover;
+ Future<Owned<ObjectApprover>> tasksApprover;
+ Future<Owned<ObjectApprover>> executorsApprover;
+ if (slave->authorizer.isSome()) {
+ authorization::Subject subject;
+ if (principal.isSome()) {
+ subject.set_value(principal.get());
+ }
+
+ frameworksApprover = slave->authorizer.get()->getObjectApprover(
+ subject, authorization::VIEW_FRAMEWORK);
+
+ tasksApprover = slave->authorizer.get()->getObjectApprover(
+ subject, authorization::VIEW_TASK);
+
+ executorsApprover = slave->authorizer.get()->getObjectApprover(
+ subject, authorization::VIEW_EXECUTOR);
+ } else {
+ frameworksApprover = Owned<ObjectApprover>(new AcceptingObjectApprover());
+ tasksApprover = Owned<ObjectApprover>(new AcceptingObjectApprover());
+ executorsApprover = Owned<ObjectApprover>(new AcceptingObjectApprover());
+ }
+
+ return collect(frameworksApprover, tasksApprover, executorsApprover)
+ .then(defer(slave->self(),
+ [=](const tuple<Owned<ObjectApprover>,
+ Owned<ObjectApprover>,
+ Owned<ObjectApprover>>& approvers)
+ -> Future<Response> {
+ // Get approver from tuple.
+ Owned<ObjectApprover> frameworksApprover;
+ Owned<ObjectApprover> tasksApprover;
+ Owned<ObjectApprover> executorsApprover;
+ tie(frameworksApprover, tasksApprover, executorsApprover) = approvers;
+
+ agent::Response response;
+ response.set_type(agent::Response::GET_STATE);
+ response.mutable_get_state()->CopyFrom(
+ _getState(frameworksApprover,
+ tasksApprover,
+ executorsApprover));
+
+ return OK(serialize(contentType, evolve(response)),
+ stringify(contentType));
+ }));
+}
+
+
+agent::Response::GetState Slave::Http::_getState(
+ const Owned<ObjectApprover>& frameworksApprover,
+ const Owned<ObjectApprover>& tasksApprover,
+ const Owned<ObjectApprover>& executorsApprover) const
+{
+ agent::Response::GetState getState;
+
+ getState.mutable_get_tasks()->CopyFrom(
+ _getTasks(frameworksApprover, tasksApprover, executorsApprover));
+
+ getState.mutable_get_executors()->CopyFrom(
+ _getExecutors(frameworksApprover, executorsApprover));
+
+ getState.mutable_get_frameworks()->CopyFrom(
+ _getFrameworks(frameworksApprover));
+
+ return getState;
+}
+
+
string Slave::Http::STATISTICS_HELP()
{
return HELP(
http://git-wip-us.apache.org/repos/asf/mesos/blob/a2981795/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 4995c84..9864cf4 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -576,6 +576,16 @@ private:
const process::Owned<ObjectApprover>& tasksApprover,
const process::Owned<ObjectApprover>& executorsApprover) const;
+ process::Future<process::http::Response> getState(
+ const mesos::agent::Call& call,
+ const Option<std::string>& principal,
+ ContentType contentType) const;
+
+ mesos::agent::Response::GetState _getState(
+ const process::Owned<ObjectApprover>& frameworksApprover,
+ const process::Owned<ObjectApprover>& taskApprover,
+ const process::Owned<ObjectApprover>& executorsApprover) const;
+
Slave* slave;
// Used to rate limit the statistics endpoint.