https://bz.apache.org/bugzilla/show_bug.cgi?id=69419
Bug ID: 69419
Summary: Redundant code execution in nested
ApplicationHttpRequest
Product: Tomcat 9
Version: 9.0.x
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: -----
Created attachment 39916
--> https://bz.apache.org/bugzilla/attachment.cgi?id=39916&action=edit
Patch for 9.x
JSP inclusions wrap the current ServletRequest in a new ApplicationHttpRequest;
nested inclusions therefore result in nested chains of ApplicationHttpRequests.
In our large, etc. application, this nesting ranges from 1 - 7 layers deep
before disappearing from our data (meaning: 8+ exists but it's extremely rare).
Any access to the request is handled first by the outermost
ApplicationHttpRequest, then delegated to each item in the chain until it
finally reaches the original, unwrapped request. This unfortunately means that
the expensive logic for identifying special values is executed for each nested
layer, with the same result each time.
The attached patch file implements a fast-path that is used when delegating to
a nested instance, eliminating both the duplicate special logic and many
embedded virtual method lookups. The patch includes the change, a speed test
(added to TesterApplicationHttpRequestPerformance), and a JUnit test (added to
TestApplicationHttpRequest). Performance as observed on my machine:
Before:
Depth 0: 970930633ns
Depth 1: 1175171009ns
Depth 4: 1950073374ns
Depth 7: 3441997543ns
After:
Depth 0: 970601794ns
Depth 1: 1210693988ns
Depth 4: 1420921877ns
Depth 7: 1831309561ns
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]