From 54fbb14f189bedfa8b77b68e47e534c8d6d0dcf4 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Thu, 6 Aug 2020 12:42:14 +0100 Subject: [PATCH] Etcd router bug fixing etcd path prefix matching name (#1899) * add logging and don't get nodes where they exist in router * add more logging * Fix the etcd bug for name matching of keys and prefixes matching names --- registry.go | 1 + table.go | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/registry.go b/registry.go index 1eaa540..6b47621 100644 --- a/registry.go +++ b/registry.go @@ -197,6 +197,7 @@ func (r *rtr) manageRegistryRoutes(reg registry.Registry, action string) error { // fetchRoutes retrieves all the routes for a given service and creates them in the routing table func (r *rtr) fetchRoutes(service string) error { + logger.Tracef("Fetching route for %s domain: %v", service, registry.WildcardDomain) services, err := r.options.Registry.GetService(service, registry.GetDomain(registry.WildcardDomain)) if err == registry.ErrNotFound { logger.Tracef("Failed to find route for %s", service) diff --git a/table.go b/table.go index 2f1d748..5bfee76 100644 --- a/table.go +++ b/table.go @@ -245,21 +245,21 @@ func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) { } // readAndFilter routes for this service under read lock. - readAndFilter := func() ([]router.Route, bool) { + readAndFilter := func(q router.QueryOptions) ([]router.Route, bool) { t.RLock() defer t.RUnlock() - routes, ok := t.routes[opts.Service] + routes, ok := t.routes[q.Service] if !ok || len(routes) == 0 { return nil, false } - return findRoutes(routes, opts.Address, opts.Gateway, opts.Network, opts.Router, opts.Strategy), true + return findRoutes(routes, q.Address, q.Gateway, q.Network, q.Router, q.Strategy), true } if opts.Service != "*" { // try and load services from the cache - if routes, ok := readAndFilter(); ok { + if routes, ok := readAndFilter(opts); ok { return routes, nil } @@ -269,7 +269,7 @@ func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) { } // try again - if routes, ok := readAndFilter(); ok { + if routes, ok := readAndFilter(opts); ok { return routes, nil }