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

Custom Field Optimizer shows blank screen (Jira Data Center) with Oracle database

      Summary

      Users on Data Center trying to open the CustomFieldOptimizer after the first scan will get a blank page and will not be able to make use of this feature.

      Symptoms

      The 'Custom Field Optimizer' is running into the following NullPointerException:

      2018-11-21 16:55:22,673 http-nio-7123-exec-18 ERROR admin 1015x455x2 14fjner 0:0:0:0:0:0:0:1 /rest/optimizer/1/recommendations/info [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: null
      java.lang.NullPointerException
      	at com.atlassian.jira.optimizer.ao.RecommendationsDao.parceProjectIdString(RecommendationsDao.java:74)
      	at com.atlassian.jira.optimizer.beans.RecommendationBean.<init>(RecommendationBean.java:66)
      	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
      	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
      	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.optimizer.impl.RecommendationsManager.getRecommendations(RecommendationsManager.java:183)
      	at com.atlassian.jira.optimizer.impl.DefaultOptimizerService.getRecommendationsInfo(DefaultOptimizerService.java:109)
      	at com.atlassian.jira.optimizer.rest.OptimizerResource.getRecommendationsInfo(OptimizerResource.java:103)
      	... 3 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	... 19 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:154)
      	... 1 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:68)
      	... 32 filtered
      	at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:56)
      	... 13 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 53 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)
      	... 16 filtered
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      	... 19 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:181)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:137)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:90)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:47)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:174)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:130)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:121)
      	... 4 filtered
      	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 4 filtered
      	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      	... 26 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 24 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)
      

      This is affecting JIRA application running with Oracle database.

      Cause:

      When we run the optimizer scan, "AO_0AC321_RECOMMENDATION_AO" database table is populated. If the PROJECT_IDS is empty, NULL is inserted instead of en empty string – for Oracle database.

      package com.atlassian.jira.optimizer.ao where class resides -

      RecommendationsDao.class
      public static List<Long> parceProjectIdString(String projectIdString) {
              return "".equals(projectIdString) ? Collections.emptyList() : (List)Stream.of(projectIdString.split(",")).map(Long::parseLong).collect(Collectors.toList());
          }
      

      Reproduce

      1. Create Oracle database for Jira
      2. Connect Jira DC to database
      3. Create Project (empty or sample)
      4. Create custom field with global context
      5. Navigate to Jira administration -> System -> Custom Field Optimizer
      6. Do initial scan
      7. Come back to 'Custom Field Optimizer' page

      Expected Results

      User should see recommendations

      Actual Results

      Blank screen for this feature

      Workaround

      No workaround for Oracle database users, as "AO_0AC321_RECOMMENDATION_AO" is always re-populated on scan, so removing the NULL records won't work.

            [JRASERVER-68475] Custom Field Optimizer shows blank screen (Jira Data Center) with Oracle database

            set-jac-bot made changes -

            llagos added a comment - - edited

            we have 2 JSD DC 7.12.3... prod and a clone (dev), both using MS-SQL Server. On prod, this option is missing.. in Dev, it shows up... however, if I copy&paste the URL from dev to prod, it shows up as well...

            <jira;:port>/secure/admin/CustomfieldsAnalyzer.jspa

            So, what the ...??? 

            llagos added a comment - - edited we have 2 JSD DC 7.12.3... prod and a clone (dev), both using MS-SQL Server. On prod, this option is missing.. in Dev, it shows up... however, if I copy&paste the URL from dev to prod, it shows up as well... <jira;:port>/secure/admin/CustomfieldsAnalyzer.jspa So, what the ...??? 
            Bugfix Automation Bot made changes -
            Minimum Version New: 7.12
            Mila made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 415412 ]
            Mila made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 415219 ]
            Kamil Kolonko made changes -
            Resolution New: Fixed [ 1 ]
            Status Original: Waiting for Release [ 12075 ] New: Closed [ 6 ]
            kasia (Inactive) made changes -
            Remote Link Original: This issue links to "POSTSEFCON-6027 (Bulldog)" [ 406405 ] New: This issue links to "POSTSEFCON-6027 (Bulldog)" [ 406405 ]
            kasia (Inactive) made changes -
            Remote Link New: This issue links to "POSTSEFCON-6027 (Bulldog)" [ 406405 ]
            Marek Piwnicki made changes -
            Remote Link New: This issue links to "Page (Confluence)" [ 405898 ]
            Mila made changes -
            Labels Original: data-center pse-request warranty New: data-center data-center-specific pse-request warranty

              izinoviev Ilya Zinoviev (Inactive)
              kwong2@atlassian.com KellyW (Inactive)
              Affected customers:
              4 This affects my team
              Watchers:
              11 Start watching this issue

                Created:
                Updated:
                Resolved: