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

Reply via email to