summaryrefslogtreecommitdiff
path: root/app/models/projects/build_artifacts_size_refresh.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/projects/build_artifacts_size_refresh.rb')
-rw-r--r--app/models/projects/build_artifacts_size_refresh.rb14
1 files changed, 10 insertions, 4 deletions
diff --git a/app/models/projects/build_artifacts_size_refresh.rb b/app/models/projects/build_artifacts_size_refresh.rb
index 959f486a50a..dee4afdefa6 100644
--- a/app/models/projects/build_artifacts_size_refresh.rb
+++ b/app/models/projects/build_artifacts_size_refresh.rb
@@ -36,6 +36,7 @@ module Projects
before_transition created: :running do |refresh|
refresh.reset_project_statistics!
refresh.refresh_started_at = Time.zone.now
+ refresh.last_job_artifact_id_on_refresh_start = refresh.project.job_artifacts.last&.id
end
before_transition running: any do |refresh, transition|
@@ -49,6 +50,7 @@ module Projects
scope :stale, -> { with_state(:running).where('updated_at < ?', STALE_WINDOW.ago) }
scope :remaining, -> { with_state(:created, :pending).or(stale) }
+ scope :processing_queue, -> { remaining.order(state: :desc) }
def self.enqueue_refresh(projects)
now = Time.zone.now
@@ -64,8 +66,7 @@ module Projects
next_refresh = nil
transaction do
- next_refresh = remaining
- .order(:state, :updated_at)
+ next_refresh = processing_queue
.lock('FOR UPDATE SKIP LOCKED')
.take
@@ -83,9 +84,14 @@ module Projects
def next_batch(limit:)
project.job_artifacts.select(:id, :size)
- .where('created_at <= ? AND id > ?', refresh_started_at, last_job_artifact_id.to_i)
- .order(:created_at)
+ .id_before(last_job_artifact_id_on_refresh_start)
+ .id_after(last_job_artifact_id.to_i)
+ .ordered_by_id
.limit(limit)
end
+
+ def started?
+ !created?
+ end
end
end