diff --git a/router/registry/registry.go b/router/registry/registry.go index ec463170..113e2491 100644 --- a/router/registry/registry.go +++ b/router/registry/registry.go @@ -204,8 +204,11 @@ func (r *rtr) loadRoutes(reg registry.Registry) error { // if the routes exist save them if len(routes) > 0 { logger.Tracef("Creating routes for service %v domain: %v", service, domain) - // save the routes without pumping out events - r.table.saveRoutes(service.Name, routes) + for _, rt := range routes { + if err := r.table.Create(rt); err != nil { + logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err) + } + } continue } @@ -224,7 +227,11 @@ func (r *rtr) loadRoutes(reg registry.Registry) error { if len(routes) > 0 { logger.Tracef("Creating routes for service %v domain: %v", srv, domain) - r.table.saveRoutes(srv.Name, routes) + for _, rt := range routes { + if err := r.table.Create(rt); err != nil { + logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err) + } + } } } } diff --git a/router/registry/table.go b/router/registry/table.go index e62fa915..7e4b0691 100644 --- a/router/registry/table.go +++ b/router/registry/table.go @@ -89,23 +89,6 @@ func (t *table) deleteService(service, network string) { t.routes[service] = routes } -// saveRoutes completely replaces the routes for a service -func (t *table) saveRoutes(service string, routes []router.Route) { - t.Lock() - defer t.Unlock() - - // delete old routes - delete(t.routes, service) - // make new map - t.routes[service] = make(map[uint64]*route) - - // iterate through new routes and save - for _, rt := range routes { - // save the new route - t.routes[service][rt.Hash()] = &route{rt, time.Now()} - } -} - // sendEvent sends events to all subscribed watchers func (t *table) sendEvent(e *router.Event) { t.RLock() @@ -369,7 +352,9 @@ func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) { } // cache the routes - t.saveRoutes(opts.Service, routes) + for _, rt := range routes { + t.Create(rt) + } // try again if routes, ok := readAndFilter(opts); ok {