Merge pull request #1276 from wpaulino/shutdown-while-chain-sync

lnd: add interrupt handler to handle shutdown requests while syncing chain backend
This commit is contained in:
Olaoluwa Osuntokun 2018-05-23 15:39:30 -07:00 committed by GitHub
commit 6382215346
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 14 deletions

19
lnd.go
View File

@ -570,7 +570,20 @@ func lndMain() error {
ltndLog.Infof("Waiting for chain backend to finish sync, "+
"start_height=%v", bestHeight)
// We'll add an interrupt handler in order to process shutdown
// requests while the chain backend syncs.
addInterruptHandler(func() {
rpcServer.Stop()
fundingMgr.Stop()
})
for {
select {
case <-shutdownChannel:
return nil
default:
}
synced, _, err := activeChainControl.wallet.IsSynced()
if err != nil {
return err
@ -617,16 +630,12 @@ func lndMain() error {
}
addInterruptHandler(func() {
ltndLog.Infof("Gracefully shutting down the server...")
rpcServer.Stop()
fundingMgr.Stop()
server.Stop()
if pilot != nil {
pilot.Stop()
}
server.WaitForShutdown()
server.Stop()
})
// Wait for shutdown signal from either a graceful server stop or from

View File

@ -663,11 +663,6 @@ func (s *server) Stopped() bool {
return atomic.LoadInt32(&s.shutdown) != 0
}
// WaitForShutdown blocks until all goroutines have been stopped.
func (s *server) WaitForShutdown() {
s.wg.Wait()
}
// initNetworkBootstrappers initializes a set of network peer bootstrappers
// based on the server, and currently active bootstrap mechanisms as defined
// within the current configuration.

View File

@ -48,10 +48,8 @@ func mainInterruptHandler() {
isShutdown = true
ltndLog.Infof("Shutting down...")
// Run handlers in LIFO order.
for i := range interruptCallbacks {
idx := len(interruptCallbacks) - 1 - i
callback := interruptCallbacks[idx]
// Execute the interrupt callbacks in FIFO order.
for _, callback := range interruptCallbacks {
callback()
}