@@ -172,43 +172,57 @@ func (r *RouteRegistry) Unregister(uri route.Uri, endpoint *route.Endpoint) {
172
172
return
173
173
}
174
174
175
- r .unregister (uri , endpoint )
175
+ endpointRemoved , routeRemoved := r .unregister (uri , endpoint )
176
176
177
177
r .reporter .CaptureUnregistryMessage (endpoint )
178
178
179
+ // WARNING: this only works because there are only info log statements after this point. If you
180
+ // extend this function, this probably needs to be refactored.
181
+ if ! r .logger .Enabled (context .Background (), slog .LevelInfo ) {
182
+ return
183
+ }
184
+
185
+ if endpointRemoved {
186
+ r .logger .Info ("endpoint-unregistered" , buildSlogAttrs (uri , endpoint )... )
187
+ } else {
188
+ r .logger .Info ("endpoint-not-unregistered" , buildSlogAttrs (uri , endpoint )... )
189
+ }
190
+
191
+ if routeRemoved {
192
+ r .logger .Info ("route-unregistered" , slog .Any ("uri" , uri ))
193
+ } else {
194
+ r .logger .Info ("route-not-unregistered" , slog .Any ("uri" , uri ))
195
+ }
179
196
}
180
197
181
- func (r * RouteRegistry ) unregister (uri route.Uri , endpoint * route.Endpoint ) {
198
+ func (r * RouteRegistry ) unregister (uri route.Uri , endpoint * route.Endpoint ) ( endpointRemoved , routeRemoved bool ) {
182
199
r .Lock ()
183
200
defer r .Unlock ()
184
201
185
202
uri = uri .RouteKey ()
186
203
187
204
pool := r .byURI .Find (uri )
188
- if pool != nil {
189
- endpointRemoved := pool .Remove (endpoint )
190
- if endpointRemoved {
191
- if r .logger .Enabled (context .Background (), slog .LevelInfo ) {
192
- r .logger .Info ("endpoint-unregistered" , buildSlogAttrs (uri , endpoint )... )
193
- }
194
- } else {
195
- if r .logger .Enabled (context .Background (), slog .LevelInfo ) {
196
- r .logger .Info ("endpoint-not-unregistered" , buildSlogAttrs (uri , endpoint )... )
197
- }
198
- }
205
+ if pool == nil {
206
+ return false , false
207
+ }
199
208
200
- if pool .IsEmpty () {
201
- if r .EmptyPoolResponseCode503 && r .EmptyPoolTimeout > 0 {
202
- if time .Since (pool .LastUpdated ()) > r .EmptyPoolTimeout {
203
- r .byURI .Delete (uri )
204
- r .logger .Info ("route-unregistered" , slog .Any ("uri" , uri ))
205
- }
206
- } else {
207
- r .byURI .Delete (uri )
208
- r .logger .Info ("route-unregistered" , slog .Any ("uri" , uri ))
209
- }
210
- }
209
+ endpointRemoved = pool .Remove (endpoint )
210
+ if ! endpointRemoved {
211
+ return false , false
211
212
}
213
+
214
+ if ! pool .IsEmpty () {
215
+ return true , false
216
+ }
217
+
218
+ // If we have empty pool responses, the timeout for empty pools is greater than zero and the
219
+ // timeout of this pool has not yet expired, don't remove it yet.
220
+ if r .EmptyPoolResponseCode503 && r .EmptyPoolTimeout > 0 && time .Since (pool .LastUpdated ()) <= r .EmptyPoolTimeout {
221
+ return true , false
222
+ }
223
+
224
+ r .byURI .Delete (uri )
225
+ return true , true
212
226
}
213
227
214
228
func (r * RouteRegistry ) Lookup (uri route.Uri ) * route.EndpointPool {
0 commit comments