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 <[email protected]> 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.
