mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Multiple Queue improvements: LevelDB Wait on empty, shutdown empty shadow level queue, reduce goroutines etc (#15693)
* move shutdownfns, terminatefns and hammerfns out of separate goroutines Coalesce the shutdownfns etc into a list of functions that get run at shutdown rather then have them run at goroutines blocked on selects. This may help reduce the background select/poll load in certain configurations. * The LevelDB queues can actually wait on empty instead of polling Slight refactor to cause leveldb queues to wait on empty instead of polling. * Shutdown the shadow level queue once it is empty * Remove bytefifo additional goroutine for readToChan as it can just be run in run * Remove additional removeWorkers goroutine for workers * Simplify the AtShutdown and AtTerminate functions and add Channel Flusher * Add shutdown flusher to CUQ * move persistable channel shutdown stuff to Shutdown Fn * Ensure that UPCQ has the correct config * handle shutdown during the flushing * reduce risk of race between zeroBoost and addWorkers * prevent double shutdown Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		| @@ -25,13 +25,21 @@ type Manager struct { | ||||
| 	forked                 bool | ||||
| 	lock                   *sync.RWMutex | ||||
| 	state                  state | ||||
| 	shutdown               chan struct{} | ||||
| 	hammer                 chan struct{} | ||||
| 	terminate              chan struct{} | ||||
| 	done                   chan struct{} | ||||
| 	shutdownCtx            context.Context | ||||
| 	hammerCtx              context.Context | ||||
| 	terminateCtx           context.Context | ||||
| 	doneCtx                context.Context | ||||
| 	shutdownCtxCancel      context.CancelFunc | ||||
| 	hammerCtxCancel        context.CancelFunc | ||||
| 	terminateCtxCancel     context.CancelFunc | ||||
| 	doneCtxCancel          context.CancelFunc | ||||
| 	runningServerWaitGroup sync.WaitGroup | ||||
| 	createServerWaitGroup  sync.WaitGroup | ||||
| 	terminateWaitGroup     sync.WaitGroup | ||||
|  | ||||
| 	toRunAtShutdown  []func() | ||||
| 	toRunAtHammer    []func() | ||||
| 	toRunAtTerminate []func() | ||||
| } | ||||
|  | ||||
| func newGracefulManager(ctx context.Context) *Manager { | ||||
| @@ -45,11 +53,11 @@ func newGracefulManager(ctx context.Context) *Manager { | ||||
| } | ||||
|  | ||||
| func (g *Manager) start(ctx context.Context) { | ||||
| 	// Make channels | ||||
| 	g.terminate = make(chan struct{}) | ||||
| 	g.shutdown = make(chan struct{}) | ||||
| 	g.hammer = make(chan struct{}) | ||||
| 	g.done = make(chan struct{}) | ||||
| 	// Make contexts | ||||
| 	g.terminateCtx, g.terminateCtxCancel = context.WithCancel(ctx) | ||||
| 	g.shutdownCtx, g.shutdownCtxCancel = context.WithCancel(ctx) | ||||
| 	g.hammerCtx, g.hammerCtxCancel = context.WithCancel(ctx) | ||||
| 	g.doneCtx, g.doneCtxCancel = context.WithCancel(ctx) | ||||
|  | ||||
| 	// Set the running state & handle signals | ||||
| 	g.setState(stateRunning) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user