55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class Namespace::AggregationSchedule < ApplicationRecord
 | |
|   include AfterCommitQueue
 | |
|   include ExclusiveLeaseGuard
 | |
| 
 | |
|   self.primary_key = :namespace_id
 | |
| 
 | |
|   REDIS_SHARED_KEY = 'gitlab:update_namespace_statistics_delay'
 | |
| 
 | |
|   belongs_to :namespace
 | |
| 
 | |
|   after_create :schedule_root_storage_statistics
 | |
| 
 | |
|   def default_lease_timeout
 | |
|     if Feature.enabled?(:reduce_aggregation_schedule_lease, namespace.root_ancestor)
 | |
|       2.minutes.to_i
 | |
|     else
 | |
|       30.minutes.to_i
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def schedule_root_storage_statistics
 | |
|     run_after_commit_or_now do
 | |
|       try_obtain_lease do
 | |
|         Namespaces::RootStatisticsWorker
 | |
|           .perform_async(namespace_id)
 | |
| 
 | |
|         Namespaces::RootStatisticsWorker
 | |
|           .perform_in(default_lease_timeout, namespace_id)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   # Used by ExclusiveLeaseGuard
 | |
|   def lease_timeout
 | |
|     default_lease_timeout
 | |
|   end
 | |
| 
 | |
|   # Used by ExclusiveLeaseGuard
 | |
|   def lease_key
 | |
|     "namespace:namespaces_root_statistics:#{namespace_id}"
 | |
|   end
 | |
| 
 | |
|   # Used by ExclusiveLeaseGuard
 | |
|   # Overriding value as we never release the lease
 | |
|   # before the timeout in order to prevent multiple
 | |
|   # RootStatisticsWorker to start in a short span of time
 | |
|   def lease_release?
 | |
|     false
 | |
|   end
 | |
| end
 |