@@ -91,13 +91,19 @@ func main() {
9191 h := newServiceHandler (kubeClient , agonesClient , health )
9292
9393 // creates a new file watcher for client certificate folder
94- watcher , _ := fsnotify .NewWatcher ()
94+ watcher , err := fsnotify .NewWatcher ()
95+ if err != nil {
96+ logger .WithError (err ).Fatal ("could not create watcher for client certs" )
97+ }
9598 defer watcher .Close () // nolint: errcheck
9699 if err := watcher .Add (certDir ); err != nil {
97100 logger .WithError (err ).Fatalf ("cannot watch folder %s for secret changes" , certDir )
98101 }
99102
100- watcherTLS , _ := fsnotify .NewWatcher ()
103+ watcherTLS , err := fsnotify .NewWatcher ()
104+ if err != nil {
105+ logger .WithError (err ).Fatal ("could not create watcher for tls certs" )
106+ }
101107 defer watcherTLS .Close () // nolint: errcheck
102108 if err := watcherTLS .Add (tlsDir ); err != nil {
103109 logger .WithError (err ).Fatalf ("cannot watch folder %s for secret changes" , tlsDir )
@@ -114,15 +120,15 @@ func main() {
114120 select {
115121 // watch for events
116122 case event := <- watcherTLS .Events :
117- h .tlsMutex .Lock ()
118123 tlsCert , err := readTLSCert ()
119124 if err != nil {
120125 logger .WithError (err ).Error ("could not load TLS cert; keeping old one" )
121126 } else {
127+ h .tlsMutex .Lock ()
122128 h .tlsCert = tlsCert
129+ h .tlsMutex .Unlock ()
123130 }
124131 logger .Infof ("Tls directory change event %v" , event )
125- h .tlsMutex .Unlock ()
126132 case event := <- watcher .Events :
127133 h .certMutex .Lock ()
128134 caCertPool , err := getCACertPool (certDir )
@@ -188,21 +194,24 @@ func newServiceHandler(kubeClient kubernetes.Interface, agonesClient versioned.I
188194 if err != nil {
189195 logger .WithError (err ).Fatal ("could not load CA certs." )
190196 }
197+ h .certMutex .Lock ()
191198 h .caCertPool = caCertPool
199+ h .certMutex .Unlock ()
192200
193201 tlsCert , err := readTLSCert ()
194202 if err != nil {
195203 logger .WithError (err ).Fatal ("could not load TLS certs." )
196204 }
205+ h .tlsMutex .Lock ()
197206 h .tlsCert = tlsCert
207+ h .tlsMutex .Unlock ()
198208
199209 return & h
200210}
201211
202212func readTLSCert () (* tls.Certificate , error ) {
203213 tlsCert , err := tls .LoadX509KeyPair (tlsDir + "tls.crt" , tlsDir + "tls.key" )
204214 if err != nil {
205- logger .WithError (err ).Infof ("failed to generate credentials" )
206215 return nil , err
207216 }
208217 return & tlsCert , nil
@@ -308,10 +317,12 @@ func getCACertPool(path string) (*x509.CertPool, error) {
308317
309318type serviceHandler struct {
310319 allocationCallback func (* allocationv1.GameServerAllocation ) (k8sruntime.Object , error )
311- certMutex sync.RWMutex
312- tlsMutex sync.RWMutex
313- caCertPool * x509.CertPool
314- tlsCert * tls.Certificate
320+
321+ certMutex sync.RWMutex
322+ caCertPool * x509.CertPool
323+
324+ tlsMutex sync.RWMutex
325+ tlsCert * tls.Certificate
315326}
316327
317328// Allocate implements the Allocate gRPC method definition
0 commit comments