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

View file

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