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 panyun panyun
Whemoon Jang <palindrom615@gmail.com> Whemoon Jang <palindrom615@gmail.com>
Yury Fedorov orlangure Yury Fedorov orlangure
o2gy84 <o2gy84@gmail.com>

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

@ -2,7 +2,10 @@ package main
import ( import (
"fmt" "fmt"
"os"
"os/signal"
"strings" "strings"
"syscall"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/tidwall/redcon" "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) { func (s *server) Run() (err error) {
err = redcon.ListenAndServe(s.bind, redServer := redcon.NewServerNetwork("tcp", s.bind,
func(conn redcon.Conn, cmd redcon.Command) { func(conn redcon.Conn, cmd redcon.Command) {
switch strings.ToLower(string(cmd.Args[0])) { switch strings.ToLower(string(cmd.Args[0])) {
case "ping": case "ping":
@ -118,5 +126,17 @@ func (s *server) Run() (err error) {
func(conn redcon.Conn, 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 return
} }