diff --git a/app/jobs/concerns/maintenance_tasks/task_job_concern.rb b/app/jobs/concerns/maintenance_tasks/task_job_concern.rb index af9ec6258..918c1ee6e 100644 --- a/app/jobs/concerns/maintenance_tasks/task_job_concern.rb +++ b/app/jobs/concerns/maintenance_tasks/task_job_concern.rb @@ -32,6 +32,7 @@ def retry_on(*, **) def build_enumerator(_run, cursor:) cursor ||= @run.cursor + self.cursor_position = cursor @collection_enum = @task.enumerator_builder(cursor: cursor) @collection_enum ||= case (collection = @task.collection) diff --git a/test/jobs/maintenance_tasks/task_job_test.rb b/test/jobs/maintenance_tasks/task_job_test.rb index c4dcee7de..b2bc591b5 100644 --- a/test/jobs/maintenance_tasks/task_job_test.rb +++ b/test/jobs/maintenance_tasks/task_job_test.rb @@ -237,6 +237,17 @@ class << self assert_equal "0", @run.reload.cursor end + test ".perform_now persists cursor when there's an error" do + run = Run.create!(task_name: "Maintenance::ErrorTask") + + TaskJob.perform_now(run) + assert_equal "1", run.reload.cursor + + run.enqueued! + TaskJob.perform_now(run) + assert_equal "1", run.reload.cursor + end + test ".perform_now starts job from cursor position when job resumes" do @run.update!(cursor: "0")