@@ -20,7 +20,7 @@ use std::{collections::BTreeSet, sync::Arc};
2020
2121use futures:: Stream ;
2222use k8s_openapi:: api:: core:: v1:: ConfigMap ;
23- use kube:: runtime:: watcher:: Event ;
23+ use kube:: { core :: DeserializeGuard , runtime:: watcher:: Event } ;
2424
2525use agones:: GameServer ;
2626
@@ -104,10 +104,13 @@ fn configmap_events(
104104fn gameserver_events (
105105 client : kube:: Client ,
106106 namespace : impl AsRef < str > ,
107- ) -> impl Stream < Item = Result < Event < GameServer > , kube:: runtime:: watcher:: Error > > {
107+ ) -> impl Stream < Item = Result < Event < DeserializeGuard < GameServer > > , kube:: runtime:: watcher:: Error > >
108+ {
108109 let gameservers_namespace = namespace. as_ref ( ) ;
109- let gameservers: kube:: Api < GameServer > = kube:: Api :: namespaced ( client, gameservers_namespace) ;
110- let gs_writer = kube:: runtime:: reflector:: store:: Writer :: < GameServer > :: default ( ) ;
110+ let gameservers: kube:: Api < DeserializeGuard < GameServer > > =
111+ kube:: Api :: namespaced ( client, gameservers_namespace) ;
112+ let gs_writer =
113+ kube:: runtime:: reflector:: store:: Writer :: < DeserializeGuard < GameServer > > :: default ( ) ;
111114 let mut config = kube:: runtime:: watcher:: Config :: default ( )
112115 // Default timeout is 5 minutes, far too slow for us to react.
113116 . timeout ( 15 )
@@ -134,7 +137,15 @@ pub fn update_endpoints_from_gameservers(
134137 for await event in gameserver_events( client, namespace) {
135138 let ads = address_selector. as_ref( ) ;
136139 match event? {
137- Event :: Apply ( server) => {
140+ Event :: Apply ( result) => {
141+ let server = match result. 0 {
142+ Ok ( server) => server,
143+ Err ( error) => {
144+ tracing:: debug!( %error, "couldn't decode gameserver event" ) ;
145+ continue ;
146+ }
147+ } ;
148+
138149 tracing:: debug!( "received applied event from k8s" ) ;
139150 if !server. is_allocated( ) {
140151 yield Ok ( ( ) ) ;
@@ -151,7 +162,15 @@ pub fn update_endpoints_from_gameservers(
151162 . replace( locality. clone( ) , endpoint) ;
152163 }
153164 Event :: Init => { } ,
154- Event :: InitApply ( server) => {
165+ Event :: InitApply ( result) => {
166+ let server = match result. 0 {
167+ Ok ( server) => server,
168+ Err ( error) => {
169+ tracing:: debug!( %error, "couldn't decode gameserver event" ) ;
170+ continue ;
171+ }
172+ } ;
173+
155174 if server. is_allocated( ) {
156175 if let Some ( ep) = server. endpoint( ads) {
157176 servers. insert( ep) ;
@@ -168,7 +187,15 @@ pub fn update_endpoints_from_gameservers(
168187
169188 config. clusters. write( ) . insert( locality. clone( ) , std:: mem:: take( & mut servers) ) ;
170189 }
171- Event :: Delete ( server) => {
190+ Event :: Delete ( result) => {
191+ let server = match result. 0 {
192+ Ok ( server) => server,
193+ Err ( error) => {
194+ tracing:: debug!( %error, "couldn't decode gameserver event" ) ;
195+ continue ;
196+ }
197+ } ;
198+
172199 tracing:: debug!( "received delete event from k8s" ) ;
173200 let found = if let Some ( endpoint) = server. endpoint( ads) {
174201 config. clusters. write( ) . remove_endpoint( & endpoint)
0 commit comments