Merge lp:~michael.nelson/launchpad/567922-fix-ec2-failures-after-db-devel-merge into lp:launchpad/db-devel

Proposed by Michael Nelson
Status: Merged
Approved by: Michael Nelson
Approved revision: no longer in the source branch.
Merged at revision: 9405
Proposed branch: lp:~michael.nelson/launchpad/567922-fix-ec2-failures-after-db-devel-merge
Merge into: lp:launchpad/db-devel
Prerequisite: lp:~michael.nelson/launchpad/567922-build-gen-checkpoint
Diff against target: 1064 lines (+168/-141)
20 files modified
lib/lp/buildmaster/configure.zcml (+1/-1)
lib/lp/buildmaster/interfaces/packagebuild.py (+1/-1)
lib/lp/buildmaster/model/buildbase.py (+8/-7)
lib/lp/buildmaster/model/buildfarmjob.py (+1/-1)
lib/lp/buildmaster/model/buildfarmjobbehavior.py (+1/-2)
lib/lp/buildmaster/model/packagebuild.py (+3/-4)
lib/lp/buildmaster/tests/test_buildbase.py (+1/-1)
lib/lp/buildmaster/tests/test_buildqueue.py (+22/-12)
lib/lp/buildmaster/tests/test_manager.py (+4/-4)
lib/lp/soyuz/browser/tests/archive-views.txt (+6/-6)
lib/lp/soyuz/doc/build-estimated-dispatch-time.txt (+4/-4)
lib/lp/soyuz/doc/buildd-scoring.txt (+4/-2)
lib/lp/soyuz/doc/buildd-slavescanner.txt (+62/-62)
lib/lp/soyuz/model/binarypackagebuild.py (+16/-11)
lib/lp/soyuz/model/binarypackagebuildbehavior.py (+2/-1)
lib/lp/soyuz/scripts/buildd.py (+4/-4)
lib/lp/soyuz/scripts/packagecopier.py (+4/-4)
lib/lp/soyuz/scripts/tests/test_buildd_cronscripts.py (+13/-3)
lib/lp/soyuz/scripts/tests/test_copypackage.py (+10/-10)
lib/lp/soyuz/scripts/tests/test_populatearchive.py (+1/-1)
To merge this branch: bzr merge lp:~michael.nelson/launchpad/567922-fix-ec2-failures-after-db-devel-merge
Reviewer Review Type Date Requested Status
Abel Deuring (community) code Approve
Review via email: mp+25759@code.launchpad.net

Description of the change

This branch is part of a pipeline for

https://blueprints.edge.launchpad.net/soyuz/+spec/build-generalisation
https://dev.launchpad.net/LEP/GeneralBuildHistories

Overview
========
After getting most of the unit-tests running, I re-merged a fresh db-devel into my pipeline, resolved the conflicts, fixed the obvious errors and sent it off to ec2test. This branch is starts to fix the new failures.

To test
=======

make schema
bin/test -vv -t test_buildfarmjob -t test_buildqueue -t test_manager -t test_buildd_cronscripts -t test_copypackage -t test_populatearchive -t build-estimated-dispatch-time.txt -t buildd-scoring.txt -t buildd-slavescanner.txt -t archive-views.txt

