mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +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:
		| @@ -183,12 +183,7 @@ func Listen(host string, port int, ciphers []string, keyExchanges []string, macs | ||||
| 		log.Error("Failed to set Host Key. %s", err) | ||||
| 	} | ||||
|  | ||||
| 	go func() { | ||||
| 		err := srv.ListenAndServe() | ||||
| 		if err != nil { | ||||
| 			log.Error("Failed to serve with builtin SSH server. %s", err) | ||||
| 		} | ||||
| 	}() | ||||
| 	go listen(&srv) | ||||
|  | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										30
									
								
								modules/ssh/ssh_graceful.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								modules/ssh/ssh_graceful.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // +build !windows | ||||
|  | ||||
| // 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 ssh | ||||
|  | ||||
| import ( | ||||
| 	"code.gitea.io/gitea/modules/graceful" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
|  | ||||
| 	"github.com/gliderlabs/ssh" | ||||
| ) | ||||
|  | ||||
| func listen(server *ssh.Server) { | ||||
| 	gracefulServer := graceful.NewServer("tcp", server.Addr) | ||||
|  | ||||
| 	err := gracefulServer.ListenAndServe(server.Serve) | ||||
| 	if err != nil { | ||||
| 		log.Critical("Failed to start SSH server: %v", err) | ||||
| 	} | ||||
| 	log.Info("SSH Listener: %s Closed", server.Addr) | ||||
|  | ||||
| } | ||||
|  | ||||
| // Unused informs our cleanup routine that we will not be using a ssh port | ||||
| func Unused() { | ||||
| 	graceful.InformCleanup() | ||||
| } | ||||
							
								
								
									
										24
									
								
								modules/ssh/ssh_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								modules/ssh/ssh_windows.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // +build windows | ||||
|  | ||||
| // 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 ssh | ||||
|  | ||||
| import ( | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"github.com/gliderlabs/ssh" | ||||
| ) | ||||
|  | ||||
| func listen(server *ssh.Server) { | ||||
| 	err := server.ListenAndServe() | ||||
| 	if err != nil { | ||||
| 		log.Critical("Failed to serve with builtin SSH server. %s", err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Unused does nothing on windows | ||||
| func Unused() { | ||||
| 	// Do nothing | ||||
| } | ||||
		Reference in New Issue
	
	Block a user