Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-9153

Initialisation of wiki renderer is static and is not synchronized

    XMLWordPrintable

Details

    Description

      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.

      Attachments

        Issue Links

          Activity

            People

              nick.menere Nick Menere [Atlassian] (Inactive)
              anton@atlassian.com AntonA
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: