extras-buildsys/server ArchJob.py, 1.11, 1.12 PackageJob.py, 1.22, 1.23

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Mon Aug 15 16:00:10 UTC 2005


Author: dcbw

Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv22220/server

Modified Files:
	ArchJob.py PackageJob.py 
Log Message:
2005-08-15  Dan Williams <dcbw at redhat.com>

    * server/ArchJob.py
      server/PackageJob.py
        - Let "scratch" target jobs continue building even if one or more arches
            has failed




Index: ArchJob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/ArchJob.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ArchJob.py	15 Aug 2005 03:18:20 -0000	1.11
+++ ArchJob.py	15 Aug 2005 16:00:08 -0000	1.12
@@ -37,6 +37,7 @@
         self.jobid = jobid
         self.status = 'running'
         self.builder_status = ''
+        self._failure_noticed = False
         self.target = target
         self.arch = arch
         self._builder_gone = False
@@ -52,6 +53,12 @@
         self._certs['ca_cert'] = cfg.get_str("SSL", "ca_cert")
         self._certs['peer_ca_cert'] = cfg.get_str("SSL", "ca_cert")
 
+    def failure_noticed(self):
+        return self._failure_noticed
+
+    def set_failure_noticed(self):
+        self._failure_noticed = True
+
     def _builder_finished(self):
         if self.builder_status == 'done' or self.builder_status == 'killed' or self.builder_status == 'failed' or self.builder_status == 'orphaned':
             return True


Index: PackageJob.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/PackageJob.py,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- PackageJob.py	15 Aug 2005 03:18:20 -0000	1.22
+++ PackageJob.py	15 Aug 2005 16:00:08 -0000	1.23
@@ -509,30 +509,47 @@
             logtail = self._get_log_tail(e.arch)
             msg = "%s\n-------------------------------------------------\n\n%s\n" % (msg, logtail)
             self.email_result(self.username, resultstring=msg, subject=subj)
-            # Kill remaining jobs on other arches
-            self._kill_all_archjobs()
-            self._stage_failed(e.msg)
+
+            # Only non-scratch targets kill remaining jobs and file the entire
+            # build when one archjob fails
+            if self._target_cfg.get_bool("General", "scratch") == False:
+                # Kill remaining jobs on other arches
+                self._kill_all_archjobs()
+                self._stage_failed(e.msg)
 
     def _stage_building(self):
         # Count failed and completed jobs
         completed_jobs = 0
+        failed_jobs = 0
         self._archjobs_lock.acquire()
         for job in self.archjobs.values():
             if not job:
                 continue
             if job.get_status() is 'done':
+                completed_jobs = completed_jobs + 1
+
                 if job.builder_failed():
-                    msg = "Job failed on arch %s\n" % (job.arch)
-                    self._archjobs_lock.release()
-                    raise BuildError(msg, job.arch)
-                else:
-                    completed_jobs = completed_jobs + 1
+                    failed_jobs = failed_jobs + 1
+
+                    # Normal jobs will just stop when a single archjob fails, but
+                    # scratch targets don't kill the build when one fails.  However,
+                    # even for scratch targets, we still want to notify the user if
+                    # a particular arch fails.
+                    if not job.failure_noticed():
+                        job.set_failure_noticed()
+                        msg = "Job failed on arch %s\n" % (job.arch)
+                        self._archjobs_lock.release()
+                        raise BuildError(msg, job.arch)
+
         self._archjobs_lock.release()
 
         if completed_jobs == len(self.archjobs):
             # Scratch targets don't contribute packages to the repo
             if self._target_cfg.get_bool("General", "scratch") == True:
-                self._set_cur_stage('repodone')
+                if failed_jobs > 0:
+                    self._stage_failed("Job failed on one or more architectures.")
+                else:
+                    self._set_cur_stage('repodone')
             else:
                 self._set_cur_stage('add_to_repo')
             return False  # Don't want to wait




More information about the fedora-extras-commits mailing list