You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2019/07/16 20:43:25 UTC
[mesos] 08/09: Added drain and deactivation info to master API
output.
This is an automated email from the ASF dual-hosted git repository.
josephwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit a805d278f8874838364fa893e1bf8e1c6ca0a0b3
Author: Greg Mann <gr...@mesosphere.io>
AuthorDate: Tue Jul 16 12:20:56 2019 -0700
Added drain and deactivation info to master API output.
This adds the drain info and deactivation state of agents
to the master's responses for the GET_STATE and GET_AGENTS
calls, as well as the '/state' and '/state-summary'
endpoints.
Review: https://reviews.apache.org/r/71055/
---
include/mesos/master/master.proto | 3 +++
include/mesos/v1/master/master.proto | 3 +++
src/common/protobuf_utils.cpp | 16 ++++++++++++++--
src/common/protobuf_utils.hpp | 6 +++++-
src/master/http.cpp | 6 +++++-
src/master/master.cpp | 5 ++++-
src/master/readonly_handler.cpp | 35 +++++++++++++++++++++++++++++++----
7 files changed, 65 insertions(+), 9 deletions(-)
diff --git a/include/mesos/master/master.proto b/include/mesos/master/master.proto
index 399e27e..07bf4e7 100644
--- a/include/mesos/master/master.proto
+++ b/include/mesos/master/master.proto
@@ -446,6 +446,7 @@ message Response {
message Agent {
required SlaveInfo agent_info = 1;
required bool active = 2;
+ optional bool deactivated = 12;
required string version = 3;
optional string pid = 4;
@@ -467,6 +468,8 @@ message Response {
}
repeated ResourceProvider resource_providers = 11;
+
+ optional DrainInfo drain_info = 13;
}
// Registered agents.
diff --git a/include/mesos/v1/master/master.proto b/include/mesos/v1/master/master.proto
index 62bcee5..9bcef2f 100644
--- a/include/mesos/v1/master/master.proto
+++ b/include/mesos/v1/master/master.proto
@@ -447,6 +447,7 @@ message Response {
message Agent {
required AgentInfo agent_info = 1;
required bool active = 2;
+ optional bool deactivated = 12;
required string version = 3;
optional string pid = 4;
@@ -468,6 +469,8 @@ message Response {
}
repeated ResourceProvider resource_providers = 11;
+
+ optional DrainInfo drain_info = 13;
}
// Registered agents.
diff --git a/src/common/protobuf_utils.cpp b/src/common/protobuf_utils.cpp
index c91d543..fc67c38 100644
--- a/src/common/protobuf_utils.cpp
+++ b/src/common/protobuf_utils.cpp
@@ -1507,6 +1507,8 @@ mesos::master::Event createFrameworkRemoved(const FrameworkInfo& frameworkInfo)
mesos::master::Response::GetAgents::Agent createAgentResponse(
const mesos::internal::master::Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated,
const Option<Owned<ObjectApprovers>>& approvers)
{
mesos::master::Response::GetAgents::Agent agent;
@@ -1515,6 +1517,7 @@ mesos::master::Response::GetAgents::Agent createAgentResponse(
agent.set_pid(string(slave.pid));
agent.set_active(slave.active);
+ agent.set_deactivated(deactivated);
agent.set_version(slave.version);
agent.mutable_registered_time()->set_nanoseconds(
@@ -1567,18 +1570,27 @@ mesos::master::Response::GetAgents::Agent createAgentResponse(
resourceProvider.totalResources);
}
+ if (drainInfo.isSome()) {
+ agent.mutable_drain_info()->CopyFrom(drainInfo.get());
+ }
+
return agent;
}
mesos::master::Event createAgentAdded(
- const mesos::internal::master::Slave& slave)
+ const mesos::internal::master::Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated)
{
mesos::master::Event event;
event.set_type(mesos::master::Event::AGENT_ADDED);
event.mutable_agent_added()->mutable_agent()->CopyFrom(
- createAgentResponse(slave));
+ createAgentResponse(
+ slave,
+ drainInfo,
+ deactivated));
return event;
}
diff --git a/src/common/protobuf_utils.hpp b/src/common/protobuf_utils.hpp
index 893022b..5d6a35d 100644
--- a/src/common/protobuf_utils.hpp
+++ b/src/common/protobuf_utils.hpp
@@ -576,12 +576,16 @@ mesos::master::Event createFrameworkRemoved(const FrameworkInfo& frameworkInfo);
// Helper for creating an `Agent` response.
mesos::master::Response::GetAgents::Agent createAgentResponse(
const mesos::internal::master::Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated,
const Option<process::Owned<ObjectApprovers>>& approvers = None());
// Helper for creating an `AGENT_ADDED` event from a `Slave`.
mesos::master::Event createAgentAdded(
- const mesos::internal::master::Slave& slave);
+ const mesos::internal::master::Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated);
// Helper for creating an `AGENT_REMOVED` event from a `SlaveID`.
diff --git a/src/master/http.cpp b/src/master/http.cpp
index ee0f2d5..765d505 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -2087,7 +2087,11 @@ mesos::master::Response::GetAgents Master::Http::_getAgents(
foreachvalue (const Slave* slave, master->slaves.registered) {
mesos::master::Response::GetAgents::Agent* agent = getAgents.add_agents();
*agent =
- protobuf::master::event::createAgentResponse(*slave, approvers);
+ protobuf::master::event::createAgentResponse(
+ *slave,
+ master->slaves.draining.get(slave->id),
+ master->slaves.deactivated.contains(slave->id),
+ approvers);
}
foreachvalue (const SlaveInfo& slaveInfo, master->slaves.recovered) {
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 61d0e7b..f1ca637 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -11574,7 +11574,10 @@ void Master::addSlave(
slave->usedResources);
if (!subscribers.subscribed.empty()) {
- subscribers.send(protobuf::master::event::createAgentAdded(*slave));
+ subscribers.send(protobuf::master::event::createAgentAdded(
+ *slave,
+ slaves.draining.get(slave->id),
+ slaves.deactivated.contains(slave->id)));
}
}
diff --git a/src/master/readonly_handler.cpp b/src/master/readonly_handler.cpp
index ab8a4ce..60dac9a 100644
--- a/src/master/readonly_handler.cpp
+++ b/src/master/readonly_handler.cpp
@@ -96,11 +96,15 @@ struct SlaveWriter
{
SlaveWriter(
const Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated,
const process::Owned<ObjectApprovers>& approvers);
void operator()(JSON::ObjectWriter* writer) const;
const Slave& slave_;
+ const Option<DrainInfo> drainInfo_;
+ const bool deactivated_;
const process::Owned<ObjectApprovers>& approvers_;
};
@@ -285,8 +289,13 @@ void FullFrameworkWriter::operator()(JSON::ObjectWriter* writer) const
SlaveWriter::SlaveWriter(
const Slave& slave,
+ const Option<DrainInfo>& drainInfo,
+ bool deactivated,
const Owned<ObjectApprovers>& approvers)
- : slave_(slave), approvers_(approvers)
+ : slave_(slave),
+ drainInfo_(drainInfo),
+ deactivated_(deactivated),
+ approvers_(approvers)
{}
@@ -321,8 +330,13 @@ void SlaveWriter::operator()(JSON::ObjectWriter* writer) const
writer->field("unreserved_resources", totalResources.unreserved());
writer->field("active", slave_.active);
+ writer->field("deactivated", deactivated_);
writer->field("version", slave_.version);
writer->field("capabilities", slave_.capabilities.toRepeatedPtrField());
+
+ if (drainInfo_.isSome()) {
+ writer->field("drain_info", JSON::Protobuf(drainInfo_.get()));
+ }
}
@@ -365,7 +379,11 @@ void SlavesWriter::operator()(JSON::ObjectWriter* writer) const
void SlavesWriter::writeSlave(
const Slave* slave, JSON::ObjectWriter* writer) const
{
- SlaveWriter(*slave, approvers_)(writer);
+ SlaveWriter(
+ *slave,
+ slaves_.draining.get(slave->id),
+ slaves_.deactivated.contains(slave->id),
+ approvers_)(writer);
// Add the complete protobuf->JSON for all used, reserved,
// and offered resources. The other endpoints summarize
@@ -867,7 +885,11 @@ process::http::Response Master::ReadOnlyHandler::state(
"slaves",
[master, &approvers](JSON::ArrayWriter* writer) {
foreachvalue (Slave* slave, master->slaves.registered) {
- writer->element(SlaveWriter(*slave, approvers));
+ writer->element(SlaveWriter(
+ *slave,
+ master->slaves.draining.get(slave->id),
+ master->slaves.deactivated.contains(slave->id),
+ approvers));
}
});
@@ -966,10 +988,15 @@ process::http::Response Master::ReadOnlyHandler::stateSummary(
foreachvalue (Slave* slave, master->slaves.registered) {
writer->element(
[&slave,
+ &master,
&slaveFrameworkMapping,
&taskStateSummaries,
&approvers](JSON::ObjectWriter* writer) {
- SlaveWriter slaveWriter(*slave, approvers);
+ SlaveWriter slaveWriter(
+ *slave,
+ master->slaves.draining.get(slave->id),
+ master->slaves.deactivated.contains(slave->id),
+ approvers);
slaveWriter(writer);
// Add the 'TaskState' summary for this slave.