[jboss-jira] [JBoss JIRA] (WFLY-12582) ConcurrentModificationException in SharedObjectCache.getSharedSet
Severian Duchenko (Jira)
issues at jboss.org
Tue Sep 24 03:12:00 EDT 2019
[ https://issues.jboss.org/browse/WFLY-12582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13788233#comment-13788233 ]
Severian Duchenko commented on WFLY-12582:
------------------------------------------
Looks like root cause is concurrent modification of key used for caching during cache value calculation.
Race condition of methods ArraySet.equals and ArraySet.trimToSize .
{code}
package org.jboss.weld.resources;
...
public class SharedObjectCache implements BootstrapService {
....
private final LoadingCache<Set<?>, Set<?>> sharedSets = CacheBuilder.newBuilder().build(new CacheLoader<Set<?>, Set<?>>() {
@Override
public Set<?> load(Set<?> from) {
return WeldCollections.immutableSet(from); // <-- HERE
}
});
...
package org.jboss.weld.util.collections;
...
public class WeldCollections {
...
public static <T> Set<T> immutableSet(Set<T> set) {
if (set.isEmpty()) {
return Collections.emptySet();
}
if (set instanceof ImmutableSet<?>) {
return set;
}
if (set instanceof ArraySet<?>) {
ArraySet.class.cast(set).trimToSize(); // <-- HERE
}
return Collections.unmodifiableSet(set);
}
{code}
> ConcurrentModificationException in SharedObjectCache.getSharedSet
> -----------------------------------------------------------------
>
> Key: WFLY-12582
> URL: https://issues.jboss.org/browse/WFLY-12582
> Project: WildFly
> Issue Type: Bug
> Components: CDI / Weld
> Affects Versions: 10.1.0.Final
> Environment: JBoss Admin Command-line Interface
> JBOSS_HOME: /home/user/wildfly-10.1.0.Final
> JBoss AS release: 2.2.0.Final "Kenny"
> JBoss AS product: WildFly Full 10.1.0.Final
> JAVA_HOME: /home/user/.sdkman/candidates/java/current
> java.version: 1.8.0_222
> java.vm.vendor: AdoptOpenJDK
> java.vm.version: 25.222-b10
> os.name: Linux
> os.version: 5.0.0-27-generic
> Reporter: Severian Duchenko
> Assignee: Matěj Novotný
> Priority: Minor
>
> Following error occurred during wildfly startup:
> {code}
> jboss.deployment.unit."MY.ear".WeldStartService: Failed to start service
> at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_202]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_202]
> at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_202]
> Caused by: java.util.ConcurrentModificationException
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) [rt.jar:1.8.0_202]
> at java.util.ArrayList$Itr.next(ArrayList.java:859) [rt.jar:1.8.0_202]
> at java.util.AbstractCollection.containsAll(AbstractCollection.java:317) [rt.jar:1.8.0_202]
> at java.util.AbstractSet.equals(AbstractSet.java:95) [rt.jar:1.8.0_202]
> at com.google.common.base.Equivalence$Equals.doEquivalent(Equivalence.java:327)
> at com.google.common.base.Equivalence.equivalent(Equivalence.java:71)
> at com.google.common.cache.LocalCache$Segment.getEntry(LocalCache.java:2711)
> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2180)
> at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
> at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
> at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49)
> at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74)
> at org.jboss.weld.resources.SharedObjectCache.getSharedSet(SharedObjectCache.java:72)
> at org.jboss.weld.injection.attributes.InferringFieldInjectionPointAttributes.<init>(InferringFieldInjectionPointAttributes.java:47)
> at org.jboss.weld.injection.attributes.InferringFieldInjectionPointAttributes.of(InferringFieldInjectionPointAttributes.java:41)
> at org.jboss.weld.injection.InjectionPointFactory.createFieldInjectionPoint(InjectionPointFactory.java:140)
> at org.jboss.weld.injection.ResourceInjectionFactory$ResourceInjectionProcessor.createResourceInjections(ResourceInjectionFactory.java:190)
> at org.jboss.weld.injection.ResourceInjectionFactory.discoverType(ResourceInjectionFactory.java:449)
> at org.jboss.weld.injection.ResourceInjectionFactory.getResourceInjections(ResourceInjectionFactory.java:97)
> at org.jboss.weld.injection.producer.ResourceInjector.<init>(ResourceInjector.java:59)
> at org.jboss.weld.injection.producer.ResourceInjector.of(ResourceInjector.java:49)
> at org.jboss.weld.injection.producer.BeanInjectionTarget.<init>(BeanInjectionTarget.java:63)
> at org.jboss.weld.injection.producer.BeanInjectionTarget.createDefault(BeanInjectionTarget.java:47)
> at org.jboss.weld.manager.InjectionTargetFactoryImpl.chooseInjectionTarget(InjectionTargetFactoryImpl.java:113)
> at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:86)
> at org.jboss.weld.bean.ManagedBean.<init>(ManagedBean.java:100)
> at org.jboss.weld.bean.ManagedBean.of(ManagedBean.java:80)
> at org.jboss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(AbstractBeanDeployer.java:261)
> at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:229)
> at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:78)
> at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:75)
> at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
> at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_202]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_202]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_202]
> at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_202]
> at org.jboss.threads.JBossThread.run(JBossThread.java:320)
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list