From 1952d43073f571ec0b4c1bb19d8203876866fab8 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Wed, 7 Dec 2016 19:06:51 +0100 Subject: [PATCH] Initial try for parallelization. --- cdist/config.py | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/cdist/config.py b/cdist/config.py index a20a4840..f3faa03a 100644 --- a/cdist/config.py +++ b/cdist/config.py @@ -267,11 +267,44 @@ class Config(object): else: yield cdist_object - def iterate_once_parallel(self): + def iterate_once(self): """ Iterate over the objects once - helper method for iterate_until_finished """ + if self.jobs: + objects_changed = self._iterate_once_parallel() + else: + objects_changed = self._iterate_once_sequential() + return objects_changed + + def _iterate_once_sequential(self): + objects_changed = False + + for cdist_object in self.object_list(): + if cdist_object.requirements_unfinished(cdist_object.requirements): + """We cannot do anything for this poor object""" + continue + + if cdist_object.state == core.CdistObject.STATE_UNDEF: + """Prepare the virgin object""" + + self.object_prepare(cdist_object) + objects_changed = True + + if cdist_object.requirements_unfinished(cdist_object.autorequire): + """The previous step created objects we depend on - + wait for them + """ + continue + + if cdist_object.state == core.CdistObject.STATE_PREPARED: + self.object_run(cdist_object) + objects_changed = True + + return objects_changed + + def _iterate_once_parallel(self): objects_changed = False cargo = [] @@ -300,7 +333,8 @@ class Config(object): continue if cdist_object.state == core.CdistObject.STATE_PREPARED: - if cdist_object.requirements_unfinished(cdist_object.autorequire): + if cdist_object.requirements_unfinished( + cdist_object.autorequire): """The previous step created objects we depend on - wait for them """ @@ -327,8 +361,7 @@ class Config(object): objects_changed = True while objects_changed: - if self.jobs: - objects_changed = self.iterate_once_parallel() + objects_changed = self.iterate_once() # Check whether all objects have been finished unfinished_objects = []