X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5d8ebb8d00de8c3afa59045fa929536ff8973881..33021029867be4a2240f0d3673045dfac7598350:/services/api/app/models/container.rb?ds=sidebyside diff --git a/services/api/app/models/container.rb b/services/api/app/models/container.rb index 0682676c5c..fb900a993d 100644 --- a/services/api/app/models/container.rb +++ b/services/api/app/models/container.rb @@ -17,13 +17,17 @@ class Container < ArvadosModel extend DbCurrentTime extend LogReuseInfo + # Posgresql JSONB columns should NOT be declared as serialized, Rails 5 + # already know how to properly treat them. + attribute :secret_mounts, :jsonbHash, default: {} + attribute :runtime_status, :jsonbHash, default: {} + attribute :runtime_auth_scopes, :jsonbHash, default: {} + serialize :environment, Hash serialize :mounts, Hash serialize :runtime_constraints, Hash serialize :command, Array serialize :scheduling_parameters, Hash - serialize :secret_mounts, Hash - serialize :runtime_status, Hash before_validation :fill_field_defaults, :if => :new_record? before_validation :set_timestamps @@ -346,7 +350,7 @@ class Container < ArvadosModel transaction do reload check_lock_fail - update_attributes!(state: Locked) + update_attributes!(state: Locked, lock_count: self.lock_count+1) end end @@ -364,7 +368,14 @@ class Container < ArvadosModel transaction do reload(lock: 'FOR UPDATE') check_unlock_fail - update_attributes!(state: Queued) + if self.lock_count < Rails.configuration.max_container_dispatch_attempts + update_attributes!(state: Queued) + else + update_attributes!(state: Cancelled, + runtime_status: { + error: "Container exceeded 'max_container_dispatch_attempts' (lock_count=#{self.lock_count}." + }) + end end end @@ -457,7 +468,7 @@ class Container < ArvadosModel case self.state when Locked - permitted.push :priority, :runtime_status, :log + permitted.push :priority, :runtime_status, :log, :lock_count when Queued permitted.push :priority @@ -478,7 +489,7 @@ class Container < ArvadosModel when Running permitted.push :finished_at, *progress_attrs when Queued, Locked - permitted.push :finished_at, :log + permitted.push :finished_at, :log, :runtime_status end else