Shopify / maintenance_tasks

A Rails engine for queueing and managing data migrations.
MIT License
1.05k stars 76 forks source link

Make sure the run cursor is saved in the job #1036

Closed etiennebarrie closed 5 months ago

etiennebarrie commented 5 months ago

If a job starts without a cursor (i.e. after a run is resumed), but the run has a cursor, we do use the cursor from the run in build_enumerator.

However, we don't store the cursor on the job itself at this point. If the first iteration fails, we go through the on_error callback and store the job cursor, which is nil, on the run, effectively losing the progress previously made on the run.

This fixes this issue by always storing the cursor on the job in build_enumerator, making sure the job and run have the same cursor.

Fixes #1033