Closed
Bug 880093
Opened 12 years ago
Closed 12 years ago
Cache filter_wants
Categories
(Bugzilla :: WebService, defect)
Tracking
()
RESOLVED
FIXED
Bugzilla 4.4
People
(Reporter: mail, Assigned: mail)
Details
(Keywords: perf)
Attachments
(1 file, 1 obsolete file)
|
1.69 KB,
patch
|
glob
:
review+
|
Details | Diff | Splinter Review |
BRC are hitting issues with the performance of RPC calls. One issue when retrieving a list of 4,000 bugs (with about 12 custom fields) is that Bugzilla::WebService::Utils::filters_wants is taking about 7.6 seconds to run (tested on my workstation). With this proposed change, this now takes 1.6 seconds.
I can see no reason not to cache this information, as the params value should change between calls for the same filter/prefix.
| Assignee | ||
Comment 1•12 years ago
|
||
Attachment #758917 -
Flags: review?(glob)
Comment on attachment 758917 [details] [diff] [review]
v1 patch
i like the idea, however this change silently assumes that $params won't change during the lifetime of the request, however we don't /guarantee/ that so i'm not comfortable with this (who knows what sort of shenanigans an extension/customisation may do?).
perhaps the cache could be stored within the $params object?
Attachment #758917 -
Flags: review?(glob) → review-
| Assignee | ||
Comment 3•12 years ago
|
||
Never mind, we'll carry the change locally.
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → WONTFIX
| Assignee | ||
Updated•12 years ago
|
Status: RESOLVED → REOPENED
Resolution: WONTFIX → ---
| Assignee | ||
Comment 4•12 years ago
|
||
Now with an added comment.
Attachment #758917 -
Attachment is obsolete: true
Attachment #758990 -
Flags: review?(glob)
Comment on attachment 758990 [details] [diff] [review]
v2 patch
r=glob
Attachment #758990 -
Flags: review?(glob) → review+
Comment 6•12 years ago
|
||
(In reply to Byron Jones ‹:glob› from comment #2)
> i like the idea, however this change silently assumes that $params won't
> change during the lifetime of the request, however we don't /guarantee/ that
> so i'm not comfortable with this
Which is why I wonder if it's a good idea to take this patch on a stable branch (4.4).
Simon: which method did you call in your testing, and which fields did you include in include_fields and/or exclude_fields? I tested your patch with Bug.get(), but I see no significant improvement.
Status: REOPENED → ASSIGNED
Keywords: perf
| Assignee | ||
Comment 7•12 years ago
|
||
> Which is why I wonder if it's a good idea to take this patch on a stable
> branch (4.4).
I'm okay if you only want to take this for Bugzilla 4.5/5.0
> Simon: which method did you call in your testing, and which fields did you
> include in include_fields and/or exclude_fields? I tested your patch with
> Bug.get(), but I see no significant improvement.
I've tested it on Product.get, Bug.get and a few brc specific .get calls too. When using Bug.get retrieving 4,000 bugs I saw an improvement from 7.6 seconds to 1.6 seconds.
Unfortunately my workstation is currently unavailable (we had a building wide power outage this weekend), but I will try and get the query later today.
| Assignee | ||
Comment 8•12 years ago
|
||
(In reply to Frédéric Buclin from comment #6)
> (In reply to Byron Jones ‹:glob› from comment #2)
> > i like the idea, however this change silently assumes that $params won't
> > change during the lifetime of the request, however we don't /guarantee/ that
> > so i'm not comfortable with this
>
> Which is why I wonder if it's a good idea to take this patch on a stable
> branch (4.4).
>
> Simon: which method did you call in your testing, and which fields did you
> include in include_fields and/or exclude_fields? I tested your patch with
> Bug.get(), but I see no significant improvement.
This is an example of a call I made on my machine, where the time was cut from 4.41 seconds to 2.45 seconds (using JSONRPC). NYTProf logs have been e-mailed to LpS outside this ticket.
method => 'Product.get',
params => {
Bugzilla_login => 'X',
Bugzilla_password => 'X',
names => [ 'Fedora' ],
include_fields => ['id', 'names', 'components.id', 'components.name', 'components.flag_types' ],
}
Comment 9•12 years ago
|
||
I did something similar:
my $call = rpc_call('Product.get',
{names => ['Big Product'],
include_fields => ['name', 'versions', 'components.name',
'components.description', 'classification',
'milestones.name', 'components.flag_types'],
exclude_fields => ['versions.sort_key']});
With and without your patch, it takes 31.3 seconds to complete, where Big Product has 1000 versions, 1000 milestones and 1000 components.
NYTProf shows that:
without your patch:
# spent 276ms within Bugzilla::WebService::Util::filter_wants which was called 17004 times, avg 16µs/call:
# 16002 times (259ms+0s) by Bugzilla::WebService::Util::filter at line 33, avg 16µs/call
with your patch:
# spent 165ms (131+34.2) within Bugzilla::WebService::Util::filter_wants which was called 17004 times, avg 10µs/call:
# 16002 times (123ms+31.9ms) by Bugzilla::WebService::Util::filter at line 33, avg 10µs/call
So that's a 40% improvement, but my timing is very different from yours as your NYTProf output shows that you called filter_wants() 148'250 times when I only called it 17'000 times. In my testing, the bottleneck is in SOAP::Serializer.
| Assignee | ||
Comment 10•12 years ago
|
||
(In reply to Frédéric Buclin from comment #9)
> In my testing, the bottleneck is in
> SOAP::Serializer.
Definitely, but that is beyond our direct control.
-- simon
Comment 11•12 years ago
|
||
Just to be clear: an improvement of 40% is still a good thing, so I'm fine taking this patch. :)
Flags: approval?
Flags: approval4.4?
Flags: approval4.4+
Flags: approval+
| Assignee | ||
Comment 12•12 years ago
|
||
Committing to: bzr+ssh://bzr.mozilla.org/bugzilla/trunk/
modified Bugzilla/WebService/Util.pm
Committed revision 8670.
Committing to: bzr+ssh://bzr.mozilla.org/bugzilla/4.4/
modified Bugzilla/WebService/Util.pm
Committed revision 8583.
Status: ASSIGNED → RESOLVED
Closed: 12 years ago → 12 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•