Skip to content

Commit c367b3a

Browse files
maxmoehlhoffmaen
andcommitted
refactor: unregister logic for route registry
Resolves: cloudfoundry#468 Co-Authored-By: Clemens Hoffmann <clemens.hoffmann@sap.com>
1 parent e553e9e commit c367b3a

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

src/code.cloudfoundry.org/gorouter/registry/registry.go

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -172,43 +172,56 @@ func (r *RouteRegistry) Unregister(uri route.Uri, endpoint *route.Endpoint) {
172172
return
173173
}
174174

175-
r.unregister(uri, endpoint)
175+
endpointRemoved, routeRemoved := r.unregister(uri, endpoint)
176176

177177
r.reporter.CaptureUnregistryMessage(endpoint)
178178

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+
}
179195
}
180196

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) {
182198
r.Lock()
183199
defer r.Unlock()
184200

185201
uri = uri.RouteKey()
186202

187203
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+
}
199207

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
211211
}
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
212225
}
213226

214227
func (r *RouteRegistry) Lookup(uri route.Uri) *route.EndpointPool {

src/code.cloudfoundry.org/gorouter/registry/registry_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,12 @@ var _ = Describe("RouteRegistry", func() {
650650
Context("EmptyPoolResponseCode503 is true and EmptyPoolTimeout greater than 0", func() {
651651
JustBeforeEach(func() {
652652
r.EmptyPoolResponseCode503 = true
653-
r.EmptyPoolTimeout = 5 * time.Second
653+
r.EmptyPoolTimeout = 1 * time.Second
654+
r.StartPruningCycle()
655+
})
656+
657+
JustAfterEach(func() {
658+
r.StopPruningCycle()
654659
})
655660

656661
It("Removes the route after EmptyPoolTimeout period of time is passed", func() {
@@ -659,10 +664,7 @@ var _ = Describe("RouteRegistry", func() {
659664

660665
r.Unregister("bar", barEndpoint)
661666
Expect(r.NumUris()).To(Equal(1))
662-
time.Sleep(r.EmptyPoolTimeout)
663-
r.Unregister("bar", barEndpoint)
664-
Expect(r.NumUris()).To(Equal(0))
665-
667+
Eventually(r.NumUris).WithTimeout(r.EmptyPoolTimeout + time.Second).Should(Equal(0))
666668
})
667669
})
668670

0 commit comments

Comments
 (0)