Fix N+1 load of builds for batch cancel_running
There are a few places in the ci code base such as the ::Ci::CancelUserPipelinesService where we call cancel_running on a batch of jobs which results in N+1 queries for builds:
[1] pry(main)> User.first.pipelines.cancelable.find_each(&:cancel_running)
User Load (2.8ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
Ci::Pipeline Load (1.7ms) SELECT "ci_pipelines".* FROM "ci_pipelines" WHERE "ci_pipelines"."user_id" = 1 AND "ci_pipelines"."status" IN ('running', 'waiting_for_resource', 'preparing', 'pending', 'created', 'scheduled') ORDER BY "ci_pipelines"."id" ASC LIMIT 1000
(0.1ms) BEGIN
CommitStatus Load (2.3ms) SELECT "ci_builds".* FROM "ci_builds" WHERE "ci_builds"."commit_id" = 83 AND "ci_builds"."status" IN ('running', 'waiting_for_resource', 'preparing', 'pending', 'created', 'scheduled') ORDER BY "ci_builds"."id" ASC LIMIT 1000
(0.1ms) COMMIT
(0.1ms) BEGIN
CommitStatus Load (0.5ms) SELECT "ci_builds".* FROM "ci_builds" WHERE "ci_builds"."commit_id" = 84 AND "ci_builds"."status" IN ('running', 'waiting_for_resource', 'preparing', 'pending', 'created', 'scheduled') ORDER BY "ci_builds"."id" ASC LIMIT 1000
(0.1ms) COMMIT
(0.1ms) BEGIN
CommitStatus Load (0.5ms) SELECT "ci_builds".* FROM "ci_builds" WHERE "ci_builds"."commit_id" = 85 AND "ci_builds"."status" IN ('running', 'waiting_for_resource', 'preparing', 'pending', 'created', 'scheduled') ORDER BY "ci_builds"."id" ASC LIMIT 1000
(0.2ms) COMMIT
(0.1ms) BEGIN
CommitStatus Load (0.5ms) SELECT "ci_builds".* FROM "ci_builds" WHERE "ci_builds"."commit_id" = 86 AND "ci_builds"."status" IN ('running', 'waiting_for_resource', 'preparing', 'pending', 'created', 'scheduled') ORDER BY "ci_builds"."id" ASC LIMIT 1000
(0.1ms) COMMIT
Edited by Allison Browne