Merge lp:~wgrant/launchpad/unuse-spr-copyright into lp:launchpad

Proposed by William Grant
Status: Merged
Approved by: Robert Collins
Approved revision: no longer in the source branch.
Merged at revision: 12576
Proposed branch: lp:~wgrant/launchpad/unuse-spr-copyright
Merge into: lp:launchpad
Diff against target: 55 lines (+24/-2)
2 files modified
database/schema/security.cfg (+1/-1)
lib/lp/soyuz/model/sourcepackagerelease.py (+23/-1)
To merge this branch: bzr merge lp:~wgrant/launchpad/unuse-spr-copyright
Reviewer Review Type Date Requested Status
Robert Collins (community) Approve
Review via email: mp+52808@code.launchpad.net

Commit message

[r=lifeless][bug=732424] Stop loading SPR.copyright every time we load an SPR; it can get big.

Description of the change

SPR.copyright can get fairly large on production (up to 2MB), and nothing uses it. Grabbing it from the DB is significant overhead, so this branch prevents that. I turned it from a Storm column into a property that issues a separate query to get and set. archiveuploader and gina seem happy with this.

To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'database/schema/security.cfg'
2--- database/schema/security.cfg 2011-03-10 03:50:50 +0000
3+++ database/schema/security.cfg 2011-03-10 08:23:46 +0000
4@@ -1277,7 +1277,7 @@
5
6 # Source and Binary packages and builds
7 public.sourcepackagename = SELECT, INSERT
8-public.sourcepackagerelease = SELECT, INSERT
9+public.sourcepackagerelease = SELECT, INSERT, UPDATE
10 public.binarypackagename = SELECT, INSERT
11 public.binarypackagerelease = SELECT, INSERT
12 public.sourcepackagereleasefile = SELECT, INSERT
13
14=== modified file 'lib/lp/soyuz/model/sourcepackagerelease.py'
15--- lib/lp/soyuz/model/sourcepackagerelease.py 2011-01-27 22:01:07 +0000
16+++ lib/lp/soyuz/model/sourcepackagerelease.py 2011-03-10 08:23:46 +0000
17@@ -137,7 +137,6 @@
18 dateuploaded = UtcDateTimeCol(dbName='dateuploaded', notNull=True,
19 default=UTC_NOW)
20 dsc = StringCol(dbName='dsc')
21- copyright = StringCol(dbName='copyright', notNull=False, default=DEFAULT)
22 version = StringCol(dbName='version', notNull=True)
23 changelog = ForeignKey(foreignKey='LibraryFileAlias', dbName='changelog')
24 changelog_entry = StringCol(dbName='changelog_entry')
25@@ -183,7 +182,30 @@
26 kwargs['_user_defined_fields'] = simplejson.dumps(
27 kwargs['user_defined_fields'])
28 del kwargs['user_defined_fields']
29+ # copyright isn't on the Storm class, since we don't want it
30+ # loaded every time. Set it separately.
31+ if 'copyright' in kwargs:
32+ copyright = kwargs.pop('copyright')
33 super(SourcePackageRelease, self).__init__(*args, **kwargs)
34+ self.copyright = copyright
35+
36+ @property
37+ def copyright(self):
38+ """See `ISourcePackageRelease`."""
39+ store = Store.of(self)
40+ store.flush()
41+ return store.execute(
42+ "SELECT copyright FROM sourcepackagerelease WHERE id=%s",
43+ (self.id,)).get_one()[0]
44+
45+ @copyright.setter
46+ def copyright(self, content):
47+ """See `ISourcePackageRelease`."""
48+ store = Store.of(self)
49+ store.flush()
50+ store.execute(
51+ "UPDATE sourcepackagerelease SET copyright=%s WHERE id=%s",
52+ (content, self.id))
53
54 @property
55 def user_defined_fields(self):