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