X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b0cbc39917df391c0f0e7f31d9d46c5cc9070520..5624fec61db977d386ce03ca333241c74ca251b5:/services/api/app/models/job.rb diff --git a/services/api/app/models/job.rb b/services/api/app/models/job.rb index ef3d0b5e10..d078a6146b 100644 --- a/services/api/app/models/job.rb +++ b/services/api/app/models/job.rb @@ -119,6 +119,10 @@ class Job < ArvadosModel super - ["script_parameters_digest"] end + def self.full_text_searchable_columns + super - ["script_parameters_digest"] + end + def self.load_job_specific_filters attrs, orig_filters, read_users # Convert Job-specific @filters entries into general SQL filters. script_info = {"repository" => nil, "script" => nil} @@ -211,7 +215,8 @@ class Job < ArvadosModel else image_locator = nil end - filters << ["docker_image_locator", "=", image_locator] + filters << ["docker_image_locator", "=", + Collection.docker_migration_pdh(read_users, image_locator)] if sdk_version = attrs[:runtime_constraints].andand["arvados_sdk_version"] filters += default_git_filters("arvados_sdk_version", "arvados", sdk_version) end @@ -280,6 +285,39 @@ class Job < ArvadosModel end end + def cancel(cascade: false, need_transaction: true) + if need_transaction + ActiveRecord::Base.transaction do + cancel(cascade: cascade, need_transaction: false) + end + return + end + + if self.state.in?([Queued, Running]) + self.state = Cancelled + self.save! + elsif self.state != Cancelled + raise InvalidStateTransitionError + end + + return if !cascade + + # cancel all children; they could be jobs or pipeline instances + children = self.components.andand.collect{|_, u| u}.compact + + return if children.empty? + + # cancel any child jobs + Job.where(uuid: children, state: [Queued, Running]).each do |job| + job.cancel(cascade: cascade, need_transaction: false) + end + + # cancel any child pipelines + PipelineInstance.where(uuid: children, state: [PipelineInstance::RunningOnServer, PipelineInstance::RunningOnClient]).each do |pi| + pi.cancel(cascade: cascade, need_transaction: false) + end + end + protected def self.sorted_hash_digest h @@ -386,10 +424,11 @@ class Job < ArvadosModel end def find_docker_image_locator - runtime_constraints['docker_image'] = - Rails.configuration.default_docker_image_for_jobs if ((runtime_constraints.is_a? Hash) and - (runtime_constraints['docker_image']).nil? and - Rails.configuration.default_docker_image_for_jobs) + if runtime_constraints.is_a? Hash + runtime_constraints['docker_image'] ||= + Rails.configuration.default_docker_image_for_jobs + end + resolve_runtime_constraint("docker_image", :docker_image_locator) do |image_search| image_tag = runtime_constraints['docker_image_tag'] @@ -399,6 +438,12 @@ class Job < ArvadosModel [false, "not found for #{image_search}"] end end + Rails.logger.info("docker_image_locator is #{docker_image_locator}") + if docker_image_locator && docker_image_locator_changed? + self.docker_image_locator = + Collection.docker_migration_pdh([current_user], docker_image_locator) + end + Rails.logger.info("docker_image_locator is #{docker_image_locator}") end def permission_to_update @@ -419,7 +464,7 @@ class Job < ArvadosModel output_changed? or log_changed? or tasks_summary_changed? or - state_changed? or + (state_changed? && state != Cancelled) or components_changed? logger.warn "User #{current_user.uuid if current_user} tried to change protected job attributes on locked #{self.class.to_s} #{uuid_was}" return false