mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Restore Graceful Restarting & Socket Activation (#7274)
* Prevent deadlock in indexer initialisation during graceful restart * Move from gracehttp to our own service to add graceful ssh * Add timeout for start of indexers and make hammer time configurable * Fix issue with re-initialization in indexer during tests * move the code to detect use of closed to graceful * Handle logs gracefully - add a pid suffix just before restart * Move to using a cond and a holder for indexers * use time.Since * Add some comments and attribution * update modules.txt * Use zero to disable timeout * Move RestartProcess to its own file * Add cleanup routine
This commit is contained in:
		
					parent
					
						
							
								4a290bd64c
							
						
					
				
			
			
				commit
				
					
						167e8f18da
					
				
			
		
					 45 changed files with 1202 additions and 2009 deletions
				
			
		
							
								
								
									
										38
									
								
								modules/graceful/cleanup.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								modules/graceful/cleanup.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| // Copyright 2019 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package graceful | ||||
| 
 | ||||
| import "sync" | ||||
| 
 | ||||
| var cleanupWaitGroup sync.WaitGroup | ||||
| 
 | ||||
| func init() { | ||||
| 	cleanupWaitGroup = sync.WaitGroup{} | ||||
| 
 | ||||
| 	// There are three places that could inherit sockets: | ||||
| 	// | ||||
| 	// * HTTP or HTTPS main listener | ||||
| 	// * HTTP redirection fallback | ||||
| 	// * SSH | ||||
| 	// | ||||
| 	// If you add an additional place you must increment this number | ||||
| 	// and add a function to call InformCleanup if it's not going to be used | ||||
| 	cleanupWaitGroup.Add(3) | ||||
| 
 | ||||
| 	// Wait till we're done getting all of the listeners and then close | ||||
| 	// the unused ones | ||||
| 	go func() { | ||||
| 		cleanupWaitGroup.Wait() | ||||
| 		// Ignore the error here there's not much we can do with it | ||||
| 		// They're logged in the CloseProvidedListeners function | ||||
| 		_ = CloseProvidedListeners() | ||||
| 	}() | ||||
| } | ||||
| 
 | ||||
| // InformCleanup tells the cleanup wait group that we have either taken a listener | ||||
| // or will not be taking a listener | ||||
| func InformCleanup() { | ||||
| 	cleanupWaitGroup.Done() | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue