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();