mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
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:
parent
4ce7610fe9
commit
a5f92da438
1
AUTHORS
1
AUTHORS
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user