mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	The graceful manager has some bugs (#27643, #28062). This is a preparation for further fixes.
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2019 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package graceful
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| )
 | |
| 
 | |
| // Shutdown procedure:
 | |
| // * cancel ShutdownContext: the registered context consumers have time to do their cleanup (they could use the hammer context)
 | |
| // * cancel HammerContext: the all context consumers have limited time to do their cleanup (wait for a few seconds)
 | |
| // * cancel TerminateContext: the registered context consumers have time to do their cleanup (but they shouldn't use shutdown/hammer context anymore)
 | |
| // * cancel manager context
 | |
| // If the shutdown is triggered again during the shutdown procedure, the hammer context will be canceled immediately to force to shut down.
 | |
| 
 | |
| // ShutdownContext returns a context.Context that is Done at shutdown
 | |
| // Callers using this context should ensure that they are registered as a running server
 | |
| // in order that they are waited for.
 | |
| func (g *Manager) ShutdownContext() context.Context {
 | |
| 	return g.shutdownCtx
 | |
| }
 | |
| 
 | |
| // HammerContext returns a context.Context that is Done at hammer
 | |
| // Callers using this context should ensure that they are registered as a running server
 | |
| // in order that they are waited for.
 | |
| func (g *Manager) HammerContext() context.Context {
 | |
| 	return g.hammerCtx
 | |
| }
 | |
| 
 | |
| // TerminateContext returns a context.Context that is Done at terminate
 | |
| // Callers using this context should ensure that they are registered as a terminating server
 | |
| // in order that they are waited for.
 | |
| func (g *Manager) TerminateContext() context.Context {
 | |
| 	return g.terminateCtx
 | |
| }
 |