Repository: mesos Updated Branches: refs/heads/1.1.x f69dd55e8 -> 3c51acb88
Fixed duplicate framework ids in "unregistered_frameworks". The existing test (MasterTest.OrphanTasks) continues to pass after the change. I will try to write another test that spawns multiple agents to ensure the duplicate framework ids are not shown. Review: https://reviews.apache.org/r/53159 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7460d1d1 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7460d1d1 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7460d1d1 Branch: refs/heads/1.1.x Commit: 7460d1d12dd8d75d1829527392594c0d5786d015 Parents: f69dd55 Author: Vinod Kone <vinodk...@gmail.com> Authored: Mon Oct 24 17:05:12 2016 -0700 Committer: Vinod Kone <vinodk...@gmail.com> Committed: Fri Oct 28 14:04:55 2016 -0700 ---------------------------------------------------------------------- src/master/http.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/7460d1d1/src/master/http.cpp ---------------------------------------------------------------------- diff --git a/src/master/http.cpp b/src/master/http.cpp index 2496c74..7c323a6 100644 --- a/src/master/http.cpp +++ b/src/master/http.cpp @@ -1343,13 +1343,18 @@ Future<Response> Master::Http::frameworks( // Model all currently unregistered frameworks. This can happen // when a framework has yet to re-register after master failover. + // TODO(vinod): Need to filter these frameworks based on authorization! + // See TODO in `state()` for further details. writer->field("unregistered_frameworks", [this]( JSON::ArrayWriter* writer) { // Find unregistered frameworks. + hashset<FrameworkID> frameworkIds; foreachvalue (const Slave* slave, master->slaves.registered) { foreachkey (const FrameworkID& frameworkId, slave->tasks) { - if (!master->frameworks.registered.contains(frameworkId)) { + if (!master->frameworks.registered.contains(frameworkId) && + !frameworkIds.contains(frameworkId)) { writer->element(frameworkId.value()); + frameworkIds.insert(frameworkId); } } } @@ -2743,10 +2748,13 @@ Future<Response> Master::Http::state( writer->field("unregistered_frameworks", [this]( JSON::ArrayWriter* writer) { // Find unregistered frameworks. + hashset<FrameworkID> frameworkIds; foreachvalue (const Slave* slave, master->slaves.registered) { foreachkey (const FrameworkID& frameworkId, slave->tasks) { - if (!master->frameworks.registered.contains(frameworkId)) { + if (!master->frameworks.registered.contains(frameworkId) && + !frameworkIds.contains(frameworkId)) { writer->element(frameworkId.value()); + frameworkIds.insert(frameworkId); } } }