@@ -3,7 +3,7 @@ use std::sync::Arc;
3
3
4
4
use anyhow:: Result ;
5
5
use clap:: Parser ;
6
- use signal_hook:: consts:: { SIGINT , SIGQUIT , SIGTERM } ;
6
+ use signal_hook:: consts:: { SIGHUP , SIGINT , SIGQUIT , SIGTERM } ;
7
7
use signal_hook:: iterator:: Signals ;
8
8
use tikv_jemallocator:: Jemalloc ;
9
9
use tracing:: { debug, info} ;
@@ -59,7 +59,7 @@ fn main() -> Result<()> {
59
59
60
60
iptables:: rules_create ( & config) ?;
61
61
62
- wait_for_signal ( ) ?;
62
+ wait_for_signal ( & args , & workers ) ?;
63
63
64
64
iptables:: rules_destroy ( & config) ?;
65
65
@@ -68,15 +68,25 @@ fn main() -> Result<()> {
68
68
Ok ( ( ) )
69
69
}
70
70
71
- fn wait_for_signal ( ) -> Result < ( ) > {
72
- let sigs = vec ! [ SIGTERM , SIGQUIT , SIGINT ] ;
71
+ fn wait_for_signal ( args : & Args , workers : & [ Worker ] ) -> Result < ( ) > {
72
+ let sigs = vec ! [ SIGTERM , SIGQUIT , SIGINT , SIGHUP ] ;
73
73
74
74
let mut signals = Signals :: new ( sigs) ?;
75
75
76
76
for signal in & mut signals {
77
77
debug ! ( "Received a signal {:?}" , signal) ;
78
78
79
79
match signal {
80
+ SIGHUP => match Config :: from_file ( & args. config ) {
81
+ Ok ( new_config) => {
82
+ for worker in workers {
83
+ worker. update_config ( new_config. clone ( ) ) ;
84
+ }
85
+ }
86
+ Err ( e) => {
87
+ info ! ( "Failed to reload config: {e}" )
88
+ }
89
+ } ,
80
90
term_sig => {
81
91
info ! ( "Received a termination signal {:?}" , term_sig) ;
82
92
break ;
0 commit comments