To post a comment you must log in.
Revision history for this message
Abel Deuring (adeuring) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/buildmaster/configure.zcml'
--- lib/lp/buildmaster/configure.zcml 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/configure.zcml 2010-05-27 13:26:53 +0000
@@ -87,7 +87,7 @@
87 <!-- Grant permissions to write on BuildQueue and Build. -->87 <!-- Grant permissions to write on BuildQueue and Build. -->
88 <require88 <require
89 permission="zope.Public"89 permission="zope.Public"
90 set_attributes="lastscore builder logtail date_started"/>90 set_attributes="lastscore estimated_duration builder logtail date_started"/>
91 </class>91 </class>
9292
9393
9494
=== modified file 'lib/lp/buildmaster/interfaces/packagebuild.py'
--- lib/lp/buildmaster/interfaces/packagebuild.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/interfaces/packagebuild.py 2010-05-27 13:26:53 +0000
@@ -82,7 +82,7 @@
82 title=_("Distribution series"), required=True,82 title=_("Distribution series"), required=True,
83 description=_("Shortcut for its distribution series.")))83 description=_("Shortcut for its distribution series.")))
8484
85 def getUploaderCommand(distro_series, upload_leaf, uploader_logfilename):85 def getUploaderCommand(package_build, upload_leaf, uploader_logfilename):
86 """Get the command to run as the uploader.86 """Get the command to run as the uploader.
8787
88 :return: A list of command line arguments, beginning with the88 :return: A list of command line arguments, beginning with the
8989
=== modified file 'lib/lp/buildmaster/model/buildbase.py'
--- lib/lp/buildmaster/model/buildbase.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/model/buildbase.py 2010-05-27 13:26:53 +0000
@@ -63,7 +63,8 @@
63 """Return the directory that things will be stored in."""63 """Return the directory that things will be stored in."""
64 return os.path.join(config.builddmaster.root, 'incoming', upload_leaf)64 return os.path.join(config.builddmaster.root, 'incoming', upload_leaf)
6565
66 def getUploaderCommand(self, upload_leaf, uploader_logfilename):66 @staticmethod
67 def getUploaderCommand(build, upload_leaf, uploader_logfilename):
67 """See `IBuildBase`."""68 """See `IBuildBase`."""
68 root = os.path.abspath(config.builddmaster.root)69 root = os.path.abspath(config.builddmaster.root)
69 uploader_command = list(config.builddmaster.uploader.split())70 uploader_command = list(config.builddmaster.uploader.split())
@@ -71,12 +72,12 @@
71 # add extra arguments for processing a binary upload72 # add extra arguments for processing a binary upload
72 extra_args = [73 extra_args = [
73 "--log-file", "%s" % uploader_logfilename,74 "--log-file", "%s" % uploader_logfilename,
74 "-d", "%s" % self.distribution.name,75 "-d", "%s" % build.distribution.name,
75 "-s", "%s" % (self.distro_series.name +76 "-s", "%s" % (build.distro_series.name +
76 pocketsuffix[self.pocket]),77 pocketsuffix[build.pocket]),
77 "-b", "%s" % self.id,78 "-b", "%s" % build.id,
78 "-J", "%s" % upload_leaf,79 "-J", "%s" % upload_leaf,
79 '--context=%s' % self.policy_name,80 '--context=%s' % build.policy_name,
80 "%s" % root,81 "%s" % root,
81 ]82 ]
8283
@@ -204,7 +205,7 @@
204 uploader_logfilename = os.path.join(205 uploader_logfilename = os.path.join(
205 upload_dir, UPLOAD_LOG_FILENAME)206 upload_dir, UPLOAD_LOG_FILENAME)
206 uploader_command = build.getUploaderCommand(207 uploader_command = build.getUploaderCommand(
207 upload_leaf, uploader_logfilename)208 build, upload_leaf, uploader_logfilename)
208 logger.debug("Saving uploader log at '%s'" % uploader_logfilename)209 logger.debug("Saving uploader log at '%s'" % uploader_logfilename)
209210
210 logger.info("Invoking uploader on %s" % root)211 logger.info("Invoking uploader on %s" % root)
211212
=== modified file 'lib/lp/buildmaster/model/buildfarmjob.py'
--- lib/lp/buildmaster/model/buildfarmjob.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/model/buildfarmjob.py 2010-05-27 13:26:53 +0000
@@ -62,7 +62,7 @@
62 """See `IBuildFarmJobOld`."""62 """See `IBuildFarmJobOld`."""
63 raise NotImplementedError63 raise NotImplementedError
6464
65 def getByJob(self):65 def getByJob(self, job):
66 """See `IBuildFarmJobOld`."""66 """See `IBuildFarmJobOld`."""
67 raise NotImplementedError67 raise NotImplementedError
6868
6969
=== modified file 'lib/lp/buildmaster/model/buildfarmjobbehavior.py'
--- lib/lp/buildmaster/model/buildfarmjobbehavior.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/model/buildfarmjobbehavior.py 2010-05-27 13:26:53 +0000
@@ -184,8 +184,7 @@
184 # XXX: dsilvers 2005-03-02: Confirm the builder has the right build?184 # XXX: dsilvers 2005-03-02: Confirm the builder has the right build?
185185
186 build = queueItem.specific_job.build186 build = queueItem.specific_job.build
187 build.handleStatus(187 build.handleStatus(build_status, librarian, slave_status)
188 build, build_status, librarian, slave_status)
189188
190189
191class IdleBuildBehavior(BuildFarmJobBehaviorBase):190class IdleBuildBehavior(BuildFarmJobBehaviorBase):
192191
=== modified file 'lib/lp/buildmaster/model/packagebuild.py'
--- lib/lp/buildmaster/model/packagebuild.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/model/packagebuild.py 2010-05-27 13:26:53 +0000
@@ -122,11 +122,10 @@
122 return BuildBase.getUploadDir(upload_leaf)122 return BuildBase.getUploadDir(upload_leaf)
123123
124 @staticmethod124 @staticmethod
125 def getUploaderCommand(package_build, distro_series, upload_leaf,125 def getUploaderCommand(package_build, upload_leaf, upload_logfilename):
126 upload_logfilename):
127 """See `IPackageBuild`."""126 """See `IPackageBuild`."""
128 return BuildBase.getUploaderCommand(127 return BuildBase.getUploaderCommand(
129 package_build, distro_series, upload_leaf, upload_logfilename)128 package_build, upload_leaf, upload_logfilename)
130129
131 @staticmethod130 @staticmethod
132 def getLogFromSlave(package_build):131 def getLogFromSlave(package_build):
@@ -182,7 +181,7 @@
182181
183 def queueBuild(self, suspended=False):182 def queueBuild(self, suspended=False):
184 """See `IPackageBuild`."""183 """See `IPackageBuild`."""
185 return BuildBase.queueBuild(self, suspended=False)184 return BuildBase.queueBuild(self, suspended=suspended)
186185
187 def handleStatus(self, status, librarian, slave_status):186 def handleStatus(self, status, librarian, slave_status):
188 """See `IPackageBuild`."""187 """See `IPackageBuild`."""
189188
=== modified file 'lib/lp/buildmaster/tests/test_buildbase.py'
--- lib/lp/buildmaster/tests/test_buildbase.py 2010-05-27 13:26:43 +0000
+++ lib/lp/buildmaster/tests/test_buildbase.py 2010-05-27 13:26:53 +0000
@@ -115,7 +115,7 @@
115 os.path.abspath(config.builddmaster.root),115 os.path.abspath(config.builddmaster.root),
116 ])116 ])
117 uploader_command = build_base.getUploaderCommand(117 uploader_command = build_base.getUploaderCommand(
118 upload_leaf, log_file)118 build_base, upload_leaf, log_file)
119 self.assertEqual(config_args, uploader_command)119 self.assertEqual(config_args, uploader_command)
120120
121121
122122
=== modified file 'lib/lp/buildmaster/tests/test_buildqueue.py'
--- lib/lp/buildmaster/tests/test_buildqueue.py 2010-04-21 11:51:26 +0000
+++ lib/lp/buildmaster/tests/test_buildqueue.py 2010-05-27 13:26:53 +0000
@@ -11,6 +11,7 @@
11from zope import component11from zope import component
12from zope.component import getGlobalSiteManager, getUtility12from zope.component import getGlobalSiteManager, getUtility
13from zope.interface.verify import verifyObject13from zope.interface.verify import verifyObject
14from zope.security.proxy import removeSecurityProxy
1415
15from canonical.launchpad.webapp.interfaces import (16from canonical.launchpad.webapp.interfaces import (
16 IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)17 IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
@@ -45,7 +46,7 @@
45 for build in test.builds:46 for build in test.builds:
46 bq = build.buildqueue_record47 bq = build.buildqueue_record
47 source = None48 source = None
48 for attr in ('sourcepackagerelease', 'sourcepackagename'):49 for attr in ('source_package_release', 'sourcepackagename'):
49 source = getattr(build, attr, None)50 source = getattr(build, attr, None)
50 if source is not None:51 if source is not None:
51 break52 break
@@ -105,7 +106,7 @@
105 # Monkey-patch BuildQueueSet._now() so it returns a constant time stamp106 # Monkey-patch BuildQueueSet._now() so it returns a constant time stamp
106 # that's not too far in the future. This avoids spurious test failures.107 # that's not too far in the future. This avoids spurious test failures.
107 monkey_patch_the_now_property(bq)108 monkey_patch_the_now_property(bq)
108 delay = bq._estimateTimeToNextBuilder()109 delay = removeSecurityProxy(bq)._estimateTimeToNextBuilder()
109 test.assertTrue(110 test.assertTrue(
110 delay <= min_time,111 delay <= min_time,
111 "Wrong min time to next available builder (%s > %s)"112 "Wrong min time to next available builder (%s > %s)"
@@ -122,7 +123,8 @@
122def check_delay_for_job(test, the_job, delay):123def check_delay_for_job(test, the_job, delay):
123 # Obtain the builder statistics pertaining to this job.124 # Obtain the builder statistics pertaining to this job.
124 builder_data = get_builder_data()125 builder_data = get_builder_data()
125 estimated_delay = the_job._estimateJobDelay(builder_data)126 estimated_delay = removeSecurityProxy(the_job)._estimateJobDelay(
127 builder_data)
126 test.assertEqual(delay, estimated_delay)128 test.assertEqual(delay, estimated_delay)
127129
128130
@@ -144,12 +146,13 @@
144 This avoids spurious test failures.146 This avoids spurious test failures.
145 """147 """
146 # Use the date/time the job started if available.148 # Use the date/time the job started if available.
149 naked_buildqueue = removeSecurityProxy(buildqueue)
147 if buildqueue.job.date_started:150 if buildqueue.job.date_started:
148 time_stamp = buildqueue.job.date_started151 time_stamp = buildqueue.job.date_started
149 else:152 else:
150 time_stamp = buildqueue._now()153 time_stamp = naked_buildqueue._now()
151154
152 buildqueue._now = FakeMethod(result=time_stamp)155 naked_buildqueue._now = FakeMethod(result=time_stamp)
153 return time_stamp156 return time_stamp
154157
155158
@@ -475,7 +478,10 @@
475 # The build in question is an x86/native one.478 # The build in question is an x86/native one.
476 self.assertEqual(self.x86_proc.id, build.processor.id)479 self.assertEqual(self.x86_proc.id, build.processor.id)
477 self.assertEqual(False, build.is_virtualized)480 self.assertEqual(False, build.is_virtualized)
478 bq = build.buildqueue_record481
482 # To test this non-interface method, we need to remove the
483 # security proxy.
484 bq = removeSecurityProxy(build.buildqueue_record)
479 builder_stats = get_builder_data()485 builder_stats = get_builder_data()
480 # We have 4 x86 native builders.486 # We have 4 x86 native builders.
481 self.assertEqual(487 self.assertEqual(
@@ -511,7 +517,7 @@
511 # will be free again.517 # will be free again.
512 build, bq = find_job(self, 'flex')518 build, bq = find_job(self, 'flex')
513 bq.reset()519 bq.reset()
514 free_count = bq._getFreeBuildersCount(520 free_count = removeSecurityProxy(bq)._getFreeBuildersCount(
515 build.processor, build.is_virtualized)521 build.processor, build.is_virtualized)
516 self.assertEqual(1, free_count)522 self.assertEqual(1, free_count)
517523
@@ -1095,7 +1101,7 @@
1095 for build in self.builds:1101 for build in self.builds:
1096 bq = build.buildqueue_record1102 bq = build.buildqueue_record
1097 if bq.processor == self.hppa_proc:1103 if bq.processor == self.hppa_proc:
1098 bq.virtualized = True1104 removeSecurityProxy(bq).virtualized = True
1099 job = self.factory.makeSourcePackageRecipeBuildJob(1105 job = self.factory.makeSourcePackageRecipeBuildJob(
1100 virtualized=True, estimated_duration=332,1106 virtualized=True, estimated_duration=332,
1101 sourcename='xxr-openssh-client', score=1050)1107 sourcename='xxr-openssh-client', score=1050)
@@ -1111,7 +1117,8 @@
11111117
1112 flex_build, flex_job = find_job(self, 'flex', 'hppa')1118 flex_build, flex_job = find_job(self, 'flex', 'hppa')
1113 # The head job platform is the one of job #21 (xxr-openssh-client).1119 # The head job platform is the one of job #21 (xxr-openssh-client).
1114 self.assertEquals((None, True), flex_job._getHeadJobPlatform())1120 self.assertEquals(
1121 (None, True), removeSecurityProxy(flex_job)._getHeadJobPlatform())
1115 # The delay will be 900 (= 15*60) + 332 seconds1122 # The delay will be 900 (= 15*60) + 332 seconds
1116 check_delay_for_job(self, flex_job, 1232)1123 check_delay_for_job(self, flex_job, 1232)
11171124
@@ -1133,7 +1140,8 @@
1133 # 20, xx-recipe-zsh, p: None, v:False e:0:03:42 *** s: 10531140 # 20, xx-recipe-zsh, p: None, v:False e:0:03:42 *** s: 1053
11341141
1135 # The newly added 'xxr-gwibber' job is the new head job now.1142 # The newly added 'xxr-gwibber' job is the new head job now.
1136 self.assertEquals((None, None), flex_job._getHeadJobPlatform())1143 self.assertEquals(
1144 (None, None), removeSecurityProxy(flex_job)._getHeadJobPlatform())
1137 # The newly added 'xxr-gwibber' job now weighs in as well and the1145 # The newly added 'xxr-gwibber' job now weighs in as well and the
1138 # delay is 900 (= 15*60) + (332+111)/2 seconds1146 # delay is 900 (= 15*60) + (332+111)/2 seconds
1139 check_delay_for_job(self, flex_job, 1121)1147 check_delay_for_job(self, flex_job, 1121)
@@ -1142,7 +1150,9 @@
1142 # 'xxr-openssh-client' jobs since the 'virtualized' values do not1150 # 'xxr-openssh-client' jobs since the 'virtualized' values do not
1143 # match.1151 # match.
1144 flex_build, flex_job = find_job(self, 'flex', '386')1152 flex_build, flex_job = find_job(self, 'flex', '386')
1145 self.assertEquals((None, False), flex_job._getHeadJobPlatform())1153 self.assertEquals(
1154 (None, False),
1155 removeSecurityProxy(flex_job)._getHeadJobPlatform())
1146 # delay is 960 (= 16*60) + 222 seconds1156 # delay is 960 (= 16*60) + 222 seconds
1147 check_delay_for_job(self, flex_job, 1182)1157 check_delay_for_job(self, flex_job, 1182)
11481158
@@ -1222,7 +1232,7 @@
1222 for build in self.builds:1232 for build in self.builds:
1223 bq = build.buildqueue_record1233 bq = build.buildqueue_record
1224 if bq.processor == self.x86_proc:1234 if bq.processor == self.x86_proc:
1225 bq.virtualized = True1235 removeSecurityProxy(bq).virtualized = True
12261236
1227 def test_pending_jobs_only(self):1237 def test_pending_jobs_only(self):
1228 # Let's see the assertion fail for a job that's not pending any more.1238 # Let's see the assertion fail for a job that's not pending any more.
12291239
=== modified file 'lib/lp/buildmaster/tests/test_manager.py'
--- lib/lp/buildmaster/tests/test_manager.py 2010-04-23 13:42:50 +0000
+++ lib/lp/buildmaster/tests/test_manager.py 2010-05-27 13:26:53 +0000
@@ -586,7 +586,7 @@
586 self.assertTrue(job.date_started is not None)586 self.assertTrue(job.date_started is not None)
587 self.assertEqual(job.job.status, JobStatus.RUNNING)587 self.assertEqual(job.job.status, JobStatus.RUNNING)
588 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)588 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)
589 self.assertEqual(build.buildstate, BuildStatus.BUILDING)589 self.assertEqual(build.status, BuildStatus.BUILDING)
590 self.assertEqual(job.logtail, logtail)590 self.assertEqual(job.logtail, logtail)
591591
592 def _getManager(self):592 def _getManager(self):
@@ -710,7 +710,7 @@
710 self.assertTrue(job.builder is None)710 self.assertTrue(job.builder is None)
711 self.assertTrue(job.date_started is None)711 self.assertTrue(job.date_started is None)
712 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)712 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)
713 self.assertEqual(build.buildstate, BuildStatus.NEEDSBUILD)713 self.assertEqual(build.status, BuildStatus.NEEDSBUILD)
714714
715 def testScanRescuesJobFromBrokenBuilder(self):715 def testScanRescuesJobFromBrokenBuilder(self):
716 # The job assigned to a broken builder is rescued.716 # The job assigned to a broken builder is rescued.
@@ -798,7 +798,7 @@
798 'i386 build of mozilla-firefox 0.9 in ubuntu hoary RELEASE',798 'i386 build of mozilla-firefox 0.9 in ubuntu hoary RELEASE',
799 build.title)799 build.title)
800800
801 self.assertEqual('BUILDING', build.buildstate.name)801 self.assertEqual('BUILDING', build.status.name)
802 self.assertNotEqual(None, job.builder)802 self.assertNotEqual(None, job.builder)
803 self.assertNotEqual(None, job.date_started)803 self.assertNotEqual(None, job.date_started)
804 self.assertNotEqual(None, job.logtail)804 self.assertNotEqual(None, job.logtail)
@@ -811,7 +811,7 @@
811 """Re-fetch the `IBuildQueue` record and check if it's clean."""811 """Re-fetch the `IBuildQueue` record and check if it's clean."""
812 job = getUtility(IBuildQueueSet).get(job_id)812 job = getUtility(IBuildQueueSet).get(job_id)
813 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)813 build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(job)
814 self.assertEqual('NEEDSBUILD', build.buildstate.name)814 self.assertEqual('NEEDSBUILD', build.status.name)
815 self.assertEqual(None, job.builder)815 self.assertEqual(None, job.builder)
816 self.assertEqual(None, job.date_started)816 self.assertEqual(None, job.date_started)
817 self.assertEqual(None, job.logtail)817 self.assertEqual(None, job.logtail)
818818
=== modified file 'lib/lp/soyuz/browser/tests/archive-views.txt'
--- lib/lp/soyuz/browser/tests/archive-views.txt 2010-04-29 09:53:56 +0000
+++ lib/lp/soyuz/browser/tests/archive-views.txt 2010-05-27 13:26:53 +0000
@@ -361,7 +361,7 @@
361 >>> warty_hppa = getUtility(IDistributionSet)['ubuntu']['warty']['hppa']361 >>> warty_hppa = getUtility(IDistributionSet)['ubuntu']['warty']['hppa']
362 >>> source = view.filtered_sources[0]362 >>> source = view.filtered_sources[0]
363 >>> ignore = source.sourcepackagerelease.createBuild(363 >>> ignore = source.sourcepackagerelease.createBuild(
364 ... distroarchseries=warty_hppa, archive=view.context,364 ... distro_arch_series=warty_hppa, archive=view.context,
365 ... pocket=source.pocket)365 ... pocket=source.pocket)
366 >>> builds = getUtility(IBinaryPackageBuildSet).getBuildsForArchive(366 >>> builds = getUtility(IBinaryPackageBuildSet).getBuildsForArchive(
367 ... view.context)367 ... view.context)
@@ -374,9 +374,9 @@
374 i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE374 i386 build of cdrkit 1.0 in ubuntu breezy-autotest RELEASE
375375
376 >>> login('foo.bar@canonical.com')376 >>> login('foo.bar@canonical.com')
377 >>> builds[0].buildstate = BuildStatus.NEEDSBUILD377 >>> builds[0].status = BuildStatus.NEEDSBUILD
378 >>> builds[1].buildstate = BuildStatus.BUILDING378 >>> builds[1].status = BuildStatus.BUILDING
379 >>> builds[2].buildstate = BuildStatus.BUILDING379 >>> builds[2].status = BuildStatus.BUILDING
380 >>> login(ANONYMOUS)380 >>> login(ANONYMOUS)
381381
382 >>> view.num_pkgs_building382 >>> view.num_pkgs_building
@@ -386,7 +386,7 @@
386of packages that are currently building.386of packages that are currently building.
387387
388 >>> login('foo.bar@canonical.com')388 >>> login('foo.bar@canonical.com')
389 >>> builds[4].buildstate = BuildStatus.NEEDSBUILD389 >>> builds[4].status = BuildStatus.NEEDSBUILD
390 >>> login(ANONYMOUS)390 >>> login(ANONYMOUS)
391 >>> view.num_pkgs_building391 >>> view.num_pkgs_building
392 {'building': 2, 'waiting': 1, 'total': 3}392 {'building': 2, 'waiting': 1, 'total': 3}
@@ -395,7 +395,7 @@
395to be building:395to be building:
396396
397 >>> login('foo.bar@canonical.com')397 >>> login('foo.bar@canonical.com')
398 >>> builds[4].buildstate = BuildStatus.BUILDING398 >>> builds[4].status = BuildStatus.BUILDING
399 >>> login(ANONYMOUS)399 >>> login(ANONYMOUS)
400 >>> view.num_pkgs_building400 >>> view.num_pkgs_building
401 {'building': 3, 'waiting': 0, 'total': 3}401 {'building': 3, 'waiting': 0, 'total': 3}
402402
=== modified file 'lib/lp/soyuz/doc/build-estimated-dispatch-time.txt'
--- lib/lp/soyuz/doc/build-estimated-dispatch-time.txt 2010-04-09 15:46:09 +0000
+++ lib/lp/soyuz/doc/build-estimated-dispatch-time.txt 2010-05-27 13:26:53 +0000
@@ -50,7 +50,7 @@
50 ... hoary.main_archive)50 ... hoary.main_archive)
51 >>> alsa_bqueue = alsa_build.queueBuild()51 >>> alsa_bqueue = alsa_build.queueBuild()
52 >>> alsa_bqueue.lastscore = 50052 >>> alsa_bqueue.lastscore = 500
53 >>> alsa_build.buildstate = BuildStatus.NEEDSBUILD53 >>> alsa_build.status = BuildStatus.NEEDSBUILD
5454
55Access the currently building job via the builder.55Access the currently building job via the builder.
5656
@@ -64,7 +64,7 @@
6464
65Make sure the job at hand is currently being built.65Make sure the job at hand is currently being built.
6666
67 >>> cur_build.buildstate == BuildStatus.BUILDING67 >>> cur_build.status == BuildStatus.BUILDING
68 True68 True
6969
70The start time estimation mechanism for a pending job N depends on70The start time estimation mechanism for a pending job N depends on
@@ -124,7 +124,7 @@
124 >>> pmount_bqueue.lastscore = 66124 >>> pmount_bqueue.lastscore = 66
125 >>> removeSecurityProxy(pmount_bqueue).estimated_duration = (125 >>> removeSecurityProxy(pmount_bqueue).estimated_duration = (
126 ... timedelta(minutes=12))126 ... timedelta(minutes=12))
127 >>> pmount_build.buildstate = BuildStatus.NEEDSBUILD127 >>> pmount_build.status = BuildStatus.NEEDSBUILD
128128
129Followed by another build for the 'iceweasel' source package that is added129Followed by another build for the 'iceweasel' source package that is added
130to mark's PPA.130to mark's PPA.
@@ -142,7 +142,7 @@
142 >>> removeSecurityProxy(iceweasel_bqueue).estimated_duration = (142 >>> removeSecurityProxy(iceweasel_bqueue).estimated_duration = (
143 ... timedelta(minutes=48))143 ... timedelta(minutes=48))
144 >>> iceweasel_bqueue.lastscore = 666144 >>> iceweasel_bqueue.lastscore = 666
145 >>> iceweasel_build.buildstate = BuildStatus.NEEDSBUILD145 >>> iceweasel_build.status = BuildStatus.NEEDSBUILD
146146
147Since the 'iceweasel' build has a higher score (666) than the 'pmount'147Since the 'iceweasel' build has a higher score (666) than the 'pmount'
148build (66) its estimated dispatch time is essentially "now".148build (66) its estimated dispatch time is essentially "now".
149149
=== modified file 'lib/lp/soyuz/doc/buildd-scoring.txt'
--- lib/lp/soyuz/doc/buildd-scoring.txt 2010-04-09 15:46:09 +0000
+++ lib/lp/soyuz/doc/buildd-scoring.txt 2010-05-27 13:26:53 +0000
@@ -65,8 +65,10 @@
65 ... hoary386, pub.pocket, pub.archive)65 ... hoary386, pub.pocket, pub.archive)
66 ...66 ...
67 ... build_queue = build.queueBuild()67 ... build_queue = build.queueBuild()
68 ... build_queue.job.date_created = date_created68 ... from zope.security.proxy import removeSecurityProxy
69 ... build_queue.manual = manual69 ... naked_build_queue = removeSecurityProxy(build_queue)
70 ... naked_build_queue.job.date_created = date_created
71 ... naked_build_queue.manual = manual
70 ...72 ...
71 ... return build_queue73 ... return build_queue
7274
7375
=== modified file 'lib/lp/soyuz/doc/buildd-slavescanner.txt'
--- lib/lp/soyuz/doc/buildd-slavescanner.txt 2010-05-27 13:26:43 +0000
+++ lib/lp/soyuz/doc/buildd-slavescanner.txt 2010-05-27 13:26:53 +0000
@@ -90,8 +90,7 @@
9090
91 >>> default_start = datetime.datetime(2005, 1, 1, 8, 0, 0, tzinfo=UTC)91 >>> default_start = datetime.datetime(2005, 1, 1, 8, 0, 0, tzinfo=UTC)
92 >>> def setupBuildQueue(build_queue, builder):92 >>> def setupBuildQueue(build_queue, builder):
93 ... build_queue.builder = builder93 ... build_queue.markAsBuilding(builder)
94 ... build_queue.setDateStarted(default_start)
9594
96Remove any previous buildmaster ROOT directory, to avoid any garbage95Remove any previous buildmaster ROOT directory, to avoid any garbage
97lock conflict (it would be recreated automatically if necessary)96lock conflict (it would be recreated automatically if necessary)
@@ -105,7 +104,7 @@
105Let's check the procedures to verify/collect running build process:104Let's check the procedures to verify/collect running build process:
106105
107 WAITING - PACKAGEFAIL -> Package has failed to build, notice from106 WAITING - PACKAGEFAIL -> Package has failed to build, notice from
108 builder is stored, but Build.buildstate is mark as 'Failed to Build':107 builder is stored, but Build.status is mark as 'Failed to Build':
109108
110Get a builder from the sample data:109Get a builder from the sample data:
111110
@@ -139,19 +138,19 @@
139 >>> a_builder.updateBuild(bqItem3)138 >>> a_builder.updateBuild(bqItem3)
140 >>> build.builder is not None139 >>> build.builder is not None
141 True140 True
142 >>> build.datebuilt is not None141 >>> build.date_finished is not None
143 True142 True
144 >>> build.buildduration is not None143 >>> build.duration is not None
145 True144 True
146 >>> build.buildlog is not None145 >>> build.log is not None
147 True146 True
148 >>> check_mail_sent(last_stub_mail_count)147 >>> check_mail_sent(last_stub_mail_count)
149 True148 True
150 >>> build.buildstate.title149 >>> build.status.title
151 'Failed to build'150 'Failed to build'
152151
153WAITING - DEPWAIT -> a required dependency is missing, again notice152WAITING - DEPWAIT -> a required dependency is missing, again notice
154from builder, but Build.buildstate has the right state:153from builder, but Build.status has the right state:
155154
156 >>> bqItem4 = a_build.queueBuild()155 >>> bqItem4 = a_build.queueBuild()
157 >>> setupBuildQueue(bqItem4, a_builder)156 >>> setupBuildQueue(bqItem4, a_builder)
@@ -170,17 +169,17 @@
170 CRITICAL:slave-scanner:***** bob is MANUALDEPWAIT *****169 CRITICAL:slave-scanner:***** bob is MANUALDEPWAIT *****
171 >>> build.builder is not None170 >>> build.builder is not None
172 True171 True
173 >>> build.datebuilt is not None172 >>> build.date_finished is not None
174 True173 True
175 >>> build.buildduration is not None174 >>> build.duration is not None
176 True175 True
177 >>> build.buildlog is not None176 >>> build.log is not None
178 True177 True
179 >>> check_mail_sent(last_stub_mail_count)178 >>> check_mail_sent(last_stub_mail_count)
180 False179 False
181 >>> build.dependencies180 >>> build.dependencies
182 u'baz (>= 1.0.1)'181 u'baz (>= 1.0.1)'
183 >>> build.buildstate.title182 >>> build.status.title
184 'Dependency wait'183 'Dependency wait'
185184
186WAITING - CHROOTFAIL -> the Chroot for this distroseries is damage, nor185WAITING - CHROOTFAIL -> the Chroot for this distroseries is damage, nor
@@ -199,15 +198,15 @@
199 CRITICAL:slave-scanner:***** bob is CHROOTWAIT *****198 CRITICAL:slave-scanner:***** bob is CHROOTWAIT *****
200 >>> build.builder is not None199 >>> build.builder is not None
201 True200 True
202 >>> build.datebuilt is not None201 >>> build.date_finished is not None
203 True202 True
204 >>> build.buildduration is not None203 >>> build.duration is not None
205 True204 True
206 >>> build.buildlog is not None205 >>> build.log is not None
207 True206 True
208 >>> check_mail_sent(last_stub_mail_count)207 >>> check_mail_sent(last_stub_mail_count)
209 True208 True
210 >>> build.buildstate.title209 >>> build.status.title
211 'Chroot problem'210 'Chroot problem'
212211
213WAITING - BUILDERFAIL -> builder has failed by internal error, job is available for next build round:212WAITING - BUILDERFAIL -> builder has failed by internal error, job is available for next build round:
@@ -234,7 +233,7 @@
234 >>> check_mail_sent(last_stub_mail_count)233 >>> check_mail_sent(last_stub_mail_count)
235 False234 False
236 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(bqItem6)235 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(bqItem6)
237 >>> print build.buildstate.title236 >>> print build.status.title
238 Needs building237 Needs building
239 >>> job = bqItem6.specific_job.job238 >>> job = bqItem6.specific_job.job
240 >>> print job.status.title239 >>> print job.status.title
@@ -286,7 +285,7 @@
286 >>> a_builder.updateBuild(bqItem8)285 >>> a_builder.updateBuild(bqItem8)
287 >>> bqItem8.builder is None286 >>> bqItem8.builder is None
288 True287 True
289 >>> print bqItem8.specific_job.build.buildstate.name288 >>> print bqItem8.specific_job.build.status.name
290 NEEDSBUILD289 NEEDSBUILD
291290
292Cleanup in preparation for the next test:291Cleanup in preparation for the next test:
@@ -347,15 +346,15 @@
347 WARNING:slave-scanner:Build ... upload failed.346 WARNING:slave-scanner:Build ... upload failed.
348 >>> build.builder is not None347 >>> build.builder is not None
349 True348 True
350 >>> build.datebuilt is not None349 >>> build.date_finished is not None
351 True350 True
352 >>> build.buildduration is not None351 >>> build.duration is not None
353 True352 True
354 >>> build.buildlog is not None353 >>> build.log is not None
355 True354 True
356 >>> check_mail_sent(last_stub_mail_count)355 >>> check_mail_sent(last_stub_mail_count)
357 True356 True
358 >>> build.buildstate.title357 >>> build.status.title
359 'Failed to upload'358 'Failed to upload'
360359
361Let's check the emails generated by this 'failure'360Let's check the emails generated by this 'failure'
@@ -380,7 +379,7 @@
380 ...379 ...
381 X-Launchpad-Build-State: FAILEDTOUPLOAD380 X-Launchpad-Build-State: FAILEDTOUPLOAD
382 ...381 ...
383 * Build Log: http://.../...i386.mozilla-firefox_0.9_NEEDSBUILD.txt.gz382 * Build Log: http://.../...i386.mozilla-firefox_0.9_BUILDING.txt.gz
384 ...383 ...
385 Upload log:384 Upload log:
386 INFO Creating lockfile:...385 INFO Creating lockfile:...
@@ -396,7 +395,7 @@
396 >>> build.upload_log is not None395 >>> build.upload_log is not None
397 True396 True
398397
399What we can clearly notice is that the buildlog is still containing398What we can clearly notice is that the log is still containing
400the old build state (BUILDING) in its name. This is a minor problem399the old build state (BUILDING) in its name. This is a minor problem
401that can be sorted by modifying the execution order of procedures400that can be sorted by modifying the execution order of procedures
402inside Buildergroup.buildStatus_OK method.401inside Buildergroup.buildStatus_OK method.
@@ -431,7 +430,7 @@
431the build record to FULLYBUILT, as the process-upload would do:430the build record to FULLYBUILT, as the process-upload would do:
432431
433 >>> from lp.buildmaster.interfaces.buildbase import BuildStatus432 >>> from lp.buildmaster.interfaces.buildbase import BuildStatus
434 >>> build.buildstate = BuildStatus.FULLYBUILT433 >>> build.status = BuildStatus.FULLYBUILT
435434
436Now the updateBuild should recognize this build record as a435Now the updateBuild should recognize this build record as a
437Successfully built and uploaded procedure, not sending any436Successfully built and uploaded procedure, not sending any
@@ -440,13 +439,13 @@
440 >>> a_builder.updateBuild(bqItem10)439 >>> a_builder.updateBuild(bqItem10)
441 >>> build.builder is not None440 >>> build.builder is not None
442 True441 True
443 >>> build.datebuilt is not None442 >>> build.date_finished is not None
444 True443 True
445 >>> build.buildduration is not None444 >>> build.duration is not None
446 True445 True
447 >>> build.buildlog is not None446 >>> build.log is not None
448 True447 True
449 >>> build.buildstate.title448 >>> build.status.title
450 'Successfully built'449 'Successfully built'
451 >>> check_mail_sent(last_stub_mail_count)450 >>> check_mail_sent(last_stub_mail_count)
452 False451 False
@@ -484,7 +483,7 @@
484 >>> check_mail_sent(last_stub_mail_count)483 >>> check_mail_sent(last_stub_mail_count)
485 False484 False
486 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(bqItem11)485 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(bqItem11)
487 >>> print build.buildstate.title486 >>> print build.status.title
488 Needs building487 Needs building
489 >>> job = bqItem11.specific_job.job488 >>> job = bqItem11.specific_job.job
490 >>> print job.status.title489 >>> print job.status.title
@@ -517,23 +516,24 @@
517516
518 >>> bqItem12.builder = None517 >>> bqItem12.builder = None
519518
520The buildlog is collected and compressed locally using gzip algorithm,519The log is collected and compressed locally using gzip algorithm,
521let's see how this method works:520let's see how this method works:
522521
523 >>> bqItem10 = getUtility(IBinaryPackageBuildSet).getByBuildID(522 >>> bqItem10 = getUtility(IBinaryPackageBuildSet).getByBuildID(
524 ... 6).queueBuild()523 ... 6).queueBuild()
525 >>> setupBuildQueue(bqItem10, a_builder)524 >>> setupBuildQueue(bqItem10, a_builder)
525 >>> build = bqItem10.specific_job.build
526 >>> build.status = BuildStatus.FULLYBUILT
526 >>> bqItem10.builder.setSlaveForTesting(WaitingSlave('BuildStatus.OK'))527 >>> bqItem10.builder.setSlaveForTesting(WaitingSlave('BuildStatus.OK'))
527528
528Before collecting and processing the buildlog we will store the files529Before collecting and processing the log we will store the files
529already created in /tmp so we can verify later that this mechanism is530already created in /tmp so we can verify later that this mechanism is
530not leaving any temporary file behind. See bug #172798.531not leaving any temporary file behind. See bug #172798.
531532
532 >>> old_tmps = os.listdir('/tmp')533 >>> old_tmps = os.listdir('/tmp')
533534
534Collect and process the buildlog.535Collect and process the log.
535536
536 >>> build = bqItem10.specific_job.build
537 >>> logfile_alias = build.getLogFromSlave(build)537 >>> logfile_alias = build.getLogFromSlave(build)
538538
539Audit the /tmp for lost temporary files, there should not be any new539Audit the /tmp for lost temporary files, there should not be any new
@@ -543,7 +543,7 @@
543 >>> sorted(os.listdir('/tmp')) == sorted(old_tmps)543 >>> sorted(os.listdir('/tmp')) == sorted(old_tmps)
544 True544 True
545545
546The buildlog was compressed and directly transferred to Librarian.546The log was compressed and directly transferred to Librarian.
547547
548 >>> from canonical.launchpad.interfaces import ILibraryFileAliasSet548 >>> from canonical.launchpad.interfaces import ILibraryFileAliasSet
549 >>> logfile = getUtility(ILibraryFileAliasSet)[logfile_alias]549 >>> logfile = getUtility(ILibraryFileAliasSet)[logfile_alias]
@@ -558,7 +558,7 @@
558558
559 >>> commit()559 >>> commit()
560560
561Check if the buildlog content is correct and accessible via the561Check if the log content is correct and accessible via the
562library file directly and via Librarian http front-end.562library file directly and via Librarian http front-end.
563563
564Since LibrarianFileAlias does not implement required attributes for564Since LibrarianFileAlias does not implement required attributes for
@@ -592,7 +592,7 @@
592592
593 >>> os.remove(fname)593 >>> os.remove(fname)
594594
595The Librarian serves buildlog files with 'gzip' content-encoding and595The Librarian serves log files with 'gzip' content-encoding and
596'text/plain' content-type. This combination instructs the browser to596'text/plain' content-type. This combination instructs the browser to
597decompress the file and display it inline, which makes it easier for597decompress the file and display it inline, which makes it easier for
598users to view it.598users to view it.
@@ -700,7 +700,7 @@
700 >>> current_job = a_builder.currentjob700 >>> current_job = a_builder.currentjob
701 >>> resurrect_build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(701 >>> resurrect_build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(
702 ... current_job)702 ... current_job)
703 >>> resurrect_build.buildstate = BuildStatus.NEEDSBUILD703 >>> resurrect_build.status = BuildStatus.NEEDSBUILD
704 >>> syncUpdate(resurrect_build)704 >>> syncUpdate(resurrect_build)
705 >>> current_job.builder = None705 >>> current_job.builder = None
706 >>> current_job.setDateStarted(None)706 >>> current_job.setDateStarted(None)
@@ -713,7 +713,7 @@
713 >>> old_candidate = removeSecurityProxy(a_builder)._findBuildCandidate()713 >>> old_candidate = removeSecurityProxy(a_builder)._findBuildCandidate()
714 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(714 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(
715 ... old_candidate)715 ... old_candidate)
716 >>> print build.buildstate.name716 >>> print build.status.name
717 NEEDSBUILD717 NEEDSBUILD
718718
719The 'candidate' is constant until we dispatch it.719The 'candidate' is constant until we dispatch it.
@@ -747,7 +747,7 @@
747 >>> from canonical.launchpad.interfaces import PackagePublishingStatus747 >>> from canonical.launchpad.interfaces import PackagePublishingStatus
748 >>> from canonical.testing.layers import LaunchpadZopelessLayer748 >>> from canonical.testing.layers import LaunchpadZopelessLayer
749749
750 >>> spr = build.sourcepackagerelease750 >>> spr = build.source_package_release
751 >>> pub = removeSecurityProxy(build).current_source_publication751 >>> pub = removeSecurityProxy(build).current_source_publication
752 >>> commit()752 >>> commit()
753 >>> LaunchpadZopelessLayer.switchDbUser('launchpad')753 >>> LaunchpadZopelessLayer.switchDbUser('launchpad')
@@ -764,7 +764,7 @@
764Because the 'previous' candidate was marked as superseded, so it's not764Because the 'previous' candidate was marked as superseded, so it's not
765part of the candidates list anymore.765part of the candidates list anymore.
766766
767 >>> print build.buildstate.name767 >>> print build.status.name
768 SUPERSEDED768 SUPERSEDED
769769
770If the candidate is for a private build whose source has not been770If the candidate is for a private build whose source has not been
@@ -825,7 +825,7 @@
825825
826 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(826 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(
827 ... current_job)827 ... current_job)
828 >>> print build.buildstate.name828 >>> print build.status.name
829 NEEDSBUILD829 NEEDSBUILD
830830
831 >>> another_candidate = removeSecurityProxy(831 >>> another_candidate = removeSecurityProxy(
@@ -833,7 +833,7 @@
833 >>> print another_candidate833 >>> print another_candidate
834 None834 None
835835
836 >>> print build.buildstate.name836 >>> print build.status.name
837 SUPERSEDED837 SUPERSEDED
838838
839We'll reset the archive back to non-private for further tests:839We'll reset the archive back to non-private for further tests:
@@ -1060,7 +1060,7 @@
1060 >>> login('foo.bar@canonical.com')1060 >>> login('foo.bar@canonical.com')
1061 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(1061 >>> build = getUtility(IBinaryPackageBuildSet).getByQueueEntry(
1062 ... candidate)1062 ... candidate)
1063 >>> for build_file in build.sourcepackagerelease.files:1063 >>> for build_file in build.source_package_release.files:
1064 ... removeSecurityProxy(build_file).libraryfile.restricted = True1064 ... removeSecurityProxy(build_file).libraryfile.restricted = True
1065 >>> private_ppa = factory.makeArchive(1065 >>> private_ppa = factory.makeArchive(
1066 ... owner=cprov_archive.owner, name='pppa', private=True,1066 ... owner=cprov_archive.owner, name='pppa', private=True,
@@ -1121,7 +1121,7 @@
1121We will create an ancestry in the primary archive target to the 'main'1121We will create an ancestry in the primary archive target to the 'main'
1122component and this time the dispatching will follow that component.1122component and this time the dispatching will follow that component.
11231123
1124 >>> sourcename = build.sourcepackagerelease.name1124 >>> sourcename = build.source_package_release.name
11251125
1126 >>> LaunchpadZopelessLayer.switchDbUser('launchpad')1126 >>> LaunchpadZopelessLayer.switchDbUser('launchpad')
1127 >>> login('foo.bar@canonical.com')1127 >>> login('foo.bar@canonical.com')
@@ -1147,7 +1147,7 @@
11471147
1148 >>> candidate.destroySelf()1148 >>> candidate.destroySelf()
11491149
1150Since this is a build in a private archive, the buildlog was uploaded to1150Since this is a build in a private archive, the log was uploaded to
1151the restricted librarian.1151the restricted librarian.
11521152
1153 >>> candidate = a_build.queueBuild()1153 >>> candidate = a_build.queueBuild()
@@ -1161,7 +1161,7 @@
1161 >>> build.archive.private1161 >>> build.archive.private
1162 True1162 True
11631163
1164 >>> lfa = build.buildlog1164 >>> lfa = build.log
1165 >>> lfa.restricted1165 >>> lfa.restricted
1166 True1166 True
1167 >>> print lfa.filename1167 >>> print lfa.filename
@@ -1177,7 +1177,7 @@
1177 ...1177 ...
1178 DownloadFailed: Alias ... cannot be downloaded from this client.1178 DownloadFailed: Alias ... cannot be downloaded from this client.
11791179
1180Accessing the buildlog via the restricted librarian will work as expected.1180Accessing the log via the restricted librarian will work as expected.
11811181
1182 >>> import urlparse1182 >>> import urlparse
1183 >>> from canonical.librarian.interfaces import IRestrictedLibrarianClient1183 >>> from canonical.librarian.interfaces import IRestrictedLibrarianClient
@@ -1199,7 +1199,7 @@
11991199
1200 >>> removeSecurityProxy(build).archive = cprov_archive1200 >>> removeSecurityProxy(build).archive = cprov_archive
1201 >>> cprov_archive.require_virtualized = True1201 >>> cprov_archive.require_virtualized = True
1202 >>> for build_file in a_build.sourcepackagerelease.files:1202 >>> for build_file in a_build.source_package_release.files:
1203 ... removeSecurityProxy(build_file).libraryfile.restricted = False1203 ... removeSecurityProxy(build_file).libraryfile.restricted = False
1204 >>> mark_archive = getUtility(IPersonSet).getByName('mark').archive1204 >>> mark_archive = getUtility(IPersonSet).getByName('mark').archive
12051205
@@ -1289,7 +1289,7 @@
1289 >>> hoary_evo = hoary.getSourcePackage(1289 >>> hoary_evo = hoary.getSourcePackage(
1290 ... 'evolution').currentrelease.sourcepackagerelease1290 ... 'evolution').currentrelease.sourcepackagerelease
1291 >>> updates_build = hoary_evo.createBuild(1291 >>> updates_build = hoary_evo.createBuild(
1292 ... distroarchseries=hoary_i386,1292 ... distro_arch_series=hoary_i386,
1293 ... pocket=PackagePublishingPocket.UPDATES,1293 ... pocket=PackagePublishingPocket.UPDATES,
1294 ... processor=hoary_i386.default_processor,1294 ... processor=hoary_i386.default_processor,
1295 ... archive=hoary_i386.main_archive)1295 ... archive=hoary_i386.main_archive)
@@ -1387,7 +1387,7 @@
1387 >>> a_builder.currentjob.destroySelf()1387 >>> a_builder.currentjob.destroySelf()
13881388
1389 >>> bqItem3 = a_build.queueBuild()1389 >>> bqItem3 = a_build.queueBuild()
1390 >>> removeSecurityProxy(build).buildstate = (1390 >>> removeSecurityProxy(build).status = (
1391 ... BuildStatus.NEEDSBUILD)1391 ... BuildStatus.NEEDSBUILD)
1392 >>> removeSecurityProxy(build).pocket = (1392 >>> removeSecurityProxy(build).pocket = (
1393 ... PackagePublishingPocket.SECURITY)1393 ... PackagePublishingPocket.SECURITY)
13941394
=== modified file 'lib/lp/soyuz/model/binarypackagebuild.py'
--- lib/lp/soyuz/model/binarypackagebuild.py 2010-05-27 13:26:43 +0000
+++ lib/lp/soyuz/model/binarypackagebuild.py 2010-05-27 13:26:53 +0000
@@ -20,7 +20,6 @@
20 Desc, In, Join, LeftJoin)20 Desc, In, Join, LeftJoin)
21from storm.store import Store21from storm.store import Store
22from sqlobject import SQLObjectNotFound22from sqlobject import SQLObjectNotFound
23from sqlobject.sqlbuilder import AND, IN
2423
25from canonical.config import config24from canonical.config import config
26from canonical.database.sqlbase import quote_like, SQLBase, sqlvalues25from canonical.database.sqlbase import quote_like, SQLBase, sqlvalues
@@ -629,7 +628,7 @@
629 else:628 else:
630 # completed states (success and failure)629 # completed states (success and failure)
631 buildduration = DurationFormatterAPI(630 buildduration = DurationFormatterAPI(
632 self.date_finished - self.date_started).approximateduration()631 self.duration).approximateduration()
633 buildlog_url = self.log_url632 buildlog_url = self.log_url
634 builder_url = canonical_url(self.builder)633 builder_url = canonical_url(self.builder)
635634
@@ -739,11 +738,13 @@
739 return None738 return None
740739
741 archseries_ids = [d.id for d in archseries]740 archseries_ids = [d.id for d in archseries]
742741 store = getUtility(IStoreSelector).get(MAIN_STORE, DEFAULT_FLAVOR)
743 return BinaryPackageBuild.select(742 return store.find(
744 AND(BinaryPackageBuild.q.buildstate==BuildStatus.NEEDSBUILD,743 BinaryPackageBuild,
745 IN(BinaryPackageBuild.q.distroarchseriesID, archseries_ids))744 In(BinaryPackageBuild.distro_arch_series_id, archseries_ids),
746 )745 BinaryPackageBuild.package_build == PackageBuild.id,
746 PackageBuild.build_farm_job == BuildFarmJob.id,
747 BuildFarmJob.status == BuildStatus.NEEDSBUILD)
747748
748 def handleOptionalParamsForBuildQueries(749 def handleOptionalParamsForBuildQueries(
749 self, queries, tables, status=None, name=None, pocket=None,750 self, queries, tables, status=None, name=None, pocket=None,
@@ -1140,17 +1141,21 @@
1140 arch_ids = [d.id for d in archseries]1141 arch_ids = [d.id for d in archseries]
11411142
1142 query = """1143 query = """
1143 Build.distroarchseries IN %s AND1144 BinaryPackageBuild.distro_arch_series IN %s AND
1144 Build.buildstate = %s AND1145 BinaryPackageBuild.package_build = PackageBuild.id AND
1146 PackageBuild.build_farm_job = BuildFarmJob.id AND
1147 BuildFarmJob.status = %s AND
1145 BuildQueue.job_type = %s AND1148 BuildQueue.job_type = %s AND
1146 BuildQueue.job = BuildPackageJob.job AND1149 BuildQueue.job = BuildPackageJob.job AND
1147 BuildPackageJob.build = build.id AND1150 BuildPackageJob.build = BinaryPackageBuild.id AND
1148 BuildQueue.builder IS NULL1151 BuildQueue.builder IS NULL
1149 """ % sqlvalues(1152 """ % sqlvalues(
1150 arch_ids, BuildStatus.NEEDSBUILD, BuildFarmJobType.PACKAGEBUILD)1153 arch_ids, BuildStatus.NEEDSBUILD, BuildFarmJobType.PACKAGEBUILD)
11511154
1152 candidates = BuildQueue.select(1155 candidates = BuildQueue.select(
1153 query, clauseTables=['Build', 'BuildPackageJob'],1156 query, clauseTables=[
1157 'BinaryPackageBuild', 'PackageBuild', 'BuildFarmJob',
1158 'BuildPackageJob'],
1154 orderBy=['-BuildQueue.lastscore'])1159 orderBy=['-BuildQueue.lastscore'])
11551160
1156 return candidates1161 return candidates
11571162
=== modified file 'lib/lp/soyuz/model/binarypackagebuildbehavior.py'
--- lib/lp/soyuz/model/binarypackagebuildbehavior.py 2010-05-27 13:26:43 +0000
+++ lib/lp/soyuz/model/binarypackagebuildbehavior.py 2010-05-27 13:26:53 +0000
@@ -122,7 +122,8 @@
122122
123 # This should already have been checked earlier, but just check again123 # This should already have been checked earlier, but just check again
124 # here in case of programmer errors.124 # here in case of programmer errors.
125 reason = build.archive.checkUploadToPocket(build.distroseries,125 reason = build.archive.checkUploadToPocket(
126 build.distro_series,
126 build.pocket)127 build.pocket)
127 assert reason is None, (128 assert reason is None, (
128 "%s (%s) can not be built for pocket %s: invalid pocket due "129 "%s (%s) can not be built for pocket %s: invalid pocket due "
129130
=== modified file 'lib/lp/soyuz/scripts/buildd.py'
--- lib/lp/soyuz/scripts/buildd.py 2010-04-09 15:46:09 +0000
+++ lib/lp/soyuz/scripts/buildd.py 2010-05-27 13:26:53 +0000
@@ -169,9 +169,9 @@
169169
170 for build in builds:170 for build in builds:
171 if not build.buildqueue_record:171 if not build.buildqueue_record:
172 name = build.sourcepackagerelease.name172 name = build.source_package_release.name
173 version = build.sourcepackagerelease.version173 version = build.source_package_release.version
174 tag = build.distroarchseries.architecturetag174 tag = build.distro_arch_series.architecturetag
175 self.logger.debug(175 self.logger.debug(
176 "Creating buildqueue record for %s (%s) on %s"176 "Creating buildqueue record for %s (%s) on %s"
177 % (name, version, tag))177 % (name, version, tag))
@@ -195,7 +195,7 @@
195 for job in candidates:195 for job in candidates:
196 uptodate_build = getUtility(196 uptodate_build = getUtility(
197 IBinaryPackageBuildSet).getByQueueEntry(job)197 IBinaryPackageBuildSet).getByQueueEntry(job)
198 if uptodate_build.buildstate != BuildStatus.NEEDSBUILD:198 if uptodate_build.status != BuildStatus.NEEDSBUILD:
199 continue199 continue
200 job.score()200 job.score()
201201
202202
=== modified file 'lib/lp/soyuz/scripts/packagecopier.py'
--- lib/lp/soyuz/scripts/packagecopier.py 2010-05-15 17:43:59 +0000
+++ lib/lp/soyuz/scripts/packagecopier.py 2010-05-27 13:26:53 +0000
@@ -110,7 +110,7 @@
110 package_upload = build.package_upload110 package_upload = build.package_upload
111 package_files.append((package_upload, 'changesfile'))111 package_files.append((package_upload, 'changesfile'))
112 # Re-upload the buildlog file as necessary.112 # Re-upload the buildlog file as necessary.
113 package_files.append((build, 'buildlog'))113 package_files.append((build, 'log'))
114 elif IPackageUploadCustom.providedBy(pub_record):114 elif IPackageUploadCustom.providedBy(pub_record):
115 # Re-upload the custom files included115 # Re-upload the custom files included
116 package_files.append((pub_record, 'libraryfilealias'))116 package_files.append((pub_record, 'libraryfilealias'))
@@ -341,7 +341,7 @@
341 if not copied_binaries.issuperset(published_binaries):341 if not copied_binaries.issuperset(published_binaries):
342 raise CannotCopy(342 raise CannotCopy(
343 "binaries conflicting with the existing ones")343 "binaries conflicting with the existing ones")
344 self._checkConflictingFiles(source) 344 self._checkConflictingFiles(source)
345345
346 def _checkConflictingFiles(self, source):346 def _checkConflictingFiles(self, source):
347 # If both the source and destination archive are the same, we don't347 # If both the source and destination archive are the same, we don't
@@ -350,7 +350,7 @@
350 if source.archive.id == self.archive.id:350 if source.archive.id == self.archive.id:
351 return None351 return None
352 source_files = [352 source_files = [
353 sprf.libraryfile.filename for sprf in 353 sprf.libraryfile.filename for sprf in
354 source.sourcepackagerelease.files]354 source.sourcepackagerelease.files]
355 destination_sha1s = self.archive.getFilesAndSha1s(source_files)355 destination_sha1s = self.archive.getFilesAndSha1s(source_files)
356 for lf in source.sourcepackagerelease.files:356 for lf in source.sourcepackagerelease.files:
@@ -624,7 +624,7 @@
624 # If binaries are included in the copy we include binary custom files.624 # If binaries are included in the copy we include binary custom files.
625 if include_binaries:625 if include_binaries:
626 for build in source.getBuilds():626 for build in source.getBuilds():
627 if build.buildstate != BuildStatus.FULLYBUILT:627 if build.status != BuildStatus.FULLYBUILT:
628 continue628 continue
629 delayed_copy.addBuild(build)629 delayed_copy.addBuild(build)
630 original_build_upload = build.package_upload630 original_build_upload = build.package_upload
631631
=== modified file 'lib/lp/soyuz/scripts/tests/test_buildd_cronscripts.py'
--- lib/lp/soyuz/scripts/tests/test_buildd_cronscripts.py 2010-04-12 08:29:02 +0000
+++ lib/lp/soyuz/scripts/tests/test_buildd_cronscripts.py 2010-05-27 13:26:53 +0000
@@ -15,9 +15,13 @@
1515
16from canonical.config import config16from canonical.config import config
17from canonical.launchpad.scripts.logger import QuietFakeLogger17from canonical.launchpad.scripts.logger import QuietFakeLogger
18from canonical.launchpad.webapp.interfaces import (
19 IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
18from canonical.testing import (20from canonical.testing import (
19 DatabaseLayer, LaunchpadLayer, LaunchpadZopelessLayer)21 DatabaseLayer, LaunchpadLayer, LaunchpadZopelessLayer)
20from lp.buildmaster.interfaces.buildbase import BuildStatus22from lp.buildmaster.interfaces.buildbase import BuildStatus
23from lp.buildmaster.model.buildfarmjob import BuildFarmJob
24from lp.buildmaster.model.packagebuild import PackageBuild
21from lp.registry.interfaces.distribution import IDistributionSet25from lp.registry.interfaces.distribution import IDistributionSet
22from lp.services.scripts.base import LaunchpadScriptFailure26from lp.services.scripts.base import LaunchpadScriptFailure
23from lp.soyuz.interfaces.component import IComponentSet27from lp.soyuz.interfaces.component import IComponentSet
@@ -228,7 +232,13 @@
228 self.number_of_pending_builds = self.getPendingBuilds().count()232 self.number_of_pending_builds = self.getPendingBuilds().count()
229233
230 def getPendingBuilds(self):234 def getPendingBuilds(self):
231 return BinaryPackageBuild.selectBy(buildstate=BuildStatus.NEEDSBUILD)235 store = getUtility(IStoreSelector).get(MAIN_STORE, DEFAULT_FLAVOR)
236 pending_builds = store.find(
237 BinaryPackageBuild,
238 BinaryPackageBuild.package_build == PackageBuild.id,
239 PackageBuild.build_farm_job == BuildFarmJob.id,
240 BuildFarmJob.status == BuildStatus.NEEDSBUILD)
241 return pending_builds
232242
233 def getRetryDepwait(self, distribution=None):243 def getRetryDepwait(self, distribution=None):
234 test_args = ['-n']244 test_args = ['-n']
@@ -278,7 +288,7 @@
278288
279 # Make it dependend on the only binary that can be satisfied in289 # Make it dependend on the only binary that can be satisfied in
280 # the sampledata.290 # the sampledata.
281 depwait_build.dependencies = 'pmount'291 depwait_build.dependencies = u'pmount'
282292
283 self.layer.commit()293 self.layer.commit()
284294
@@ -291,7 +301,7 @@
291 self.assertEqual(301 self.assertEqual(
292 self.number_of_pending_builds + 1,302 self.number_of_pending_builds + 1,
293 self.getPendingBuilds().count())303 self.getPendingBuilds().count())
294 self.assertEqual(depwait_build.buildstate.name, 'NEEDSBUILD')304 self.assertEqual(depwait_build.status.name, 'NEEDSBUILD')
295 self.assertEqual(depwait_build.buildqueue_record.lastscore, 1755)305 self.assertEqual(depwait_build.buildqueue_record.lastscore, 1755)
296306
297307
298308
=== modified file 'lib/lp/soyuz/scripts/tests/test_copypackage.py'
--- lib/lp/soyuz/scripts/tests/test_copypackage.py 2010-05-15 17:43:59 +0000
+++ lib/lp/soyuz/scripts/tests/test_copypackage.py 2010-05-27 13:26:53 +0000
@@ -305,8 +305,8 @@
305 'Privacy mismatch on %s' % build.upload_changesfile.filename)305 'Privacy mismatch on %s' % build.upload_changesfile.filename)
306 n_files += 1306 n_files += 1
307 self.assertEquals(307 self.assertEquals(
308 build.buildlog.restricted, restricted,308 build.log.restricted, restricted,
309 'Privacy mismatch on %s' % build.buildlog.filename)309 'Privacy mismatch on %s' % build.log.filename)
310 n_files += 1310 n_files += 1
311 self.assertEquals(311 self.assertEquals(
312 n_files, expected_n_files,312 n_files, expected_n_files,
@@ -322,7 +322,7 @@
322 # update_files_privacy() called on a private binary322 # update_files_privacy() called on a private binary
323 # publication that was copied to a public location correctly323 # publication that was copied to a public location correctly
324 # makes all its related files (deb file, upload changesfile324 # makes all its related files (deb file, upload changesfile
325 # and buildlog) public.325 # and log) public.
326326
327 # Create a new private PPA and a private source publication.327 # Create a new private PPA and a private source publication.
328 private_source = self.makeSource(private=True)328 private_source = self.makeSource(private=True)
@@ -491,7 +491,7 @@
491491
492 def test_cannot_copy_binaries_from_FTBFS(self):492 def test_cannot_copy_binaries_from_FTBFS(self):
493 [build] = self.source.createMissingBuilds()493 [build] = self.source.createMissingBuilds()
494 build.buildstate = BuildStatus.FAILEDTOBUILD494 build.status = BuildStatus.FAILEDTOBUILD
495 self.assertCannotCopyBinaries(495 self.assertCannotCopyBinaries(
496 'source has no binaries to be copied')496 'source has no binaries to be copied')
497497
@@ -501,7 +501,7 @@
501 # retried anytime, but they will fail-to-upload if a copy501 # retried anytime, but they will fail-to-upload if a copy
502 # has built successfully.502 # has built successfully.
503 [build] = self.source.createMissingBuilds()503 [build] = self.source.createMissingBuilds()
504 build.buildstate = BuildStatus.FAILEDTOBUILD504 build.status = BuildStatus.FAILEDTOBUILD
505 self.assertCanCopySourceOnly()505 self.assertCanCopySourceOnly()
506506
507 def test_cannot_copy_binaries_from_binaries_pending_publication(self):507 def test_cannot_copy_binaries_from_binaries_pending_publication(self):
@@ -1156,7 +1156,7 @@
1156 changes_file_name = '%s_%s_%s.changes' % (1156 changes_file_name = '%s_%s_%s.changes' % (
1157 lazy_bin.name, lazy_bin.version, build_i386.arch_tag)1157 lazy_bin.name, lazy_bin.version, build_i386.arch_tag)
1158 package_upload = self.test_publisher.addPackageUpload(1158 package_upload = self.test_publisher.addPackageUpload(
1159 ppa, build_i386.distroarchseries.distroseries,1159 ppa, build_i386.distro_arch_series.distroseries,
1160 build_i386.pocket, changes_file_content='anything',1160 build_i386.pocket, changes_file_content='anything',
1161 changes_file_name=changes_file_name)1161 changes_file_name=changes_file_name)
1162 package_upload.addBuild(build_i386)1162 package_upload.addBuild(build_i386)
@@ -1862,8 +1862,8 @@
1862 status=PackagePublishingStatus.PUBLISHED)1862 status=PackagePublishingStatus.PUBLISHED)
18631863
1864 # The i386 build is completed and the hppa one pending.1864 # The i386 build is completed and the hppa one pending.
1865 self.assertEqual(build_hppa.buildstate, BuildStatus.NEEDSBUILD)1865 self.assertEqual(build_hppa.status, BuildStatus.NEEDSBUILD)
1866 self.assertEqual(build_i386.buildstate, BuildStatus.FULLYBUILT)1866 self.assertEqual(build_i386.status, BuildStatus.FULLYBUILT)
18671867
1868 # Commit to ensure librarian files are written.1868 # Commit to ensure librarian files are written.
1869 self.layer.txn.commit()1869 self.layer.txn.commit()
@@ -2249,7 +2249,7 @@
2249 'foo_source.buildlog', restricted=True)2249 'foo_source.buildlog', restricted=True)
22502250
2251 for build in ppa_source.getBuilds():2251 for build in ppa_source.getBuilds():
2252 build.buildlog = fake_buildlog2252 build.log = fake_buildlog
22532253
2254 # Create ancestry environment in the primary archive, so we can2254 # Create ancestry environment in the primary archive, so we can
2255 # test unembargoed overrides.2255 # test unembargoed overrides.
@@ -2312,7 +2312,7 @@
2312 # Check build's upload changesfile2312 # Check build's upload changesfile
2313 self.assertFalse(build.upload_changesfile.restricted)2313 self.assertFalse(build.upload_changesfile.restricted)
2314 # Check build's buildlog.2314 # Check build's buildlog.
2315 self.assertFalse(build.buildlog.restricted)2315 self.assertFalse(build.log.restricted)
2316 # Check that the pocket is -security as specified in the2316 # Check that the pocket is -security as specified in the
2317 # script parameters.2317 # script parameters.
2318 self.assertEqual(2318 self.assertEqual(
23192319
=== modified file 'lib/lp/soyuz/scripts/tests/test_populatearchive.py'
--- lib/lp/soyuz/scripts/tests/test_populatearchive.py 2010-04-09 15:46:09 +0000
+++ lib/lp/soyuz/scripts/tests/test_populatearchive.py 2010-05-27 13:26:53 +0000
@@ -655,7 +655,7 @@
655 def build_in_wrong_state(build):655 def build_in_wrong_state(build):
656 """True if the given build is not (pending and suspended)."""656 """True if the given build is not (pending and suspended)."""
657 return not (657 return not (
658 build.buildstate == BuildStatus.NEEDSBUILD and658 build.status == BuildStatus.NEEDSBUILD and
659 build.buildqueue_record.job.status == JobStatus.SUSPENDED)659 build.buildqueue_record.job.status == JobStatus.SUSPENDED)
660 hoary = getUtility(IDistributionSet)['ubuntu']['hoary']660 hoary = getUtility(IDistributionSet)['ubuntu']['hoary']
661661

Subscribers

People subscribed via source and target branches

to status/vote changes: