[MAGNOLIA-8384] ThreadLocal leaking SystemRepositoryStrategy instances Created: 26/Apr/22 Updated: 27/Oct/22 |
|
| Status: | Open |
| Project: | Magnolia |
| Component/s: | core |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Neutral |
| Reporter: | Michael Duerig | Assignee: | Unassigned |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | foundation_team | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||
| 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: |
[X]*
Steps to reproduce, expected, and actual results filled
[ ]*
Affected version filled
|
||||||||
| Team: | |||||||||
| Description |
Observed behaviourWhen shutting down Magnolia there is sometimes messages logged from Tomact about thread local leaks: 26-Apr-2022 10:27:56.816 SEVERE [main] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [magnoliaPublic] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@3370f42]) and a value of type [info.magnolia.context.SystemRepositoryStrategy] (value [SystemRepositoryStrategy... Expected behaviourThread locals are cleaned up before shutdown. Steps to reproduceI was able to reproduce this by running AssetsCoreFunctionalTests and then shutting down the instance. Initial analysisWith the help of the debugging facility introduced with info.magnolia.context.SystemRepositoryStrategy.<init>(SystemRepositoryStrategy.java:64) sun.reflect.GeneratedConstructorAccessor580.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:423) info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:129) info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:99) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:134) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:120) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstance(GuiceComponentProvider.java:115) info.magnolia.objectfactory.Components.newInstance(Components.java:100) info.magnolia.context.JCRSessionPerThreadSystemContext.getRepositoryStrategy(JCRSessionPerThreadSystemContext.java:50) info.magnolia.context.AbstractContext.release(AbstractContext.java:308) info.magnolia.resourceloader.jcr.JcrResourceOrigin$ResourcesObservationListener.onEvent(JcrResourceOrigin.java:362) info.magnolia.cms.util.FilteredEventListener.onEvent(FilteredEventListener.java:86) info.magnolia.observation.DeferringEventListener$ObservationBasedDelayedExecutor$1.run(DeferringEventListener.java:102) info.magnolia.cms.util.DelayedExecutor$RunnableWrapper.run(DelayedExecutor.java:103) EDU.oswego.cs.dl.util.concurrent.ClockDaemon$RunLoop.run(Unknown Source) java.lang.Thread.run(Thread.java:748) and info.magnolia.context.SystemRepositoryStrategy.<init>(SystemRepositoryStrategy.java:64) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:423) info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:129) info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:99) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:134) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:120) info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstance(GuiceComponentProvider.java:115) info.magnolia.objectfactory.Components.newInstance(Components.java:100) info.magnolia.context.JCRSessionPerThreadSystemContext.getRepositoryStrategy(JCRSessionPerThreadSystemContext.java:50) info.magnolia.context.AbstractContext.getJCRSession(AbstractContext.java:124) info.magnolia.context.MgnlContext.getJCRSession(MgnlContext.java:642) info.magnolia.cms.security.SilentSessionOp.exec(SilentSessionOp.java:65) info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:378) info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:356) info.magnolia.objectfactory.ObservedComponentFactory.load(ObservedComponentFactory.java:146) info.magnolia.objectfactory.ObservedComponentFactory.reload(ObservedComponentFactory.java:142) info.magnolia.objectfactory.ObservedComponentFactory.onEvent(ObservedComponentFactory.java:138) info.magnolia.observation.DeferringEventListener$ObservationBasedDelayedExecutor$1.run(DeferringEventListener.java:102) info.magnolia.cms.util.DelayedExecutor$RunnableWrapper.run(DelayedExecutor.java:103) EDU.oswego.cs.dl.util.concurrent.ClockDaemon$RunLoop.run(Unknown Source) java.lang.Thread.run(Thread.java:748) |
| Comments |
| Comment by Michael Duerig [ 26/Apr/22 ] |
|
See the first comment from dai.ha , which links to a potential fix: https://jira.magnolia-cms.com/browse/MGNLEE-645?focusedCommentId=266310&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-266310 |