Uploaded image for project: 'Offre de formation'
  1. Offre de formation
  2. ODF-540

ConcurrentModificationException durant la synchronisation globale.

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • 2.0.0
    • 2.0.0
    • Synchro
    • None

      Durant la synchronisation globale, une popup javascript d'erreur est apparue vers la fin faisant part d'une exception Java.
      A la suite de quoi, le rapport final ne s'est pas affiché et le masque Synchronisation en cours. Veuillez patientez ... demeure.

      Cela me semble dur à reproduire mais il me semble que ce cas arrive lorsqu'on écrit dans le rappport de synchronisation depuis le thread de synchronisation globale, et qu'on cherche à lire au même instant le rapport de la org.ametys.plugins.odfsync.global.GetSyncStateAction suite au cours d'une requête ajax lancée toute les secondes (voir la fonction js org.ametys.odf.sync.GlobalSynchronizationTool.prototype._checkEngine).

      Voici le log d'erreur java:

      Date:			Thu Oct 18 17:21:01 CEST 2012 (1350573661974)
      Thread:		http-bio-8085-exec-2
      Message #:	9883
      Level:		ERROR
      NDC:			
      Category:	sitemap
      Message:		Can not dispatch request '0' : 'odf-sync' '/sync/get-sync-state' '{}'
      Location:	org.ametys.runtime.util.SLF4JLogger.error(SLF4JLogger.java:64)
      Thrown:
      org.apache.cocoon.util.location.LocatedException: Can not dispatch request '0' : 'odf-sync' '/sync/get-sync-state' '{}'
      	at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator._dispatching(DispatchGenerator.java:155)
      	at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator.generate(DispatchGenerator.java:81)
      	at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:579)
      	at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:280)
      	at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:481)
      	at org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:144)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:178)
      	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:254)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:118)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:178)
      	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:254)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:118)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:178)
      	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:254)
      	at org.apache.cocoon.Cocoon.process(Cocoon.java:699)
      	at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1159)
      	at org.ametys.runtime.servlet.RuntimeServlet._doService(RuntimeServlet.java:135)
      	at org.ametys.runtime.servlet.RuntimeServlet.service(RuntimeServlet.java:92)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
      	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
      	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
      	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
      	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at java.lang.Thread.run(Unknown Source)
      Caused by: org.apache.excalibur.source.SourceException: Cannot get input stream for cocoon://_plugins/odf-sync/sync/get-sync-state?
      	at org.apache.cocoon.components.source.impl.SitemapSource.getInputStream(SitemapSource.java:253)
      	at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator._dispatching(DispatchGenerator.java:128)
      	... 55 more
      Caused by: org.apache.cocoon.ProcessingException: Sitemap: error when calling sub-sitemap
      	at <map:mount> - resource://org/ametys/runtime/kernel/sitemap.xmap:143:82
      	at org.apache.cocoon.components.source.impl.SitemapSource.init(SitemapSource.java:380)
      	at org.apache.cocoon.components.source.impl.SitemapSource.<init>(SitemapSource.java:215)
      	at org.apache.cocoon.components.source.impl.SitemapSourceFactory.getSource(SitemapSourceFactory.java:65)
      	at org.apache.excalibur.source.impl.SourceResolverImpl.resolveURI(SourceResolverImpl.java:208)
      	at org.apache.cocoon.components.CocoonComponentManager.resolveURI(CocoonComponentManager.java:558)
      	at org.apache.cocoon.components.CocoonComponentManager.resolveURI(CocoonComponentManager.java:558)
      	at org.apache.cocoon.components.CocoonComponentManager.resolveURI(CocoonComponentManager.java:558)
      	at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator._dispatching(DispatchGenerator.java:125)
      	... 55 more
      Caused by: org.apache.cocoon.ProcessingException: Sitemap: error when calling sub-sitemap
      	at <map:mount> - resource://org/ametys/runtime/kernel/sitemap.xmap:143:82
      	at org.apache.cocoon.ProcessingException.throwLocated(ProcessingException.java:113)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:122)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.buildPipeline(ConcreteTreeProcessor.java:194)
      	at org.apache.cocoon.components.treeprocessor.TreeProcessor.buildPipeline(TreeProcessor.java:267)
      	at org.apache.cocoon.components.source.impl.SitemapSource.init(SitemapSource.java:333)
      	... 62 more
      Caused by: java.util.ConcurrentModificationException
      	at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(Unknown Source)
      	at java.util.LinkedHashMap$KeyIterator.next(Unknown Source)
      	at java.util.AbstractCollection.addAll(Unknown Source)
      	at java.util.LinkedHashSet.<init>(Unknown Source)
      	at org.ametys.plugins.odfsync.global.GetSyncStateAction.act(GetSyncStateAction.java:46)
      	at org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke(ActTypeNode.java:125)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:47)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MatchNode.invoke(MatchNode.java:108)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:143)
      	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:69)
      	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:93)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:236)
      	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.buildPipeline(ConcreteTreeProcessor.java:194)
      	at org.apache.cocoon.components.treeprocessor.TreeProcessor.buildPipeline(TreeProcessor.java:267)
      	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:111)
      	... 72 more
      

          [ODF-540] ConcurrentModificationException durant la synchronisation globale.

          Thibaut Rizzi (Inactive) made changes -
          Status Original: Resolved [ 5 ] New: Closed [ 6 ]
          Laurence Aumeunier made changes -
          Resolution New: Fixed [ 1 ]
          Status Original: Reopened [ 4 ] New: Resolved [ 5 ]

          Finalement, retour à une ArrayList mais sans utiliser d'iterateur

          Laurence Aumeunier added a comment - Finalement, retour à une ArrayList mais sans utiliser d'iterateur

          Utilisation aussi de Vector pour la copie:

           Vector<String> messages = new Vector<String>(GlobalSynchronizationEngine.getSynchronizationReport().getMessages());
          

          A voir si ca change quelque chose.
          En JS l'écran ne frise plus si ca arrive, on retente de récupérer l'état de la synchro 2 secondes plus tard.

          Laurence Aumeunier added a comment - Utilisation aussi de Vector pour la copie: Vector< String > messages = new Vector< String >(GlobalSynchronizationEngine.getSynchronizationReport().getMessages()); A voir si ca change quelque chose. En JS l'écran ne frise plus si ca arrive, on retente de récupérer l'état de la synchro 2 secondes plus tard.
          Laurence Aumeunier made changes -
          Resolution Original: Fixed [ 1 ]
          Status Original: Resolved [ 5 ] New: Reopened [ 4 ]

          Vector does not correct issue

          java.util.ConcurrentModificationException
              at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
              at java.util.AbstractList$Itr.next(AbstractList.java:343)
              at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
              at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152)
              at org.ametys.plugins.odfsync.global.GetSyncStateAction.act(GetSyncStateAction.java:46)
              at org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke(ActTypeNode.java:125) 
          

          Laurence Aumeunier added a comment - Vector does not correct issue java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at java.util.AbstractCollection.addAll(AbstractCollection.java:305) at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152) at org.ametys.plugins.odfsync.global.GetSyncStateAction.act(GetSyncStateAction.java:46) at org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke(ActTypeNode.java:125)
          Laurence Aumeunier made changes -
          Resolution New: Fixed [ 1 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]

          We neee to use a java.util.Vector which methods are synchronized instead of a java.util.LinkedHashSet

          Laurence Aumeunier added a comment - We neee to use a java.util.Vector which methods are synchronized instead of a java.util.LinkedHashSet
          Laurence Aumeunier made changes -
          Fix Version/s New: 2.0.0 [ 11084 ]
          Thibaut Rizzi (Inactive) created issue -

            Unassigned Unassigned
            trizzi Thibaut Rizzi (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: