From 4c6fa33706809c75a1de61eafc082a26de215c2f Mon Sep 17 00:00:00 2001 From: Johnny Graettinger Date: Wed, 2 Oct 2019 23:41:26 -0400 Subject: [PATCH] client: RouteCache should account for empty Route This can happen if a journal has no current broker assignments. --- broker/client/route_cache.go | 4 +--- broker/client/route_cache_test.go | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/broker/client/route_cache.go b/broker/client/route_cache.go index 015db5ff..f01dab9c 100644 --- a/broker/client/route_cache.go +++ b/broker/client/route_cache.go @@ -30,10 +30,8 @@ func NewRouteCache(size int, ttl time.Duration) *RouteCache { // UpdateRoute caches the provided Route for |item|, or invalidates it if |route| is nil. func (rc *RouteCache) UpdateRoute(item string, route *pb.Route) { - if route == nil { + if route == nil || len(route.Members) == 0 { rc.cache.Remove(item) - } else if len(route.Members) == 0 { - panic("expected members") } else { var cr = cachedRoute{ route: route.Copy(), diff --git a/broker/client/route_cache_test.go b/broker/client/route_cache_test.go index 9640c77b..9b9133dd 100644 --- a/broker/client/route_cache_test.go +++ b/broker/client/route_cache_test.go @@ -30,8 +30,9 @@ func (s *RouteCacheSuite) TestCachingCases(c *gc.C) { // Case: Routes which have fallen out of cache are not. c.Check(rc.Route(ctx, "A"), gc.DeepEquals, pb.Route{Primary: -1}) // Miss. - // Case: Invalidations remove routes from the cache. + // Case: Nil or empty routes invalidate the cache. rc.UpdateRoute("C", nil) + rc.UpdateRoute("C", new(pb.Route)) c.Check(rc.Route(ctx, "C"), gc.DeepEquals, pb.Route{Primary: -1}) // Miss. // Case: TTLs are enforced.