mirror of
https://github.com/docker/compose.git
synced 2025-07-20 04:04:29 +02:00
Fix flaky partial_change state test.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
be1476f24b
commit
5c968f9e15
@ -32,8 +32,8 @@ def parallel_execute(objects, func, get_name, msg, get_deps=None):
|
|||||||
|
|
||||||
done = 0
|
done = 0
|
||||||
errors = {}
|
errors = {}
|
||||||
|
results = []
|
||||||
error_to_reraise = None
|
error_to_reraise = None
|
||||||
returned = [None] * len(objects)
|
|
||||||
|
|
||||||
while done < len(objects):
|
while done < len(objects):
|
||||||
try:
|
try:
|
||||||
@ -46,14 +46,13 @@ def parallel_execute(objects, func, get_name, msg, get_deps=None):
|
|||||||
|
|
||||||
if exception is None:
|
if exception is None:
|
||||||
writer.write(get_name(obj), 'done')
|
writer.write(get_name(obj), 'done')
|
||||||
returned[objects.index(obj)] = result
|
results.append(result)
|
||||||
elif isinstance(exception, APIError):
|
elif isinstance(exception, APIError):
|
||||||
errors[get_name(obj)] = exception.explanation
|
errors[get_name(obj)] = exception.explanation
|
||||||
writer.write(get_name(obj), 'error')
|
writer.write(get_name(obj), 'error')
|
||||||
else:
|
else:
|
||||||
errors[get_name(obj)] = exception
|
errors[get_name(obj)] = exception
|
||||||
error_to_reraise = exception
|
error_to_reraise = exception
|
||||||
|
|
||||||
done += 1
|
done += 1
|
||||||
|
|
||||||
for obj_name, error in errors.items():
|
for obj_name, error in errors.items():
|
||||||
@ -62,7 +61,7 @@ def parallel_execute(objects, func, get_name, msg, get_deps=None):
|
|||||||
if error_to_reraise:
|
if error_to_reraise:
|
||||||
raise error_to_reraise
|
raise error_to_reraise
|
||||||
|
|
||||||
return returned
|
return results
|
||||||
|
|
||||||
|
|
||||||
def _no_deps(x):
|
def _no_deps(x):
|
||||||
@ -74,9 +73,8 @@ def setup_queue(objects, func, get_deps, get_name):
|
|||||||
get_deps = _no_deps
|
get_deps = _no_deps
|
||||||
|
|
||||||
results = Queue()
|
results = Queue()
|
||||||
|
started = set() # objects being processed
|
||||||
started = set() # objects, threads were started for
|
finished = set() # objects which have been processed
|
||||||
finished = set() # already finished objects
|
|
||||||
|
|
||||||
def do_op(obj):
|
def do_op(obj):
|
||||||
try:
|
try:
|
||||||
@ -96,11 +94,9 @@ def setup_queue(objects, func, get_deps, get_name):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def feed():
|
def feed():
|
||||||
ready_objects = [o for o in objects if ready(o)]
|
for obj in filter(ready, objects):
|
||||||
for obj in ready_objects:
|
|
||||||
started.add(obj)
|
started.add(obj)
|
||||||
t = Thread(target=do_op,
|
t = Thread(target=do_op, args=(obj,))
|
||||||
args=(obj,))
|
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ class BasicProjectTest(ProjectTestCase):
|
|||||||
super(BasicProjectTest, self).setUp()
|
super(BasicProjectTest, self).setUp()
|
||||||
|
|
||||||
self.cfg = {
|
self.cfg = {
|
||||||
'db': {'image': 'busybox:latest'},
|
'db': {'image': 'busybox:latest', 'command': 'top'},
|
||||||
'web': {'image': 'busybox:latest'},
|
'web': {'image': 'busybox:latest', 'command': 'top'},
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_no_change(self):
|
def test_no_change(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user