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

            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 ...??? 

              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: