Merge lp:~wgrant/launchpad/bug-241129-queue-binary-scaling into lp:launchpad

Proposed by William Grant
Status: Merged
Approved by: Māris Fogels
Approved revision: no longer in the source branch.
Merged at revision: 11296
Proposed branch: lp:~wgrant/launchpad/bug-241129-queue-binary-scaling
Merge into: lp:launchpad
Diff against target: 82 lines (+16/-3)
2 files modified
lib/lp/soyuz/scripts/queue.py (+7/-2)
lib/lp/soyuz/scripts/tests/test_queue.py (+9/-1)
To merge this branch: bzr merge lp:~wgrant/launchpad/bug-241129-queue-binary-scaling
Reviewer Review Type Date Requested Status
Māris Fogels (community) code Approve
Review via email: mp+31604@code.launchpad.net

Commit message

'queue' no longer overrides each specified binary n^2 times.

Description of the change

The 'queue' archive admin commandline tool lets users specify multiple binary names to override in a single invocation.

However, the current implementation fetches the PackageUpload matching each binary, and overrides them all without removing duplicates. This is inefficient when overriding multiple binaries from the same build: each binary is overridden n² times (bug #241129)!

This branch fixes the scaling problem by only considering each PackageUpload once. It also adds tests to confirm the number of overridden packages does not increase.

To post a comment you must log in.
Revision history for this message
Māris Fogels (mars) wrote :

Hi William,

This change looks good. r=mars

Maris

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/soyuz/scripts/queue.py'
--- lib/lp/soyuz/scripts/queue.py 2010-08-02 02:13:52 +0000
+++ lib/lp/soyuz/scripts/queue.py 2010-08-03 04:16:03 +0000
@@ -189,7 +189,8 @@
189 self.distroseries.distribution.name,189 self.distroseries.distribution.name,
190 self.distroseries.name, self.pocket.name))190 self.distroseries.name, self.pocket.name))
191191
192 self.items.append(item)192 if item not in self.items:
193 self.items.append(item)
193 self.explicit_ids_specified = True194 self.explicit_ids_specified = True
194 else:195 else:
195 # retrieve PackageUpload item by name/version key196 # retrieve PackageUpload item by name/version key
@@ -201,7 +202,8 @@
201 for item in self.distroseries.getQueueItems(202 for item in self.distroseries.getQueueItems(
202 status=self.queue, name=term, version=version,203 status=self.queue, name=term, version=version,
203 exact_match=self.exact_match, pocket=self.pocket):204 exact_match=self.exact_match, pocket=self.pocket):
204 self.items.append(item)205 if item not in self.items:
206 self.items.append(item)
205 self.package_names.append(term)207 self.package_names.append(term)
206208
207 self.items_size = len(self.items)209 self.items_size = len(self.items)
@@ -529,6 +531,7 @@
529 priority_name, announcelist, display,531 priority_name, announcelist, display,
530 no_mail=True, exact_match=False, log=log)532 no_mail=True, exact_match=False, log=log)
531 self.terms_start_index = 1533 self.terms_start_index = 1
534 self.overrides_performed = 0
532535
533 def run(self):536 def run(self):
534 """Perform Override action."""537 """Perform Override action."""
@@ -575,6 +578,7 @@
575 component,578 component,
576 queue_item.sourcepackagerelease.component579 queue_item.sourcepackagerelease.component
577 ])580 ])
581 self.overrides_performed += 1
578 self.displayInfo(queue_item)582 self.displayInfo(queue_item)
579583
580 def _override_binary(self):584 def _override_binary(self):
@@ -614,6 +618,7 @@
614 binary.priority.name))618 binary.priority.name))
615 binary.override(component=component, section=section,619 binary.override(component=component, section=section,
616 priority=priority)620 priority=priority)
621 self.overrides_performed += 1
617 self.displayInfo(queue_item, only=binary.name)622 self.displayInfo(queue_item, only=binary.name)
618 # See if the new component requires a new archive on the623 # See if the new component requires a new archive on the
619 # build:624 # build:
620625
=== modified file 'lib/lp/soyuz/scripts/tests/test_queue.py'
--- lib/lp/soyuz/scripts/tests/test_queue.py 2010-02-09 00:17:40 +0000
+++ lib/lp/soyuz/scripts/tests/test_queue.py 2010-08-03 04:16:03 +0000
@@ -719,6 +719,7 @@
719 component_name='universe', section_name='editors')719 component_name='universe', section_name='editors')
720 # 'netapplet' appears 3 times, alsa-utils once.720 # 'netapplet' appears 3 times, alsa-utils once.
721 self.assertEqual(4, queue_action.items_size)721 self.assertEqual(4, queue_action.items_size)
722 self.assertEqual(2, queue_action.overrides_performed)
722 # Check results.723 # Check results.
723 queue_items = list(breezy_autotest.getQueueItems(724 queue_items = list(breezy_autotest.getQueueItems(
724 status=PackageUploadStatus.NEW, name='alsa-utils'))725 status=PackageUploadStatus.NEW, name='alsa-utils'))
@@ -814,6 +815,7 @@
814 priority_name='optional')815 priority_name='optional')
815 # Check results.816 # Check results.
816 self.assertEqual(2, queue_action.items_size)817 self.assertEqual(2, queue_action.items_size)
818 self.assertEqual(2, queue_action.overrides_performed)
817 queue_items = list(breezy_autotest.getQueueItems(819 queue_items = list(breezy_autotest.getQueueItems(
818 status=PackageUploadStatus.NEW, name='pmount'))820 status=PackageUploadStatus.NEW, name='pmount'))
819 queue_items.extend(list(breezy_autotest.getQueueItems(821 queue_items.extend(list(breezy_autotest.getQueueItems(
@@ -861,7 +863,13 @@
861 component_name='restricted', section_name='editors',863 component_name='restricted', section_name='editors',
862 priority_name='optional')864 priority_name='optional')
863865
864 self.assertEqual(2, queue_action.items_size)866 # There are three binaries to override on this PackageUpload:
867 # - mozilla-firefox in breezy-autotest
868 # - mozilla-firefox and mozilla-firefox-data in warty
869 # Each should be overridden exactly once.
870 self.assertEqual(1, queue_action.items_size)
871 self.assertEqual(3, queue_action.overrides_performed)
872
865 queue_items = list(breezy_autotest.getQueueItems(873 queue_items = list(breezy_autotest.getQueueItems(
866 status=PackageUploadStatus.NEW, name='mozilla-firefox-data'))874 status=PackageUploadStatus.NEW, name='mozilla-firefox-data'))
867 queue_items.extend(list(breezy_autotest.getQueueItems(875 queue_items.extend(list(breezy_autotest.getQueueItems(