Commit adds signal handler to improve shutting down the bitcaskd application: (#131)

- server explicitly closes connections
 - server persists index on disk
This commit is contained in:
Victor Mogilin 2020-02-10 11:40:11 +03:00 committed by GitHub
parent 4ce7610fe9
commit a5f92da438
3 changed files with 25 additions and 2 deletions

@ -12,3 +12,4 @@ Kebert Xela kebertxela
panyun panyun
Whemoon Jang <palindrom615@gmail.com>
Yury Fedorov orlangure
o2gy84 <o2gy84@gmail.com>

@ -55,5 +55,7 @@ func main() {
os.Exit(2)
}
log.Fatal(server.Run())
if err = server.Run(); err != nil {
log.Fatal(err)
}
}

@ -2,7 +2,10 @@ package main
import (
"fmt"
"os"
"os/signal"
"strings"
"syscall"
log "github.com/sirupsen/logrus"
"github.com/tidwall/redcon"
@ -89,8 +92,13 @@ func (s *server) handleDel(cmd redcon.Command, conn redcon.Conn) {
}
}
func (s *server) Shutdown() (err error) {
err = s.db.Close()
return
}
func (s *server) Run() (err error) {
err = redcon.ListenAndServe(s.bind,
redServer := redcon.NewServerNetwork("tcp", s.bind,
func(conn redcon.Conn, cmd redcon.Command) {
switch strings.ToLower(string(cmd.Args[0])) {
case "ping":
@ -118,5 +126,17 @@ func (s *server) Run() (err error) {
func(conn redcon.Conn, err error) {
},
)
go func() {
signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Interrupt, syscall.SIGTERM)
s := <-signals
log.Infof("Shutdown server on signal %s", s)
redServer.Close()
}()
if err := redServer.ListenAndServe(); err == nil {
return s.Shutdown()
}
return
}