X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/19ae770973482257117fe8ded5619c3018c4b60f..5603cefb38fbd2fc6493e8ccee587629e7af089e:/services/api/app/models/job.rb diff --git a/services/api/app/models/job.rb b/services/api/app/models/job.rb index 6c24293334..0ed5353577 100644 --- a/services/api/app/models/job.rb +++ b/services/api/app/models/job.rb @@ -2,6 +2,7 @@ class Job < ArvadosModel include HasUuid include KindAndEtag include CommonApiTemplate + serialize :components, Hash attr_protected :arvados_sdk_version, :docker_image_locator serialize :script_parameters, Hash serialize :runtime_constraints, Hash @@ -52,6 +53,7 @@ class Job < ArvadosModel t.add :queue_position t.add :node_uuids t.add :description + t.add :components end # Supported states for a job @@ -78,12 +80,13 @@ class Job < ArvadosModel end def queue_position - Job::queue.each_with_index do |job, index| - if job[:uuid] == self.uuid - return index - end - end - nil + # We used to report this accurately, but the implementation made queue + # API requests O(n**2) for the size of the queue. See #8800. + # We've soft-disabled it because it's not clear we even want this + # functionality: now that we have Node Manager with support for multiple + # node sizes, "queue position" tells you very little about when a job will + # run. + state == Queued ? 0 : nil end def self.running @@ -92,8 +95,7 @@ class Job < ArvadosModel end def lock locked_by_uuid - transaction do - self.reload + with_lock do unless self.state == Queued and self.is_locked_by_uuid.nil? raise AlreadyLockedError end @@ -238,7 +240,8 @@ class Job < ArvadosModel output_changed? or log_changed? or tasks_summary_changed? or - state_changed? + state_changed? 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 end