API: `jobs/request`: can switch to use primary when optimistic locking raises exception
Today, the loop for jobs/request
is defined as following:
each_build do |build_id|
begin
build = Ci::Build.find(build_id)
build.run!
return build
rescue ActiveRecord::StaleObjectError
end
end
If build.run!
raises exception, a next build is tried, but this
makes all subsequent calls to use primary, as a write happened due
to unsuccessful status transition.
We should avoid sticking, and prefer to continue using replicas in such case.
Follow-up after: &5434 (comment 527341655)
Edited by Kamil Trzciński