"Skip outdated deployment jobs" should NOT drops running jobs immediately
Problem
This is one of the biggest issues in the Skip outdated deployment jobs feature:
Running deployments are dropped immediately. This is rather unsafe process that the deployment could be stuck in an corrupted state. We should not affect running deployments even if it's parallel execution.
Proposal
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index c25ba6f9268..be22e08090a 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -48,7 +48,7 @@ class Deployment < ApplicationRecord
scope :visible, -> { where(status: VISIBLE_STATUSES) }
scope :stoppable, -> { where.not(on_stop: nil).where.not(deployable_id: nil).success }
- scope :active, -> { where(status: %i[created running]) }
+ scope :before_running, -> { where(status: %i[created blocked]) }
scope :upcoming, -> { where(status: %i[blocked running]) }
scope :older_than, -> (deployment) { where('deployments.id < ?', deployment.id) }
scope :with_api_entity_associations, -> { preload({ deployable: { runner: [], tags: [], user: [], job_artifacts_archive: [] } }) }
diff --git a/app/services/deployments/older_deployments_drop_service.rb b/app/services/deployments/older_deployments_drop_service.rb
index 15384fb0db1..f84d278bf66 100644
--- a/app/services/deployments/older_deployments_drop_service.rb
+++ b/app/services/deployments/older_deployments_drop_service.rb
@@ -27,7 +27,7 @@ def execute
def older_deployments_builds
@deployment
.environment
- .active_deployments
+ .before_running
.older_than(@deployment)
.builds
end
In addition, we should use a feature flag to gradually rollout the change, since some users might rely on the problematic behavior.
Edited by Shinya Maeda