@@ -15,6 +15,8 @@ import (
15
15
kinformers "k8s.io/client-go/informers"
16
16
"k8s.io/client-go/kubernetes"
17
17
kclientcmd "k8s.io/client-go/tools/clientcmd"
18
+ "os"
19
+ "os/signal"
18
20
)
19
21
20
22
func main () {
@@ -54,7 +56,8 @@ func main() {
54
56
55
57
driver .Register (logs .GetChildLogger ("Database Driver" ))
56
58
57
- ctx := context .Background ()
59
+ ctx , unregisterSignals := signal .NotifyContext (context .Background (), os .Interrupt )
60
+ defer unregisterSignals ()
58
61
59
62
db , err := database .NewDbFromConfig (& cfg .Database , logs .GetChildLogger ("Database" ))
60
63
defer db .Close ()
@@ -68,27 +71,34 @@ func main() {
68
71
69
72
informers := kinformers .NewSharedInformerFactory (k , 0 )
70
73
71
- g , ctx := errgroup .WithContext (ctx )
74
+ g , syncCtx := errgroup .WithContext (ctx )
72
75
73
76
g .Go (func () error {
74
77
return sync .NewSync (
75
78
db , schema .NewNode , informers .Core ().V1 ().Nodes ().Informer (), logs .GetChildLogger ("Nodes" ),
76
- ).Run (ctx )
79
+ ).Run (syncCtx )
77
80
})
78
81
79
82
g .Go (func () error {
80
83
return sync .NewSync (
81
84
db , schema .NewNamespace , informers .Core ().V1 ().Namespaces ().Informer (), logs .GetChildLogger ("Namespaces" ),
82
- ).Run (ctx )
85
+ ).Run (syncCtx )
83
86
})
84
87
85
88
g .Go (func () error {
86
89
return sync .NewSync (
87
90
db , schema .NewPod , informers .Core ().V1 ().Pods ().Informer (), logs .GetChildLogger ("Pods" ),
88
- ).Run (ctx )
91
+ ).Run (syncCtx )
89
92
})
90
93
91
- if err := g .Wait (); err != nil {
92
- logging .Fatal (errors .Wrap (err , "can't sync" ))
94
+ select {
95
+ case <- ctx .Done ():
96
+ logger .Info ("Shutting down" )
97
+ unregisterSignals ()
98
+ case <- syncCtx .Done ():
99
+ }
100
+
101
+ if err := g .Wait (); err != nil && ! errors .Is (err , context .Canceled ) {
102
+ logger .Fatalf ("%+v" , errors .Wrap (err , "can't sync" ))
93
103
}
94
104
}
0 commit comments