@@ -172,43 +172,56 @@ 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
+ if routeRemoved {
180
+ r .logger .Info ("route-unregistered" , slog .Any ("uri" , uri ))
181
+ } else {
182
+ r .logger .Info ("route-not-unregistered" , slog .Any ("uri" , uri ))
183
+ }
184
+
185
+ var logMsg string
186
+ if endpointRemoved {
187
+ logMsg = "endpoint-unregistered"
188
+ } else {
189
+ logMsg = "endpoint-not-unregistered"
190
+ }
191
+
192
+ if r .logger .Enabled (context .Background (), slog .LevelInfo ) {
193
+ r .logger .Info (logMsg , buildSlogAttrs (uri , endpoint )... )
194
+ }
179
195
}
180
196
181
- func (r * RouteRegistry ) unregister (uri route.Uri , endpoint * route.Endpoint ) {
197
+ func (r * RouteRegistry ) unregister (uri route.Uri , endpoint * route.Endpoint ) ( endpointRemoved , routeRemoved bool ) {
182
198
r .Lock ()
183
199
defer r .Unlock ()
184
200
185
201
uri = uri .RouteKey ()
186
202
187
203
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
- }
204
+ if pool == nil {
205
+ return false , false
206
+ }
199
207
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
- }
208
+ endpointRemoved = pool .Remove (endpoint )
209
+ if ! endpointRemoved {
210
+ return false , false
211
211
}
212
+
213
+ if ! pool .IsEmpty () {
214
+ return true , false
215
+ }
216
+
217
+ // If we have empty pool responses, the timeout for empty pools is greater than zero and the
218
+ // timeout of this pool has not yet expired, don't remove it yet.
219
+ if r .EmptyPoolResponseCode503 && r .EmptyPoolTimeout > 0 && time .Since (pool .LastUpdated ()) <= r .EmptyPoolTimeout {
220
+ return true , false
221
+ }
222
+
223
+ r .byURI .Delete (uri )
224
+ return true , true
212
225
}
213
226
214
227
func (r * RouteRegistry ) Lookup (uri route.Uri ) * route.EndpointPool {
0 commit comments