[MAGNOLIA-6860] ProductionModeClasspathFile might cause IOException when used with Jetty9 Created: 07/Nov/16  Updated: 31/Jan/19  Resolved: 18/Nov/16

Status: Closed
Project: Magnolia
Component/s: None
Affects Version/s: None
Fix Version/s: 5.4.10, 5.5.1

Type: Bug Priority: Neutral
Reporter: Philip Mundt Assignee: Aleksandr Pchelintcev
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File MAGNOLIA-6860.patch     Text File jetty9-log-statement.log    
Issue Links:
Relates
relates to MGNLCE-59 Update Tomcat to 8.5.5 Closed
causality
caused by MAGNOLIA-6781 Not closing URLConnection in Producti... Closed
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Sprint: Basel 71
Story Points: 2

 Description   

Since the refactoring of info.magnolia.resourceloader.classpath.service.impl.production.ProductionModeClasspathFile (see MAGNOLIA-6781; https://git.magnolia-cms.com/projects/PLATFORM/repos/main/commits/7880f8d504836fa5e62419af5e3c662a02a1b45f) we cannot run our integration tests with Jetty 9 anymore, due to errors while crawling the pages. On a regular basis will Jetty 9 complain about:

[INFO] [talledLocalContainer] Caused by: java.io.IOException: Stream closed
[INFO] [talledLocalContainer]   at java.util.zip.InflaterInputStream.ensureOpen(InflaterInputStream.java:67)
[INFO] [talledLocalContainer]   at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:142)
[INFO] [talledLocalContainer]   at java.io.FilterInputStream.read(FilterInputStream.java:133)
[INFO] [talledLocalContainer]   at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
[INFO] [talledLocalContainer]   at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
[INFO] [talledLocalContainer]   at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
[INFO] [talledLocalContainer]   at java.io.InputStreamReader.read(InputStreamReader.java:184)
[INFO] [talledLocalContainer]   at java.io.BufferedReader.fill(BufferedReader.java:161)
[INFO] [talledLocalContainer]   at java.io.BufferedReader.read1(BufferedReader.java:212)
[INFO] [talledLocalContainer]   at java.io.BufferedReader.read(BufferedReader.java:286)
[INFO] [talledLocalContainer]   at freemarker.template.Template$LineTableBuilder.read(Template.java:844)
[INFO] [talledLocalContainer]   at freemarker.core.SimpleCharStream.FillBuff(SimpleCharStream.java:116)
[INFO] [talledLocalContainer]   at freemarker.core.SimpleCharStream.readChar(SimpleCharStream.java:198)
[INFO] [talledLocalContainer]   at freemarker.core.SimpleCharStream.BeginToken(SimpleCharStream.java:138)
[INFO] [talledLocalContainer]   at freemarker.core.FMParserTokenManager.getNextToken(FMParserTokenManager.java:7446)
[INFO] [talledLocalContainer]   at freemarker.core.FMParser.jj_ntk_f(FMParser.java:6271)
[INFO] [talledLocalContainer]   at freemarker.core.FMParser.PCData(FMParser.java:3503)
[INFO] [talledLocalContainer]   at freemarker.core.FMParser.MixedContentElements(FMParser.java:3643)
[INFO] [talledLocalContainer]   at freemarker.core.FMParser.Root(FMParser.java:4280)
[INFO] [talledLocalContainer]   at freemarker.template.Template.<init>(Template.java:254)
[INFO] [talledLocalContainer]   at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:548)
[INFO] [talledLocalContainer]   at freemarker.cache.TemplateCache.getTemplateInternal(TemplateCache.java:438)
[INFO] [talledLocalContainer]   at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:291)
[INFO] [talledLocalContainer]   at freemarker.template.Configuration.getTemplate(Configuration.java:2438)
[INFO] [talledLocalContainer]   at freemarker.template.Configuration.getTemplate(Configuration.java:2296)
[INFO] [talledLocalContainer]   at info.magnolia.freemarker.FreemarkerHelper.render(FreemarkerHelper.java:167)
[INFO] [talledLocalContainer]   at info.magnolia.rendering.renderer.FreemarkerRenderer.onRender(FreemarkerRenderer.java:95)

(see full log attached: jetty9-log-statement.log)

This is due to Jetty 9's default classpath resource caching, see org.eclipse.jetty.util.resource.Resource.

Not closing the url connection when acquiring the last modification date solves the problem but is not an appropriate solution.
Instead we should set the default caching to false for Jetty only (see patch attached MAGNOLIA-6860.patch; successfully executed integration tests with Jetty 9).

Even though we have explicitly turned off caching in Tomcat 8 too (see MGNLCE-59; https://git.magnolia-cms.com/projects/PLATFORM/repos/ce/commits/f9a5b2d387f60069166deb3706d8ca11ce8f6eeb) we should make sure this has no impact on Tomcat and its performance.


Generated at Mon Feb 12 04:18:32 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.