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
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)

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 := 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
}