CLONE -Initialisation of wiki renderer is static and is not synchronized

XMLWordPrintable

      The problem is that the renderer is lazy loaded (when the first issue with at least one wiki field is viewed) and if 2 or more threads hit the initialisation at the same time they fall over each other. The following errors appear in the logs:

      org.picocontainer.defaults.DuplicateComponentKeyRegistrationException: Key code.macro.formatters duplicated
      at org.picocontainer.defaults.DefaultPicoContainer.registerComponent(DefaultPicoContainer.java:190)
      at org.picocontainer.defaults.DefaultPicoContainer.registerComponentInstance(DefaultPicoContainer.java:221)
      at com.atlassian.jira.issue.fields.renderer.wiki.WikiRendererFactory.registerWikiWithContainer(WikiRendererFactory.java:67)
      at com.atlassian.jira.issue.fields.renderer.wiki.WikiRendererFactory.getWikiRenderer(WikiRendererFactory.java:39)
      at com.atlassian.jira.issue.fields.renderer.wiki.AtlassianWikiRenderer.getRendererFacade(AtlassianWikiRenderer.java:58)
      at com.atlassian.jira.issue.fields.renderer.wiki.AtlassianWikiRenderer.render(AtlassianWikiRenderer.java:23)
      at com.atlassian.jira.issue.managers.DefaultRendererManager.getRenderedContent(DefaultRendererManager.java:88)
      at com.atlassian.jira.web.action.issue.ViewIssue.getRenderedContent(ViewIssue.java:1120)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at webwork.util.InjectionUtils$DefaultInjectionImpl.invoke(InjectionUtils.java:61)
      at webwork.util.InjectionUtils.invoke(InjectionUtils.java:52)
      at webwork.util.ValueStack.findValue(ValueStack.java:426)
      at webwork.util.ValueStack.findValue(ValueStack.java:175)
      at webwork.view.taglib.WebWorkBodyTagSupport.findValue(WebWorkBodyTagSupport.java:61)
      at webwork.view.taglib.BasicPropertyTag.doStartTag(BasicPropertyTag.java:54)
      at org.apache.jsp.secure.views.issue.viewissue_jsp._jspx_meth_webwork_property_9(org.apache.jsp.secure.views.issue.viewissue_jsp:1015)
      at org.apache.jsp.secure.views.issue.viewissue_jsp._jspx_meth_webwork_if_6(org.apache.jsp.secure.views.issue.viewissue_jsp:970)
      at org.apache.jsp.secure.views.issue.viewissue_jsp._jspx_meth_webwork_property_8(org.apache.jsp.secure.views.issue.viewissue_jsp:922)
      at org.apache.jsp.secure.views.issue.viewissue_jsp._jspService(org.apache.jsp.secure.views.issue.viewissue_jsp:208)
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
      at com.atlassian.jira.web.dispatcher.JiraServletDispatcher.service(JiraServletDispatcher.java:248)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)

      The second problem is that the WikiRendererFactory caches things statically which means that they are not reloaded properly after a data import.

      A work around is to restart JIRA after the import.

              Assignee:
              Dylan Etkin [Atlassian]
              Reporter:
              Sergey Zhukov
              Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: