[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787921#comment-17787921 ] Konrad Windszus commented on SLING-12160: - bq. The code in this area does not modify the hashmap (just traverses the entrySet), so there must be clash between iteration and modification of the internal Map (MapEntries.aliasMap). Yes for sure. But this must not happen as in general one cannot prevent updates from happening at the same time (triggered through Resource Observation). > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787909#comment-17787909 ] Robert Munteanu commented on SLING-12160: - Without looking at the code - unguarded traversal of a HashMap that is modified by another thread can lead to ill-effects and must not happen. The main problem is not reading stale data, but rather reading the iterators getting an inconsistent internal state and entering endless loops or throwing exceptions. > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787649#comment-17787649 ] Joerg Hoh commented on SLING-12160: --- Can you give me some context on that exception? The code in this area does not modify the hashmap (just traverses the entrySet), so there must be clash between iteration and modification of the internal Map (MapEntries.aliasMap). Checking the MapEntries class itself, I would definitely say, that the aliasMap is not guarded against concurrent access. > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787141#comment-17787141 ] Konrad Windszus commented on SLING-12160: - I think the easiest fix is to create a new map in https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/938fbfd176c58a9fb5bc5d18a37b47eb5c3c53bd/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java#L289 before iterating. > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787139#comment-17787139 ] Konrad Windszus commented on SLING-12160: - [~joerghoh] Can you maybe look a that? > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (SLING-12160) ConcurrentModificationException in ResourceMapperImpl.readAliases()
[ https://issues.apache.org/jira/browse/SLING-12160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17787137#comment-17787137 ] Konrad Windszus commented on SLING-12160: - I think this may happen when the {{MappingEntries}} are modified while iterating through https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/a314ef3ce2e826bfde26493738ed94316c18bfbf/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java#L246 > ConcurrentModificationException in ResourceMapperImpl.readAliases() > --- > > Key: SLING-12160 > URL: https://issues.apache.org/jira/browse/SLING-12160 > Project: Sling > Issue Type: Bug > Components: ResourceResolver >Affects Versions: Resource Resolver 1.7.10 >Reporter: Konrad Windszus >Priority: Major > > I have seen the following exception with Resource Resolver 1.7.10 triggered > by calling {{ResourceResolver.map(...)}} > {code} > java.util.ConcurrentModificationException > at > java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:751) > at > java.base/java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:749) > at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) > at > java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) > at > java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) > at > java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) > at > java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.readAliases(ResourceMapperImpl.java:249) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.loadAliasesIfApplicable(ResourceMapperImpl.java:209) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getAllMappings(ResourceMapperImpl.java:147) > at > org.apache.sling.resourceresolver.impl.mapping.ResourceMapperImpl.getMapping(ResourceMapperImpl.java:73) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:444) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.map(ResourceResolverImpl.java:431) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)