Class: Ci::JobArtifacts::ExpireProjectBuildArtifactsService
- Inherits:
 - 
      Object
      
        
- Object
 - Ci::JobArtifacts::ExpireProjectBuildArtifactsService
 
 
- Defined in:
 - app/services/ci/job_artifacts/expire_project_build_artifacts_service.rb
 
Constant Summary collapse
- BATCH_SIZE =
 1000
Instance Method Summary collapse
- 
  
    
      #execute  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
rubocop:disable CodeReuse/ActiveRecord.
 - 
  
    
      #initialize(project_id, expiry_time)  ⇒ ExpireProjectBuildArtifactsService 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of ExpireProjectBuildArtifactsService.
 
Constructor Details
#initialize(project_id, expiry_time) ⇒ ExpireProjectBuildArtifactsService
Returns a new instance of ExpireProjectBuildArtifactsService.
      8 9 10 11  | 
    
      # File 'app/services/ci/job_artifacts/expire_project_build_artifacts_service.rb', line 8 def initialize(project_id, expiry_time) @project_id = project_id @expiry_time = expiry_time end  | 
  
Instance Method Details
#execute ⇒ Object
rubocop:disable CodeReuse/ActiveRecord
      14 15 16 17 18 19 20 21 22 23 24 25 26 27  | 
    
      # File 'app/services/ci/job_artifacts/expire_project_build_artifacts_service.rb', line 14 def execute scope = Ci::JobArtifact.select(:id).for_project(project_id).order(:id) file_type_values = Ci::JobArtifact.erasable_file_types.map { |file_type| [Ci::JobArtifact.file_types[file_type]] } from_sql = Arel::Nodes::Grouping.new(Arel::Nodes::ValuesList.new(file_type_values)).as('file_types (file_type)').to_sql array_scope = Ci::JobArtifact.from(from_sql).select(:file_type) array_mapping_scope = ->(file_type_expression) { Ci::JobArtifact.where(Ci::JobArtifact.arel_table[:file_type].eq(file_type_expression)) } Gitlab::Pagination::Keyset::Iterator .new(scope: scope, in_operator_optimization_options: { array_scope: array_scope, array_mapping_scope: array_mapping_scope }) .each_batch(of: BATCH_SIZE) do |batch| ids = batch.to_a.map(&:id) Ci::JobArtifact.unlocked.where(id: ids).update_all(locked: Ci::JobArtifact.lockeds[:unlocked], expire_at: expiry_time) end end  |