Code review comment for lp:~al-maisan/launchpad/ibuilder-api-cleanup-505647

Revision history for this message
Muharem Hrnjadovic (al-maisan) wrote :

Björn Tillenius wrote:
> Review: Needs Information
> On Mon, Jan 11, 2010 at 03:08:17AM -0000, Muharem Hrnjadovic wrote:
>> === modified file 'lib/lp/buildmaster/manager.py'
>> --- lib/lp/buildmaster/manager.py 2009-07-26 14:19:49 +0000
>> +++ lib/lp/buildmaster/manager.py 2010-01-11 03:08:16 +0000
>> @@ -340,17 +340,9 @@
>> transaction.commit()
>> continue
>>
>> - candidate = builder.findBuildCandidate()
>> - if candidate is None:
>> - self.logger.debug(
>> - "No build candidates available for builder.")
>> - continue
>> -
>> slave = RecordingSlave(builder.name, builder.url, builder.vm_host)
>> - builder.setSlaveForTesting(slave)
>> -
>> - builder.dispatchBuildCandidate(candidate)
>> - if builder.currentjob is not None:
>> + candidate = builder.findAndStartJob(buildd_slave=slave)
>> + if candidate is not None:
>> recording_slaves.append(slave)
>> transaction.commit()
>
> Here you changed it to commit when no candidates are found...
Good catch! I have indented the commit() line above to preserve the old
behaviour.

>> === modified file 'lib/lp/soyuz/scripts/buildd.py'
>> --- lib/lp/soyuz/scripts/buildd.py 2009-10-26 18:40:04 +0000
>> +++ lib/lp/soyuz/scripts/buildd.py 2010-01-11 03:08:16 +0000
>> @@ -201,12 +201,10 @@
>> if not builder.is_available:
>> self.logger.warn('builder is not available. Ignored.')
>> continue
>> - candidate = builder.findBuildCandidate()
>> +
>> + candidate = builder.findAndStartJob()
>> if candidate is None:
>> - self.logger.debug(
>> - "No candidates available for builder.")
>> continue
>> - builder.dispatchBuildCandidate(candidate)
>> self.txn.commit()
>
> ... but here you retain the behaviour of not commiting when no candidate
> is found. Why was one place changed, but not the other?
The issue above is fixed now.

>> === modified file 'lib/lp/soyuz/tests/test_builder.py'
>> --- lib/lp/soyuz/tests/test_builder.py 2009-12-02 15:18:46 +0000
>> +++ lib/lp/soyuz/tests/test_builder.py 2010-01-11 03:08:16 +0000
>
>> @@ -34,13 +35,15 @@
>> # Create some i386 builders ready to build PPA builds. Two
>> # already exist in sampledata so we'll use those first.
>> self.builder1 = getUtility(IBuilderSet)['bob']
>> - self.builder2 = getUtility(IBuilderSet)['frog']
>> + self.frog_builder = removeSecurityProxy(
>> + getUtility(IBuilderSet)['frog'])
>
> Why doesn't frog_builder have a security proxy? If it's just to call
> private methods, it's better to remove the proxy when you call the
> method. If you start passing frog_builder to methods in your tests, you
> might get things passing in the tests, while failing in real code.
> Better to be safe and only unwrap the objects when you know it's safe.
Good point! Revised the code accordingly.

>> self.builder3 = self.factory.makeBuilder(name='builder3')
>> - self.builder4 = self.factory.makeBuilder(name='builder4')
>> + self.builder4 = removeSecurityProxy(
>> + self.factory.makeBuilder(name='builder4'))
>
> Same comment here.
Yup. Fixed.

