Change-Id: Ibef4f51ccd600eee0a7de24a006056d1cb20d809
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/4659
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Divya Thaluru <dthaluru@vmware.com>
... | ... |
@@ -12,7 +12,7 @@ import docker |
12 | 12 |
class PackageBuilderBase(object): |
13 | 13 |
def __init__(self, mapPackageToCycles, listAvailableCyclicPackages, |
14 | 14 |
listBuildOptionPackages, pkgBuildOptionFile, pkgBuildType): |
15 |
- # will be initialized in buildPackageThreadAPI() |
|
15 |
+ # will be initialized in buildPackageFunction() |
|
16 | 16 |
self.logName = None |
17 | 17 |
self.logPath = None |
18 | 18 |
self.logger = None |
... | ... |
@@ -26,7 +26,7 @@ class PackageBuilderBase(object): |
26 | 26 |
self.pkgBuildOptionFile = pkgBuildOptionFile |
27 | 27 |
self.pkgBuildType = pkgBuildType |
28 | 28 |
|
29 |
- def buildPackageThreadAPIPrepare(self, package, outputMap, threadName): |
|
29 |
+ def buildPackagePrepareFunction(self, package, outputMap, threadName): |
|
30 | 30 |
self.package = package |
31 | 31 |
self.logName = "build-" + package |
32 | 32 |
self.logPath = constants.logPath + "/build-" + package |
... | ... |
@@ -130,8 +130,8 @@ class PackageBuilderContainer(object): |
130 | 130 |
self.base = PackageBuilderBase(mapPackageToCycles, listAvailableCyclicPackages, |
131 | 131 |
listBuildOptionPackages, pkgBuildOptionFile, pkgBuildType) |
132 | 132 |
|
133 |
- def buildPackageThreadAPI(self, package, outputMap, threadName): |
|
134 |
- self.base.buildPackageThreadAPIPrepare(package, outputMap, threadName) |
|
133 |
+ def buildPackageFunction(self, package, outputMap, threadName): |
|
134 |
+ self.base.buildPackagePrepareFunction(package, outputMap, threadName) |
|
135 | 135 |
try: |
136 | 136 |
self.buildPackage() |
137 | 137 |
outputMap[threadName] = True |
... | ... |
@@ -298,8 +298,8 @@ class PackageBuilderChroot(object): |
298 | 298 |
self.base = PackageBuilderBase(mapPackageToCycles, listAvailableCyclicPackages, |
299 | 299 |
listBuildOptionPackages, pkgBuildOptionFile, pkgBuildType) |
300 | 300 |
|
301 |
- def buildPackageThreadAPI(self, package, outputMap, threadName): |
|
302 |
- self.base.buildPackageThreadAPIPrepare(package, outputMap, threadName) |
|
301 |
+ def buildPackageFunction(self, package, outputMap, threadName): |
|
302 |
+ self.base.buildPackagePrepareFunction(package, outputMap, threadName) |
|
303 | 303 |
try: |
304 | 304 |
self.buildPackage() |
305 | 305 |
outputMap[threadName] = True |
... | ... |
@@ -184,52 +184,45 @@ class Scheduler(object): |
184 | 184 |
@staticmethod |
185 | 185 |
def getNextPackageToBuild(): |
186 | 186 |
Scheduler.logger.info("Waiting to acquire scheduler lock") |
187 |
- Scheduler.lock.acquire() |
|
187 |
+ with Scheduler.lock: |
|
188 | 188 |
|
189 |
- if Scheduler.stopScheduling: |
|
190 |
- Scheduler.logger.info("Released scheduler lock") |
|
191 |
- Scheduler.lock.release() |
|
192 |
- return None |
|
193 |
- |
|
194 |
- if len(Scheduler.listOfPackagesToBuild) == 0: |
|
195 |
- if Scheduler.event is not None: |
|
196 |
- Scheduler.event.set() |
|
197 |
- |
|
198 |
- try: |
|
199 |
- if Scheduler.listOfPackagesNextToBuild.qsize() == 0: |
|
200 |
- listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
201 |
- Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
202 |
- except: |
|
203 |
- if len(Scheduler.listOfPackagesNextToBuild) == 0: |
|
204 |
- listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
205 |
- Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
189 |
+ if Scheduler.stopScheduling: |
|
190 |
+ Scheduler.logger.info("Released scheduler lock") |
|
191 |
+ return None |
|
206 | 192 |
|
207 |
- if Scheduler.listOfPackagesNextToBuild.qsize() == 0: |
|
208 |
- Scheduler.logger.info("Released scheduler lock") |
|
209 |
- Scheduler.lock.release() |
|
210 |
- return None |
|
193 |
+ if len(Scheduler.listOfPackagesToBuild) == 0: |
|
194 |
+ if Scheduler.event is not None: |
|
195 |
+ Scheduler.event.set() |
|
211 | 196 |
|
212 |
- packageTup = Scheduler.listOfPackagesNextToBuild.get() |
|
197 |
+ try: |
|
198 |
+ if Scheduler.listOfPackagesNextToBuild.qsize() == 0: |
|
199 |
+ listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
200 |
+ Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
201 |
+ except: |
|
202 |
+ if len(Scheduler.listOfPackagesNextToBuild) == 0: |
|
203 |
+ listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
204 |
+ Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
213 | 205 |
|
214 |
- if packageTup[0] == 0 and Scheduler.isPriorityScheduler == 1: |
|
215 |
- listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
216 |
- Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
217 | 206 |
if Scheduler.listOfPackagesNextToBuild.qsize() == 0: |
218 |
- Scheduler.logger.info("Released scheduler lock") |
|
219 |
- Scheduler.lock.release() |
|
220 | 207 |
return None |
208 |
+ |
|
221 | 209 |
packageTup = Scheduler.listOfPackagesNextToBuild.get() |
222 | 210 |
|
223 |
- package = packageTup[1] |
|
224 |
- Scheduler.logger.info("PackagesNextToBuild " + str(packageTup)) |
|
225 |
- if Scheduler.listOfPackagesNextToBuild.qsize() > 0: |
|
226 |
- ThreadPool.ThreadPool.activateWorkerThreads( |
|
227 |
- Scheduler.listOfPackagesNextToBuild.qsize()) |
|
228 |
- Scheduler.logger.info("Released scheduler lock") |
|
229 |
- Scheduler.lock.release() |
|
230 |
- Scheduler.listOfPackagesCurrentlyBuilding.append(package) |
|
231 |
- Scheduler.listOfPackagesToBuild.remove(package) |
|
232 |
- return package |
|
211 |
+ if packageTup[0] == 0 and Scheduler.isPriorityScheduler == 1: |
|
212 |
+ listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild() |
|
213 |
+ Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild |
|
214 |
+ if Scheduler.listOfPackagesNextToBuild.qsize() == 0: |
|
215 |
+ return None |
|
216 |
+ packageTup = Scheduler.listOfPackagesNextToBuild.get() |
|
217 |
+ |
|
218 |
+ package = packageTup[1] |
|
219 |
+ Scheduler.logger.info("PackagesNextToBuild " + str(packageTup)) |
|
220 |
+ if Scheduler.listOfPackagesNextToBuild.qsize() > 0: |
|
221 |
+ ThreadPool.ThreadPool.activateWorkerThreads( |
|
222 |
+ Scheduler.listOfPackagesNextToBuild.qsize()) |
|
223 |
+ Scheduler.listOfPackagesCurrentlyBuilding.append(package) |
|
224 |
+ Scheduler.listOfPackagesToBuild.remove(package) |
|
225 |
+ return package |
|
233 | 226 |
|
234 | 227 |
#can be synchronized TODO |
235 | 228 |
@staticmethod |
... | ... |
@@ -40,10 +40,7 @@ class WorkerThread(threading.Thread): |
40 | 40 |
self.listBuildOptionPackages, |
41 | 41 |
self.pkgBuildOptionFile, |
42 | 42 |
self.pkgBuildType) |
43 |
- t = threading.Thread(target=pkgBuilder.buildPackageThreadAPI, |
|
44 |
- args=(pkg, outputMap, pkg)) |
|
45 |
- t.start() |
|
46 |
- t.join() |
|
43 |
+ pkgBuilder.buildPackageFunction(pkg, outputMap, pkg) |
|
47 | 44 |
if pkg not in outputMap or outputMap[pkg] == False: |
48 | 45 |
buildThreadFailed = True |
49 | 46 |
Scheduler.Scheduler.notifyPackageBuildFailed(pkg) |