summaryrefslogtreecommitdiff
path: root/app/services/deployments/older_deployments_drop_service.rb
blob: e765d2484ea4a1496c3a119893563843c2179d9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# frozen_string_literal: true

module Deployments
  class OlderDeploymentsDropService
    attr_reader :deployment

    def initialize(deployment_id)
      @deployment = Deployment.find_by_id(deployment_id)
    end

    def execute
      return unless @deployment&.running?

      older_deployments.find_each do |older_deployment|
        Gitlab::OptimisticLocking.retry_lock(older_deployment.deployable) do |deployable|
          deployable.drop(:forward_deployment_failure)
        end
      rescue => e
        Gitlab::ErrorTracking.track_exception(e, subject_id: @deployment.id, deployment_id: older_deployment.id)
      end
    end

    private

    def older_deployments
      @deployment
        .environment
        .active_deployments
        .older_than(@deployment)
        .with_deployable
    end
  end
end