Merge pull request #640 from darko-poljak/bugfix/error_info_lost_with_jobs_#632
[BETA] bug: error info lost with parallel (option -j) #632
This commit is contained in:
		
				commit
				
					
						8eb0697b42
					
				
			
		
					 2 changed files with 74 additions and 66 deletions
				
			
		
							
								
								
									
										110
									
								
								cdist/config.py
									
										
									
									
									
								
							
							
						
						
									
										110
									
								
								cdist/config.py
									
										
									
									
									
								
							|  | @ -486,30 +486,27 @@ class Config(object): | |||
|         objects_changed = False | ||||
| 
 | ||||
|         for cdist_object in self.object_list(): | ||||
|             try: | ||||
|                 if cdist_object.requirements_unfinished( | ||||
|                         cdist_object.requirements): | ||||
|                     """We cannot do anything for this poor object""" | ||||
|                     continue | ||||
|             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""" | ||||
|             if cdist_object.state == core.CdistObject.STATE_UNDEF: | ||||
|                 """Prepare the virgin object""" | ||||
| 
 | ||||
|                     self.object_prepare(cdist_object) | ||||
|                     objects_changed = True | ||||
|                 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.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 | ||||
|             except cdist.Error as e: | ||||
|                 raise cdist.CdistObjectError(cdist_object, e) | ||||
|             if cdist_object.state == core.CdistObject.STATE_PREPARED: | ||||
|                 self.object_run(cdist_object) | ||||
|                 objects_changed = True | ||||
| 
 | ||||
|         return objects_changed | ||||
| 
 | ||||
|  | @ -694,42 +691,49 @@ class Config(object): | |||
| 
 | ||||
|     def object_prepare(self, cdist_object, transfer_type_explorers=True): | ||||
|         """Prepare object: Run type explorer + manifest""" | ||||
|         self.log.verbose("Preparing object {}".format(cdist_object.name)) | ||||
|         self.log.verbose( | ||||
|                 "Running manifest and explorers for " + cdist_object.name) | ||||
|         self.explorer.run_type_explorers(cdist_object, transfer_type_explorers) | ||||
|         self.manifest.run_type_manifest(cdist_object) | ||||
|         cdist_object.state = core.CdistObject.STATE_PREPARED | ||||
|         try: | ||||
|             self.log.verbose("Preparing object {}".format(cdist_object.name)) | ||||
|             self.log.verbose( | ||||
|                     "Running manifest and explorers for " + cdist_object.name) | ||||
|             self.explorer.run_type_explorers(cdist_object, | ||||
|                                              transfer_type_explorers) | ||||
|             self.manifest.run_type_manifest(cdist_object) | ||||
|             cdist_object.state = core.CdistObject.STATE_PREPARED | ||||
|         except cdist.Error as e: | ||||
|             raise cdist.CdistObjectError(cdist_object, e) | ||||
| 
 | ||||
|     def object_run(self, cdist_object): | ||||
|         """Run gencode and code for an object""" | ||||
|         try: | ||||
|             self.log.verbose("Running object " + cdist_object.name) | ||||
|             if cdist_object.state == core.CdistObject.STATE_DONE: | ||||
|                 raise cdist.Error(("Attempting to run an already finished " | ||||
|                                    "object: %s"), cdist_object) | ||||
| 
 | ||||
|         self.log.verbose("Running object " + cdist_object.name) | ||||
|         if cdist_object.state == core.CdistObject.STATE_DONE: | ||||
|             raise cdist.Error(("Attempting to run an already finished " | ||||
|                                "object: %s"), cdist_object) | ||||
|             # Generate | ||||
|             self.log.debug("Generating code for %s" % (cdist_object.name)) | ||||
|             cdist_object.code_local = self.code.run_gencode_local(cdist_object) | ||||
|             cdist_object.code_remote = self.code.run_gencode_remote( | ||||
|                 cdist_object) | ||||
|             if cdist_object.code_local or cdist_object.code_remote: | ||||
|                 cdist_object.changed = True | ||||
| 
 | ||||
|         # Generate | ||||
|         self.log.debug("Generating code for %s" % (cdist_object.name)) | ||||
|         cdist_object.code_local = self.code.run_gencode_local(cdist_object) | ||||
|         cdist_object.code_remote = self.code.run_gencode_remote(cdist_object) | ||||
|         if cdist_object.code_local or cdist_object.code_remote: | ||||
|             cdist_object.changed = True | ||||
|             # Execute | ||||
|             if cdist_object.code_local or cdist_object.code_remote: | ||||
|                 self.log.info("Processing %s" % (cdist_object.name)) | ||||
|             if not self.dry_run: | ||||
|                 if cdist_object.code_local: | ||||
|                     self.log.trace("Executing local code for %s" | ||||
|                                    % (cdist_object.name)) | ||||
|                     self.code.run_code_local(cdist_object) | ||||
|                 if cdist_object.code_remote: | ||||
|                     self.log.trace("Executing remote code for %s" | ||||
|                                    % (cdist_object.name)) | ||||
|                     self.code.transfer_code_remote(cdist_object) | ||||
|                     self.code.run_code_remote(cdist_object) | ||||
| 
 | ||||
|         # Execute | ||||
|         if cdist_object.code_local or cdist_object.code_remote: | ||||
|             self.log.info("Processing %s" % (cdist_object.name)) | ||||
|         if not self.dry_run: | ||||
|             if cdist_object.code_local: | ||||
|                 self.log.trace("Executing local code for %s" | ||||
|                                % (cdist_object.name)) | ||||
|                 self.code.run_code_local(cdist_object) | ||||
|             if cdist_object.code_remote: | ||||
|                 self.log.trace("Executing remote code for %s" | ||||
|                                % (cdist_object.name)) | ||||
|                 self.code.transfer_code_remote(cdist_object) | ||||
|                 self.code.run_code_remote(cdist_object) | ||||
| 
 | ||||
|         # Mark this object as done | ||||
|         self.log.trace("Finishing run of " + cdist_object.name) | ||||
|         cdist_object.state = core.CdistObject.STATE_DONE | ||||
|             # Mark this object as done | ||||
|             self.log.trace("Finishing run of " + cdist_object.name) | ||||
|             cdist_object.state = core.CdistObject.STATE_DONE | ||||
|         except cdist.Error as e: | ||||
|             raise cdist.CdistObjectError(cdist_object, e) | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ import logging | |||
| import os | ||||
| import glob | ||||
| import multiprocessing | ||||
| import cdist | ||||
| from cdist.mputil import mp_pool_run | ||||
| from . import util | ||||
| 
 | ||||
|  | @ -213,19 +214,22 @@ class Explorer(object): | |||
|     def transfer_type_explorers(self, cdist_type): | ||||
|         """Transfer the type explorers for the given type to the | ||||
|            remote side.""" | ||||
|         if cdist_type.explorers: | ||||
|             if cdist_type.name in self._type_explorers_transferred: | ||||
|                 self.log.trace("Skipping retransfer of type explorers for: %s", | ||||
|                                cdist_type) | ||||
|             else: | ||||
|                 source = os.path.join(self.local.type_path, | ||||
|                                       cdist_type.explorer_path) | ||||
|                 destination = os.path.join(self.remote.type_path, | ||||
|                                            cdist_type.explorer_path) | ||||
|                 self.remote.mkdir(destination) | ||||
|                 self.remote.transfer(source, destination) | ||||
|                 self.remote.run(["chmod", "0700", "%s/*" % (destination)]) | ||||
|                 self._type_explorers_transferred.append(cdist_type.name) | ||||
|         try: | ||||
|             if cdist_type.explorers: | ||||
|                 if cdist_type.name in self._type_explorers_transferred: | ||||
|                     self.log.trace(("Skipping retransfer of type explorers " | ||||
|                                     "for: %s"), cdist_type) | ||||
|                 else: | ||||
|                     source = os.path.join(self.local.type_path, | ||||
|                                           cdist_type.explorer_path) | ||||
|                     destination = os.path.join(self.remote.type_path, | ||||
|                                                cdist_type.explorer_path) | ||||
|                     self.remote.mkdir(destination) | ||||
|                     self.remote.transfer(source, destination) | ||||
|                     self.remote.run(["chmod", "0700", "%s/*" % (destination)]) | ||||
|                     self._type_explorers_transferred.append(cdist_type.name) | ||||
|         except cdist.Error as e: | ||||
|             raise cdist.CdistObjectError(cdist_object, e) | ||||
| 
 | ||||
|     def transfer_object_parameters(self, cdist_object): | ||||
|         """Transfer the parameters for the given object to the remote side.""" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue