This is an automated email from the ASF dual-hosted git repository. mzhu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 734523178f2e8e722fb4d15d00194e3e019ef722 Author: Meng Zhu <[email protected]> AuthorDate: Mon Aug 19 13:55:25 2019 -0700 Added method to dump role tree state for debugging. It dumps the role tree state in JSON format. This can potentially be added to an allocator debug endpoint. Review: https://reviews.apache.org/r/71311 --- src/master/allocator/mesos/hierarchical.cpp | 33 +++++++++++++++++++++++++++++ src/master/allocator/mesos/hierarchical.hpp | 3 +++ 2 files changed, 36 insertions(+) diff --git a/src/master/allocator/mesos/hierarchical.cpp b/src/master/allocator/mesos/hierarchical.cpp index 5127dfb..852d426 100644 --- a/src/master/allocator/mesos/hierarchical.cpp +++ b/src/master/allocator/mesos/hierarchical.cpp @@ -42,6 +42,7 @@ #include <stout/stopwatch.hpp> #include <stout/stringify.hpp> +#include "common/http.hpp" #include "common/protobuf_utils.hpp" #include "common/resources_utils.hpp" @@ -390,6 +391,38 @@ void RoleTree::updateWeight(const string& role, double weight) } +std::string RoleTree::toJSON() const +{ + std::function<void(JSON::ObjectWriter*, const Role*)> json = + [&](JSON::ObjectWriter* writer, const Role* role) { + writer->field("basename", role->basename); + writer->field("role", role->role); + writer->field("weight", role->weight_); + writer->field("guarantees", role->quota_.guarantees); + writer->field("limits", role->quota_.limits); + writer->field( + "reservation_quantities", role->reservationScalarQuantities_); + + writer->field("frameworks", [&](JSON::ArrayWriter* writer) { + foreach (const FrameworkID& id, role->frameworks_) { + writer->element(id.value()); + } + }); + + writer->field("children", [&](JSON::ArrayWriter* writer) { + foreachvalue (const Role* child, role->children_) { + writer->element( + [&](JSON::ObjectWriter* writer) { json(writer, child); }); + } + }); + }; + + auto tree = [&](JSON::ObjectWriter* writer) { json(writer, root_); }; + + return jsonify(tree); +} + + Framework::Framework( const FrameworkInfo& frameworkInfo, const set<string>& _suppressedRoles, diff --git a/src/master/allocator/mesos/hierarchical.hpp b/src/master/allocator/mesos/hierarchical.hpp index 46ce5fc..db26a2a 100644 --- a/src/master/allocator/mesos/hierarchical.hpp +++ b/src/master/allocator/mesos/hierarchical.hpp @@ -213,6 +213,9 @@ public: void updateWeight(const std::string& role, double weight); + // Dump the role tree state in JSON format for debugging. + std::string toJSON() const; + private: // Lookup or add the role struct associated with the role. Ancestor roles // along the tree path will be created if necessary.
