[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:
relation
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

Generated at Sun Feb 11 23:53:25 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.