Merge lp:~cjwatson/launchpad/bpb-recalculate-virt into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 17701
Proposed branch: lp:~cjwatson/launchpad/bpb-recalculate-virt
Merge into: lp:launchpad
Diff against target: 70 lines (+27/-4)
2 files modified
lib/lp/soyuz/model/binarypackagebuild.py (+9/-3)
lib/lp/soyuz/tests/test_build.py (+18/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/bpb-recalculate-virt
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+269323@code.launchpad.net

Commit message

Recalculate BinaryPackageBuild.virtualized when retrying a build.

Description of the change

Recalculate BinaryPackageBuild.virtualized when retrying a build.

As discussed on #launchpad-ops today, this will let us decommission the non-virtualized x86 builders without having to do DB surgery for existing build records; they'll just magically flip to virtualized if they're ever retried.

This also has the benefit that, in the case of a processor that still supports non-virtualized builds, changing an existing PPA to not require virtualized builds will no longer require reuploading packages.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/soyuz/model/binarypackagebuild.py'
2--- lib/lp/soyuz/model/binarypackagebuild.py 2015-07-31 00:50:08 +0000
3+++ lib/lp/soyuz/model/binarypackagebuild.py 2015-08-27 10:12:30 +0000
4@@ -142,6 +142,13 @@
5 COPY_ARCHIVE_SCORE_PENALTY = 2600
6
7
8+def is_build_virtualized(archive, processor):
9+ """Should a build for this `IArchive` and `IProcessor` be virtualized?"""
10+ return (
11+ archive.require_virtualized
12+ or not processor.supports_nonvirtualized)
13+
14+
15 @implementer(IBinaryPackageBuild)
16 class BinaryPackageBuild(PackageBuildMixin, SQLBase):
17 _table = 'BinaryPackageBuild'
18@@ -475,6 +482,7 @@
19 self.upload_log = None
20 self.dependencies = None
21 self.failure_count = 0
22+ self.virtualized = is_build_virtualized(self.archive, self.processor)
23 self.queueBuild()
24
25 def rescore(self, score):
26@@ -762,9 +770,7 @@
27 BinaryPackageBuild.job_type, status, date_created, builder,
28 archive)
29 processor = distro_arch_series.processor
30- virtualized = (
31- archive.require_virtualized
32- or not processor.supports_nonvirtualized)
33+ virtualized = is_build_virtualized(archive, processor)
34 return BinaryPackageBuild(
35 build_farm_job=build_farm_job,
36 distro_arch_series=distro_arch_series,
37
38=== modified file 'lib/lp/soyuz/tests/test_build.py'
39--- lib/lp/soyuz/tests/test_build.py 2015-05-14 08:50:41 +0000
40+++ lib/lp/soyuz/tests/test_build.py 2015-08-27 10:12:30 +0000
41@@ -1,4 +1,4 @@
42-# Copyright 2011 Canonical Ltd. This software is licensed under the
43+# Copyright 2011-2015 Canonical Ltd. This software is licensed under the
44 # GNU Affero General Public License version 3 (see the file LICENSE).
45
46 __metaclass__ = type
47@@ -252,6 +252,23 @@
48 self.assertEquals(None, build.upload_log)
49 self.assertEquals(0, build.failure_count)
50
51+ def test_retry_resets_virtualized(self):
52+ # Retrying a build recalculates its virtualization.
53+ archive = self.factory.makeArchive(
54+ distribution=self.distroseries.distribution, virtualized=False)
55+ build = self.factory.makeBinaryPackageBuild(
56+ distroarchseries=self.das, archive=archive,
57+ processor=self.processor)
58+ self.assertFalse(build.virtualized)
59+ build.updateStatus(BuildStatus.BUILDING)
60+ build.updateStatus(BuildStatus.FAILEDTOBUILD)
61+ build.gotFailure()
62+ self.processor.supports_nonvirtualized = False
63+ with person_logged_in(self.admin):
64+ build.retry()
65+ self.assertEqual(BuildStatus.NEEDSBUILD, build.status)
66+ self.assertTrue(build.virtualized)
67+
68 def test_create_bpr(self):
69 # Test that we can create a BPR from a given build.
70 spn = self.factory.getUniqueString()