Add a chunk cleanup queue for async GC of empty chunks
Instead of having the Swift storage engine try to delete the empty chunk(s) synchronously, we simply queue them and have a worker come along after 30s to delete the empty chunks. This has a few key benefits: it is async (doesn't slow down the push code), helps deal with Swift's eventual consistency (less retries necessary) and is generic for other storage engines if/when they need this as well
This commit is contained in:
		
							parent
							
								
									59cb6bd216
								
							
						
					
					
						commit
						5f99448adc
					
				
					 12 changed files with 191 additions and 59 deletions
				
			
		
							
								
								
									
										10
									
								
								app.py
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								app.py
									
										
									
									
									
								
							|  | @ -172,13 +172,17 @@ app.url_map.converters['apirepopath'] = APIRepositoryPathConverter | |||
| 
 | ||||
| Principal(app, use_sessions=False) | ||||
| 
 | ||||
| tf = app.config['DB_TRANSACTION_FACTORY'] | ||||
| 
 | ||||
| chunk_cleanup_queue = WorkQueue(app.config['CHUNK_CLEANUP_QUEUE_NAME'], tf) | ||||
| 
 | ||||
| avatar = Avatar(app) | ||||
| login_manager = LoginManager(app) | ||||
| mail = Mail(app) | ||||
| prometheus = PrometheusPlugin(app) | ||||
| metric_queue = MetricQueue(prometheus) | ||||
| instance_keys = InstanceKeys(app) | ||||
| storage = Storage(app, metric_queue, instance_keys) | ||||
| storage = Storage(app, metric_queue, chunk_cleanup_queue, instance_keys) | ||||
| userfiles = Userfiles(app, storage) | ||||
| log_archive = LogArchive(app, storage) | ||||
| analytics = Analytics(app) | ||||
|  | @ -198,8 +202,6 @@ license_validator.start() | |||
| 
 | ||||
| start_cloudwatch_sender(metric_queue, app) | ||||
| 
 | ||||
| tf = app.config['DB_TRANSACTION_FACTORY'] | ||||
| 
 | ||||
| github_login = GithubOAuthConfig(app.config, 'GITHUB_LOGIN_CONFIG') | ||||
| github_trigger = GithubOAuthConfig(app.config, 'GITHUB_TRIGGER_CONFIG') | ||||
| gitlab_trigger = GitLabOAuthConfig(app.config, 'GITLAB_TRIGGER_CONFIG') | ||||
|  | @ -217,7 +219,7 @@ secscan_notification_queue = WorkQueue(app.config['SECSCAN_NOTIFICATION_QUEUE_NA | |||
|                                        has_namespace=False) | ||||
| 
 | ||||
| all_queues = [image_replication_queue, dockerfile_build_queue, notification_queue, | ||||
|               secscan_notification_queue] | ||||
|               secscan_notification_queue, chunk_cleanup_queue] | ||||
| 
 | ||||
| secscan_api = SecurityScannerAPI(app, app.config, storage) | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue