fixed issue and determined better way to generate boot dependency paths for services
This commit is contained in:
parent
a6f2b9d7c1
commit
5bb23c1d93
2 changed files with 17 additions and 11 deletions
|
@ -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()
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"level": "DEBUG",
|
"level": "INFO",
|
||||||
"handlers": ["console"]
|
"handlers": ["console"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue