Concurrent modification error when adding user permissions
SUMMARY
In annotations logs time to time and after doing login a concurrent modification error over user permissions cache hashmap is fired.
2023-01-17:11:57:45.911 Annotate [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG e.e.e.l.a.s.i.UserGroupServiceImpl - Found 6 groups in which user 'adriacr' is member
2023-01-17:11:57:45.982 Annotate [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG e.e.e.l.a.s.i.AuthenticationServiceImpl - Discovered 3 expired access tokens for user 'adriacr'; delete them
2023-01-17:11:57:46.020 Annotate [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG e.e.e.l.a.s.i.AuthenticationServiceImpl - Found access token 'bYdUa5tXTGCBTyLiJSWYYw', belongs to user 'adriacr'
2023-01-17:11:57:46.020 Annotate [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG e.e.e.l.a.m.AuthenticatedUserStore - Setting user info; user login='adriacr'
2023-01-17:11:57:46.022 Annotate [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] [] DEBUG e.e.e.l.a.s.i.LeosPermissionServiceImpl - Leos permission for user with id '861' added
2023-01-17:11:57:46.023 Annotate [[ACTIVE] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'] [] ERROR e.e.e.l.a.c.AnnotationApiController - Error while reading read only data
java.util.ConcurrentModificationException: null
at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1657)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOpsForEachOp
OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at eu.europa.ec.leos.annotate.services.impl.util.LeosPermissionCache.flush(LeosPermissionCache.java:66)
at eu.europa.ec.leos.annotate.services.impl.LeosPermissionServiceImpl.flushCache(LeosPermissionServiceImpl.java:48)
at eu.europa.ec.leos.annotate.controllers.AnnotationApiController.getLeosUserPermission(AnnotationApiController.java:907)
at eu.europa.ec.leos.annotate.controllers.AnnotationApiControllerFastClassBySpringCGLIB
34ef4c01.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
...
And this causes in LEOS application following error:
.... 11:57:40.104 leos [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] [] WARN com.vaadin.spring.internal.BeanStore - Storing non-serializable bean [eu.europa.ec.leos.ui.component.versions.VersionComparatorProposal@2c4f0fa1] with name [versionComparatorProposal] in [ViewBeanStore[id=47172d6a, name=null:document]] 11:57:42.283 leos [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] [] INFO e.e.e.l.s.document.BillServiceImpl - getTableOfContent in 692 milliseconds (0 sec) 11:57:43.889 leos [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] [] WARN e.e.e.l.w.s.e.DeadEventLogSubscriber - Dead event: eu.europa.ec.leos.ui.event.toc.TocResizedEvent@71a8904a 11:57:46.046 leos [[ACTIVE] ExecuteThread: '13' for queue: 'weblogic.kernel.Default (self-tuning)'] [] ERROR e.e.e.l.s.A.AnnotateServiceImpl - Error sending user permissions to annotate: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"reason":"Saving user permissions fail: null","status":"failure"}" at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:101) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:751) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:621) at eu.europa.ec.leos.integration.rest.AnnotationClientImpl.sendUserPermissions(AnnotationClientImpl.java:45) at eu.europa.ec.leos.services.Annotate.AnnotateServiceImpl.sendUserPermissions(AnnotateServiceImpl.java:73) at eu.europa.ec.leos.ui.view.document.DocumentPresenter.getUserPermissions(DocumentPresenter.java:1751) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ... RELEASE AND BUILD VERSION
Latest version 4.0.0-SNAPSHOT
STEPS TO REPRODUCE
- Do login in Edit.
- Open some document.
- Check the logs.