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