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

Duplicate Fields Are Added To A Screen By Unknown Reason

    XMLWordPrintable

Details

    Description

      Issue Summary

      Duplicate fields are added to a screen and it causes errors when checking the Required fields to create an issue in a project using a REST API, or when accessing Custom Fields configuration page from JIRA → Settings → Custom Fields, etc.

      Steps to Reproduce

      1. Navigate to JIRA Administration > Issues ># Screens
      2. Look for the problematic screen
      3. Click Configure

      Expected Results

      The screen configuration screen should open without any error

      Actual Results

      The exception below is thrown on the UI:

      and exception below is thrown in the atlassian-jira.log file:

      2020-07-22 08:31:07,099 http-nio-8080-exec-331 url:/secure/admin/C...ayout!default.jspa username:xxxxxx url:/secure/admin/v...urefieldlayout.jsp username:xxxxx ERROR 1612816 510x5524331x11 8378d3 xxx.xxx.xxxx.xxxx /secure/admin/Confi
      gureFieldLayout!default.jspa [webwork.util.ValueStack] METHOD: "fieldScreenTabs", exception: 
      java.lang.IllegalStateException: Duplicate key com.atlassian.jira.issue.fields.screen.FieldScreenLayoutItemImpl@7335f3a0
              at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
              at java.util.HashMap.merge(HashMap.java:1254)
              at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
              at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
              at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
              at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
              at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
              at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
              at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
              at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
              at com.atlassian.jira.issue.fields.screen.FieldScreenTabImpl$LayoutItems.<init>(FieldScreenTabImpl.java:217)
              at com.atlassian.jira.issue.fields.screen.FieldScreenTabImpl$LayoutItems.<init>(FieldScreenTabImpl.java:208)
              at com.atlassian.jira.issue.fields.screen.FieldScreenTabImpl.getLayoutItems(FieldScreenTabImpl.java:34)
              at com.atlassian.jira.issue.fields.screen.FieldScreenTabImpl.getFieldScreenLayoutItem(FieldScreenTabImpl.java:172)
              at com.atlassian.jira.issue.fields.screen.DefaultFieldScreenManager.getFieldScreenTabs(DefaultFieldScreenManager.java:43)
              at com.atlassian.jira.web.action.admin.issuefields.AbstractConfigureFieldLayout.getFieldScreenTabs(AbstractConfigureFieldLayout.java:158)
              ... 2 filtered
              at java.lang.reflect.Method.invoke(Method.java:498)
              at webwork.util.InjectionUtils$DefaultInjectionImpl.invoke(InjectionUtils.java:70)
              at webwork.util.InjectionUtils.invoke(InjectionUtils.java:56)
              at webwork.util.ValueStack.findValue(ValueStack.java:517)
              at webwork.util.SimpleTest.test(SimpleTest.java:408)
              at webwork.util.ValueStack.test(ValueStack.java:157)
              at webwork.view.taglib.IfTag.doStartTag(IfTag.java:40)
              at jsp.secure.admin.views.issuefields.configurefieldlayout_jsp._jspService(configurefieldlayout_jsp.java:340)
              at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
              ... 48 filtered
              at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
              ... 38 filtered
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:69)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
              ... 10 filtered
              at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
              ... 1 filtered
              at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
              ... 20 filtered
              at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
              ... 5 filtered
              at com.valiantys.jira.plugins.sql.service.servletcontext.ContextListenerServletFilter.doFilter(ContextListenerServletFilter.java:24)
              ... 3 filtered
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:69)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
              ... 10 filtered
              at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
              ... 11 filtered
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
              ... 48 filtered
              at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:62)
              ... 12 filtered
              at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
              ... 47 filtered
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:69)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
                      at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
              ... 18 filtered
              at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
              ... 1 filtered
              at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
              ... 39 filtered
              at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
              ... 5 filtered
              at com.valiantys.jira.plugins.sql.service.servletcontext.ContextListenerServletFilter.doFilter(ContextListenerServletFilter.java:24)
              ... 8 filtered
              at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
              ... 4 filtered
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.runWithChangedThreadName(AbstractThreadFilter.java:69)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:53)
              at com.atlassian.ams.shipit.servlet.filter.AbstractThreadFilter.doFilter(AbstractThreadFilter.java:37)
              ... 3 filtered
              at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
              ... 26 filtered
              at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
              ... 26 filtered
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
              at java.lang.Thread.run(Thread.java:748)
      

      Workaround

      1. Run the query b below to find out the duplicated value:
         select f.name, i.fieldidentifier, count(*)
        from fieldscreen f, fieldscreenlayoutitem i, fieldscreentab t
        where f.id = t.fieldscreen
        and i.fieldscreentab = t.id
        group by f.name, i.fieldidentifier having count(*) > 1;
        

        If there is a duplicate, an example of a result is below:

                      name               | fieldidentifier | count 
        
        ---------------------------------+-----------------+-------
        
         SSD: Scrum Default Issue Screen | assignee        |     2
        
      2. Navigate to JIRA Administration > Issues > Screens
      3. Look for the Screen mentioned in the SQL query result e.g. "SSD: Scrum Default Issue Screen"
      4. Click Configure and look for the field e.g. "assignee"
      5. Remove one of the fields from the screen.

      If the duplicate field is not shown on the screen or if the screen cannot be opened, the solution is to delete duplicate field references directly from the database.
      Please back up your database before proceeding with this workaround. Also, if possible, test the workaround on a staging environment before applying it to production.
      The steps are as follows:

      1. Identify and write down ID value for each duplicate field reference; screen name and field identifier need to be modified accordingly. For the current example, the ID can be identified as follows::
        select f.name, i.id, i.fieldidentifier
        from fieldscreen f, fieldscreenlayoutitem i, fieldscreentab t
        where f.id = t.fieldscreen and i.fieldscreentab = t.id
        and f.name like '%SSD: Scrum Default Issue Screen%'
        and i.fieldidentifier='assignee';
        
      2. Delete all duplicate rows from fieldscreenlayoutitem table and retain only one row.
        delete from fieldscreenlayoutitemwhere id = <duplicate_id>;
        
      3. Restart Jira

      Attachments

        Activity

          People

            Unassigned Unassigned
            ayanar Alp
            Votes:
            10 Vote for this issue
            Watchers:
            18 Start watching this issue

            Dates

              Created:
              Updated: