X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/54bc567a6667783decce679e2ea77b93d5f68322..f985b2fac7d90d9a54d5a115f8c067ff795a018c:/services/api/app/controllers/arvados/v1/collections_controller.rb?ds=sidebyside diff --git a/services/api/app/controllers/arvados/v1/collections_controller.rb b/services/api/app/controllers/arvados/v1/collections_controller.rb index ede6fbd899..81b9ca9e5b 100644 --- a/services/api/app/controllers/arvados/v1/collections_controller.rb +++ b/services/api/app/controllers/arvados/v1/collections_controller.rb @@ -152,7 +152,7 @@ class Arvados::V1::CollectionsController < ApplicationController if direction == :search_up # Search upstream for jobs where this locator is the output of some job - if !Rails.configuration.API.DisabledAPIs.include?("jobs.list") + if !Rails.configuration.API.DisabledAPIs["jobs.list"] Job.readable_by(*@read_users).where(output: loc.to_s).each do |job| search_edges(visited, job.uuid, :search_up) end @@ -176,7 +176,7 @@ class Arvados::V1::CollectionsController < ApplicationController end # Search downstream for jobs where this locator is in script_parameters - if !Rails.configuration.API.DisabledAPIs.include?("jobs.list") + if !Rails.configuration.API.DisabledAPIs["jobs.list"] Job.readable_by(*@read_users).where(["jobs.script_parameters like ?", "%#{loc.to_s}%"]).each do |job| search_edges(visited, job.uuid, :search_down) end @@ -215,13 +215,13 @@ class Arvados::V1::CollectionsController < ApplicationController visited[uuid] = c.as_api_response if direction == :search_up # Follow upstream collections referenced in the script parameters - find_collections(visited, c) do |hash, col_uuid| + find_collections(visited, c, ignore_columns=["log", "output"]) do |hash, col_uuid| search_edges(visited, hash, :search_up) if hash search_edges(visited, col_uuid, :search_up) if col_uuid end elsif direction == :search_down # Follow downstream job output - search_edges(visited, c.output, direction) + search_edges(visited, c.output, :search_down) end end elsif rsc == ContainerRequest @@ -230,13 +230,13 @@ class Arvados::V1::CollectionsController < ApplicationController visited[uuid] = c.as_api_response if direction == :search_up # Follow upstream collections - find_collections(visited, c, ignore_columns=["log_uuid"]) do |hash, col_uuid| + find_collections(visited, c, ignore_columns=["log_uuid", "output_uuid"]) do |hash, col_uuid| search_edges(visited, hash, :search_up) if hash search_edges(visited, col_uuid, :search_up) if col_uuid end elsif direction == :search_down # Follow downstream job output - search_edges(visited, c.output_uuid, direction) + search_edges(visited, c.output_uuid, :search_down) end end elsif rsc == Collection @@ -245,6 +245,16 @@ class Arvados::V1::CollectionsController < ApplicationController if direction == :search_up visited[c.uuid] = c.as_api_response + if !Rails.configuration.API.DisabledAPIs["jobs.list"] + Job.readable_by(*@read_users).where(output: c.portable_data_hash).each do |job| + search_edges(visited, job.uuid, :search_up) + end + + Job.readable_by(*@read_users).where(log: c.portable_data_hash).each do |job| + search_edges(visited, job.uuid, :search_up) + end + end + ContainerRequest.readable_by(*@read_users).where(output_uuid: uuid).each do |cr| search_edges(visited, cr.uuid, :search_up) end @@ -253,7 +263,7 @@ class Arvados::V1::CollectionsController < ApplicationController search_edges(visited, cr.uuid, :search_up) end elsif direction == :search_down - search_edges(visited, c.portable_data_hash, direction) + search_edges(visited, c.portable_data_hash, :search_down) end end elsif rsc != nil