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