>> self.builder5 = self.factory.makeBuilder(name='builder5')
>> self.builders = [
>> self.builder1,
>> - self.builder2,
>> + self.frog_builder,
>> self.builder3,
>> self.builder4,
>> self.builder5,
>> @@ -62,7 +65,8 @@
>> self.publisher.prepareBreezyAutotest()
>>
>> self.bob_builder = getUtility(IBuilderSet)['bob']
>> - self.frog_builder = getUtility(IBuilderSet)['frog']
>> + self.frog_builder = removeSecurityProxy(
>> + getUtility(IBuilderSet)['frog'])
>
> And here.
Fixed as well.

> review needsinformation
Please see the enclosed incremental diff.

Best regards

--
Muharem Hrnjadovic <email address hidden>
Public key id : B2BBFCFC
Key fingerprint : A5A3 CC67 2B87 D641 103F 5602 219F 6B60 B2BB FCFC

1=== modified file 'lib/lp/buildmaster/manager.py'
2--- lib/lp/buildmaster/manager.py 2010-01-10 23:59:31 +0000
3+++ lib/lp/buildmaster/manager.py 2010-01-11 03:39:35 +0000
4@@ -344,7 +344,7 @@
5 candidate = builder.findAndStartJob(buildd_slave=slave)
6 if candidate is not None:
7 recording_slaves.append(slave)
8- transaction.commit()
9+ transaction.commit()
10
11 return recording_slaves
12
13
14=== modified file 'lib/lp/soyuz/tests/test_builder.py'
15--- lib/lp/soyuz/tests/test_builder.py 2010-01-11 03:03:19 +0000
16+++ lib/lp/soyuz/tests/test_builder.py 2010-01-11 03:43:47 +0000
17@@ -35,11 +35,9 @@
18 # Create some i386 builders ready to build PPA builds. Two
19 # already exist in sampledata so we'll use those first.
20 self.builder1 = getUtility(IBuilderSet)['bob']
21- self.frog_builder = removeSecurityProxy(
22- getUtility(IBuilderSet)['frog'])
23+ self.frog_builder = getUtility(IBuilderSet)['frog']
24 self.builder3 = self.factory.makeBuilder(name='builder3')
25- self.builder4 = removeSecurityProxy(
26- self.factory.makeBuilder(name='builder4'))
27+ self.builder4 = self.factory.makeBuilder(name='builder4')
28 self.builder5 = self.factory.makeBuilder(name='builder5')
29 self.builders = [
30 self.builder1,
31@@ -65,8 +63,7 @@
32 self.publisher.prepareBreezyAutotest()
33
34 self.bob_builder = getUtility(IBuilderSet)['bob']
35- self.frog_builder = removeSecurityProxy(
36- getUtility(IBuilderSet)['frog'])
37+ self.frog_builder = getUtility(IBuilderSet)['frog']
38
39 # Disable bob so only frog is available.
40 self.bob_builder.manual = True
41@@ -85,7 +82,8 @@
42 # there's only one builder available.
43
44 # Asking frog to find a candidate should give us the joesppa build.
45- next_job = self.frog_builder._findBuildCandidate()
46+ next_job = removeSecurityProxy(
47+ self.frog_builder)._findBuildCandidate()
48 build = getUtility(IBuildSet).getByQueueEntry(next_job)
49 self.assertEqual('joesppa', build.archive.name)
50
51@@ -93,7 +91,8 @@
52 # returned.
53 self.bob_builder.builderok = False
54 self.bob_builder.manual = False
55- next_job = self.frog_builder._findBuildCandidate()
56+ next_job = removeSecurityProxy(
57+ self.frog_builder)._findBuildCandidate()
58 build = getUtility(IBuildSet).getByQueueEntry(next_job)
59 self.assertEqual('joesppa', build.archive.name)
60
61@@ -166,7 +165,7 @@
62 def test_findBuildCandidate_first_build_started(self):
63 # A PPA cannot start a build if it would use 80% or more of the
64 # builders.
65- next_job = self.builder4._findBuildCandidate()
66+ next_job = removeSecurityProxy(self.builder4)._findBuildCandidate()
67 build = getUtility(IBuildSet).getByQueueEntry(next_job)
68 self.failIfEqual('joesppa', build.archive.name)
69
70@@ -174,7 +173,7 @@
71 # When joe's first ppa build finishes, his fourth i386 build
72 # will be the next build candidate.
73 self.joe_builds[0].buildstate = BuildStatus.FAILEDTOBUILD
74- next_job = self.builder4._findBuildCandidate()
75+ next_job = removeSecurityProxy(self.builder4)._findBuildCandidate()
76 build = getUtility(IBuildSet).getByQueueEntry(next_job)
77 self.failUnlessEqual('joesppa', build.archive.name)
78
79@@ -183,7 +182,7 @@
80 # for the one architecture.
81 self.ppa_joe.private = True
82 self.ppa_joe.buildd_secret = 'sekrit'
83- next_job = self.builder4._findBuildCandidate()
84+ next_job = removeSecurityProxy(self.builder4)._findBuildCandidate()
85 build = getUtility(IBuildSet).getByQueueEntry(next_job)
86 self.failUnlessEqual('joesppa', build.archive.name)
87
88@@ -209,7 +208,8 @@
89 # Normal archives are not restricted to serial builds per
90 # arch.
91
92- next_job = self.frog_builder._findBuildCandidate()
93+ next_job = removeSecurityProxy(
94+ self.frog_builder)._findBuildCandidate()
95 build = getUtility(IBuildSet).getByQueueEntry(next_job)
96 self.failUnlessEqual('primary', build.archive.name)
97 self.failUnlessEqual('gedit', build.sourcepackagerelease.name)
98@@ -218,7 +218,8 @@
99 # second non-ppa build for the same archive as the next candidate.
100 build.buildstate = BuildStatus.BUILDING
101 build.builder = self.frog_builder
102- next_job = self.frog_builder._findBuildCandidate()
103+ next_job = removeSecurityProxy(
104+ self.frog_builder)._findBuildCandidate()
105 build = getUtility(IBuildSet).getByQueueEntry(next_job)
106 self.failUnlessEqual('primary', build.archive.name)
107 self.failUnlessEqual('firefox', build.sourcepackagerelease.name)

« Back to merge proposal