Prefer to use after_transition

Before_transition does not play nice when used with
OptimisticLocking and this can result in triggering
multiple events

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/55306
This commit is contained in:
Kamil Trzciński 2018-12-13 13:25:14 +01:00
parent 1a83d9387f
commit 7ebd36e302
4 changed files with 8 additions and 2 deletions

View file

@ -220,6 +220,10 @@ module Ci
next unless build.project next unless build.project
build.deployment&.drop build.deployment&.drop
end
after_transition any => [:failed] do |build|
next unless build.project
if build.retry_failure? if build.retry_failure?
begin begin

View file

@ -23,7 +23,7 @@ module Clusters
FETCH_IP_ADDRESS_DELAY = 30.seconds FETCH_IP_ADDRESS_DELAY = 30.seconds
state_machine :status do state_machine :status do
before_transition any => [:installed] do |application| after_transition any => [:installed] do |application|
application.run_after_commit do application.run_after_commit do
ClusterWaitForIngressIpAddressWorker.perform_in( ClusterWaitForIngressIpAddressWorker.perform_in(
FETCH_IP_ADDRESS_DELAY, application.name, application.id) FETCH_IP_ADDRESS_DELAY, application.name, application.id)

View file

@ -20,7 +20,7 @@ module Clusters
self.reactive_cache_key = ->(knative) { [knative.class.model_name.singular, knative.id] } self.reactive_cache_key = ->(knative) { [knative.class.model_name.singular, knative.id] }
state_machine :status do state_machine :status do
before_transition any => [:installed] do |application| after_transition any => [:installed] do |application|
application.run_after_commit do application.run_after_commit do
ClusterWaitForIngressIpAddressWorker.perform_in( ClusterWaitForIngressIpAddressWorker.perform_in(
FETCH_IP_ADDRESS_DELAY, application.name, application.id) FETCH_IP_ADDRESS_DELAY, application.name, application.id)

View file

@ -105,7 +105,9 @@ class MergeRequest < ActiveRecord::Base
before_transition any => :opened do |merge_request| before_transition any => :opened do |merge_request|
merge_request.merge_jid = nil merge_request.merge_jid = nil
end
after_transition any => :opened do |merge_request|
merge_request.run_after_commit do merge_request.run_after_commit do
UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id) UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id)
end end