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/06/28 06:45:51 UTC
[2/2] mesos git commit: Implemented GET_AGENTS Call in v1 master API.
Implemented GET_AGENTS Call in v1 master API.
Review: https://reviews.apache.org/r/48438/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5756e852
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5756e852
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5756e852
Branch: refs/heads/master
Commit: 5756e85279be4fe25b93498d7ac28339c3f223d7
Parents: fb626a2
Author: zhou xing <xi...@cn.ibm.com>
Authored: Mon Jun 27 23:45:25 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Mon Jun 27 23:45:25 2016 -0700
----------------------------------------------------------------------
src/master/http.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++-
src/master/master.hpp | 5 +++++
src/tests/api_tests.cpp | 43 +++++++++++++++++++++++++++++++++++++++
3 files changed, 95 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5756e852/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 902cee3..d583bbe 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -541,7 +541,7 @@ Future<Response> Master::Http::api(
return NotImplemented();
case mesos::master::Call::GET_AGENTS:
- return NotImplemented();
+ return getAgents(call, principal, acceptType);
case mesos::master::Call::GET_FRAMEWORKS:
return NotImplemented();
@@ -1739,6 +1739,52 @@ Future<Response> Master::Http::slaves(
}
+Future<process::http::Response> Master::Http::getAgents(
+ const mesos::master::Call& call,
+ const Option<string>& principal,
+ ContentType contentType) const
+{
+ CHECK_EQ(mesos::master::Call::GET_AGENTS, call.type());
+
+ mesos::master::Response response;
+ response.set_type(mesos::master::Response::GET_AGENTS);
+
+ foreachvalue (const Slave* slave, master->slaves.registered) {
+ mesos::master::Response::GetAgents::Agent* agent =
+ response.mutable_get_agents()->add_agents();
+
+ agent->mutable_agent_info()->CopyFrom(slave->info);
+
+ agent->set_pid(string(slave->pid));
+ agent->set_active(slave->active);
+ agent->set_version(slave->version);
+
+ agent->mutable_registered_time()->set_nanoseconds(
+ slave->registeredTime.duration().ns());
+
+ if (slave->reregisteredTime.isSome()) {
+ agent->mutable_reregistered_time()->set_nanoseconds(
+ slave->reregisteredTime.get().duration().ns());
+ }
+
+ foreach (const Resource& resource, slave->totalResources) {
+ agent->add_total_resources()->CopyFrom(resource);
+ }
+
+ foreach (const Resource& resource, Resources::sum(slave->usedResources)) {
+ agent->add_allocated_resources()->CopyFrom(resource);
+ }
+
+ foreach (const Resource& resource, slave->offeredResources) {
+ agent->add_offered_resources()->CopyFrom(resource);
+ }
+ }
+
+ return OK(serialize(contentType, evolve(response)),
+ stringify(contentType));
+}
+
+
string Master::Http::QUOTA_HELP()
{
return HELP(
http://git-wip-us.apache.org/repos/asf/mesos/blob/5756e852/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 8690390..ba271e7 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -1366,6 +1366,11 @@ private:
// Master API handlers.
+ process::Future<process::http::Response> getAgents(
+ const mesos::master::Call& call,
+ const Option<std::string>& principal,
+ ContentType contentType) const;
+
process::Future<process::http::Response> getFlags(
const mesos::master::Call& call,
const Option<std::string>& principal,
http://git-wip-us.apache.org/repos/asf/mesos/blob/5756e852/src/tests/api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/api_tests.cpp b/src/tests/api_tests.cpp
index c8f3a7d..7b5c761 100644
--- a/src/tests/api_tests.cpp
+++ b/src/tests/api_tests.cpp
@@ -150,6 +150,49 @@ INSTANTIATE_TEST_CASE_P(
::testing::Values(ContentType::PROTOBUF, ContentType::JSON));
+TEST_P(MasterAPITest, GetAgents)
+{
+ Try<Owned<cluster::Master>> master = this->StartMaster();
+ ASSERT_SOME(master);
+
+ Owned<MasterDetector> detector = master.get()->createDetector();
+
+ // Start one agent.
+ Future<SlaveRegisteredMessage> agentRegisteredMessage =
+ FUTURE_PROTOBUF(SlaveRegisteredMessage(), master.get()->pid, _);
+
+ slave::Flags flags = CreateSlaveFlags();
+ flags.hostname = "host";
+
+ Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), flags);
+ ASSERT_SOME(agent);
+
+ AWAIT_READY(agentRegisteredMessage);
+
+ v1::master::Call v1Call;
+ v1Call.set_type(v1::master::Call::GET_AGENTS);
+
+ ContentType contentType = GetParam();
+
+ Future<v1::master::Response> v1Response =
+ post(master.get()->pid, v1Call, contentType);
+
+ AWAIT_READY(v1Response);
+ ASSERT_TRUE(v1Response.get().IsInitialized());
+ ASSERT_EQ(v1::master::Response::GET_AGENTS, v1Response.get().type());
+ ASSERT_EQ(v1Response.get().get_agents().agents_size(), 1);
+
+ const v1::master::Response::GetAgents::Agent& v1Agent =
+ v1Response.get().get_agents().agents(0);
+
+ ASSERT_EQ("host", v1Agent.agent_info().hostname());
+ ASSERT_EQ(agent.get()->pid, v1Agent.pid());
+ ASSERT_TRUE(v1Agent.active());
+ ASSERT_EQ("1.0.0", v1Agent.version());
+ ASSERT_EQ(4, v1Agent.total_resources_size());
+}
+
+
TEST_P(MasterAPITest, GetFlags)
{
Try<Owned<cluster::Master>> master = this->StartMaster();