support/package-builder/WorkerThread.py
87815216
 import threading
56c77555
 from PackageBuilder import PackageBuilderChroot
 from PackageBuilder import PackageBuilderContainer
b37b4c63
 import Scheduler
 import ThreadPool
7418d2bf
 
d024e640
 class WorkerThread(threading.Thread):
7418d2bf
 
326d5ca8
     def __init__(self, event, name, mapPackageToCycle, logger,
085306ae
                  pkgBuildType):
d024e640
         threading.Thread.__init__(self)
87815216
         self.statusEvent = event
         self.name = name
         self.mapPackageToCycle = mapPackageToCycle
         self.logger = logger
         self.pkgBuildType = pkgBuildType
7418d2bf
 
d024e640
     def run(self):
87815216
         buildThreadFailed = False
b37b4c63
         ThreadPool.ThreadPool.makeWorkerThreadActive(self.name)
87815216
         self.logger.info("Thread " + self.name + " is starting now")
d024e640
         while True:
b37b4c63
             pkg = Scheduler.Scheduler.getNextPackageToBuild()
d024e640
             if pkg is None:
                 break
87815216
             self.logger.info("Thread " + self.name + " is building package:" + pkg)
7418d2bf
             if self.pkgBuildType == "chroot":
56c77555
                 pkgBuilder = PackageBuilderChroot(self.mapPackageToCycle,
                                                   self.pkgBuildType)
7418d2bf
             elif self.pkgBuildType == "container":
56c77555
                 pkgBuilder = PackageBuilderContainer(self.mapPackageToCycle,
                                                      self.pkgBuildType)
326d5ca8
             try:
                 pkgBuilder.buildPackageFunction(pkg)
             except Exception as e:
                 self.logger.exception(e)
d024e640
                 buildThreadFailed = True
b37b4c63
                 Scheduler.Scheduler.notifyPackageBuildFailed(pkg)
326d5ca8
                 self.logger.info("Thread " + self.name + " stopped building package:" + pkg)
                 self.statusEvent.set()
d024e640
                 break
326d5ca8
             self.logger.info("Thread " + self.name + " finished building package:" + pkg)
b37b4c63
             Scheduler.Scheduler.notifyPackageBuildCompleted(pkg)
7418d2bf
 
b37b4c63
         ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name)
326d5ca8
         self.logger.info("Thread " + self.name + " is going to rest")