mirror of
https://github.com/plashchynski/crono.git
synced 2026-03-26 11:21:42 +01:00
Add ability to define minimal time between job executions to support multiple corno nodes, so two different nodes will not execute the same job
Add Locking for the case that two nodes start perform job together.
This commit is contained in:
@@ -107,7 +107,23 @@ module Crono
|
||||
end
|
||||
|
||||
def perform_before_interval?
|
||||
self.last_performed_at.present? && self.last_performed_at > execution_interval.ago
|
||||
return true if self.last_performed_at.present? && self.last_performed_at > execution_interval.ago
|
||||
return true if model.updated_at.present? && model.created_at != model.updated_at && model.updated_at > execution_interval.ago
|
||||
|
||||
Crono::CronoJob.transaction do
|
||||
job_record = Crono::CronoJob.where(job_id: job_id).lock(true).first
|
||||
|
||||
return true if job_record.updated_at.present? &&
|
||||
job_record.updated_at != job_record.created_at &&
|
||||
job_record.updated_at > execution_interval.ago
|
||||
|
||||
job_record.touch
|
||||
|
||||
return true unless job_record.save
|
||||
end
|
||||
|
||||
# Means that this node is permit to perform the job.
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user