optimize memory usage
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
28
registry.go
28
registry.go
@@ -2,7 +2,6 @@ package registry
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -151,9 +150,6 @@ func (r *rtr) createRoutes(service *registry.Service, network string) []router.R
|
|||||||
// manageServiceRoutes applies action to all routes of the service.
|
// manageServiceRoutes applies action to all routes of the service.
|
||||||
// It returns error of the action fails with error.
|
// It returns error of the action fails with error.
|
||||||
func (r *rtr) manageRoutes(service *registry.Service, action, network string) error {
|
func (r *rtr) manageRoutes(service *registry.Service, action, network string) error {
|
||||||
// action is the routing table action
|
|
||||||
action = strings.ToLower(action)
|
|
||||||
|
|
||||||
// create a set of routes from the service
|
// create a set of routes from the service
|
||||||
routes := r.createRoutes(service, network)
|
routes := r.createRoutes(service, network)
|
||||||
|
|
||||||
@@ -168,7 +164,9 @@ func (r *rtr) manageRoutes(service *registry.Service, action, network string) er
|
|||||||
|
|
||||||
// create the routes in the table
|
// create the routes in the table
|
||||||
for _, route := range routes {
|
for _, route := range routes {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Creating route %v domain: %v", route, network)
|
logger.Tracef("Creating route %v domain: %v", route, network)
|
||||||
|
}
|
||||||
if err := r.manageRoute(route, action); err != nil {
|
if err := r.manageRoute(route, action); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -195,7 +193,9 @@ func (r *rtr) loadRoutes(reg registry.Registry) error {
|
|||||||
|
|
||||||
// if the routes exist save them
|
// if the routes exist save them
|
||||||
if len(routes) > 0 {
|
if len(routes) > 0 {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Creating routes for service %v domain: %v", service, domain)
|
logger.Tracef("Creating routes for service %v domain: %v", service, domain)
|
||||||
|
}
|
||||||
for _, rt := range routes {
|
for _, rt := range routes {
|
||||||
err := r.table.Create(rt)
|
err := r.table.Create(rt)
|
||||||
|
|
||||||
@@ -205,9 +205,11 @@ func (r *rtr) loadRoutes(reg registry.Registry) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if logger.V(logger.ErrorLevel) {
|
||||||
logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err)
|
logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,7 +218,9 @@ func (r *rtr) loadRoutes(reg registry.Registry) error {
|
|||||||
// get the service to retrieve all its info
|
// get the service to retrieve all its info
|
||||||
srvs, err := reg.GetService(service.Name, registry.GetDomain(domain))
|
srvs, err := reg.GetService(service.Name, registry.GetDomain(domain))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Failed to get service %s domain: %s", service.Name, domain)
|
logger.Tracef("Failed to get service %s domain: %s", service.Name, domain)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,7 +229,9 @@ func (r *rtr) loadRoutes(reg registry.Registry) error {
|
|||||||
routes := r.createRoutes(srv, domain)
|
routes := r.createRoutes(srv, domain)
|
||||||
|
|
||||||
if len(routes) > 0 {
|
if len(routes) > 0 {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Creating routes for service %v domain: %v", srv, domain)
|
logger.Tracef("Creating routes for service %v domain: %v", srv, domain)
|
||||||
|
}
|
||||||
for _, rt := range routes {
|
for _, rt := range routes {
|
||||||
err := r.table.Create(rt)
|
err := r.table.Create(rt)
|
||||||
|
|
||||||
@@ -235,26 +241,34 @@ func (r *rtr) loadRoutes(reg registry.Registry) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if logger.V(logger.ErrorLevel) {
|
||||||
logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err)
|
logger.Errorf("Error creating route for service %v in domain %v: %v", service, domain, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookup retrieves all the routes for a given service and creates them in the routing table
|
// lookup retrieves all the routes for a given service and creates them in the routing table
|
||||||
func (r *rtr) lookup(service string) ([]router.Route, error) {
|
func (r *rtr) lookup(service string) ([]router.Route, error) {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Fetching route for %s domain: %v", service, registry.WildcardDomain)
|
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 {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Failed to find route for %s", service)
|
logger.Tracef("Failed to find route for %s", service)
|
||||||
|
}
|
||||||
return nil, router.ErrRouteNotFound
|
return nil, router.ErrRouteNotFound
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Failed to find route for %s: %v", service, err)
|
logger.Tracef("Failed to find route for %s: %v", service, err)
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("failed getting services: %v", err)
|
return nil, fmt.Errorf("failed getting services: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,11 +318,15 @@ func (r *rtr) watchRegistry(w registry.Watcher) error {
|
|||||||
|
|
||||||
// don't process nil entries
|
// don't process nil entries
|
||||||
if res.Service == nil {
|
if res.Service == nil {
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Trace("Received a nil service")
|
logger.Trace("Received a nil service")
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Router dealing with next route %s %+v\n", res.Action, res.Service)
|
logger.Tracef("Router dealing with next route %s %+v\n", res.Action, res.Service)
|
||||||
|
}
|
||||||
|
|
||||||
// get the services domain from metadata. Fallback to wildcard.
|
// get the services domain from metadata. Fallback to wildcard.
|
||||||
domain := getDomain(res.Service)
|
domain := getDomain(res.Service)
|
||||||
@@ -383,7 +401,9 @@ func (r *rtr) start() error {
|
|||||||
case <-r.exit:
|
case <-r.exit:
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
|
if logger.V(logger.TraceLevel) {
|
||||||
logger.Tracef("Router starting registry watch")
|
logger.Tracef("Router starting registry watch")
|
||||||
|
}
|
||||||
w, err := r.options.Registry.Watch(registry.WatchDomain(registry.WildcardDomain))
|
w, err := r.options.Registry.Watch(registry.WatchDomain(registry.WildcardDomain))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if logger.V(logger.DebugLevel) {
|
if logger.V(logger.DebugLevel) {
|
||||||
|
Reference in New Issue
Block a user