It fixes racing condition during stage 2 (toolchain build), when
one build is trying to use RPMS from another build which are not
yet fully written.
Change-Id: Iaa654f640d3413d9c471b68e6203a630a323b764
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/6643
Tested-by: michellew <michellew@vmware.com>
Reviewed-by: Anish Swaminathan <anishs@vmware.com>
... | ... |
@@ -51,7 +51,7 @@ class PackageBuilder(object): |
51 | 51 |
if self.sandbox.hasToolchain(): |
52 | 52 |
tUtils.installExtraToolchainRPMS(self.sandbox, self.package, self.version) |
53 | 53 |
else: |
54 |
- tUtils.installToolchainRPMS(self.sandbox, self.package, self.version) |
|
54 |
+ tUtils.installToolchainRPMS(self.sandbox, self.package, self.version, availablePackages=self.doneList) |
|
55 | 55 |
|
56 | 56 |
listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs = ( |
57 | 57 |
self._findDependentPackagesAndInstalledRPM(self.sandbox)) |
... | ... |
@@ -52,10 +52,12 @@ class ToolChainUtils(object): |
52 | 52 |
try: |
53 | 53 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
54 | 54 |
coreToolChainYetToBuild = [] |
55 |
+ doneList = [] |
|
55 | 56 |
for package in constants.listCoreToolChainPackages: |
56 | 57 |
version = SPECS.getData().getHighestVersion(package) |
57 | 58 |
rpmPkg = pkgUtils.findRPMFile(package, version) |
58 | 59 |
if rpmPkg is not None: |
60 |
+ doneList.append(package+'-'+version) |
|
59 | 61 |
continue |
60 | 62 |
else: |
61 | 63 |
coreToolChainYetToBuild.append(package) |
... | ... |
@@ -73,11 +75,12 @@ class ToolChainUtils(object): |
73 | 73 |
CommandUtils.runCommandInShell("mkdir -p " + destLogPath) |
74 | 74 |
chroot = Chroot(self.logger) |
75 | 75 |
chroot.create(package + "-" + version) |
76 |
- self.installToolchainRPMS(chroot, package, version) |
|
76 |
+ self.installToolchainRPMS(chroot, package, version, availablePackages=doneList) |
|
77 | 77 |
pkgUtils.adjustGCCSpecs(chroot, package, version) |
78 | 78 |
pkgUtils.buildRPMSForGivenPackage(chroot, package, version, destLogPath) |
79 | 79 |
pkgCount += 1 |
80 | 80 |
chroot.destroy() |
81 |
+ doneList.append(package+'-'+version) |
|
81 | 82 |
self.logger.debug("Successfully built toolchain") |
82 | 83 |
self.logger.info("-" * 45 + "\n") |
83 | 84 |
except Exception as e: |
... | ... |
@@ -113,8 +116,13 @@ class ToolChainUtils(object): |
113 | 113 |
if not version: |
114 | 114 |
version = SPECS.getData().getHighestVersion(package) |
115 | 115 |
|
116 |
- basePkg = SPECS.getData().getSpecName(package)+"-"+version |
|
117 |
- isAvailable = (availablePackages and basePkg in availablePackages) |
|
116 |
+ if availablePackages is not None: |
|
117 |
+ basePkg = SPECS.getData().getSpecName(package)+"-"+version |
|
118 |
+ isAvailable = basePkg in availablePackages |
|
119 |
+ else: |
|
120 |
+ # if availablePackages is not provided (rear case) it is safe |
|
121 |
+ # to use findRPMFile() |
|
122 |
+ isAvailable = True |
|
118 | 123 |
|
119 | 124 |
if constants.rpmCheck: |
120 | 125 |
rpmFile = pkgUtils.findRPMFile(package, version) |
... | ... |
@@ -130,7 +138,7 @@ class ToolChainUtils(object): |
130 | 130 |
constants.listToolChainRPMsToInstall.index(packageName) < |
131 | 131 |
constants.listToolChainRPMsToInstall.index(package)): |
132 | 132 |
isAvailable = False |
133 |
- else: |
|
133 |
+ if isAvailable: |
|
134 | 134 |
rpmFile = pkgUtils.findRPMFile(package, version) |
135 | 135 |
|
136 | 136 |
if rpmFile is None: |