fixed issue and determined better way to generate boot dependency paths for services

This commit is contained in:
Blake J. Harnden 2018-07-12 20:04:04 -07:00
parent a6f2b9d7c1
commit 5bb23c1d93
2 changed files with 17 additions and 11 deletions

View file

@ -228,16 +228,19 @@ class CoreServices(object):
""" """
# generate service map and find starting points # generate service map and find starting points
node_services = {service.name: service for service in services} node_services = {service.name: service for service in services}
is_dependency = set()
all_services = set() all_services = set()
has_dependency = set()
dependency_map = {}
for service in services: for service in services:
all_services.add(service.name) all_services.add(service.name)
for service_name in service.dependencies: if service.dependencies:
# check service needed is valid has_dependency.add(service.name)
if service_name not in node_services:
raise ValueError("service(%s) dependency does not exist: %s" % (service.name, service_name)) for dependency in service.dependencies:
is_dependency.add(service_name) dependents = dependency_map.setdefault(dependency, set())
starting_points = all_services - is_dependency dependents.add(service.name)
starting_points = all_services - has_dependency
# cycles means no starting points # cycles means no starting points
if not starting_points: if not starting_points:
@ -270,8 +273,9 @@ class CoreServices(object):
path.append(service.name) path.append(service.name)
path_set.add(service.name) path_set.add(service.name)
# retrieve and set dependencies to the stack # retrieve and dependent services and add to stack
stack.append(iter(service.dependencies)) dependents = iter(dependency_map.get(service.name, []))
stack.append(dependents)
startup.append(service) startup.append(service)
break break
# for loop completed without a break # for loop completed without a break
@ -281,8 +285,10 @@ class CoreServices(object):
path_set.remove(path.pop()) path_set.remove(path.pop())
if not path and startup: if not path and startup:
startup.reverse() # finalize startup path
startups.append(startup) startups.append(startup)
# reset new startup path
startup = [] startup = []
stack.pop() stack.pop()

View file

@ -14,7 +14,7 @@
} }
}, },
"root": { "root": {
"level": "DEBUG", "level": "INFO",
"handlers": ["console"] "handlers": ["console"]
} }
} }