Merge pull request #1945 from nspcc-dev/network/tls

cli: reload RPC-server TLS config on SIGHUP
This commit is contained in:
Roman Khimov 2021-05-05 15:24:30 +03:00 committed by GitHub
commit 4fb421738b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View file

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/signal" "os/signal"
"syscall"
"github.com/nspcc-dev/neo-go/cli/options" "github.com/nspcc-dev/neo-go/cli/options"
"github.com/nspcc-dev/neo-go/pkg/config" "github.com/nspcc-dev/neo-go/pkg/config"
@ -325,6 +326,9 @@ func startServer(ctx *cli.Context) error {
go serv.Start(errChan) go serv.Start(errChan)
rpcServer.Start(errChan) rpcServer.Start(errChan)
sighupCh := make(chan os.Signal, 1)
signal.Notify(sighupCh, syscall.SIGHUP)
fmt.Fprintln(ctx.App.Writer, logo()) fmt.Fprintln(ctx.App.Writer, logo())
fmt.Fprintln(ctx.App.Writer, serv.UserAgent) fmt.Fprintln(ctx.App.Writer, serv.UserAgent)
fmt.Fprintln(ctx.App.Writer) fmt.Fprintln(ctx.App.Writer)
@ -336,8 +340,20 @@ Main:
case err := <-errChan: case err := <-errChan:
shutdownErr = fmt.Errorf("server error: %w", err) shutdownErr = fmt.Errorf("server error: %w", err)
cancel() cancel()
case sig := <-sighupCh:
switch sig {
case syscall.SIGHUP:
log.Info("SIGHUP received, restarting rpc-server")
serverErr := rpcServer.Shutdown()
if serverErr != nil {
errChan <- fmt.Errorf("error while restarting rpc-server: %w", serverErr)
break
}
rpcServer = server.New(chain, cfg.ApplicationConfiguration.RPC, serv, serv.GetOracle(), log)
rpcServer.Start(errChan)
}
case <-grace.Done(): case <-grace.Done():
signal.Stop(sighupCh)
serv.Shutdown() serv.Shutdown()
if serverErr := rpcServer.Shutdown(); serverErr != nil { if serverErr := rpcServer.Shutdown(); serverErr != nil {
shutdownErr = fmt.Errorf("error on shutdown: %w", serverErr) shutdownErr = fmt.Errorf("error on shutdown: %w", serverErr)

View file

@ -52,6 +52,15 @@ Or specify a different network with appropriate flag like this:
By default the node will run in foreground using current standard output for By default the node will run in foreground using current standard output for
logging. logging.
### Restarting node services
To restart some of the node services without full node restart, send the SIGHUP
signal. List of the services to be restarted on SIGHUP receiving:
| Service | Action |
| --- | --- |
| RPC server | Restarting with the old configuration and updated TLS certificates |
### DB import/exports ### DB import/exports
Node operates using some database as a backend to store blockchain data. NeoGo Node operates using some database as a backend to store blockchain data. NeoGo