support/package-builder/WorkerThread.py
7418d2bf
 from BuildContainer import BuildContainer
d024e640
 from PackageBuilder import PackageBuilder
 import threading
b37b4c63
 import Scheduler
 import ThreadPool
7418d2bf
 
d024e640
 class WorkerThread(threading.Thread):
7418d2bf
 
     def __init__(self,event,name,mapPackageToCycle,listAvailableCyclicPackages,logger,listBuildOptionPackages,pkgBuildOptionFile,pkgBuildType):
d024e640
         threading.Thread.__init__(self)
         self.statusEvent=event
         self.name=name
         self.mapPackageToCycle=mapPackageToCycle
         self.listAvailableCyclicPackages=listAvailableCyclicPackages
         self.logger=logger
90d8acae
         self.listBuildOptionPackages=listBuildOptionPackages
         self.pkgBuildOptionFile=pkgBuildOptionFile
7418d2bf
         self.pkgBuildType=pkgBuildType
 
d024e640
     def run(self):
         buildThreadFailed=False
b37b4c63
         ThreadPool.ThreadPool.makeWorkerThreadActive(self.name)
d024e640
         self.logger.info("Thread "+self.name +" is starting now")
         while True:
             outputMap={}
b37b4c63
             pkg = Scheduler.Scheduler.getNextPackageToBuild()
d024e640
             if pkg is None:
                 break
             self.logger.info("Thread "+self.name+" is building package:"+ pkg)
7418d2bf
             if self.pkgBuildType == "chroot":
7f9d2e12
                 pkgBuilder = PackageBuilder(self.mapPackageToCycle,self.listAvailableCyclicPackages,self.listBuildOptionPackages,self.pkgBuildOptionFile)
7418d2bf
             elif self.pkgBuildType == "container":
                 pkgBuilder = BuildContainer(self.mapPackageToCycle,self.listAvailableCyclicPackages,self.listBuildOptionPackages,self.pkgBuildOptionFile,"build-"+pkg)
d024e640
             t = threading.Thread(target=pkgBuilder.buildPackageThreadAPI,args=(pkg,outputMap,pkg))
             t.start()
             t.join()
e4eff00f
             if not outputMap.has_key(pkg) or outputMap[pkg] == False:
d024e640
                 buildThreadFailed = True
b37b4c63
                 Scheduler.Scheduler.notifyPackageBuildFailed(pkg)
e4eff00f
                 self.logger.info("Thread "+self.name +" stopped building package:" + pkg)
d024e640
                 break
e4eff00f
             self.logger.info("Thread "+self.name+" finished building package:" + pkg)
b37b4c63
             Scheduler.Scheduler.notifyPackageBuildCompleted(pkg)
7418d2bf
 
d024e640
         if buildThreadFailed:
             self.statusEvent.set()
7418d2bf
 
b37b4c63
         ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name)
d024e640
         self.logger.info("Thread "+self.name +" is going to rest")