From: Peter Amstutz Date: Tue, 27 Sep 2016 21:18:06 +0000 (-0400) Subject: 8018: Create new container if there are retriable container requests. X-Git-Tag: 1.1.0~684^2~3 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/49987769d924c1bc77cbdc9e9b182c3e2cc09b2d 8018: Create new container if there are retriable container requests. --- diff --git a/services/api/app/models/container.rb b/services/api/app/models/container.rb index c1c3eae94b..037712db0d 100644 --- a/services/api/app/models/container.rb +++ b/services/api/app/models/container.rb @@ -282,6 +282,27 @@ class Container < ArvadosModel # that are associated with this container. if self.state_changed? and [Complete, Cancelled].include? self.state act_as_system_user do + + if self.state == Cancelled + retryable_requests = ContainerRequest.where("priority > 0 and state = 'Committed' and container_count < container_count_max") + else + retryable_requests = [] + end + + if retryable_requests.any? + c = Container.create!(command: self.command, + cwd: self.cwd, + environment: self.environment, + output_path: self.output_path, + container_image: self.container_image, + mounts: self.mounts, + runtime_constraints: self.runtime_constraints) + retryable_requests.each do |cr| + cr.container_uuid = c.uuid + cr.save! + end + end + # Notify container requests associated with this container ContainerRequest.where(container_uuid: uuid, :state => ContainerRequest::Committed).each do |cr| diff --git a/services/api/app/models/container_request.rb b/services/api/app/models/container_request.rb index f2d327ed58..27401fc0b1 100644 --- a/services/api/app/models/container_request.rb +++ b/services/api/app/models/container_request.rb @@ -176,6 +176,9 @@ class ContainerRequest < ArvadosModel if state_changed? and state == Committed and container_uuid.nil? resolve end + if self.container_uuid != self.container_uuid_was + self.container_count += 1 + end end def validate_runtime_constraints