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