diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 44af62efb9766d91b68fa5c2a5bd009be5920d88..e261023bc9ebe27fcf0f2333faacfb55d0829cdf 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -220,6 +220,10 @@ module Ci
         next unless build.project
 
         build.deployment&.drop
+      end
+
+      after_transition any => [:failed] do |build|
+        next unless build.project
 
         if build.retry_failure?
           begin
diff --git a/app/models/clusters/applications/ingress.rb b/app/models/clusters/applications/ingress.rb
index 8f8790585a323e8953f2b6a8d0d1612508eff79e..7799f069742db5104c36ebe0a3d781950410a33a 100644
--- a/app/models/clusters/applications/ingress.rb
+++ b/app/models/clusters/applications/ingress.rb
@@ -23,7 +23,7 @@ module Clusters
       FETCH_IP_ADDRESS_DELAY = 30.seconds
 
       state_machine :status do
-        before_transition any => [:installed] do |application|
+        after_transition any => [:installed] do |application|
           application.run_after_commit do
             ClusterWaitForIngressIpAddressWorker.perform_in(
               FETCH_IP_ADDRESS_DELAY, application.name, application.id)
diff --git a/app/models/clusters/applications/knative.rb b/app/models/clusters/applications/knative.rb
index 0c72d7d83406b6eeb0e05bc2be1172f671ae6ca5..5ac152278dabd662a3e5bb4e83a6aee1e1d3bff6 100644
--- a/app/models/clusters/applications/knative.rb
+++ b/app/models/clusters/applications/knative.rb
@@ -20,7 +20,7 @@ module Clusters
       self.reactive_cache_key = ->(knative) { [knative.class.model_name.singular, knative.id] }
 
       state_machine :status do
-        before_transition any => [:installed] do |application|
+        after_transition any => [:installed] do |application|
           application.run_after_commit do
             ClusterWaitForIngressIpAddressWorker.perform_in(
               FETCH_IP_ADDRESS_DELAY, application.name, application.id)
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 997c07cd8882bf4051fe06ad17cbd2189b4b5a81..9f017a1bbcb36f16286d179e6cf513ff41d80d0a 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -107,7 +107,9 @@ class MergeRequest < ActiveRecord::Base
 
     before_transition any => :opened do |merge_request|
       merge_request.merge_jid = nil
+    end
 
+    after_transition any => :opened do |merge_request|
       merge_request.run_after_commit do
         UpdateHeadPipelineForMergeRequestWorker.perform_async(merge_request.id)
       end
diff --git a/ee/app/models/ee/project_import_state.rb b/ee/app/models/ee/project_import_state.rb
index eacae6c4c4abfd1494a2ff5fe9b565d532e951d7..dd92c345ddf7b3223e67aab79cb54208cb837cec 100644
--- a/ee/app/models/ee/project_import_state.rb
+++ b/ee/app/models/ee/project_import_state.rb
@@ -59,7 +59,9 @@ module EE
             state.reset_retry_count
             state.set_next_execution_timestamp
           end
+        end
 
+        after_transition started: :finished do |state, _|
           if ::Gitlab::CurrentSettings.current_application_settings.elasticsearch_indexing?
             state.run_after_commit do
               last_indexed_commit = state.project.index_status&.last_commit