[MGNLCACHE-224] EhcacheFactory#getCache not synchronized Created: 13/Dec/19 Updated: 16/Jul/20 Resolved: 01/Apr/20 |
|
| Status: | Closed |
| Project: | Cache Modules |
| Component/s: | ehcache3 |
| Affects Version/s: | 5.8.1 |
| Fix Version/s: | 5.6.4, 5.8.3, 5.9.1 |
| Type: | Bug | Priority: | Neutral |
| Reporter: | Richard Gange | Assignee: | Roman Kovařík |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | maintenance, quickwin | ||
| Remaining Estimate: | 1h | ||
| Time Spent: | 1h 4m | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||
| Template: |
|
||||
| Patch included: |
Yes
|
||||
| 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
|
||||
| Date of First Response: | |||||
| Epic Link: | Support | ||||
| Sprint: | Maintenance 1 | ||||
| Story Points: | 0 | ||||
| Description |
|
It was discovered that not having #getCache synchronized can lead to error like this:
java.lang.IllegalArgumentException: Cache 'DockContainerCacheKey' already exists at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:268) ~[ehcache-core-3.7.1.jar:3.7.1 7db6abb761a35015a750b7477e865482e97e24fb] at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:254) ~[ehcache-core-3.7.1.jar:3.7.1 7db6abb761a35015a750b7477e865482e97e24fb] at info.magnolia.module.cache.ehcache3.EhCache3Factory.createCache(EhCache3Factory.java:136) ~[magnolia-cache-ehcache3-5.8.1.jar:?] at info.magnolia.module.cache.ehcache3.EhCache3Factory.getCache(EhCache3Factory.java:123) ~[magnolia-cache-ehcache3-5.8.1.jar:?] at info.magnolia.module.cache.factory.DelegatingCacheFactory.getCache(DelegatingCacheFactory.java:58) ~[magnolia-cache-core-5.8.1.jar:?] at at.wundermanpxp.xyz.utils.DockUtils.getDockContainer(DockUtils.java:997) ~[xyz-templates-1.0.136.jar:?] at at.wundermanpxp.xyz.utils.DockUtils.getDockContainer(DockUtils.java:993) ~[xyz-templates-1.0.136.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_221] at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1505) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.ext.beans.ReflectionCallableMemberDescriptor.invokeMethod(ReflectionCallableMemberDescriptor.java:56) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.ext.beans.MemberAndArguments.invokeMethod(MemberAndArguments.java:51) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.ext.beans.OverloadedMethodsModel.exec(OverloadedMethodsModel.java:61) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.MethodCall._eval(MethodCall.java:65) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Expression.eval(Expression.java:83) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Assignment.accept(Assignment.java:134) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Environment.visit(Environment.java:330) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Environment.visit(Environment.java:336) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Environment.visit(Environment.java:336) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Environment.visit(Environment.java:336) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.core.Environment.process(Environment.java:309) ~[freemarker-2.3.28.jar:2.3.28] at freemarker.template.Template.process(Template.java:384) ~[freemarker-2.3.28.jar:2.3.28] at info.magnolia.freemarker.FreemarkerHelper.render(FreemarkerHelper.java:171) ~[magnolia-freemarker-support-6.1.3.jar:?] at info.magnolia.rendering.renderer.FreemarkerRenderer.onRender(FreemarkerRenderer.jav
|
| Comments |
| Comment by Jan Haderka [ 28/Feb/20 ] |
|
or rather despite the fact that info.magnolia.module.cache.ehcache3.EhCache3Factory#createCache is synchronized, it just synchronizes creation while it needs within the synchronized block first check if the cache w/ given name already exists and only if not create it. patch available in PR |
| Comment by Richard Gange [ 28/Feb/20 ] |
|
Thanks for the clarification |