Merge lp:~al-maisan/launchpad/apapi-fix into lp:launchpad/db-devel

Proposed by Muharem Hrnjadovic
Status: Merged
Approved by: Julian Edwards
Approved revision: no longer in the source branch.
Merged at revision: not available
Proposed branch: lp:~al-maisan/launchpad/apapi-fix
Merge into: lp:launchpad/db-devel
Diff against target: None lines
To merge this branch: bzr merge lp:~al-maisan/launchpad/apapi-fix
Reviewer Review Type Date Requested Status
Francis J. Lacoste (community) release-critical Approve
Julian Edwards (community) Approve
Review via email: mp+9089@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Muharem Hrnjadovic (al-maisan) wrote :

While testing the archive permission methods newly exposed on the LP API
it became apparent that the database queries pertaining to the
TeamParticipation table were incorrect.

That resulted in loooong query execution times and OOPSs.

The branch at hand corrects the queries in question according to
advice received from Stuart Bishop (thanks stub!).

Please see also: https://bugs.edge.launchpad.net/soyuz/+bug/402108

Tests to run:

    bin/test -vv -t archive -t packageset

Revision history for this message
Julian Edwards (julian-edwards) wrote :

Looks good Muharem. Please ask for an RC from Francis when he's around and then land it.

review: Approve
Revision history for this message
Francis J. Lacoste (flacoste) :
review: Approve (release-critical)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/soyuz/model/archivepermission.py'
2--- lib/lp/soyuz/model/archivepermission.py 2009-07-17 00:26:05 +0000
3+++ lib/lp/soyuz/model/archivepermission.py 2009-07-21 08:27:00 +0000
4@@ -121,10 +121,8 @@
5 clauses = ["""
6 ArchivePermission.archive = %s AND
7 ArchivePermission.permission = %s AND
8- EXISTS (SELECT TeamParticipation.person
9- FROM TeamParticipation
10- WHERE TeamParticipation.person = %s AND
11- TeamParticipation.team = ArchivePermission.person)
12+ ArchivePermission.person = TeamParticipation.team AND
13+ TeamParticipation.person = %s
14 """ % sqlvalues(archive, permission, person)
15 ]
16
17@@ -149,7 +147,7 @@
18
19 query = " AND ".join(clauses)
20 auth = ArchivePermission.select(
21- query, clauseTables=["TeamParticipation"], distinct=True,
22+ query, clauseTables=["TeamParticipation"],
23 prejoins=prejoins)
24
25 return auth
26@@ -337,11 +335,11 @@
27 SELECT ap.id
28 FROM archivepermission ap, teamparticipation tp
29 WHERE
30- (ap.person = ? OR (ap.person = tp.team AND tp.person = ?))
31+ ap.person = tp.team AND tp.person = ?
32 AND ap.archive = ?
33 AND ap.packageset IS NOT NULL
34 '''
35- query = SQL(query, (person.id, person.id, archive.id))
36+ query = SQL(query, (person.id, archive.id))
37 return store.find(ArchivePermission, In(ArchivePermission.id, query))
38
39 def uploadersForPackageset(
40@@ -375,10 +373,10 @@
41 SELECT ap.id
42 FROM archivepermission ap, teamparticipation tp
43 WHERE
44- (ap.person = ? OR (ap.person = tp.team AND tp.person = ?))
45+ ap.person = tp.team AND tp.person = ?
46 AND ap.packageset = ? AND ap.archive = ?
47 '''
48- query = SQL(query, (person.id, person.id, packageset.id, archive.id))
49+ query = SQL(query, (person.id, packageset.id, archive.id))
50 permissions = list(
51 store.find(ArchivePermission, In(ArchivePermission.id, query)))
52 if len(permissions) > 0:
53@@ -444,14 +442,14 @@
54 archivepermission ap, teamparticipation tp,
55 packagesetsources pss, flatpackagesetinclusion fpsi
56 WHERE
57- (ap.person = ? OR (ap.person = tp.team AND tp.person = ?))
58+ ap.person = tp.team AND tp.person = ?
59 AND ap.packageset = fpsi.parent
60 AND pss.packageset = fpsi.child
61 AND pss.sourcepackagename = ?
62 AND ap.archive = ?
63 '''
64 query = SQL(
65- query, (person.id, person.id, sourcepackagename.id, archive.id))
66+ query, (person.id, sourcepackagename.id, archive.id))
67 return store.find(ArchivePermission, In(ArchivePermission.id, query))
68
69 def packagesetsForSource(
70@@ -491,9 +489,9 @@
71 # Query parameters for the first WHERE clause.
72 (archive.id, sourcepackagename.id) +
73 # Query parameters for the second WHERE clause.
74- (sourcepackagename.id,) + (person.id,)*2 + archive_params +
75+ (sourcepackagename.id,) + (person.id,) + archive_params +
76 # Query parameters for the third WHERE clause.
77- (sourcepackagename.id,) + (person.id,)*2 + archive_params)
78+ (sourcepackagename.id,) + (person.id,) + archive_params)
79
80 query = '''
81 SELECT CASE
82@@ -511,7 +509,7 @@
83 teamparticipation tp
84 WHERE
85 pss.sourcepackagename = %s
86- AND (ap.person = %s OR (ap.person = tp.team AND tp.person = %s))
87+ AND ap.person = tp.team AND tp.person = %s
88 AND pss.packageset = ap.packageset AND ap.explicit = TRUE
89 AND ap.permission = %s AND ap.archive = %s)
90 ELSE (
91@@ -521,7 +519,7 @@
92 teamparticipation tp, flatpackagesetinclusion fpsi
93 WHERE
94 pss.sourcepackagename = %s
95- AND (ap.person = %s OR (ap.person = tp.team AND tp.person = %s))
96+ AND ap.person = tp.team AND tp.person = %s
97 AND pss.packageset = fpsi.child AND fpsi.parent = ap.packageset
98 AND ap.permission = %s AND ap.archive = %s)
99 END AS number_of_permitted_package_sets;

Subscribers

People subscribed via source and target branches

to status/vote changes: