Cancelar la tarea pendiente si tomó mas de 10 minutos

Si la tarea se reintentó durante 10 minutos, lo más probable es que haya
quedado trabada en algún lado.  Este cambio permite volver a compilar
sitios al cambiar el estado a espera y cancelarse a sí misma.
This commit is contained in:
f 2021-07-29 14:46:29 -03:00
parent 5c36de818f
commit d456feac8e

View file

@ -5,13 +5,23 @@ class DeployJob < ApplicationJob
class DeployException < StandardError; end class DeployException < StandardError; end
# rubocop:disable Metrics/MethodLength # rubocop:disable Metrics/MethodLength
def perform(site, notify = true) def perform(site, notify = true, time = Time.now)
ActiveRecord::Base.connection_pool.with_connection do ActiveRecord::Base.connection_pool.with_connection do
@site = Site.find(site) @site = Site.find(site)
# Si ya hay una tarea corriendo, aplazar esta # Si ya hay una tarea corriendo, aplazar esta. Si estuvo
# esperando más de 10 minutos, recuperar el estado anterior.
#
# Como el trabajo actual se aplaza al siguiente, arrastrar la
# hora original para poder ir haciendo timeouts.
if @site.building? if @site.building?
DeployJob.perform_in(60, site, notify) if 10.minutes.ago >= time
@site.update status: 'waiting'
raise DeployException,
"#{@site.name} la tarea estuvo más de 10 minutos esperando, volviendo al estado original"
end
DeployJob.perform_in(60, site, notify, time)
return return
end end
@ -29,8 +39,11 @@ class DeployJob < ApplicationJob
end end
deploy_others deploy_others
notify_usuaries if notify
# Volver a la espera
@site.update status: 'waiting' @site.update status: 'waiting'
notify_usuaries if notify
end end
end end
# rubocop:enable Metrics/MethodLength # rubocop:enable Metrics/MethodLength