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
This commit is contained in:
Asim Aslam 2020-08-06 12:42:14 +01:00 committed by Vasiliy Tolstov
parent bb40377f76
commit 54fbb14f18
2 changed files with 6 additions and 5 deletions

View File

@ -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 // fetchRoutes retrieves all the routes for a given service and creates them in the routing table
func (r *rtr) fetchRoutes(service string) error { 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)) services, err := r.options.Registry.GetService(service, registry.GetDomain(registry.WildcardDomain))
if err == registry.ErrNotFound { if err == registry.ErrNotFound {
logger.Tracef("Failed to find route for %s", service) logger.Tracef("Failed to find route for %s", service)

View File

@ -245,21 +245,21 @@ func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) {
} }
// readAndFilter routes for this service under read lock. // readAndFilter routes for this service under read lock.
readAndFilter := func() ([]router.Route, bool) { readAndFilter := func(q router.QueryOptions) ([]router.Route, bool) {
t.RLock() t.RLock()
defer t.RUnlock() defer t.RUnlock()
routes, ok := t.routes[opts.Service] routes, ok := t.routes[q.Service]
if !ok || len(routes) == 0 { if !ok || len(routes) == 0 {
return nil, false 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 != "*" { if opts.Service != "*" {
// try and load services from the cache // try and load services from the cache
if routes, ok := readAndFilter(); ok { if routes, ok := readAndFilter(opts); ok {
return routes, nil return routes, nil
} }
@ -269,7 +269,7 @@ func (t *table) Query(q ...router.QueryOption) ([]router.Route, error) {
} }
// try again // try again
if routes, ok := readAndFilter(); ok { if routes, ok := readAndFilter(opts); ok {
return routes, nil return routes, nil
} }