[MAGNOLIA-8664] MagnoliaAccessProvider addReadPermission throws ConcurrentModificationException Created: 07/Dec/22 Updated: 12/Jun/23 Resolved: 07/Jun/23 |
|
| Status: | Closed |
| Project: | Magnolia |
| Component/s: | None |
| Affects Version/s: | 6.2.26 |
| Fix Version/s: | 6.3.0, 6.2.35 |
| Type: | Bug | Priority: | Neutral |
| Reporter: | Richard Gange | Assignee: | Evzen Fochr |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||
| Template: | |||||
| Acceptance criteria: |
Empty
|
||||
| Task DoD: |
[X]*
Doc/release notes changes? Comment present?
[X]*
Downstream builds green?
[X]*
Solution information and context easily available?
[X]*
Tests
[X]*
FixVersion filled and not yet released
[ ] 
Architecture Decision Record (ADR)
|
||||
| Bug DoR: |
[ ]*
Steps to reproduce, expected, and actual results filled
[ ]*
Affected version filled
|
||||
| Epic Link: | AdminX maintenance | ||||
| Team: | |||||
| Work Started: | |||||
| Approved: |
Yes
|
||||
| Description |
|
A ConcurrentModificationException can sometimes occur when trying to add read permissions in the MagnoliaAccessProvider. Reproduce Expected Actual 2022-03-21T21:08:22,967 ERROR org.apache.jackrabbit.core.DefaultSecurityManager : Failed to instantiate AccessManager (org.apache.jackrabbit.core.security.DefaultAccessManager) java.util.ConcurrentModificationException: null at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1363) ~[?:1.8.0_312] at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) ~[?:1.8.0_312] at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499) ~[?:1.8.0_312] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486) ~[?:1.8.0_312] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[?:1.8.0_312] at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) ~[?:1.8.0_312] at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) ~[?:1.8.0_312] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_312] at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:516) ~[?:1.8.0_312] at info.magnolia.cms.core.MagnoliaAccessProvider.addReadPermission(MagnoliaAccessProvider.java:202) ~[magnolia-core-6.2.16.jar:?] at info.magnolia.cms.core.MagnoliaAccessProvider.addJcrSystemReadPermissions(MagnoliaAccessProvider.java:197) ~[magnolia-core-6.2.16.jar:?] at info.magnolia.cms.core.MagnoliaAccessProvider.compilePermissions(MagnoliaAccessProvider.java:107) ~[magnolia-core-6.2.16.jar:?] Development notes java.util.concurrent. CopyOnWriteArrayList see https://stackoverflow.com/questions/11360401/java-synchronized-list or Collections.synchronizedList(arraylist);
Chosen CopyOnWriteArrayList because or requirement for Collections.synchronizedList usage: ...it is critical that all access to the backing list is accomplished through the returned list. |