Robert Collins has proposed merging lp:~lifeless/launchpad/bug-717394 into
lp:launchpad.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
#717394 Distribution:+bugs timeouts
https://bugs.launchpad.net/bugs/717394
For more details, see:
https://code.launchpad.net/~lifeless/launchpad/bug-717394/+merge/50541
Another step on bug search performance, this branch uses the relatively new
counting API for bugs to get aggregates for milestones rather than querying
once per milestone. This should save nearly a second on bug searches in the
Ubuntu context and help make bug searches in smaller contexts just that little
bit snappier.
--
https://code.launchpad.net/~lifeless/launchpad/bug-717394/+merge/50541
Your team Launchpad code reviewers is requested to review the proposed merge of
lp:~lifeless/launchpad/bug-717394 into lp:launchpad.
=== modified file 'lib/lp/bugs/browser/bugtarget.py'
--- lib/lp/bugs/browser/bugtarget.py 2011-02-17 09:14:19 +0000
+++ lib/lp/bugs/browser/bugtarget.py 2011-02-21 01:16:19 +0000
@@ -24,7 +24,10 @@
import cgi
from cStringIO import StringIO
from datetime import datetime
-from operator import itemgetter
+from operator import (
+ attrgetter,
+ itemgetter,
+ )
import urllib
from lazr.restful.interface import copy_field
@@ -1218,16 +1221,22 @@
def milestone_buglistings(self):
"""Return a buglisting for each milestone."""
milestone_buglistings = []
- for series in self.series_list:
- for milestone in series.milestones:
- milestone_bug_count = milestone.open_bugtasks.count()
- if milestone_bug_count > 0:
- milestone_buglistings.append(
- dict(
- title=milestone.name,
- url=canonical_url(milestone),
- count=milestone_bug_count,
- ))
+ bug_task_set = getUtility(IBugTaskSet)
+ milestones = []
+ reduce(lambda _, series:milestones.extend(series.milestones),
+ self.series_list, [])
+ open_bugs = bug_task_set.open_bugtask_search
+ open_bugs.setTarget(any(*milestones))
+ counts = bug_task_set.countBugs(open_bugs, (BugTask.milestoneID,))
+ for milestone in milestones:
+ milestone_bug_count = counts.get((milestone.id,), 0)
+ if milestone_bug_count > 0:
+ milestone_buglistings.append(
+ dict(
+ title=milestone.name,
+ url=canonical_url(milestone),
+ count=milestone_bug_count,
+ ))
return milestone_buglistings
=== modified file 'lib/lp/bugs/browser/bugtask.py'
--- lib/lp/bugs/browser/bugtask.py 2011-02-18 02:58:59 +0000
+++ lib/lp/bugs/browser/bugtask.py 2011-02-21 01:16:19 +0000
@@ -3078,12 +3078,11 @@
# XXX flacoste 2008/04/24 This should be moved to a
# BugTaskSearchParams.setTarget().
- if IDistroSeries.providedBy(self.context):
- search_params.setDistroSeries(self.context)
+ if (IDistroSeries.providedBy(self.context) or
+ IProductSeries.providedBy(self.context)):
+ search_params.setTarget(self.context)
elif IDistribution.providedBy(self.context):
search_params.setDistribution(self.context)
- elif IProductSeries.providedBy(self.context):
- search_params.setProductSeries(self.context)
elif IProduct.providedBy(self.context):
search_params.setProduct(self.context)
elif IProjectGroup.providedBy(self.context):
=== modified file 'lib/lp/bugs/interfaces/bugtask.py'
--- lib/lp/bugs/interfaces/bugtask.py 2011-02-17 09:14:19 +0000
+++ lib/lp/bugs/interfaces/bugtask.py 2011-02-21 01:16:19 +0000
@@ -1281,6 +1281,7 @@
# Yay circular deps.
from lp.registry.interfaces.distroseries import IDistroSeries
from lp.registry.interfaces.productseries import IProductSeries
+ from lp.registry.interfaces.milestone import IMilestone
if isinstance(target, (any, all)):
assert len(target.query_values), \
'cannot determine target with no targets'
@@ -1291,6 +1292,8 @@
self.setDistroSeries(target)
elif IProductSeries.providedBy(instance):
self.setProductSeries(target)
+ elif IMilestone.providedBy(instance):
+ self.milestone = target
else:
raise AssertionError("unknown target type %r" % target)
=== modified file 'lib/lp/bugs/model/bugtask.py'
--- lib/lp/bugs/model/bugtask.py 2011-02-17 04:40:55 +0000
+++ lib/lp/bugs/model/bugtask.py 2011-02-21 01:16:19 +0000
@@ -2502,7 +2502,7 @@
def countBugs(self, params, group_on):
"""See `IBugTaskSet`."""
resultset = self._search(
- group_on + (Count(BugTask.bugID),), [], None, params).result_set
+ group_on + (SQL("COUNT(Distinct BugTask.bug)"),), [], None, params).result_set
# We group on the related field:
resultset.group_by(*group_on)
resultset.order_by()
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help : https://help.launchpad.net/ListHelp