Added filtering for orphaned tasks in /state endpoint.

Review: https://reviews.apache.org/r/49609/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0cb4533b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0cb4533b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0cb4533b

Branch: refs/heads/master
Commit: 0cb4533b9b31e1b2a3fa52bc421757bac70d9d9c
Parents: 3c96ca4
Author: Joerg Schad <jo...@mesosphere.io>
Authored: Tue Jul 5 17:05:36 2016 -0500
Committer: Vinod Kone <vinodk...@gmail.com>
Committed: Tue Jul 5 17:06:05 2016 -0500

----------------------------------------------------------------------
 src/master/http.cpp | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0cb4533b/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 6b4f85b..debedd4 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -2498,11 +2498,8 @@ Future<Response> Master::Http::state(
             });
 
         // Model all of the orphan tasks.
-        // TODO(vinod): Need to filter these tasks based on authorization! This
-        // is currently not possible because we don't have `FrameworkInfo` for
-        // these tasks. We need to either store `FrameworkInfo` for orphan
-        // tasks or persist FrameworkInfo of all frameworks in the registry.
-        writer->field("orphan_tasks", [this](JSON::ArrayWriter* writer) {
+        writer->field("orphan_tasks", [this, &tasksApprover](
+            JSON::ArrayWriter* writer) {
           // Find those orphan tasks.
           foreachvalue (const Slave* slave, master->slaves.registered) {
             typedef hashmap<TaskID, Task*> TaskMap;
@@ -2511,6 +2508,16 @@ Future<Response> Master::Http::state(
                 CHECK_NOTNULL(task);
                 if (!master->frameworks.registered.contains(
                     task->framework_id())) {
+                  CHECK(master->frameworks.recovered.contains(
+                      task->framework_id()));
+
+                  if (!approveViewTask(
+                      tasksApprover,
+                      *task,
+                      master->frameworks.recovered[task->framework_id()])) {
+                    continue;
+                  }
+
                   writer->element(*task);
                 }
               }

Reply via email to